bob-core 1.4.0 → 2.0.0-beta.10

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 (66) hide show
  1. package/README.md +316 -175
  2. package/dist/cjs/index.js +18 -6
  3. package/dist/cjs/package-D82wayAe.cjs +1 -0
  4. package/dist/cjs/src/Cli.d.ts +21 -12
  5. package/dist/cjs/src/Command.d.ts +51 -35
  6. package/dist/cjs/src/CommandIO.d.ts +21 -1
  7. package/dist/cjs/src/CommandParser.d.ts +92 -44
  8. package/dist/cjs/src/CommandRegistry.d.ts +12 -7
  9. package/dist/cjs/src/CommandSignatureParser.d.ts +40 -0
  10. package/dist/cjs/src/CommandWithSignature.d.ts +28 -0
  11. package/dist/cjs/src/ExceptionHandler.d.ts +3 -0
  12. package/dist/cjs/src/Logger.d.ts +16 -0
  13. package/dist/cjs/src/commands/HelpCommand.d.ts +1 -3
  14. package/dist/cjs/src/contracts/CommandOption.d.ts +4 -5
  15. package/dist/cjs/src/contracts/LoggerContract.d.ts +13 -0
  16. package/dist/cjs/src/contracts/index.d.ts +1 -0
  17. package/dist/cjs/src/errors/BadCommandOption.d.ts +2 -1
  18. package/dist/cjs/src/errors/BadCommandParameter.d.ts +2 -1
  19. package/dist/cjs/src/errors/BobError.d.ts +2 -1
  20. package/dist/cjs/src/errors/CommandNotFoundError.d.ts +2 -1
  21. package/dist/cjs/src/errors/InvalidOption.d.ts +5 -4
  22. package/dist/cjs/src/errors/MissingRequiredArgumentValue.d.ts +4 -4
  23. package/dist/cjs/src/errors/MissingRequiredOptionValue.d.ts +7 -0
  24. package/dist/cjs/src/errors/index.d.ts +4 -0
  25. package/dist/cjs/src/index.d.ts +8 -1
  26. package/dist/cjs/src/lib/optionHelpers.d.ts +5 -0
  27. package/dist/cjs/src/lib/types.d.ts +33 -0
  28. package/dist/cjs/src/lib/valueConverter.d.ts +10 -0
  29. package/dist/cjs/src/options/HelpOption.d.ts +3 -1
  30. package/dist/cjs/src/testFixtures.d.ts +11 -0
  31. package/dist/esm/index.js +1108 -475
  32. package/dist/esm/package-O5nP1XlU.js +31 -0
  33. package/dist/esm/src/Cli.d.ts +21 -12
  34. package/dist/esm/src/Command.d.ts +51 -35
  35. package/dist/esm/src/CommandIO.d.ts +21 -1
  36. package/dist/esm/src/CommandParser.d.ts +92 -44
  37. package/dist/esm/src/CommandRegistry.d.ts +12 -7
  38. package/dist/esm/src/CommandSignatureParser.d.ts +40 -0
  39. package/dist/esm/src/CommandWithSignature.d.ts +28 -0
  40. package/dist/esm/src/ExceptionHandler.d.ts +3 -0
  41. package/dist/esm/src/Logger.d.ts +16 -0
  42. package/dist/esm/src/commands/HelpCommand.d.ts +1 -3
  43. package/dist/esm/src/contracts/CommandOption.d.ts +4 -5
  44. package/dist/esm/src/contracts/LoggerContract.d.ts +13 -0
  45. package/dist/esm/src/contracts/index.d.ts +1 -0
  46. package/dist/esm/src/errors/BadCommandOption.d.ts +2 -1
  47. package/dist/esm/src/errors/BadCommandParameter.d.ts +2 -1
  48. package/dist/esm/src/errors/BobError.d.ts +2 -1
  49. package/dist/esm/src/errors/CommandNotFoundError.d.ts +2 -1
  50. package/dist/esm/src/errors/InvalidOption.d.ts +5 -4
  51. package/dist/esm/src/errors/MissingRequiredArgumentValue.d.ts +4 -4
  52. package/dist/esm/src/errors/MissingRequiredOptionValue.d.ts +7 -0
  53. package/dist/esm/src/errors/index.d.ts +4 -0
  54. package/dist/esm/src/index.d.ts +8 -1
  55. package/dist/esm/src/lib/optionHelpers.d.ts +5 -0
  56. package/dist/esm/src/lib/types.d.ts +33 -0
  57. package/dist/esm/src/lib/valueConverter.d.ts +10 -0
  58. package/dist/esm/src/options/HelpOption.d.ts +3 -1
  59. package/dist/esm/src/testFixtures.d.ts +11 -0
  60. package/package.json +17 -4
  61. package/dist/cjs/package-6sByjm31.cjs +0 -1
  62. package/dist/cjs/src/errors/MissingSignatureArgument.d.ts +0 -8
  63. package/dist/cjs/src/errors/MissingSignatureOption.d.ts +0 -8
  64. package/dist/esm/package-eljsfLkU.js +0 -31
  65. package/dist/esm/src/errors/MissingSignatureArgument.d.ts +0 -8
  66. package/dist/esm/src/errors/MissingSignatureOption.d.ts +0 -8
