vitest 0.0.98 → 0.0.99

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/dist/index.d.ts CHANGED
@@ -173,6 +173,12 @@ interface UserConsoleLog {
173
173
  taskId?: string;
174
174
  }
175
175
 
176
+ declare type ChainableFunction<T extends string, Args extends any[], R = any> = {
177
+ (...args: Args): R;
178
+ } & {
179
+ [x in T]: ChainableFunction<T, Args, R>;
180
+ };
181
+
176
182
  declare type RunMode = 'run' | 'skip' | 'only' | 'todo';
177
183
  declare type TaskState = RunMode | 'pass' | 'fail';
178
184
  declare type ComputeMode = 'serial' | 'concurrent';
@@ -203,36 +209,16 @@ interface Test extends TaskBase {
203
209
  type: 'test';
204
210
  suite: Suite;
205
211
  result?: TaskResult;
212
+ fails?: boolean;
206
213
  }
207
214
  declare type Task = Test | Suite | File;
208
215
  declare type DoneCallback = (error?: any) => void;
209
216
  declare type TestFunction = (done: DoneCallback) => Awaitable<void>;
210
- declare type TestCollectorFn = (name: string, fn: TestFunction, timeout?: number) => void;
211
- interface ConcurrentCollector {
212
- (name: string, fn: TestFunction, timeout?: number): void;
213
- only: TestCollectorFn;
214
- skip: TestCollectorFn;
215
- todo: (name: string) => void;
216
- }
217
- interface OnlyCollector {
218
- (name: string, fn: TestFunction, timeout?: number): void;
219
- concurrent: TestCollectorFn;
220
- }
221
- interface SkipCollector {
222
- (name: string, fn: TestFunction, timeout?: number): void;
223
- concurrent: TestCollectorFn;
224
- }
225
- interface TodoCollector {
226
- (name: string): void;
227
- concurrent: (name: string) => void;
228
- }
229
- interface TestCollector {
230
- (name: string, fn: TestFunction, timeout?: number): void;
231
- concurrent: ConcurrentCollector;
232
- only: OnlyCollector;
233
- skip: SkipCollector;
234
- todo: TodoCollector;
235
- }
217
+ declare type TestCollector = ChainableFunction<'concurrent' | 'only' | 'skip' | 'todo' | 'fails', [
218
+ name: string,
219
+ fn?: TestFunction,
220
+ timeout?: number
221
+ ], void>;
236
222
  declare type HookListener<T extends any[]> = (...args: T) => Awaitable<void>;
