@gjsify/path 0.0.1 → 0.1.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/src/win32.ts ADDED
@@ -0,0 +1,651 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // Adapted from Deno (refs/deno/ext/node/polyfills/path/_win32.ts) and Node.js (refs/node/lib/path.js)
3
+ // Copyright (c) 2018-2026 the Deno authors. MIT license.
4
+ // Copyright (c) Node.js contributors. MIT license.
5
+ // Modifications: Stub — full win32 support is secondary since GJS runs on POSIX systems
6
+
7
+ import {
8
+ CHAR_DOT,
9
+ CHAR_FORWARD_SLASH,
10
+ CHAR_BACKWARD_SLASH,
11
+ CHAR_COLON,
12
+ } from './constants.js';
13
+ import {
14
+ assertPath,
15
+ isPathSeparator,
16
+ isWindowsDeviceRoot,
17
+ normalizeString,
18
+ _format,
19
+ } from './util.js';
20
+
21
+ export interface ParsedPath {
22
+ root: string;
23
+ dir: string;
24
+ base: string;
25
+ ext: string;
26
+ name: string;
27
+ }
28
+
29
+ export type FormatInputPathObject = Partial<ParsedPath>;
30
+
31
+ export const sep = '\\';
32
+ export const delimiter = ';';
33
+
34
+ export function resolve(...pathSegments: string[]): string {
35
+ let resolvedDevice = '';
36
+ let resolvedTail = '';
37
+ let resolvedAbsolute = false;
38
+
39
+ for (let i = pathSegments.length - 1; i >= -1; i--) {
40
+ let path: string;
41
+ if (i >= 0) {
42
+ path = pathSegments[i];
43
+ assertPath(path);
44
+ if (path.length === 0) continue;
45
+ } else if (resolvedDevice.length === 0) {
46
+ path = typeof globalThis.process?.cwd === 'function' ? globalThis.process.cwd() : '/';
47
+ } else {
48
+ path = typeof globalThis.process?.cwd === 'function' ? globalThis.process.cwd() : '/';
49
+ }
50
+
51
+ const len = path.length;
52
+ let rootEnd = 0;
53
+ let device = '';
54
+ let isAbsolutePath = false;
55
+ const code = path.charCodeAt(0);
56
+
57
+ if (len > 1) {
58
+ if (isPathSeparator(code)) {
59
+ isAbsolutePath = true;
60
+ if (isPathSeparator(path.charCodeAt(1))) {
61
+ // UNC path
62
+ let j = 2;
63
+ let last = j;
64
+ for (; j < len; ++j) {
65
+ if (isPathSeparator(path.charCodeAt(j))) break;
66
+ }
67
+ if (j < len && j !== last) {
68
+ const firstPart = path.slice(last, j);
69
+ last = j;
70
+ for (; j < len; ++j) {
71
+ if (!isPathSeparator(path.charCodeAt(j))) break;
72
+ }
73
+ if (j < len && j !== last) {
74
+ last = j;
75
+ for (; j < len; ++j) {
76
+ if (isPathSeparator(path.charCodeAt(j))) break;
77
+ }
78
+ if (j === len) {
79
+ device = `\\\\${firstPart}\\${path.slice(last)}`;
80
+ rootEnd = j;
81
+ } else if (j !== last) {
82
+ device = `\\\\${firstPart}\\${path.slice(last, j)}`;
83
+ rootEnd = j;
84
+ }
85
+ }
86
+ }
87
+ } else {
88
+ rootEnd = 1;
89
+ }
90
+ } else if (isWindowsDeviceRoot(code)) {
91
+ if (path.charCodeAt(1) === CHAR_COLON) {
92
+ device = path.slice(0, 2);
93
+ rootEnd = 2;
94
+ if (len > 2) {
95
+ if (isPathSeparator(path.charCodeAt(2))) {
96
+ isAbsolutePath = true;
97
+ rootEnd = 3;
98
+ }
99
+ }
100
+ }
101
+ }
102
+ } else if (isPathSeparator(code)) {
103
+ rootEnd = 1;
104
+ isAbsolutePath = true;
105
+ }
106
+
107
+ if (
108
+ device.length > 0 &&
109
+ resolvedDevice.length > 0 &&
110
+ device.toLowerCase() !== resolvedDevice.toLowerCase()
111
+ ) {
112
+ continue;
113
+ }
114
+
115
+ if (resolvedDevice.length === 0 && device.length > 0) {
116
+ resolvedDevice = device;
117
+ }
118
+ if (!resolvedAbsolute) {
119
+ resolvedTail = `${path.slice(rootEnd)}\\${resolvedTail}`;
120
+ resolvedAbsolute = isAbsolutePath;
121
+ }
122
+
123
+ if (resolvedDevice.length > 0 && resolvedAbsolute) {
124
+ break;
125
+ }
126
+ }
127
+
128
+ resolvedTail = normalizeString(resolvedTail, !resolvedAbsolute, '\\', isPathSeparator);
129
+
130
+ return resolvedDevice + (resolvedAbsolute ? '\\' : '') + resolvedTail || '.';
131
+ }
132
+
133
+ export function normalize(path: string): string {
134
+ assertPath(path);
135
+ const len = path.length;
136
+ if (len === 0) return '.';
137
+
138
+ let rootEnd = 0;
139
+ let device: string | undefined;
140
+ let isAbsolutePath = false;
141
+ const code = path.charCodeAt(0);
142
+
143
+ if (len > 1) {
144
+ if (isPathSeparator(code)) {
145
+ isAbsolutePath = true;
146
+ if (isPathSeparator(path.charCodeAt(1))) {
147
+ let j = 2;
148
+ let last = j;
149
+ for (; j < len; ++j) {
150
+ if (isPathSeparator(path.charCodeAt(j))) break;
151
+ }
152
+ if (j < len && j !== last) {
153
+ const firstPart = path.slice(last, j);
154
+ last = j;
155
+ for (; j < len; ++j) {
156
+ if (!isPathSeparator(path.charCodeAt(j))) break;
157
+ }
158
+ if (j < len && j !== last) {
159
+ last = j;
160
+ for (; j < len; ++j) {
161
+ if (isPathSeparator(path.charCodeAt(j))) break;
162
+ }
163
+ if (j === len) {
164
+ return `\\\\${firstPart}\\${path.slice(last)}\\`;
165
+ } else if (j !== last) {
166
+ device = `\\\\${firstPart}\\${path.slice(last, j)}`;
167
+ rootEnd = j;
168
+ }
169
+ }
170
+ }
171
+ } else {
172
+ rootEnd = 1;
173
+ }
174
+ } else if (isWindowsDeviceRoot(code) && path.charCodeAt(1) === CHAR_COLON) {
175
+ device = path.slice(0, 2);
176
+ rootEnd = 2;
177
+ if (len > 2 && isPathSeparator(path.charCodeAt(2))) {
178
+ isAbsolutePath = true;
179
+ rootEnd = 3;
180
+ }
181
+ }
182
+ } else if (isPathSeparator(code)) {
183
+ return '\\';
184
+ }
185
+
186
+ let tail: string;
187
+ if (rootEnd < len) {
188
+ tail = normalizeString(path.slice(rootEnd), !isAbsolutePath, '\\', isPathSeparator);
189
+ } else {
190
+ tail = '';
191
+ }
192
+ if (tail.length === 0 && !isAbsolutePath) tail = '.';
193
+ if (tail.length > 0 && isPathSeparator(path.charCodeAt(len - 1))) {
194
+ tail += '\\';
195
+ }
196
+ if (device === undefined) {
197
+ if (isAbsolutePath) {
198
+ if (tail.length > 0) return `\\${tail}`;
199
+ return '\\';
200
+ }
201
+ if (tail.length > 0) return tail;
202
+ return '';
203
+ }
204
+ if (isAbsolutePath) {
205
+ if (tail.length > 0) return `${device}\\${tail}`;
206
+ return `${device}\\`;
207
+ }
208
+ if (tail.length > 0) return device + tail;
209
+ return device;
210
+ }
211
+
212
+ export function isAbsolute(path: string): boolean {
213
+ assertPath(path);
214
+ const len = path.length;
215
+ if (len === 0) return false;
216
+ const code = path.charCodeAt(0);
217
+ if (isPathSeparator(code)) return true;
218
+ if (isWindowsDeviceRoot(code) && len > 2 && path.charCodeAt(1) === CHAR_COLON) {
219
+ if (isPathSeparator(path.charCodeAt(2))) return true;
220
+ }
221
+ return false;
222
+ }
223
+
224
+ export function join(...paths: string[]): string {
225
+ if (paths.length === 0) return '.';
226
+
227
+ let joined: string | undefined;
228
+ let firstPart: string | undefined;
229
+ for (let i = 0; i < paths.length; ++i) {
230
+ const arg = paths[i];
231
+ assertPath(arg);
232
+ if (arg.length > 0) {
233
+ if (joined === undefined) {
234
+ joined = firstPart = arg;
235
+ } else {
236
+ joined += `\\${arg}`;
237
+ }
238
+ }
239
+ }
240
+ if (joined === undefined) return '.';
241
+
242
+ let needsReplace = true;
243
+ let slashCount = 0;
244
+ if (isPathSeparator(firstPart!.charCodeAt(0))) {
245
+ ++slashCount;
246
+ const firstLen = firstPart!.length;
247
+ if (firstLen > 1) {
248
+ if (isPathSeparator(firstPart!.charCodeAt(1))) {
249
+ ++slashCount;
250
+ if (firstLen > 2) {
251
+ if (isPathSeparator(firstPart!.charCodeAt(2))) ++slashCount;
252
+ else needsReplace = false;
253
+ }
254
+ }
255
+ }
256
+ }
257
+ if (needsReplace) {
258
+ for (; slashCount < joined.length; ++slashCount) {
259
+ if (!isPathSeparator(joined.charCodeAt(slashCount))) break;
260
+ }
261
+ if (slashCount >= 2) joined = `\\${joined.slice(slashCount)}`;
262
+ }
263
+ return normalize(joined);
264
+ }
265
+
266
+ export function relative(from: string, to: string): string {
267
+ assertPath(from);
268
+ assertPath(to);
269
+
270
+ if (from === to) return '';
271
+
272
+ const fromOrig = resolve(from);
273
+ const toOrig = resolve(to);
274
+ if (fromOrig === toOrig) return '';
275
+
276
+ from = fromOrig.toLowerCase();
277
+ to = toOrig.toLowerCase();
278
+ if (from === to) return '';
279
+
280
+ let fromStart = 0;
281
+ for (; fromStart < from.length; ++fromStart) {
282
+ if (from.charCodeAt(fromStart) !== CHAR_BACKWARD_SLASH) break;
283
+ }
284
+ let fromEnd = from.length;
285
+ for (; fromEnd - 1 > fromStart; --fromEnd) {
286
+ if (from.charCodeAt(fromEnd - 1) !== CHAR_BACKWARD_SLASH) break;
287
+ }
288
+ const fromLen = fromEnd - fromStart;
289
+
290
+ let toStart = 0;
291
+ for (; toStart < to.length; ++toStart) {
292
+ if (to.charCodeAt(toStart) !== CHAR_BACKWARD_SLASH) break;
293
+ }
294
+ let toEnd = to.length;
295
+ for (; toEnd - 1 > toStart; --toEnd) {
296
+ if (to.charCodeAt(toEnd - 1) !== CHAR_BACKWARD_SLASH) break;
297
+ }
298
+ const toLen = toEnd - toStart;
299
+
300
+ const length = fromLen < toLen ? fromLen : toLen;
301
+ let lastCommonSep = -1;
302
+ let i = 0;
303
+
304
+ for (; i <= length; ++i) {
305
+ if (i === length) {
306
+ if (toLen > length) {
307
+ if (to.charCodeAt(toStart + i) === CHAR_BACKWARD_SLASH) {
308
+ return toOrig.slice(toStart + i + 1);
309
+ } else if (i === 2) {
310
+ return toOrig.slice(toStart + i);
311
+ }
312
+ }
313
+ if (fromLen > length) {
314
+ if (from.charCodeAt(fromStart + i) === CHAR_BACKWARD_SLASH) {
315
+ lastCommonSep = i;
316
+ } else if (i === 2) {
317
+ lastCommonSep = 3;
318
+ }
319
+ }
320
+ break;
321
+ }
322
+ const fromCode = from.charCodeAt(fromStart + i);
323
+ const toCode = to.charCodeAt(toStart + i);
324
+ if (fromCode !== toCode) break;
325
+ if (fromCode === CHAR_BACKWARD_SLASH) lastCommonSep = i;
326
+ }
327
+
328
+ if (i !== length && lastCommonSep === -1) {
329
+ return toOrig;
330
+ }
331
+
332
+ let out = '';
333
+ if (lastCommonSep === -1) lastCommonSep = 0;
334
+ for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {
335
+ if (i === fromEnd || from.charCodeAt(i) === CHAR_BACKWARD_SLASH) {
336
+ if (out.length === 0) out += '..';
337
+ else out += '\\..';
338
+ }
339
+ }
340
+
341
+ if (out.length > 0) {
342
+ return out + toOrig.slice(toStart + lastCommonSep, toEnd);
343
+ }
344
+
345
+ toStart += lastCommonSep;
346
+ if (toOrig.charCodeAt(toStart) === CHAR_BACKWARD_SLASH) ++toStart;
347
+ return toOrig.slice(toStart, toEnd);
348
+ }
349
+
350
+ export function toNamespacedPath(path: string): string {
351
+ if (typeof path !== 'string') return path;
352
+ if (path.length === 0) return '';
353
+
354
+ const resolvedPath = resolve(path);
355
+ if (resolvedPath.length >= 3) {
356
+ if (resolvedPath.charCodeAt(0) === CHAR_BACKWARD_SLASH) {
357
+ if (resolvedPath.charCodeAt(1) === CHAR_BACKWARD_SLASH) {
358
+ const code = resolvedPath.charCodeAt(2);
359
+ if (code !== 63 && code !== CHAR_DOT) {
360
+ return `\\\\?\\UNC\\${resolvedPath.slice(2)}`;
361
+ }
362
+ }
363
+ } else if (
364
+ isWindowsDeviceRoot(resolvedPath.charCodeAt(0)) &&
365
+ resolvedPath.charCodeAt(1) === CHAR_COLON &&
366
+ resolvedPath.charCodeAt(2) === CHAR_BACKWARD_SLASH
367
+ ) {
368
+ return `\\\\?\\${resolvedPath}`;
369
+ }
370
+ }
371
+ return path;
372
+ }
373
+
374
+ export function dirname(path: string): string {
375
+ assertPath(path);
376
+ const len = path.length;
377
+ if (len === 0) return '.';
378
+
379
+ let rootEnd = -1;
380
+ let end = -1;
381
+ let matchedSlash = true;
382
+ let offset = 0;
383
+ const code = path.charCodeAt(0);
384
+
385
+ if (len > 1) {
386
+ if (isPathSeparator(code)) {
387
+ rootEnd = offset = 1;
388
+ if (isPathSeparator(path.charCodeAt(1))) {
389
+ let j = 2;
390
+ let last = j;
391
+ for (; j < len; ++j) {
392
+ if (isPathSeparator(path.charCodeAt(j))) break;
393
+ }
394
+ if (j < len && j !== last) {
395
+ last = j;
396
+ for (; j < len; ++j) {
397
+ if (!isPathSeparator(path.charCodeAt(j))) break;
398
+ }
399
+ if (j < len && j !== last) {
400
+ last = j;
401
+ for (; j < len; ++j) {
402
+ if (isPathSeparator(path.charCodeAt(j))) break;
403
+ }
404
+ if (j === len) return path;
405
+ if (j !== last) rootEnd = offset = j + 1;
406
+ }
407
+ }
408
+ }
409
+ } else if (isWindowsDeviceRoot(code)) {
410
+ if (path.charCodeAt(1) === CHAR_COLON) {
411
+ rootEnd = offset = 2;
412
+ if (len > 2) {
413
+ if (isPathSeparator(path.charCodeAt(2))) rootEnd = offset = 3;
414
+ }
415
+ }
416
+ }
417
+ } else if (isPathSeparator(code)) {
418
+ return path;
419
+ }
420
+
421
+ for (let i = len - 1; i >= offset; --i) {
422
+ if (isPathSeparator(path.charCodeAt(i))) {
423
+ if (!matchedSlash) {
424
+ end = i;
425
+ break;
426
+ }
427
+ } else {
428
+ matchedSlash = false;
429
+ }
430
+ }
431
+
432
+ if (end === -1) {
433
+ if (rootEnd === -1) return '.';
434
+ end = rootEnd;
435
+ }
436
+ return path.slice(0, end);
437
+ }
438
+
439
+ export function basename(path: string, ext?: string): string {
440
+ if (ext !== undefined) assertPath(ext);
441
+ assertPath(path);
442
+
443
+ let start = 0;
444
+ let end = -1;
445
+ let matchedSlash = true;
446
+
447
+ if (path.length >= 2) {
448
+ if (isWindowsDeviceRoot(path.charCodeAt(0)) && path.charCodeAt(1) === CHAR_COLON) {
449
+ start = 2;
450
+ }
451
+ }
452
+
453
+ if (ext !== undefined && ext.length > 0 && ext.length <= path.length) {
454
+ if (ext.length === path.length && ext === path) return '';
455
+ let extIdx = ext.length - 1;
456
+ let firstNonSlashEnd = -1;
457
+ for (let i = path.length - 1; i >= start; --i) {
458
+ const code = path.charCodeAt(i);
459
+ if (isPathSeparator(code)) {
460
+ if (!matchedSlash) {
461
+ start = i + 1;
462
+ break;
463
+ }
464
+ } else {
465
+ if (firstNonSlashEnd === -1) {
466
+ matchedSlash = false;
467
+ firstNonSlashEnd = i + 1;
468
+ }
469
+ if (extIdx >= 0) {
470
+ if (code === ext.charCodeAt(extIdx)) {
471
+ if (--extIdx === -1) end = i;
472
+ } else {
473
+ extIdx = -1;
474
+ end = firstNonSlashEnd;
475
+ }
476
+ }
477
+ }
478
+ }
479
+ if (start === end) end = firstNonSlashEnd;
480
+ else if (end === -1) end = path.length;
481
+ return path.slice(start, end);
482
+ } else {
483
+ for (let i = path.length - 1; i >= start; --i) {
484
+ if (isPathSeparator(path.charCodeAt(i))) {
485
+ if (!matchedSlash) {
486
+ start = i + 1;
487
+ break;
488
+ }
489
+ } else if (end === -1) {
490
+ matchedSlash = false;
491
+ end = i + 1;
492
+ }
493
+ }
494
+ if (end === -1) return '';
495
+ return path.slice(start, end);
496
+ }
497
+ }
498
+
499
+ export function extname(path: string): string {
500
+ assertPath(path);
501
+
502
+ let start = 0;
503
+ let startDot = -1;
504
+ let startPart = 0;
505
+ let end = -1;
506
+ let matchedSlash = true;
507
+ let preDotState = 0;
508
+
509
+ if (path.length >= 2 && path.charCodeAt(1) === CHAR_COLON && isWindowsDeviceRoot(path.charCodeAt(0))) {
510
+ start = startPart = 2;
511
+ }
512
+
513
+ for (let i = path.length - 1; i >= start; --i) {
514
+ const code = path.charCodeAt(i);
515
+ if (isPathSeparator(code)) {
516
+ if (!matchedSlash) {
517
+ startPart = i + 1;
518
+ break;
519
+ }
520
+ continue;
521
+ }
522
+ if (end === -1) {
523
+ matchedSlash = false;
524
+ end = i + 1;
525
+ }
526
+ if (code === CHAR_DOT) {
527
+ if (startDot === -1) startDot = i;
528
+ else if (preDotState !== 1) preDotState = 1;
529
+ } else if (startDot !== -1) {
530
+ preDotState = -1;
531
+ }
532
+ }
533
+
534
+ if (
535
+ startDot === -1 ||
536
+ end === -1 ||
537
+ preDotState === 0 ||
538
+ (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1)
539
+ ) {
540
+ return '';
541
+ }
542
+ return path.slice(startDot, end);
543
+ }
544
+
545
+ export function format(pathObject: FormatInputPathObject): string {
546
+ if (pathObject === null || typeof pathObject !== 'object') {
547
+ throw new TypeError(
548
+ 'The "pathObject" argument must be of type Object. Received type ' + typeof pathObject
549
+ );
550
+ }
551
+ return _format('\\', pathObject);
552
+ }
553
+
554
+ export function parse(path: string): ParsedPath {
555
+ assertPath(path);
556
+
557
+ const ret: ParsedPath = { root: '', dir: '', base: '', ext: '', name: '' };
558
+ if (path.length === 0) return ret;
559
+
560
+ const len = path.length;
561
+ let rootEnd = 0;
562
+ let code = path.charCodeAt(0);
563
+
564
+ if (len > 1) {
565
+ if (isPathSeparator(code)) {
566
+ rootEnd = 1;
567
+ if (isPathSeparator(path.charCodeAt(1))) {
568
+ let j = 2;
569
+ let last = j;
570
+ for (; j < len; ++j) {
571
+ if (isPathSeparator(path.charCodeAt(j))) break;
572
+ }
573
+ if (j < len && j !== last) {
574
+ last = j;
575
+ for (; j < len; ++j) {
576
+ if (!isPathSeparator(path.charCodeAt(j))) break;
577
+ }
578
+ if (j < len && j !== last) {
579
+ last = j;
580
+ for (; j < len; ++j) {
581
+ if (isPathSeparator(path.charCodeAt(j))) break;
582
+ }
583
+ if (j === len) rootEnd = j;
584
+ else if (j !== last) rootEnd = j + 1;
585
+ }
586
+ }
587
+ }
588
+ } else if (isWindowsDeviceRoot(code) && path.charCodeAt(1) === CHAR_COLON) {
589
+ rootEnd = 2;
590
+ if (len > 2 && isPathSeparator(path.charCodeAt(2))) {
591
+ rootEnd = 3;
592
+ }
593
+ }
594
+ } else if (isPathSeparator(code)) {
595
+ ret.root = ret.dir = path;
596
+ return ret;
597
+ }
598
+
599
+ if (rootEnd > 0) ret.root = path.slice(0, rootEnd);
600
+
601
+ let startDot = -1;
602
+ let startPart = rootEnd;
603
+ let end = -1;
604
+ let matchedSlash = true;
605
+ let i = path.length - 1;
606
+ let preDotState = 0;
607
+
608
+ for (; i >= rootEnd; --i) {
609
+ code = path.charCodeAt(i);
610
+ if (isPathSeparator(code)) {
611
+ if (!matchedSlash) {
612
+ startPart = i + 1;
613
+ break;
614
+ }
615
+ continue;
616
+ }
617
+ if (end === -1) {
618
+ matchedSlash = false;
619
+ end = i + 1;
620
+ }
621
+ if (code === CHAR_DOT) {
622
+ if (startDot === -1) startDot = i;
623
+ else if (preDotState !== 1) preDotState = 1;
624
+ } else if (startDot !== -1) {
625
+ preDotState = -1;
626
+ }
627
+ }
628
+
629
+ if (
630
+ startDot === -1 ||
631
+ end === -1 ||
632
+ preDotState === 0 ||
633
+ (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1)
634
+ ) {
635
+ if (end !== -1) {
636
+ ret.base = ret.name = path.slice(startPart, end);
637
+ }
638
+ } else {
639
+ ret.name = path.slice(startPart, startDot);
640
+ ret.base = path.slice(startPart, end);
641
+ ret.ext = path.slice(startDot, end);
642
+ }
643
+
644
+ if (startPart > 0 && startPart !== rootEnd) {
645
+ ret.dir = path.slice(0, startPart - 1);
646
+ } else {
647
+ ret.dir = ret.root;
648
+ }
649
+
650
+ return ret;
651
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,31 @@
1
+ {
2
+ "compilerOptions": {
3
+ "module": "ESNext",
4
+ "target": "ESNext",
5
+ "moduleResolution": "bundler",
6
+ "types": [
7
+ "node"
8
+ ],
9
+ "experimentalDecorators": true,
10
+ "emitDeclarationOnly": true,
11
+ "declaration": true,
12
+ "allowImportingTsExtensions": true,
13
+ "outDir": "lib",
14
+ "rootDir": "src",
15
+ "declarationDir": "lib/types",
16
+ "composite": true,
17
+ "skipLibCheck": true,
18
+ "allowJs": true,
19
+ "checkJs": false,
20
+ "strict": false
21
+ },
22
+ "include": [
23
+ "src/**/*.ts"
24
+ ],
25
+ "exclude": [
26
+ "src/test.ts",
27
+ "src/test.mts",
28
+ "src/**/*.spec.ts",
29
+ "src/**/*.spec.mts"
30
+ ]
31
+ }