@@ -0,0 +1,33 @@
1
+ export type OptionPrimitive = 'string' | 'number' | 'boolean' | ['string'] | ['number'];
2
+ export type OptionDefinition = {
3
+ type: OptionPrimitive;
4
+ description?: string;
5
+ alias?: string | Array<string>;
6
+ required?: boolean;
7
+ secret?: boolean;
8
+ default?: unknown;
9
+ variadic?: boolean;
10
+ };
11
+ export type Option = OptionPrimitive | OptionDefinition;
12
+ export type OptionType<O extends Option> = O extends 'string' ? string : O extends 'number' ? number : O extends 'boolean' ? boolean : O extends Array<'string'> ? Array<string> : O extends Array<'number'> ? Array<number> : O extends {
13
+ type: infer T extends Option;
14
+ } ? OptionType<T> : never;
15
+ export type IsRequired<O extends Option> = O extends {
16
+ required: true;
17
+ } ? true : false;
18
+ export type OptionReturnType<O extends Option> = IsRequired<O> extends true ? OptionType<O> : OptionType<O> | null;
19
+ export type OptionsSchema = {
20
+ [key: string]: Option;
21
+ };
22
+ export type OptionsObject<Options extends OptionsSchema> = {
23
+ [Key in keyof Options]: OptionReturnType<Options[Key]>;
24
+ };
25
+ export type ArgumentsSchema = {
26
+ [key: string]: Option;
27
+ };
28
+ export type ArgumentsObject<Arguments extends ArgumentsSchema> = {
29
+ [Key in keyof Arguments]: OptionReturnType<Arguments[Key]>;
30
+ };
31
+ export type ContextDefinition = {
32
+ [key: string]: unknown;
33
+ };
@@ -0,0 +1,10 @@
1
+ import { OptionPrimitive } from './types.js';
2
+ /**
3
+ * Converts a value to the specified type with validation
4
+ * @param value - The value to convert
5
+ * @param type - The target type
6
+ * @param name - The parameter name (for error messages)
7
+ * @param defaultValue - Optional default value if value is null/undefined
8
+ * @returns The converted value
9
+ */
10
+ export declare function convertValue(value: unknown, type: OptionPrimitive, name: string, defaultValue?: unknown): unknown;
@@ -1,9 +1,11 @@
1
1
  import { Command } from '../Command.js';
2
2
  import { CommandOption } from '../contracts/index.js';
3
+ import { OptionPrimitive } from '../lib/types.js';
3
4
  export declare class HelpOption implements CommandOption<Command> {
5
+ type: OptionPrimitive;
4
6
  option: string;
5
7
  alias: string[];
6
- defaultValue: boolean;
8
+ default: boolean;
7
9
  description: string;
8
10
  handler(this: Command): Promise<number | void>;
9
11
  }