237
223
  interface SuiteHooks {
238
224
  beforeAll: HookListener<[Suite]>[];
@@ -452,7 +438,14 @@ interface UserConfig extends InlineConfig {
452
438
  * - `vite.config.ts`
453
439
  */
454
440
  config?: string | undefined;
441
+ /**
442
+ * Use happy-dom
443
+ */
455
444
  dom?: boolean;
445
+ /**
446
+ * Do not watch
447
+ */
448
+ run?: boolean;
456
449
  }
457
450
  interface ResolvedConfig extends Omit<Required<UserConfig>, 'config' | 'filters'> {
458
451
  config?: string;
@@ -485,90 +478,10 @@ declare type RpcPayload<T extends keyof RpcMap = keyof RpcMap> = {
485
478
  args: RpcMap[T][0];
486
479
  };
487
480
 
488
- declare const suite: {
489
- (suiteName: string, factory?: TestFactory | undefined): SuiteCollector;
490
- concurrent: {
491
- (suiteName: string, factory?: TestFactory | undefined): SuiteCollector;
492
- skip(suiteName: string, factory?: TestFactory | undefined): SuiteCollector;
493
- only(suiteName: string, factory?: TestFactory | undefined): SuiteCollector;
494
- todo(suiteName: string): SuiteCollector;
495
- };
496
- skip: {
497
- (suiteName: string, factory?: TestFactory | undefined): SuiteCollector;
498
- concurrent: (suiteName: string, factory?: TestFactory | undefined) => SuiteCollector;
499
- };
500
- only: {
501
- (suiteName: string, factory?: TestFactory | undefined): SuiteCollector;
502
- concurrent: (suiteName: string, factory?: TestFactory | undefined) => SuiteCollector;
503
- };
504
- todo: {
505
- (suiteName: string): SuiteCollector;
506
- concurrent: (suiteName: string) => SuiteCollector;
507
- };
508
- };
509
- declare const test: {
510
- (name: string, fn: TestFunction, timeout?: number | undefined): void;
511
- concurrent: {
512
- (name: string, fn: TestFunction, timeout?: number | undefined): void;
513
- skip(name: string, fn: TestFunction, timeout?: number | undefined): void;
514
- only(name: string, fn: TestFunction, timeout?: number | undefined): void;
515
- todo(name: string): void;
516
- };
517
- skip: {
518
- (name: string, fn: TestFunction, timeout?: number | undefined): void;
519
- concurrent(name: string, fn: TestFunction, timeout?: number | undefined): void;
520
- };
521
- only: {
522
- (name: string, fn: TestFunction, timeout?: number | undefined): void;
523
- concurrent(name: string, fn: TestFunction, timeout?: number | undefined): void;
524
- };
525
- todo: {
526
- (name: string): void;
527
- concurrent(name: string): void;
528
- };
529
- };
530
- declare const describe: {
531
- (suiteName: string, factory?: TestFactory | undefined): SuiteCollector;
532
- concurrent: {
533
- (suiteName: string, factory?: TestFactory | undefined): SuiteCollector;
534
- skip(suiteName: string, factory?: TestFactory | undefined): SuiteCollector;
535
- only(suiteName: string, factory?: TestFactory | undefined): SuiteCollector;
536
- todo(suiteName: string): SuiteCollector;
537
- };
538
- skip: {
539
- (suiteName: string, factory?: TestFactory | undefined): SuiteCollector;
540
- concurrent: (suiteName: string, factory?: TestFactory | undefined) => SuiteCollector;
541
- };
542
- only: {
543
- (suiteName: string, factory?: TestFactory | undefined): SuiteCollector;
544
- concurrent: (suiteName: string, factory?: TestFactory | undefined) => SuiteCollector;
545
- };
546
- todo: {
547
- (suiteName: string): SuiteCollector;
548
- concurrent: (suiteName: string) => SuiteCollector;
549
- };
550
- };
551
- declare const it: {
552
- (name: string, fn: TestFunction, timeout?: number | undefined): void;
553
- concurrent: {
554
- (name: string, fn: TestFunction, timeout?: number | undefined): void;
555
- skip(name: string, fn: TestFunction, timeout?: number | undefined): void;
556
- only(name: string, fn: TestFunction, timeout?: number | undefined): void;
557
- todo(name: string): void;
558
- };
559
- skip: {
560
- (name: string, fn: TestFunction, timeout?: number | undefined): void;
561
- concurrent(name: string, fn: TestFunction, timeout?: number | undefined): void;
562
- };
563
- only: {
564
- (name: string, fn: TestFunction, timeout?: number | undefined): void;
565
- concurrent(name: string, fn: TestFunction, timeout?: number | undefined): void;
566
- };
567
- todo: {
568
- (name: string): void;
569
- concurrent(name: string): void;
570
- };
571
- };
481
+ declare const suite: ChainableFunction<"skip" | "only" | "todo" | "concurrent", [name: string, factory?: TestFactory | undefined], SuiteCollector>;
482
+ declare const test: TestCollector;
483
+ declare const describe: ChainableFunction<"skip" | "only" | "todo" | "concurrent", [name: string, factory?: TestFactory | undefined], SuiteCollector>;
484
+ declare const it: TestCollector;
572
485
  declare global {
573
486
  namespace NodeJS {
574
487
  interface Process {
package/dist/index.js CHANGED
@@ -1,5 +1,9 @@
1
- export { d as describe, i as it, s as suite, t as test } from './suite-b8c6cb53.js';
2
- export { a as afterAll, d as afterEach, b as beforeAll, c as beforeEach, f as fn, s as spyOn, e as vi, v as vitest } from './index-368448f4.js';
3
- export { assert, default as chai, expect, should } from 'chai';
1
+ export { b as assert, f as chai, d as describe, e as expect, i as it, c as should, s as suite, t as test } from './index-aa25bceb.js';
2
+ export { a as afterAll, d as afterEach, b as beforeAll, c as beforeEach, f as fn, s as spyOn, e as vi, v as vitest } from './index-af51d171.js';
4
3
  import './index-9e71c815.js';
4
+ import './utils-b780070b.js';
5
+ import 'tty';
6
+ import 'local-pkg';
7
+ import 'path';
8
+ import './_commonjsHelpers-bdec4bbd.js';
5
9
  import 'tinyspy';
@@ -1,6 +1,8 @@
1
- import { A as API_PATH } from './constants-e78c749a.js';
1
+ import { A as API_PATH } from './constants-3cbd9066.js';
2
2
  import 'url';
3
- import './index-1488b423.js';
3
+ import './utils-b780070b.js';
4
+ import 'tty';
5
+ import 'local-pkg';
4
6
  import 'path';
5
7
 
6
8
  /*! (c) 2020 Andrea Giammarchi */
package/dist/node.js CHANGED
@@ -1,21 +1,21 @@
1
- export { c as createVitest } from './index-0697046c.js';
2
- import './index-1488b423.js';
1
+ export { c as createVitest } from './index-d5bb350e.js';
2
+ import './utils-b780070b.js';
3
+ import 'tty';
4
+ import 'local-pkg';
3
5
  import 'path';
4
6
  import 'vite';
5
7
  import 'process';
6
8
  import 'fs';
7
- import 'fast-glob';
9
+ import 'os';
8
10
  import 'util';
9
- import './constants-e78c749a.js';
11
+ import 'stream';
12
+ import 'events';
13
+ import './constants-3cbd9066.js';
10
14
  import 'url';
11
- import './utils-70b78878.js';
12
- import 'tty';
13
- import 'local-pkg';
14
15
  import 'perf_hooks';
15
- import './error-2437ee7f.js';
16
- import 'source-map';
17
- import './index-5cc247ff.js';
16
+ import './error-34c1d9e5.js';
17
+ import './index-825cb54c.js';
18
+ import './_commonjsHelpers-bdec4bbd.js';
18
19
  import 'assert';
19
- import 'events';
20
20
  import 'worker_threads';
21
21
  import 'tinypool';
@@ -1,5 +1,6 @@
1
1
  import require$$0 from 'tty';
2
2
  import { isPackageExists } from 'local-pkg';
3
+ import path from 'path';
3
4
 
4
5
  var picocolors = {exports: {}};
5
6
 
@@ -64,6 +65,189 @@ picocolors.exports.createColors = createColors;
64
65
 
65
66
  var c = picocolors.exports;
66
67
 
68
+ function normalizeWindowsPath(input = "") {
69
+ if (!input.includes("\\")) {
70
+ return input;
71
+ }
72
+ return input.replace(/\\/g, "/");
73
+ }
74
+
75
+ const _UNC_REGEX = /^[/][/]/;
76
+ const _UNC_DRIVE_REGEX = /^[/][/]([.]{1,2}[/])?([a-zA-Z]):[/]/;
77
+ const _IS_ABSOLUTE_RE = /^\/|^\\|^[a-zA-Z]:[/\\]/;
78
+ const sep = "/";
79
+ const delimiter = ":";
80
+ const normalize = function(path2) {
81
+ if (path2.length === 0) {
82
+ return ".";
83
+ }
84
+ path2 = normalizeWindowsPath(path2);
85
+ const isUNCPath = path2.match(_UNC_REGEX);
86
+ const hasUNCDrive = isUNCPath && path2.match(_UNC_DRIVE_REGEX);
87
+ const isPathAbsolute = isAbsolute(path2);
88
+ const trailingSeparator = path2[path2.length - 1] === "/";
89
+ path2 = normalizeString(path2, !isPathAbsolute);
90
+ if (path2.length === 0) {
91
+ if (isPathAbsolute) {
92
+ return "/";
93
+ }
94
+ return trailingSeparator ? "./" : ".";
95
+ }
96
+ if (trailingSeparator) {
97
+ path2 += "/";
98
+ }
99
+ if (isUNCPath) {
100
+ if (hasUNCDrive) {
101
+ return `//./${path2}`;
102
+ }
103
+ return `//${path2}`;
104
+ }
105
+ return isPathAbsolute && !isAbsolute(path2) ? `/${path2}` : path2;
106
+ };
107
+ const join = function(...args) {
108
+ if (args.length === 0) {
109
+ return ".";
110
+ }
111
+ let joined;
112
+ for (let i = 0; i < args.length; ++i) {
113
+ const arg = args[i];
114
+ if (arg.length > 0) {
115
+ if (joined === void 0) {
116
+ joined = arg;
117
+ } else {
118
+ joined += `/${arg}`;
119
+ }
120
+ }
121
+ }
122
+ if (joined === void 0) {
123
+ return ".";
124
+ }
125
+ return normalize(joined);
126
+ };
127
+ const resolve = function(...args) {
128
+ args = args.map((arg) => normalizeWindowsPath(arg));
129
+ let resolvedPath = "";
130
+ let resolvedAbsolute = false;
131
+ for (let i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) {
132
+ const path2 = i >= 0 ? args[i] : process.cwd();
133
+ if (path2.length === 0) {
134
+ continue;
135
+ }
136
+ resolvedPath = `${path2}/${resolvedPath}`;
137
+ resolvedAbsolute = isAbsolute(path2);
138
+ }
139
+ resolvedPath = normalizeString(resolvedPath, !resolvedAbsolute);
140
+ if (resolvedAbsolute && !isAbsolute(resolvedPath)) {
141
+ return `/${resolvedPath}`;
142
+ }
143
+ return resolvedPath.length > 0 ? resolvedPath : ".";
144
+ };
145
+ function normalizeString(path2, allowAboveRoot) {
146
+ let res = "";
147
+ let lastSegmentLength = 0;
148
+ let lastSlash = -1;
149
+ let dots = 0;
150
+ let char = null;
151
+ for (let i = 0; i <= path2.length; ++i) {
152
+ if (i < path2.length) {
153
+ char = path2[i];
154
+ } else if (char === "/") {
155
+ break;
156
+ } else {
157
+ char = "/";
158
+ }
159
+ if (char === "/") {
160
+ if (lastSlash === i - 1 || dots === 1) ; else if (dots === 2) {
161
+ if (res.length < 2 || lastSegmentLength !== 2 || res[res.length - 1] !== "." || res[res.length - 2] !== ".") {
162
+ if (res.length > 2) {
163
+ const lastSlashIndex = res.lastIndexOf("/");
164
+ if (lastSlashIndex === -1) {
165
+ res = "";
166
+ lastSegmentLength = 0;
167
+ } else {
168
+ res = res.slice(0, lastSlashIndex);
169
+ lastSegmentLength = res.length - 1 - res.lastIndexOf("/");
170
+ }
171
+ lastSlash = i;
172
+ dots = 0;
173
+ continue;
174
+ } else if (res.length !== 0) {
175
+ res = "";
176
+ lastSegmentLength = 0;
177
+ lastSlash = i;
178
+ dots = 0;
179
+ continue;
180
+ }
181
+ }
182
+ if (allowAboveRoot) {
183
+ res += res.length > 0 ? "/.." : "..";
184
+ lastSegmentLength = 2;
185
+ }
186
+ } else {
187
+ if (res.length > 0) {
188
+ res += `/${path2.slice(lastSlash + 1, i)}`;
189
+ } else {
190
+ res = path2.slice(lastSlash + 1, i);
191
+ }
192
+ lastSegmentLength = i - lastSlash - 1;
193
+ }
194
+ lastSlash = i;
195
+ dots = 0;
196
+ } else if (char === "." && dots !== -1) {
197
+ ++dots;
198
+ } else {
199
+ dots = -1;
200
+ }
201
+ }
202
+ return res;
203
+ }
204
+ const isAbsolute = function(p) {
205
+ return _IS_ABSOLUTE_RE.test(p);
206
+ };
207
+ const toNamespacedPath = function(p) {
208
+ return normalizeWindowsPath(p);
209
+ };
210
+ const extname = function(p) {
211
+ return path.posix.extname(normalizeWindowsPath(p));
212
+ };
213
+ const relative = function(from, to) {
214
+ return path.posix.relative(normalizeWindowsPath(from), normalizeWindowsPath(to));
215
+ };
216
+ const dirname = function(p) {
217
+ return path.posix.dirname(normalizeWindowsPath(p));
218
+ };
219
+ const format = function(p) {
220
+ return normalizeWindowsPath(path.posix.format(p));
221
+ };
222
+ const basename = function(p, ext) {
223
+ return path.posix.basename(normalizeWindowsPath(p), ext);
224
+ };
225
+ const parse = function(p) {
226
+ return path.posix.parse(normalizeWindowsPath(p));
227
+ };
228
+
229
+ const _path = /*#__PURE__*/Object.freeze({
230
+ __proto__: null,
231
+ sep: sep,
232
+ delimiter: delimiter,
233
+ normalize: normalize,
234
+ join: join,
235
+ resolve: resolve,
236
+ normalizeString: normalizeString,
237
+ isAbsolute: isAbsolute,
238
+ toNamespacedPath: toNamespacedPath,
239
+ extname: extname,
240
+ relative: relative,
241
+ dirname: dirname,
242
+ format: format,
243
+ basename: basename,
244
+ parse: parse
245
+ });
246
+
247
+ const index = {
248
+ ..._path
249
+ };
250
+
67
251
  function toArray(array) {
68
252
  array = array || [];
69
253
  if (Array.isArray(array))
@@ -153,10 +337,10 @@ async function ensurePackageInstalled(dependency, promptInstall = !process.env.C
153
337
  message: c.reset(`Do you want to install ${c.green(dependency)}?`)
154
338
  });
155
339
  if (install) {
156
- await (await import('./index-e7a421bb.js')).installPackage(dependency, { dev: true });
340
+ await (await import('./index-0c3a317d.js')).installPackage(dependency, { dev: true });
157
341
  return true;
158
342
  }
159
343
  return false;
160
344
  }
161
345
 
162
- export { getTests as a, getSuites as b, c, notNullish as d, ensurePackageInstalled as e, hasTests as f, getNames as g, hasFailed as h, interpretOnlyMode as i, getTasks as j, noop as n, partitionSuiteChildren as p, slash as s, toArray as t };
346
+ export { getTests as a, basename as b, c, dirname as d, ensurePackageInstalled as e, getSuites as f, getNames as g, resolve as h, isAbsolute as i, hasFailed as j, notNullish as k, index as l, interpretOnlyMode as m, noop as n, hasTests as o, partitionSuiteChildren as p, getTasks as q, relative as r, slash as s, toArray as t };
package/dist/utils.js CHANGED
@@ -1,3 +1,4 @@
1
- export { e as ensurePackageInstalled, g as getNames, b as getSuites, j as getTasks, a as getTests, h as hasFailed, f as hasTests, i as interpretOnlyMode, n as noop, d as notNullish, p as partitionSuiteChildren, s as slash, t as toArray } from './utils-70b78878.js';
1
+ export { e as ensurePackageInstalled, g as getNames, f as getSuites, q as getTasks, a as getTests, j as hasFailed, o as hasTests, m as interpretOnlyMode, n as noop, k as notNullish, p as partitionSuiteChildren, h as resolvePath, s as slash, t as toArray } from './utils-b780070b.js';
2
2
  import 'local-pkg';
3
3
  import 'tty';
4
+ import 'path';
package/dist/worker.js CHANGED
@@ -1,6 +1,6 @@
1
- import { a as resolve, d as dirname$2 } from './index-1488b423.js';
1
+ import { s as slash, h as resolve, d as dirname$2 } from './utils-b780070b.js';
2
2
  import { n as nanoid } from './index-9e71c815.js';
3
- import { c as distDir } from './constants-e78c749a.js';
3
+ import { c as distDir } from './constants-3cbd9066.js';
4
4
  import { builtinModules, createRequire } from 'module';
5
5
  import { pathToFileURL, fileURLToPath as fileURLToPath$2, URL as URL$1 } from 'url';
6
6
  import vm from 'vm';
@@ -8,7 +8,6 @@ import path from 'path';
8
8
  import fs, { promises, realpathSync, statSync, Stats } from 'fs';
9
9
  import assert from 'assert';
10
10
  import { format as format$2, inspect } from 'util';
11
- import { s as slash } from './utils-70b78878.js';
12
11
  import { s as send } from './rpc-7de86f29.js';
13
12
  import 'tty';
14
13
  import 'local-pkg';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vitest",
3
- "version": "0.0.98",
3
+ "version": "0.0.99",
4
4
  "description": "A blazing fast unit test framework powered by Vite",
5
5
  "keywords": [
6
6
  "vite",
@@ -25,34 +25,31 @@
25
25
  "import": "./dist/index.js",
26
26
  "types": "./dist/index.d.ts"
27
27
  },
28
- "./node": {
29
- "import": "./dist/node.js",
30
- "types": "./dist/node.d.ts"
31
- },
28
+ "./*": "./*",
32
29
  "./global": {
33
30
  "types": "./global.d.ts"
34
31
  },
35
- "./*": "./*"
32
+ "./node": {
33
+ "import": "./dist/node.js",
34
+ "types": "./dist/node.d.ts"
35
+ }
36
36
  },
37
37
  "main": "./dist/index.js",
38
38
  "module": "./dist/index.js",
39
39
  "types": "./dist/index.d.ts",
40
40
  "bin": {
41
- "vitest": "./bin/vitest.mjs"
41
+ "vitest": "./vitest.mjs"
42
42
  },
43
43
  "files": [
44
44
  "dist",
45
45
  "bin",
46
- "*.d.ts"
46
+ "*.d.ts",
47
+ "*.mjs"
47
48
  ],
48
49
  "dependencies": {
49
50
  "@types/chai": "^4.3.0",
50
51
  "@types/chai-subset": "^1.3.3",
51
- "chai": "^4.3.4",
52
- "chai-subset": "^1.6.0",
53
- "fast-glob": "^3.2.7",
54
52
  "local-pkg": "^0.4.0",
55
- "source-map": "^0.7.3",
56
53
  "tinypool": "^0.0.3",
57
54
  "tinyspy": "^0.1.2"
58
55
  },
@@ -66,8 +63,11 @@
66
63
  "@types/prompts": "^2.4.0",
67
64
  "c8": "^7.10.0",
68
65
  "cac": "^6.7.12",
66
+ "chai": "^4.3.4",
67
+ "chai-subset": "^1.6.0",
69
68
  "cli-truncate": "^3.1.0",
70
69
  "diff": "^5.0.0",
70
+ "fast-glob": "^3.2.7",
71
71
  "find-up": "^6.2.0",
72
72
  "flatted": "^3.2.4",
73
73
  "happy-dom": "^2.25.0",
@@ -83,6 +83,7 @@
83
83
  "pretty-format": "^27.4.2",
84
84
  "prompts": "^2.4.2",
85
85
  "rollup": "^2.61.1",
86
+ "source-map-js": "^1.0.1",
86
87
  "strip-ansi": "^7.0.1",
87
88
  "typescript": "^4.5.4"
88
89
  },
@@ -104,7 +105,7 @@
104
105
  }
105
106
  },
