@doist/cli-core 0.3.0 → 0.4.0
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/CHANGELOG.md +6 -0
- package/dist/empty.d.ts +15 -0
- package/dist/empty.d.ts.map +1 -0
- package/dist/empty.js +21 -0
- package/dist/empty.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/options.d.ts +14 -0
- package/dist/options.d.ts.map +1 -0
- package/dist/options.js +2 -0
- package/dist/options.js.map +1 -0
- package/dist/testing.d.ts +21 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +56 -0
- package/dist/testing.js.map +1 -0
- package/package.json +13 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
## [0.4.0](https://github.com/Doist/cli-core/compare/v0.3.0...v0.4.0) (2026-05-08)
|
|
2
|
+
|
|
3
|
+
### Features
|
|
4
|
+
|
|
5
|
+
* add printEmpty + describeEmptyMachineOutput helpers ([#6](https://github.com/Doist/cli-core/issues/6)) ([2c0a74e](https://github.com/Doist/cli-core/commit/2c0a74e7874ef47184a071f9fc15f22f254ca20a))
|
|
6
|
+
|
|
1
7
|
## [0.3.0](https://github.com/Doist/cli-core/compare/v0.2.0...v0.3.0) (2026-05-06)
|
|
2
8
|
|
|
3
9
|
### Features
|
package/dist/empty.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ViewOptions } from './options.js';
|
|
2
|
+
/**
|
|
3
|
+
* Gate the empty-state print on the active output mode:
|
|
4
|
+
* --json → prints exactly `'[]'`
|
|
5
|
+
* --ndjson → prints nothing (no stray newline; ndjson EOF = end of stream)
|
|
6
|
+
* neither → prints the human-readable message
|
|
7
|
+
*
|
|
8
|
+
* Use at every list/array empty-result branch so machine consumers never see
|
|
9
|
+
* human strings on stdout when they asked for `--json` / `--ndjson`.
|
|
10
|
+
*/
|
|
11
|
+
export declare function printEmpty({ options, message }: {
|
|
12
|
+
options: ViewOptions;
|
|
13
|
+
message: string;
|
|
14
|
+
}): void;
|
|
15
|
+
//# sourceMappingURL=empty.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"empty.d.ts","sourceRoot":"","sources":["../src/empty.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE/C;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAShG"}
|
package/dist/empty.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { formatJson } from './json.js';
|
|
2
|
+
/**
|
|
3
|
+
* Gate the empty-state print on the active output mode:
|
|
4
|
+
* --json → prints exactly `'[]'`
|
|
5
|
+
* --ndjson → prints nothing (no stray newline; ndjson EOF = end of stream)
|
|
6
|
+
* neither → prints the human-readable message
|
|
7
|
+
*
|
|
8
|
+
* Use at every list/array empty-result branch so machine consumers never see
|
|
9
|
+
* human strings on stdout when they asked for `--json` / `--ndjson`.
|
|
10
|
+
*/
|
|
11
|
+
export function printEmpty({ options, message }) {
|
|
12
|
+
if (options.json) {
|
|
13
|
+
console.log(formatJson([]));
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
if (options.ndjson) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
console.log(message);
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=empty.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"empty.js","sourceRoot":"","sources":["../src/empty.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAGtC;;;;;;;;GAQG;AACH,MAAM,UAAU,UAAU,CAAC,EAAE,OAAO,EAAE,OAAO,EAA6C;IACtF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAA;QAC3B,OAAM;IACV,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACjB,OAAM;IACV,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;AACxB,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
export { BROKEN_CONFIG_STATE_TO_CODE, getConfigPath, readConfig, readConfigStrict, updateConfig, writeConfig, } from './config.js';
|
|
2
2
|
export type { ConfigErrorCode, ReadConfigStrictResult, WriteConfigOptions } from './config.js';
|
|
3
|
+
export { printEmpty } from './empty.js';
|
|
3
4
|
export { CliError } from './errors.js';
|
|
4
5
|
export type { CliErrorCode, CliErrorOptions, ErrorType } from './errors.js';
|
|
5
6
|
export { formatJson, formatNdjson } from './json.js';
|
|
7
|
+
export type { ViewOptions } from './options.js';
|
|
6
8
|
export { createSpinner } from './spinner.js';
|
|
7
9
|
export type { LoadingSpinner, SpinnerColor, SpinnerConfig, SpinnerKit, SpinnerOptions, } from './spinner.js';
|
|
8
10
|
export { isCI, isStderrTTY, isStdinTTY, isStdoutTTY } from './terminal.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,2BAA2B,EAC3B,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,WAAW,GACd,MAAM,aAAa,CAAA;AACpB,YAAY,EAAE,eAAe,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAC9F,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC3E,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC5C,YAAY,EACR,cAAc,EACd,YAAY,EACZ,aAAa,EACb,UAAU,EACV,cAAc,GACjB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,2BAA2B,EAC3B,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,WAAW,GACd,MAAM,aAAa,CAAA;AACpB,YAAY,EAAE,eAAe,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAC9F,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC3E,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACpD,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC5C,YAAY,EACR,cAAc,EACd,YAAY,EACZ,aAAa,EACb,UAAU,EACV,cAAc,GACjB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { BROKEN_CONFIG_STATE_TO_CODE, getConfigPath, readConfig, readConfigStrict, updateConfig, writeConfig, } from './config.js';
|
|
2
|
+
export { printEmpty } from './empty.js';
|
|
2
3
|
export { CliError } from './errors.js';
|
|
3
4
|
export { formatJson, formatNdjson } from './json.js';
|
|
4
5
|
export { createSpinner } from './spinner.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,2BAA2B,EAC3B,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,WAAW,GACd,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAEtC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,2BAA2B,EAC3B,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,WAAW,GACd,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAEtC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAQ5C,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared shape for commands that respect the canonical machine-output flags.
|
|
3
|
+
* Seeded narrow so the type only declares what cli-core helpers actually read
|
|
4
|
+
* today; will grow (`full?`, `raw?`, etc.) as the global-args parser extraction
|
|
5
|
+
* lands (see EXTRACTION_ROADMAP.md, Tier 1).
|
|
6
|
+
*
|
|
7
|
+
* Per-CLI `ViewOptions` types should extend this rather than re-declare the
|
|
8
|
+
* `json` / `ndjson` fields.
|
|
9
|
+
*/
|
|
10
|
+
export type ViewOptions = {
|
|
11
|
+
json?: boolean;
|
|
12
|
+
ndjson?: boolean;
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,MAAM,WAAW,GAAG;IACtB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA"}
|
package/dist/options.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
type EmptyOutputConfig = {
|
|
2
|
+
setup: () => void | Promise<void>;
|
|
3
|
+
run: (extraArgs: string[]) => Promise<void>;
|
|
4
|
+
humanMessage: string | RegExp;
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* Asserts the standard `printEmpty` contract for a command:
|
|
8
|
+
* --json → writes exactly `'[]\n'` to stdout
|
|
9
|
+
* --ndjson → writes nothing to stdout (no stray newline)
|
|
10
|
+
* neither → writes exactly the human message + `\n` to stdout
|
|
11
|
+
*
|
|
12
|
+
* Captures bytes from both `console.log` (which vitest intercepts before
|
|
13
|
+
* it reaches the real stream) and `process.stdout.write`, so commands
|
|
14
|
+
* using either pathway satisfy the contract.
|
|
15
|
+
*
|
|
16
|
+
* Spies are installed AFTER `setup` so any `vi.clearAllMocks()` inside
|
|
17
|
+
* `setup` doesn't clobber them.
|
|
18
|
+
*/
|
|
19
|
+
export declare function describeEmptyMachineOutput(label: string, config: EmptyOutputConfig): void;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=testing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAEA,KAAK,iBAAiB,GAAG;IACrB,KAAK,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACjC,GAAG,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3C,YAAY,EAAE,MAAM,GAAG,MAAM,CAAA;CAChC,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI,CA8CzF"}
|
package/dist/testing.js
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
2
|
+
/**
|
|
3
|
+
* Asserts the standard `printEmpty` contract for a command:
|
|
4
|
+
* --json → writes exactly `'[]\n'` to stdout
|
|
5
|
+
* --ndjson → writes nothing to stdout (no stray newline)
|
|
6
|
+
* neither → writes exactly the human message + `\n` to stdout
|
|
7
|
+
*
|
|
8
|
+
* Captures bytes from both `console.log` (which vitest intercepts before
|
|
9
|
+
* it reaches the real stream) and `process.stdout.write`, so commands
|
|
10
|
+
* using either pathway satisfy the contract.
|
|
11
|
+
*
|
|
12
|
+
* Spies are installed AFTER `setup` so any `vi.clearAllMocks()` inside
|
|
13
|
+
* `setup` doesn't clobber them.
|
|
14
|
+
*/
|
|
15
|
+
export function describeEmptyMachineOutput(label, config) {
|
|
16
|
+
describe(label, () => {
|
|
17
|
+
let captured = '';
|
|
18
|
+
let consoleSpy;
|
|
19
|
+
let writeSpy;
|
|
20
|
+
beforeEach(async () => {
|
|
21
|
+
await config.setup();
|
|
22
|
+
captured = '';
|
|
23
|
+
consoleSpy = vi.spyOn(console, 'log').mockImplementation((...args) => {
|
|
24
|
+
captured += `${args.map((a) => (typeof a === 'string' ? a : String(a))).join(' ')}\n`;
|
|
25
|
+
});
|
|
26
|
+
writeSpy = vi.spyOn(process.stdout, 'write').mockImplementation(((chunk) => {
|
|
27
|
+
captured += typeof chunk === 'string' ? chunk : chunk.toString();
|
|
28
|
+
return true;
|
|
29
|
+
}));
|
|
30
|
+
});
|
|
31
|
+
afterEach(() => {
|
|
32
|
+
consoleSpy?.mockRestore();
|
|
33
|
+
writeSpy?.mockRestore();
|
|
34
|
+
consoleSpy = undefined;
|
|
35
|
+
writeSpy = undefined;
|
|
36
|
+
});
|
|
37
|
+
it('writes exactly "[]\\n" to stdout for --json', async () => {
|
|
38
|
+
await config.run(['--json']);
|
|
39
|
+
expect(captured).toBe('[]\n');
|
|
40
|
+
});
|
|
41
|
+
it('writes nothing to stdout for --ndjson (no stray newline)', async () => {
|
|
42
|
+
await config.run(['--ndjson']);
|
|
43
|
+
expect(captured).toBe('');
|
|
44
|
+
});
|
|
45
|
+
it('writes exactly the human message to stdout when no machine flag is set', async () => {
|
|
46
|
+
await config.run([]);
|
|
47
|
+
if (typeof config.humanMessage === 'string') {
|
|
48
|
+
expect(captured).toBe(`${config.humanMessage}\n`);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
expect(captured).toMatch(config.humanMessage);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=testing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAQxE;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,0BAA0B,CAAC,KAAa,EAAE,MAAyB;IAC/E,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE;QACjB,IAAI,QAAQ,GAAG,EAAE,CAAA;QACjB,IAAI,UAAmD,CAAA;QACvD,IAAI,QAAiD,CAAA;QAErD,UAAU,CAAC,KAAK,IAAI,EAAE;YAClB,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;YACpB,QAAQ,GAAG,EAAE,CAAA;YACb,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,CAAC,GAAG,IAAe,EAAE,EAAE;gBAC5E,QAAQ,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAA;YACzF,CAAC,CAAC,CAAA;YACF,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAC7D,KAA0B,EACnB,EAAE;gBACT,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAA;gBAChE,OAAO,IAAI,CAAA;YACf,CAAC,CAAgC,CAAC,CAAA;QACtC,CAAC,CAAC,CAAA;QAEF,SAAS,CAAC,GAAG,EAAE;YACX,UAAU,EAAE,WAAW,EAAE,CAAA;YACzB,QAAQ,EAAE,WAAW,EAAE,CAAA;YACvB,UAAU,GAAG,SAAS,CAAA;YACtB,QAAQ,GAAG,SAAS,CAAA;QACxB,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YACzD,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;YAC5B,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACjC,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;YACtE,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAA;YAC9B,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAC7B,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;YACpF,MAAM,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACpB,IAAI,OAAO,MAAM,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;gBAC1C,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,YAAY,IAAI,CAAC,CAAA;YACrD,CAAC;iBAAM,CAAC;gBACJ,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;YACjD,CAAC;QACL,CAAC,CAAC,CAAA;IACN,CAAC,CAAC,CAAA;AACN,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@doist/cli-core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Shared core utilities for Doist CLI projects",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -9,6 +9,10 @@
|
|
|
9
9
|
".": {
|
|
10
10
|
"types": "./dist/index.d.ts",
|
|
11
11
|
"import": "./dist/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./testing": {
|
|
14
|
+
"types": "./dist/testing.d.ts",
|
|
15
|
+
"import": "./dist/testing.js"
|
|
12
16
|
}
|
|
13
17
|
},
|
|
14
18
|
"scripts": {
|
|
@@ -62,5 +66,13 @@
|
|
|
62
66
|
"dependencies": {
|
|
63
67
|
"chalk": "5.6.2",
|
|
64
68
|
"yocto-spinner": "1.1.0"
|
|
69
|
+
},
|
|
70
|
+
"peerDependencies": {
|
|
71
|
+
"vitest": ">=4.1"
|
|
72
|
+
},
|
|
73
|
+
"peerDependenciesMeta": {
|
|
74
|
+
"vitest": {
|
|
75
|
+
"optional": true
|
|
76
|
+
}
|
|
65
77
|
}
|
|
66
78
|
}
|