@@ -0,0 +1,11 @@
1
+ import { Mocked } from 'vitest';
2
+ import { Logger } from './Logger.js';
3
+ export type TestLogger = Mocked<Logger>;
4
+ export declare function newTestLogger(): TestLogger;
5
+ /**
6
+ * Creates test fixtures with a mocked logger
7
+ * @returns Object containing mocked logger instance
8
+ */
9
+ export declare function newFixtures(): {
10
+ logger: TestLogger;
11
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bob-core",
3
- "version": "1.4.0",
3
+ "version": "2.0.0-beta.10",
4
4
  "description": "BOB Core",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -23,25 +23,38 @@
23
23
  "scripts": {
24
24
  "start": "node -r @swc-node/register debug/main.ts",
25
25
  "build": "rimraf ./dist && vite build",
26
- "prepare": "npm run build",
27
- "test": "vitest run"
26
+ "typecheck": "tsc --noEmit",
27
+ "prepack": "npm run build",
28
+ "test": "vitest run",
29
+ "lint": "eslint .",
30
+ "lint:fix": "eslint . --fix"
28
31
  },
29
32
  "author": "Léo Hubert",
30
33
  "license": "ISC",
31
34
  "devDependencies": {
35
+ "@eslint/js": "^9.37.0",
36
+ "@faker-js/faker": "^10.0.0",
32
37
  "@swc-node/register": "^1.11.1",
38
+ "@trivago/prettier-plugin-sort-imports": "^5.2.2",
33
39
  "@types/minimist": "^1.2.5",
34
40
  "@types/node": "^20.14.5",
35
41
  "@types/prompts": "^2.4.9",
36
42
  "@types/string-similarity": "^4.0.2",
43
+ "@vitest/coverage-v8": "^3.2.4",
44
+ "eslint": "^9.37.0",
45
+ "eslint-config-prettier": "^10.1.8",
46
+ "eslint-plugin-prettier": "^5.5.4",
47
+ "prettier": "^3.6.2",
37
48
  "rimraf": "^6.0.1",
49
+ "tsx": "^4.20.6",
38
50
  "typescript": "^5.7.3",
51
+ "typescript-eslint": "^8.46.0",
39
52
  "vite": "^7.1.6",
40
53
  "vite-plugin-dts": "^4.5.4",
41
54
  "vitest": "^3.2.4"
42
55
  },
43
56
  "dependencies": {
44
- "chalk": "^4.1.2",
57
+ "chalk": "^5.6.2",
45
58
  "minimist": "^1.2.8",
46
59
  "prompts": "^2.4.2",
47
60
  "string-similarity": "^4.0.4"
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e="bob-core",s="1.4.0",t="BOB Core",i="module",n=!1,r=["dist/**"],o={".":{import:"./dist/esm/index.js",require:"./dist/cjs/index.js"}},c={"*":{"*":["./dist/cjs/*.d.ts"]}},d={start:"node -r @swc-node/register debug/main.ts",build:"rimraf ./dist && vite build",prepare:"npm run build",test:"vitest run"},p="Léo Hubert",a="ISC",m={"@swc-node/register":"^1.11.1","@types/minimist":"^1.2.5","@types/node":"^20.14.5","@types/prompts":"^2.4.9","@types/string-similarity":"^4.0.2",rimraf:"^6.0.1",typescript:"^5.7.3",vite:"^7.1.6","vite-plugin-dts":"^4.5.4",vitest:"^3.2.4"},l={chalk:"^4.1.2",minimist:"^1.2.8",prompts:"^2.4.2","string-similarity":"^4.0.4"},u={name:e,version:s,description:t,type:i,sideEffects:n,files:r,exports:o,typesVersions:c,scripts:d,author:p,license:a,devDependencies:m,dependencies:l};exports.author=p;exports.default=u;exports.dependencies=l;exports.description=t;exports.devDependencies=m;exports.exports=o;exports.files=r;exports.license=a;exports.name=e;exports.scripts=d;exports.sideEffects=n;exports.type=i;exports.typesVersions=c;exports.version=s;
@@ -1,8 +0,0 @@
1
- import { BobError } from './BobError.js';
2
- import { ArgSignature } from '../CommandParser.js';
3
- export declare class MissingSignatureArgument extends BobError {
4
- private argument;
5
- private argumentSignatures;
6
- constructor(argument: string, argumentSignatures: ArgSignature[]);
7
- pretty(): void;
8
- }
@@ -1,8 +0,0 @@
1
- import { BobError } from './BobError.js';
2
- import { ArgSignature } from '../CommandParser.js';
3
- export declare class MissingSignatureOption extends BobError {
4
- private option;
5
- private optionsSignature;
6
- constructor(option: string, optionsSignature: ArgSignature[]);
7
- pretty(): void;
8
- }
@@ -1,31 +0,0 @@
1
- const s = "bob-core", t = "1.4.0", e = "BOB Core", i = "module", l = !1, n = ["dist/**"], r = { ".": { import: "./dist/esm/index.js", require: "./dist/cjs/index.js" } }, o = { "*": { "*": ["./dist/cjs/*.d.ts"] } }, c = { start: "node -r @swc-node/register debug/main.ts", build: "rimraf ./dist && vite build", prepare: "npm run build", test: "vitest run" }, d = "Léo Hubert", p = "ISC", m = { "@swc-node/register": "^1.11.1", "@types/minimist": "^1.2.5", "@types/node": "^20.14.5", "@types/prompts": "^2.4.9", "@types/string-similarity": "^4.0.2", rimraf: "^6.0.1", typescript: "^5.7.3", vite: "^7.1.6", "vite-plugin-dts": "^4.5.4", vitest: "^3.2.4" }, a = { chalk: "^4.1.2", minimist: "^1.2.8", prompts: "^2.4.2", "string-similarity": "^4.0.4" }, u = {
2
- name: s,
3
- version: t,
4
- description: e,
5
- type: i,
6
- sideEffects: !1,
7
- files: n,
8
- exports: r,
9
- typesVersions: o,
10
- scripts: c,
11
- author: d,
12
- license: p,
13
- devDependencies: m,
14
- dependencies: a
15
- };
16
- export {
17
- d as author,
18
- u as default,
19
- a as dependencies,
20
- e as description,
21
- m as devDependencies,
22
- r as exports,
23
- n as files,
24
- p as license,
25
- s as name,
26
- c as scripts,
27
- l as sideEffects,
28
- i as type,
29
- o as typesVersions,
30
- t as version
31
- };
@@ -1,8 +0,0 @@
1
- import { BobError } from './BobError.js';
2
- import { ArgSignature } from '../CommandParser.js';
3
- export declare class MissingSignatureArgument extends BobError {
4
- private argument;
5
- private argumentSignatures;
6
- constructor(argument: string, argumentSignatures: ArgSignature[]);
7
- pretty(): void;
8
- }
@@ -1,8 +0,0 @@
1
- import { BobError } from './BobError.js';
2
- import { ArgSignature } from '../CommandParser.js';
3
- export declare class MissingSignatureOption extends BobError {
4
- private option;
5
- private optionsSignature;
6
- constructor(option: string, optionsSignature: ArgSignature[]);
7
- pretty(): void;
8
- }