106
107
  "engines": {
107
- "node": ">=16.0.0"
108
+ "node": ">=14.14.0"
108
109
  },
109
110
  "scripts": {
110
111
  "build": "rimraf dist && rollup -c",
@@ -1,8 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  import { fileURLToPath } from 'url'
4
- import { resolve } from 'pathe'
5
- import { ensurePackageInstalled } from '../dist/utils.js'
4
+ import { ensurePackageInstalled, resolvePath } from './dist/utils.js'
6
5
 
7
6
  const argv = process.argv.slice(2)
8
7
 
@@ -13,10 +12,10 @@ if (argv.includes('--coverage')) {
13
12
  if (!await ensurePackageInstalled('c8'))
14
13
  process.exit(1)
15
14
  const filename = fileURLToPath(import.meta.url)
16
- const entry = resolve(filename, '../../dist/cli.js')
15
+ const entry = resolvePath(filename, '../../dist/cli.js')
17
16
  process.argv.splice(2, 0, process.argv[0], entry)
18
17
  await import('c8/bin/c8.js')
19
18
  }
20
19
  else {
21
- await import('../dist/cli.js')
20
+ await import('./dist/cli.js')
22
21
  }
package/LICENSE DELETED
@@ -1,22 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2021-Present Anthony Fu <https://github.com/antfu>
4
- Copyright (c) 2021-Present Matias Capeletto <https://github.com/patak-dev>
5
-
6
- Permission is hereby granted, free of charge, to any person obtaining a copy
7
- of this software and associated documentation files (the "Software"), to deal
8
- in the Software without restriction, including without limitation the rights
9
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
- copies of the Software, and to permit persons to whom the Software is
11
- furnished to do so, subject to the following conditions:
12
-
13
- The above copyright notice and this permission notice shall be included in all
14
- copies or substantial portions of the Software.
15
-
16
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
- SOFTWARE.