@bemoje/cli 0.0.4 → 0.0.6
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/.eslintrc.json +5 -0
- package/.swcrc +32 -0
- package/dist/cjs/_example/bFindIn.js +189 -0
- package/dist/cjs/_example/bFindIn.js.map +1 -0
- package/dist/cjs/arg/ArgumentBuilder.js +45 -0
- package/dist/cjs/arg/ArgumentBuilder.js.map +1 -0
- package/dist/cjs/arg/ArgumentParserSelector.js +15 -0
- package/dist/cjs/arg/ArgumentParserSelector.js.map +1 -0
- package/dist/cjs/arg/ArgumentReader.js +38 -0
- package/dist/cjs/arg/ArgumentReader.js.map +1 -0
- package/dist/cjs/arg/ArgumentValidatorSelector.js +16 -0
- package/dist/cjs/arg/ArgumentValidatorSelector.js.map +1 -0
- package/dist/cjs/cmd/CommandBuilder.js +1080 -0
- package/dist/cjs/cmd/CommandBuilder.js.map +1 -0
- package/dist/cjs/cmd/CommandBuilderMetaData.js +44 -0
- package/dist/cjs/cmd/CommandBuilderMetaData.js.map +1 -0
- package/dist/cjs/cmd/CommandFeatureSelector.js +112 -0
- package/dist/cjs/cmd/CommandFeatureSelector.js.map +1 -0
- package/dist/cjs/cmd/DefaultHelpConfig.js +141 -0
- package/dist/cjs/cmd/DefaultHelpConfig.js.map +1 -0
- package/dist/cjs/cmd/asdas.js +27 -0
- package/dist/cjs/cmd/asdas.js.map +1 -0
- package/dist/cjs/core/OutputManager.js +99 -0
- package/dist/cjs/core/OutputManager.js.map +1 -0
- package/dist/cjs/core/ParserSelector.js +36 -0
- package/dist/cjs/core/ParserSelector.js.map +1 -0
- package/dist/cjs/core/ValidatorSelector.js +36 -0
- package/dist/cjs/core/ValidatorSelector.js.map +1 -0
- package/dist/cjs/core/splitCombinedArgvShorts.js +15 -0
- package/dist/cjs/core/splitCombinedArgvShorts.js.map +1 -0
- package/dist/cjs/db/AbstractJsonFileSection.js +190 -0
- package/dist/cjs/db/AbstractJsonFileSection.js.map +1 -0
- package/dist/cjs/db/AppDataSection.js +48 -0
- package/dist/cjs/db/AppDataSection.js.map +1 -0
- package/dist/cjs/db/ConfigSection.js +71 -0
- package/dist/cjs/db/ConfigSection.js.map +1 -0
- package/dist/cjs/db/JsonFile.js +55 -0
- package/dist/cjs/db/JsonFile.js.map +1 -0
- package/dist/cjs/db/PresetsSection.js +92 -0
- package/dist/cjs/db/PresetsSection.js.map +1 -0
- package/dist/cjs/index.js +119 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/opt/OptionArgumentParserSelector.js +16 -0
- package/dist/cjs/opt/OptionArgumentParserSelector.js.map +1 -0
- package/dist/cjs/opt/OptionArgumentValidatorSelector.js +19 -0
- package/dist/cjs/opt/OptionArgumentValidatorSelector.js.map +1 -0
- package/dist/cjs/opt/OptionBuilder.js +88 -0
- package/dist/cjs/opt/OptionBuilder.js.map +1 -0
- package/dist/cjs/opt/OptionHelpers.js +57 -0
- package/dist/cjs/opt/OptionHelpers.js.map +1 -0
- package/dist/cjs/opt/OptionReader.js +66 -0
- package/dist/cjs/opt/OptionReader.js.map +1 -0
- package/dist/cjs/types/IConfig.js +3 -0
- package/dist/cjs/types/IConfig.js.map +1 -0
- package/dist/cjs/types/IPreset.js +3 -0
- package/dist/cjs/types/IPreset.js.map +1 -0
- package/dist/cjs/util/array/arrLast.js +21 -0
- package/dist/cjs/util/array/arrLast.js.map +1 -0
- package/dist/cjs/util/array/arrSome.js +26 -0
- package/dist/cjs/util/array/arrSome.js.map +1 -0
- package/dist/cjs/util/array/types/ArrayPredicate.js +3 -0
- package/dist/cjs/util/array/types/ArrayPredicate.js.map +1 -0
- package/dist/cjs/util/db/JsonDB.js +145 -0
- package/dist/cjs/util/db/JsonDB.js.map +1 -0
- package/dist/cjs/util/errors/ErrorParser.js +164 -0
- package/dist/cjs/util/errors/ErrorParser.js.map +1 -0
- package/dist/cjs/util/fs/promptUserEditInTextEditor/IGetUserInputFromEditorOptions.js +3 -0
- package/dist/cjs/util/fs/promptUserEditInTextEditor/IGetUserInputFromEditorOptions.js.map +1 -0
- package/dist/cjs/util/fs/promptUserEditInTextEditor/promptUserEditInTextEditorSync.js +32 -0
- package/dist/cjs/util/fs/promptUserEditInTextEditor/promptUserEditInTextEditorSync.js.map +1 -0
- package/dist/cjs/util/fs/promptUserEditInTextEditor/promptUserEditJsonInTextEditorSync.js +25 -0
- package/dist/cjs/util/fs/promptUserEditInTextEditor/promptUserEditJsonInTextEditorSync.js.map +1 -0
- package/dist/cjs/util/fs/readFile/readFileSafeSync.js +28 -0
- package/dist/cjs/util/fs/readFile/readFileSafeSync.js.map +1 -0
- package/dist/cjs/util/fs/readFile/readFileSync.js +20 -0
- package/dist/cjs/util/fs/readFile/readFileSync.js.map +1 -0
- package/dist/cjs/util/fs/readJsonFile/readJsonFileSafeSync.js +24 -0
- package/dist/cjs/util/fs/readJsonFile/readJsonFileSafeSync.js.map +1 -0
- package/dist/cjs/util/fs/removeFile/removeFile.js +6 -0
- package/dist/cjs/util/fs/removeFile/removeFile.js.map +1 -0
- package/dist/cjs/util/fs/tempFile/tempFileSync.js +28 -0
- package/dist/cjs/util/fs/tempFile/tempFileSync.js.map +1 -0
- package/dist/cjs/util/fs/types/IReadJsonFileOptions.js +3 -0
- package/dist/cjs/util/fs/types/IReadJsonFileOptions.js.map +1 -0
- package/dist/cjs/util/fs/writeFile/writeFileSafeSync.js +6 -0
- package/dist/cjs/util/fs/writeFile/writeFileSafeSync.js.map +1 -0
- package/dist/cjs/util/fs/writeFile/writeFileSync.js +6 -0
- package/dist/cjs/util/fs/writeFile/writeFileSync.js.map +1 -0
- package/dist/cjs/util/fs/writeJsonFile/writeJsonFileSafe.js +6 -0
- package/dist/cjs/util/fs/writeJsonFile/writeJsonFileSafe.js.map +1 -0
- package/dist/cjs/util/function/MethodDisabler.js +94 -0
- package/dist/cjs/util/function/MethodDisabler.js.map +1 -0
- package/dist/cjs/util/function/funSetName.js +21 -0
- package/dist/cjs/util/function/funSetName.js.map +1 -0
- package/dist/cjs/util/node/execInherit.js +19 -0
- package/dist/cjs/util/node/execInherit.js.map +1 -0
- package/dist/cjs/util/node/formatTableForTerminal.js +21 -0
- package/dist/cjs/util/node/formatTableForTerminal.js.map +1 -0
- package/dist/cjs/util/object/arrAssign.js +6 -0
- package/dist/cjs/util/object/arrAssign.js.map +1 -0
- package/dist/cjs/util/object/createArrayMerger.js +20 -0
- package/dist/cjs/util/object/createArrayMerger.js.map +1 -0
- package/dist/cjs/util/object/createObjectMerger.js +20 -0
- package/dist/cjs/util/object/createObjectMerger.js.map +1 -0
- package/dist/cjs/util/object/objAssign.js +6 -0
- package/dist/cjs/util/object/objAssign.js.map +1 -0
- package/dist/cjs/util/object/objUpdatePropertyDescriptors.js +28 -0
- package/dist/cjs/util/object/objUpdatePropertyDescriptors.js.map +1 -0
- package/dist/cjs/util/object/realizeLazyProperty.js +14 -0
- package/dist/cjs/util/object/realizeLazyProperty.js.map +1 -0
- package/dist/cjs/util/object/setNonEnumerable.js +25 -0
- package/dist/cjs/util/object/setNonEnumerable.js.map +1 -0
- package/dist/cjs/util/os/defaultOpenInEditorCommand.js +18 -0
- package/dist/cjs/util/os/defaultOpenInEditorCommand.js.map +1 -0
- package/dist/cjs/util/os/isOSX.js +13 -0
- package/dist/cjs/util/os/isOSX.js.map +1 -0
- package/dist/cjs/util/os/isVsCodeInstalled.js +19 -0
- package/dist/cjs/util/os/isVsCodeInstalled.js.map +1 -0
- package/dist/cjs/util/os/isWindows.js +16 -0
- package/dist/cjs/util/os/isWindows.js.map +1 -0
- package/dist/cjs/util/path/getTempDataPath.js +20 -0
- package/dist/cjs/util/path/getTempDataPath.js.map +1 -0
- package/dist/cjs/util/regex/regexEscapeString.js +18 -0
- package/dist/cjs/util/regex/regexEscapeString.js.map +1 -0
- package/dist/cjs/util/string/strEnsureStartsWith.js +19 -0
- package/dist/cjs/util/string/strEnsureStartsWith.js.map +1 -0
- package/dist/cjs/util/string/strFirstCharToUpperCase.js +16 -0
- package/dist/cjs/util/string/strFirstCharToUpperCase.js.map +1 -0
- package/dist/cjs/util/string/strIsLowerCase.js +18 -0
- package/dist/cjs/util/string/strIsLowerCase.js.map +1 -0
- package/dist/cjs/util/string/strIsUpperCase.js +18 -0
- package/dist/cjs/util/string/strIsUpperCase.js.map +1 -0
- package/dist/cjs/util/string/strSplitCamelCase.js +55 -0
- package/dist/cjs/util/string/strSplitCamelCase.js.map +1 -0
- package/dist/cjs/util/string-parsers/createBooleanParser.js +21 -0
- package/dist/cjs/util/string-parsers/createBooleanParser.js.map +1 -0
- package/dist/cjs/util/string-parsers/createTypedListParser.js +22 -0
- package/dist/cjs/util/string-parsers/createTypedListParser.js.map +1 -0
- package/dist/cjs/util/string-parsers/parseBoolean.js +15 -0
- package/dist/cjs/util/string-parsers/parseBoolean.js.map +1 -0
- package/dist/cjs/util/string-parsers/parseInteger.js +17 -0
- package/dist/cjs/util/string-parsers/parseInteger.js.map +1 -0
- package/dist/cjs/util/string-parsers/parseNumber.js +13 -0
- package/dist/cjs/util/string-parsers/parseNumber.js.map +1 -0
- package/dist/cjs/util/string-parsers/parseString.js +8 -0
- package/dist/cjs/util/string-parsers/parseString.js.map +1 -0
- package/dist/cjs/util/types/Any.js +3 -0
- package/dist/cjs/util/types/Any.js.map +1 -0
- package/dist/cjs/util/types/DeepArray.js +3 -0
- package/dist/cjs/util/types/DeepArray.js.map +1 -0
- package/dist/cjs/util/types/DeepObject.js +3 -0
- package/dist/cjs/util/types/DeepObject.js.map +1 -0
- package/dist/cjs/util/types/JsonArray.js +3 -0
- package/dist/cjs/util/types/JsonArray.js.map +1 -0
- package/dist/cjs/util/types/JsonDefinedPrimitive.js +6 -0
- package/dist/cjs/util/types/JsonDefinedPrimitive.js.map +1 -0
- package/dist/cjs/util/types/JsonObject.js +3 -0
- package/dist/cjs/util/types/JsonObject.js.map +1 -0
- package/dist/cjs/util/types/JsonRawPrimitive.js +3 -0
- package/dist/cjs/util/types/JsonRawPrimitive.js.map +1 -0
- package/dist/cjs/util/types/JsonValue.js +3 -0
- package/dist/cjs/util/types/JsonValue.js.map +1 -0
- package/dist/cjs/util/types/ObjectKey.js +3 -0
- package/dist/cjs/util/types/ObjectKey.js.map +1 -0
- package/dist/cjs/util/types/TConstructor.js +3 -0
- package/dist/cjs/util/types/TConstructor.js.map +1 -0
- package/dist/cjs/util/types/TFunction.js +3 -0
- package/dist/cjs/util/types/TFunction.js.map +1 -0
- package/dist/cjs/util/types/TFunctionNoNew.js +3 -0
- package/dist/cjs/util/types/TFunctionNoNew.js.map +1 -0
- package/dist/cjs/util/types/TPlainObject.js +3 -0
- package/dist/cjs/util/types/TPlainObject.js.map +1 -0
- package/dist/cjs/util/types/TPrimitive.js +3 -0
- package/dist/cjs/util/types/TPrimitive.js.map +1 -0
- package/dist/cjs/util/types/TStringParser.js +3 -0
- package/dist/cjs/util/types/TStringParser.js.map +1 -0
- package/dist/cjs/util/types/TValidator.js +3 -0
- package/dist/cjs/util/types/TValidator.js.map +1 -0
- package/dist/cjs/util/validation/createTypedArrayValidator.js +26 -0
- package/dist/cjs/util/validation/createTypedArrayValidator.js.map +1 -0
- package/dist/cjs/util/validation/ensureThat.js +12 -0
- package/dist/cjs/util/validation/ensureThat.js.map +1 -0
- package/dist/cjs/util/validation/isArray.js +5 -0
- package/dist/cjs/util/validation/isArray.js.map +1 -0
- package/dist/cjs/util/validation/isBoolean.js +8 -0
- package/dist/cjs/util/validation/isBoolean.js.map +1 -0
- package/dist/cjs/util/validation/isFunction.js +17 -0
- package/dist/cjs/util/validation/isFunction.js.map +1 -0
- package/dist/cjs/util/validation/isNamedFunction.js +11 -0
- package/dist/cjs/util/validation/isNamedFunction.js.map +1 -0
- package/dist/cjs/util/validation/isNamedFunctionArray.js +9 -0
- package/dist/cjs/util/validation/isNamedFunctionArray.js.map +1 -0
- package/dist/cjs/util/validation/isObject.js +22 -0
- package/dist/cjs/util/validation/isObject.js.map +1 -0
- package/dist/cjs/util/validation/isPlainObject.js +19 -0
- package/dist/cjs/util/validation/isPlainObject.js.map +1 -0
- package/dist/cjs/util/validation/isPrimitive.js +18 -0
- package/dist/cjs/util/validation/isPrimitive.js.map +1 -0
- package/dist/cjs/util/validation/isString.js +8 -0
- package/dist/cjs/util/validation/isString.js.map +1 -0
- package/dist/cjs/util/validation/isStringArray.js +12 -0
- package/dist/cjs/util/validation/isStringArray.js.map +1 -0
- package/dist/cjs/util/validation/isStringWithNoSpacesOrDashes.js +9 -0
- package/dist/cjs/util/validation/isStringWithNoSpacesOrDashes.js.map +1 -0
- package/dist/cjs/util/validation/numbers/isInteger.js +17 -0
- package/dist/cjs/util/validation/numbers/isInteger.js.map +1 -0
- package/dist/cjs/util/validation/numbers/isValidNumber.js +22 -0
- package/dist/cjs/util/validation/numbers/isValidNumber.js.map +1 -0
- package/dist/esm/_example/bFindIn.js +187 -0
- package/dist/esm/_example/bFindIn.js.map +1 -0
- package/dist/esm/arg/ArgumentBuilder.js +41 -0
- package/dist/esm/arg/ArgumentBuilder.js.map +1 -0
- package/dist/esm/arg/ArgumentParserSelector.js +11 -0
- package/dist/esm/arg/ArgumentParserSelector.js.map +1 -0
- package/dist/esm/arg/ArgumentReader.js +34 -0
- package/dist/esm/arg/ArgumentReader.js.map +1 -0
- package/dist/esm/arg/ArgumentValidatorSelector.js +12 -0
- package/dist/esm/arg/ArgumentValidatorSelector.js.map +1 -0
- package/dist/esm/cmd/CommandBuilder.js +1073 -0
- package/dist/esm/cmd/CommandBuilder.js.map +1 -0
- package/dist/esm/cmd/CommandBuilderMetaData.js +40 -0
- package/dist/esm/cmd/CommandBuilderMetaData.js.map +1 -0
- package/dist/esm/cmd/CommandFeatureSelector.js +108 -0
- package/dist/esm/cmd/CommandFeatureSelector.js.map +1 -0
- package/dist/esm/cmd/DefaultHelpConfig.js +135 -0
- package/dist/esm/cmd/DefaultHelpConfig.js.map +1 -0
- package/dist/esm/cmd/asdas.js +25 -0
- package/dist/esm/cmd/asdas.js.map +1 -0
- package/dist/esm/core/OutputManager.js +92 -0
- package/dist/esm/core/OutputManager.js.map +1 -0
- package/dist/esm/core/ParserSelector.js +32 -0
- package/dist/esm/core/ParserSelector.js.map +1 -0
- package/dist/esm/core/ValidatorSelector.js +32 -0
- package/dist/esm/core/ValidatorSelector.js.map +1 -0
- package/dist/esm/core/splitCombinedArgvShorts.js +11 -0
- package/dist/esm/core/splitCombinedArgvShorts.js.map +1 -0
- package/dist/esm/db/AbstractJsonFileSection.js +186 -0
- package/dist/esm/db/AbstractJsonFileSection.js.map +1 -0
- package/dist/esm/db/AppDataSection.js +44 -0
- package/dist/esm/db/AppDataSection.js.map +1 -0
- package/dist/esm/db/ConfigSection.js +67 -0
- package/dist/esm/db/ConfigSection.js.map +1 -0
- package/dist/esm/db/JsonFile.js +51 -0
- package/dist/esm/db/JsonFile.js.map +1 -0
- package/dist/esm/db/PresetsSection.js +88 -0
- package/dist/esm/db/PresetsSection.js.map +1 -0
- package/dist/esm/index.js +103 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/opt/OptionArgumentParserSelector.js +12 -0
- package/dist/esm/opt/OptionArgumentParserSelector.js.map +1 -0
- package/dist/esm/opt/OptionArgumentValidatorSelector.js +15 -0
- package/dist/esm/opt/OptionArgumentValidatorSelector.js.map +1 -0
- package/dist/esm/opt/OptionBuilder.js +84 -0
- package/dist/esm/opt/OptionBuilder.js.map +1 -0
- package/dist/esm/opt/OptionHelpers.js +54 -0
- package/dist/esm/opt/OptionHelpers.js.map +1 -0
- package/dist/esm/opt/OptionReader.js +62 -0
- package/dist/esm/opt/OptionReader.js.map +1 -0
- package/dist/esm/types/IConfig.js +2 -0
- package/dist/esm/types/IConfig.js.map +1 -0
- package/dist/esm/types/IPreset.js +2 -0
- package/dist/esm/types/IPreset.js.map +1 -0
- package/dist/esm/util/array/arrLast.js +17 -0
- package/dist/esm/util/array/arrLast.js.map +1 -0
- package/dist/esm/util/array/arrSome.js +22 -0
- package/dist/esm/util/array/arrSome.js.map +1 -0
- package/dist/esm/util/array/types/ArrayPredicate.js +2 -0
- package/dist/esm/util/array/types/ArrayPredicate.js.map +1 -0
- package/dist/esm/util/db/JsonDB.js +141 -0
- package/dist/esm/util/db/JsonDB.js.map +1 -0
- package/dist/esm/util/errors/ErrorParser.js +154 -0
- package/dist/esm/util/errors/ErrorParser.js.map +1 -0
- package/dist/esm/util/fs/promptUserEditInTextEditor/IGetUserInputFromEditorOptions.js +2 -0
- package/dist/esm/util/fs/promptUserEditInTextEditor/IGetUserInputFromEditorOptions.js.map +1 -0
- package/dist/esm/util/fs/promptUserEditInTextEditor/promptUserEditInTextEditorSync.js +28 -0
- package/dist/esm/util/fs/promptUserEditInTextEditor/promptUserEditInTextEditorSync.js.map +1 -0
- package/dist/esm/util/fs/promptUserEditInTextEditor/promptUserEditJsonInTextEditorSync.js +21 -0
- package/dist/esm/util/fs/promptUserEditInTextEditor/promptUserEditJsonInTextEditorSync.js.map +1 -0
- package/dist/esm/util/fs/readFile/readFileSafeSync.js +21 -0
- package/dist/esm/util/fs/readFile/readFileSafeSync.js.map +1 -0
- package/dist/esm/util/fs/readFile/readFileSync.js +13 -0
- package/dist/esm/util/fs/readFile/readFileSync.js.map +1 -0
- package/dist/esm/util/fs/readJsonFile/readJsonFileSafeSync.js +17 -0
- package/dist/esm/util/fs/readJsonFile/readJsonFileSafeSync.js.map +1 -0
- package/dist/esm/util/fs/removeFile/removeFile.js +2 -0
- package/dist/esm/util/fs/removeFile/removeFile.js.map +1 -0
- package/dist/esm/util/fs/tempFile/tempFileSync.js +21 -0
- package/dist/esm/util/fs/tempFile/tempFileSync.js.map +1 -0
- package/dist/esm/util/fs/types/IReadJsonFileOptions.js +2 -0
- package/dist/esm/util/fs/types/IReadJsonFileOptions.js.map +1 -0
- package/dist/esm/util/fs/writeFile/writeFileSafeSync.js +2 -0
- package/dist/esm/util/fs/writeFile/writeFileSafeSync.js.map +1 -0
- package/dist/esm/util/fs/writeFile/writeFileSync.js +2 -0
- package/dist/esm/util/fs/writeFile/writeFileSync.js.map +1 -0
- package/dist/esm/util/fs/writeJsonFile/writeJsonFileSafe.js +2 -0
- package/dist/esm/util/fs/writeJsonFile/writeJsonFileSafe.js.map +1 -0
- package/dist/esm/util/function/MethodDisabler.js +90 -0
- package/dist/esm/util/function/MethodDisabler.js.map +1 -0
- package/dist/esm/util/function/funSetName.js +17 -0
- package/dist/esm/util/function/funSetName.js.map +1 -0
- package/dist/esm/util/node/execInherit.js +15 -0
- package/dist/esm/util/node/execInherit.js.map +1 -0
- package/dist/esm/util/node/formatTableForTerminal.js +14 -0
- package/dist/esm/util/node/formatTableForTerminal.js.map +1 -0
- package/dist/esm/util/object/arrAssign.js +3 -0
- package/dist/esm/util/object/arrAssign.js.map +1 -0
- package/dist/esm/util/object/createArrayMerger.js +16 -0
- package/dist/esm/util/object/createArrayMerger.js.map +1 -0
- package/dist/esm/util/object/createObjectMerger.js +16 -0
- package/dist/esm/util/object/createObjectMerger.js.map +1 -0
- package/dist/esm/util/object/objAssign.js +3 -0
- package/dist/esm/util/object/objAssign.js.map +1 -0
- package/dist/esm/util/object/objUpdatePropertyDescriptors.js +24 -0
- package/dist/esm/util/object/objUpdatePropertyDescriptors.js.map +1 -0
- package/dist/esm/util/object/realizeLazyProperty.js +10 -0
- package/dist/esm/util/object/realizeLazyProperty.js.map +1 -0
- package/dist/esm/util/object/setNonEnumerable.js +21 -0
- package/dist/esm/util/object/setNonEnumerable.js.map +1 -0
- package/dist/esm/util/os/defaultOpenInEditorCommand.js +14 -0
- package/dist/esm/util/os/defaultOpenInEditorCommand.js.map +1 -0
- package/dist/esm/util/os/isOSX.js +9 -0
- package/dist/esm/util/os/isOSX.js.map +1 -0
- package/dist/esm/util/os/isVsCodeInstalled.js +15 -0
- package/dist/esm/util/os/isVsCodeInstalled.js.map +1 -0
- package/dist/esm/util/os/isWindows.js +12 -0
- package/dist/esm/util/os/isWindows.js.map +1 -0
- package/dist/esm/util/path/getTempDataPath.js +13 -0
- package/dist/esm/util/path/getTempDataPath.js.map +1 -0
- package/dist/esm/util/regex/regexEscapeString.js +14 -0
- package/dist/esm/util/regex/regexEscapeString.js.map +1 -0
- package/dist/esm/util/string/strEnsureStartsWith.js +15 -0
- package/dist/esm/util/string/strEnsureStartsWith.js.map +1 -0
- package/dist/esm/util/string/strFirstCharToUpperCase.js +12 -0
- package/dist/esm/util/string/strFirstCharToUpperCase.js.map +1 -0
- package/dist/esm/util/string/strIsLowerCase.js +14 -0
- package/dist/esm/util/string/strIsLowerCase.js.map +1 -0
- package/dist/esm/util/string/strIsUpperCase.js +14 -0
- package/dist/esm/util/string/strIsUpperCase.js.map +1 -0
- package/dist/esm/util/string/strSplitCamelCase.js +51 -0
- package/dist/esm/util/string/strSplitCamelCase.js.map +1 -0
- package/dist/esm/util/string-parsers/createBooleanParser.js +17 -0
- package/dist/esm/util/string-parsers/createBooleanParser.js.map +1 -0
- package/dist/esm/util/string-parsers/createTypedListParser.js +18 -0
- package/dist/esm/util/string-parsers/createTypedListParser.js.map +1 -0
- package/dist/esm/util/string-parsers/parseBoolean.js +12 -0
- package/dist/esm/util/string-parsers/parseBoolean.js.map +1 -0
- package/dist/esm/util/string-parsers/parseInteger.js +13 -0
- package/dist/esm/util/string-parsers/parseInteger.js.map +1 -0
- package/dist/esm/util/string-parsers/parseNumber.js +9 -0
- package/dist/esm/util/string-parsers/parseNumber.js.map +1 -0
- package/dist/esm/util/string-parsers/parseString.js +4 -0
- package/dist/esm/util/string-parsers/parseString.js.map +1 -0
- package/dist/esm/util/types/Any.js +2 -0
- package/dist/esm/util/types/Any.js.map +1 -0
- package/dist/esm/util/types/DeepArray.js +2 -0
- package/dist/esm/util/types/DeepArray.js.map +1 -0
- package/dist/esm/util/types/DeepObject.js +2 -0
- package/dist/esm/util/types/DeepObject.js.map +1 -0
- package/dist/esm/util/types/JsonArray.js +2 -0
- package/dist/esm/util/types/JsonArray.js.map +1 -0
- package/dist/esm/util/types/JsonDefinedPrimitive.js +5 -0
- package/dist/esm/util/types/JsonDefinedPrimitive.js.map +1 -0
- package/dist/esm/util/types/JsonObject.js +2 -0
- package/dist/esm/util/types/JsonObject.js.map +1 -0
- package/dist/esm/util/types/JsonRawPrimitive.js +2 -0
- package/dist/esm/util/types/JsonRawPrimitive.js.map +1 -0
- package/dist/esm/util/types/JsonValue.js +2 -0
- package/dist/esm/util/types/JsonValue.js.map +1 -0
- package/dist/esm/util/types/ObjectKey.js +2 -0
- package/dist/esm/util/types/ObjectKey.js.map +1 -0
- package/dist/esm/util/types/TConstructor.js +2 -0
- package/dist/esm/util/types/TConstructor.js.map +1 -0
- package/dist/esm/util/types/TFunction.js +2 -0
- package/dist/esm/util/types/TFunction.js.map +1 -0
- package/dist/esm/util/types/TFunctionNoNew.js +2 -0
- package/dist/esm/util/types/TFunctionNoNew.js.map +1 -0
- package/dist/esm/util/types/TPlainObject.js +2 -0
- package/dist/esm/util/types/TPlainObject.js.map +1 -0
- package/dist/esm/util/types/TPrimitive.js +2 -0
- package/dist/esm/util/types/TPrimitive.js.map +1 -0
- package/dist/esm/util/types/TStringParser.js +2 -0
- package/dist/esm/util/types/TStringParser.js.map +1 -0
- package/dist/esm/util/types/TValidator.js +2 -0
- package/dist/esm/util/types/TValidator.js.map +1 -0
- package/dist/esm/util/validation/createTypedArrayValidator.js +22 -0
- package/dist/esm/util/validation/createTypedArrayValidator.js.map +1 -0
- package/dist/esm/util/validation/ensureThat.js +8 -0
- package/dist/esm/util/validation/ensureThat.js.map +1 -0
- package/dist/esm/util/validation/isArray.js +2 -0
- package/dist/esm/util/validation/isArray.js.map +1 -0
- package/dist/esm/util/validation/isBoolean.js +4 -0
- package/dist/esm/util/validation/isBoolean.js.map +1 -0
- package/dist/esm/util/validation/isFunction.js +13 -0
- package/dist/esm/util/validation/isFunction.js.map +1 -0
- package/dist/esm/util/validation/isNamedFunction.js +7 -0
- package/dist/esm/util/validation/isNamedFunction.js.map +1 -0
- package/dist/esm/util/validation/isNamedFunctionArray.js +5 -0
- package/dist/esm/util/validation/isNamedFunctionArray.js.map +1 -0
- package/dist/esm/util/validation/isObject.js +18 -0
- package/dist/esm/util/validation/isObject.js.map +1 -0
- package/dist/esm/util/validation/isPlainObject.js +15 -0
- package/dist/esm/util/validation/isPlainObject.js.map +1 -0
- package/dist/esm/util/validation/isPrimitive.js +14 -0
- package/dist/esm/util/validation/isPrimitive.js.map +1 -0
- package/dist/esm/util/validation/isString.js +4 -0
- package/dist/esm/util/validation/isString.js.map +1 -0
- package/dist/esm/util/validation/isStringArray.js +8 -0
- package/dist/esm/util/validation/isStringArray.js.map +1 -0
- package/dist/esm/util/validation/isStringWithNoSpacesOrDashes.js +5 -0
- package/dist/esm/util/validation/isStringWithNoSpacesOrDashes.js.map +1 -0
- package/dist/esm/util/validation/numbers/isInteger.js +14 -0
- package/dist/esm/util/validation/numbers/isInteger.js.map +1 -0
- package/dist/esm/util/validation/numbers/isValidNumber.js +18 -0
- package/dist/esm/util/validation/numbers/isValidNumber.js.map +1 -0
- package/dist/types/_example/bFindIn.d.ts +1 -0
- package/{src → dist/types}/arg/ArgumentBuilder.d.ts +1 -1
- package/{src → dist/types}/arg/ArgumentParserSelector.d.ts +2 -2
- package/{src → dist/types}/arg/ArgumentReader.d.ts +3 -3
- package/{src → dist/types}/arg/ArgumentValidatorSelector.d.ts +2 -2
- package/{src → dist/types}/cmd/CommandBuilder.d.ts +32 -28
- package/{src → dist/types}/cmd/CommandBuilderMetaData.d.ts +8 -7
- package/{src → dist/types}/cmd/CommandFeatureSelector.d.ts +1 -1
- package/dist/types/cmd/DefaultHelpConfig.d.ts +28 -0
- package/dist/types/cmd/asdas.d.ts +6 -0
- package/{src → dist/types}/core/OutputManager.d.ts +1 -1
- package/{src → dist/types}/core/ParserSelector.d.ts +3 -3
- package/{src → dist/types}/core/ValidatorSelector.d.ts +2 -2
- package/{src → dist/types}/db/AbstractJsonFileSection.d.ts +3 -3
- package/{src → dist/types}/db/AppDataSection.d.ts +1 -1
- package/{src → dist/types}/db/ConfigSection.d.ts +4 -4
- package/{src → dist/types}/db/PresetsSection.d.ts +2 -2
- package/{src → dist/types}/index.d.ts +2 -2
- package/{src → dist/types}/opt/OptionArgumentParserSelector.d.ts +1 -1
- package/{src → dist/types}/opt/OptionArgumentValidatorSelector.d.ts +2 -2
- package/{src → dist/types}/opt/OptionBuilder.d.ts +2 -1
- package/{src → dist/types}/opt/OptionHelpers.d.ts +2 -2
- package/{src → dist/types}/opt/OptionReader.d.ts +7 -7
- package/{src → dist/types}/types/IConfig.d.ts +3 -3
- package/{src → dist/types}/types/IPreset.d.ts +4 -3
- package/{src → dist/types}/util/db/JsonDB.d.ts +2 -2
- package/{src → dist/types}/util/fs/promptUserEditInTextEditor/promptUserEditInTextEditorSync.d.ts +1 -1
- package/{src → dist/types}/util/fs/promptUserEditInTextEditor/promptUserEditJsonInTextEditorSync.d.ts +1 -1
- package/{src → dist/types}/util/fs/readJsonFile/readJsonFileSafeSync.d.ts +1 -1
- package/{src → dist/types}/util/fs/tempFile/tempFileSync.d.ts +1 -1
- package/{src → dist/types}/util/function/MethodDisabler.d.ts +3 -3
- package/{src → dist/types}/util/object/createObjectMerger.d.ts +1 -1
- package/{src → dist/types}/util/object/objUpdatePropertyDescriptors.d.ts +1 -1
- package/{src → dist/types}/util/object/setNonEnumerable.d.ts +1 -1
- package/{src → dist/types}/util/string-parsers/createTypedListParser.d.ts +1 -1
- package/{src → dist/types}/util/types/DeepArray.d.ts +2 -2
- package/{src → dist/types}/util/types/DeepObject.d.ts +2 -2
- package/{src → dist/types}/util/types/JsonArray.d.ts +2 -2
- package/{src → dist/types}/util/types/JsonObject.d.ts +2 -2
- package/{src → dist/types}/util/types/JsonRawPrimitive.d.ts +1 -1
- package/{src → dist/types}/util/types/JsonValue.d.ts +3 -3
- package/{src → dist/types}/util/types/TConstructor.d.ts +1 -1
- package/dist/types/util/types/TFunction.d.ts +4 -0
- package/{src → dist/types}/util/types/TFunctionNoNew.d.ts +1 -1
- package/{src → dist/types}/util/types/TPlainObject.d.ts +1 -1
- package/dist/types/util/types/TValidator.d.ts +2 -0
- package/{src → dist/types}/util/validation/ensureThat.d.ts +2 -2
- package/{src → dist/types}/util/validation/isFunction.d.ts +1 -1
- package/{src → dist/types}/util/validation/isNamedFunction.d.ts +1 -1
- package/{src → dist/types}/util/validation/isPlainObject.d.ts +2 -2
- package/{src → dist/types}/util/validation/isPrimitive.d.ts +1 -1
- package/jest.config.ts +11 -0
- package/notes/tsc.md +1 -0
- package/package.json +13 -6
- package/project.json +44 -0
- package/scripts/currentBemojeUtils.txt +41 -0
- package/scripts/rollupUtils.ts +184 -0
- package/src/_example/CommandBuilder.example.ts +92 -0
- package/src/_example/CommandBuilder.example2.ts +30 -0
- package/src/_example/bFindIn.ts +200 -0
- package/src/arg/ArgumentBuilder.test.ts +102 -0
- package/src/arg/ArgumentBuilder.ts +47 -0
- package/src/arg/ArgumentParserSelector.test.ts +53 -0
- package/src/arg/ArgumentParserSelector.ts +14 -0
- package/src/arg/ArgumentReader.test.ts +60 -0
- package/src/arg/ArgumentReader.ts +33 -0
- package/src/arg/ArgumentValidatorSelector.test.ts +80 -0
- package/src/arg/ArgumentValidatorSelector.ts +14 -0
- package/src/cmd/CommandBuilder.test.ts +611 -0
- package/src/cmd/CommandBuilder.ts +1164 -0
- package/src/cmd/CommandBuilderMetaData.test.ts +54 -0
- package/src/cmd/CommandBuilderMetaData.ts +45 -0
- package/src/cmd/CommandFeatureSelector.test.ts +185 -0
- package/src/cmd/CommandFeatureSelector.ts +113 -0
- package/src/cmd/DefaultHelpConfig.test.ts +22 -0
- package/src/cmd/DefaultHelpConfig.ts +141 -0
- package/src/cmd/asdas.ts +40 -0
- package/src/core/OutputManager.test.ts +129 -0
- package/src/core/OutputManager.ts +103 -0
- package/src/core/ParserSelector.test.ts +7 -0
- package/src/core/ParserSelector.ts +38 -0
- package/src/core/ValidatorSelector.test.ts +7 -0
- package/src/core/ValidatorSelector.ts +38 -0
- package/src/core/splitCombinedArgvShorts.test.ts +9 -0
- package/src/core/splitCombinedArgvShorts.ts +10 -0
- package/src/db/AbstractJsonFileSection.test.ts +274 -0
- package/src/db/AbstractJsonFileSection.ts +218 -0
- package/src/db/AppDataSection.test.ts +69 -0
- package/src/db/AppDataSection.ts +46 -0
- package/src/db/ConfigSection.test.ts +95 -0
- package/src/db/ConfigSection.ts +74 -0
- package/src/db/JsonFile.test.ts +56 -0
- package/src/db/JsonFile.ts +52 -0
- package/src/db/PresetsSection.test.ts +130 -0
- package/src/db/PresetsSection.ts +92 -0
- package/src/index.ts +102 -0
- package/src/opt/OptionArgumentParserSelector.test.ts +55 -0
- package/src/opt/OptionArgumentParserSelector.ts +14 -0
- package/src/opt/OptionArgumentValidatorSelector.test.ts +89 -0
- package/src/opt/OptionArgumentValidatorSelector.ts +16 -0
- package/src/opt/OptionBuilder.test.ts +229 -0
- package/src/opt/OptionBuilder.ts +85 -0
- package/src/opt/OptionHelpers.test.ts +229 -0
- package/src/opt/OptionHelpers.ts +57 -0
- package/src/opt/OptionReader.test.ts +106 -0
- package/src/opt/OptionReader.ts +61 -0
- package/src/types/IConfig.ts +25 -0
- package/src/types/IPreset.ts +16 -0
- package/src/util/array/arrLast.test.ts +25 -0
- package/src/util/array/arrLast.ts +15 -0
- package/src/util/array/arrSome.test.ts +78 -0
- package/src/util/array/arrSome.ts +23 -0
- package/src/util/array/types/ArrayPredicate.ts +10 -0
- package/src/util/db/JsonDB.test.ts +214 -0
- package/src/util/db/JsonDB.ts +138 -0
- package/src/util/errors/ErrorParser.ts +165 -0
- package/src/util/fs/promptUserEditInTextEditor/IGetUserInputFromEditorOptions.ts +15 -0
- package/src/util/fs/promptUserEditInTextEditor/promptUserEditInTextEditorSync.ts +30 -0
- package/src/util/fs/promptUserEditInTextEditor/promptUserEditJsonInTextEditorSync.ts +25 -0
- package/src/util/fs/readFile/readFileSafeSync.ts +20 -0
- package/src/util/fs/readFile/readFileSync.ts +13 -0
- package/src/util/fs/readJsonFile/readJsonFileSafeSync.ts +17 -0
- package/src/util/fs/removeFile/removeFile.ts +1 -0
- package/src/util/fs/tempFile/tempFileSync.ts +21 -0
- package/src/util/fs/types/IReadJsonFileOptions.ts +1 -0
- package/src/util/fs/writeFile/writeFileSafeSync.ts +1 -0
- package/src/util/fs/writeFile/writeFileSync.ts +1 -0
- package/src/util/fs/writeJsonFile/writeJsonFileSafe.ts +1 -0
- package/src/util/function/MethodDisabler.test.ts +112 -0
- package/src/util/function/MethodDisabler.ts +94 -0
- package/src/util/function/funSetName.test.ts +12 -0
- package/src/util/function/funSetName.ts +16 -0
- package/src/util/node/execInherit.ts +14 -0
- package/src/util/node/formatTableForTerminal.ts +12 -0
- package/src/util/object/arrAssign.ts +3 -0
- package/src/util/object/createArrayMerger.test.ts +11 -0
- package/src/util/object/createArrayMerger.ts +15 -0
- package/src/util/object/createObjectMerger.test.ts +11 -0
- package/src/util/object/createObjectMerger.ts +17 -0
- package/src/util/object/objAssign.ts +3 -0
- package/src/util/object/objUpdatePropertyDescriptors.test.ts +40 -0
- package/src/util/object/objUpdatePropertyDescriptors.ts +29 -0
- package/src/util/object/realizeLazyProperty.ts +9 -0
- package/src/util/object/setNonEnumerable.test.ts +63 -0
- package/src/util/object/setNonEnumerable.ts +22 -0
- package/src/util/os/defaultOpenInEditorCommand.ts +14 -0
- package/src/util/os/isOSX.ts +9 -0
- package/src/util/os/isVsCodeInstalled.test.ts +7 -0
- package/src/util/os/isVsCodeInstalled.ts +14 -0
- package/src/util/os/isWindows.ts +12 -0
- package/src/util/path/getTempDataPath.test.ts +9 -0
- package/src/util/path/getTempDataPath.ts +14 -0
- package/src/util/regex/regexEscapeString.test.ts +35 -0
- package/src/util/regex/regexEscapeString.ts +13 -0
- package/src/util/string/strEnsureStartsWith.test.ts +13 -0
- package/src/util/string/strEnsureStartsWith.ts +14 -0
- package/src/util/string/strFirstCharToUpperCase.test.ts +33 -0
- package/src/util/string/strFirstCharToUpperCase.ts +11 -0
- package/src/util/string/strIsLowerCase.test.ts +42 -0
- package/src/util/string/strIsLowerCase.ts +13 -0
- package/src/util/string/strIsUpperCase.test.ts +48 -0
- package/src/util/string/strIsUpperCase.ts +13 -0
- package/src/util/string/strSplitCamelCase.test.ts +54 -0
- package/src/util/string/strSplitCamelCase.ts +51 -0
- package/src/util/string-parsers/createBooleanParser.test.ts +58 -0
- package/src/util/string-parsers/createBooleanParser.ts +21 -0
- package/src/util/string-parsers/createTypedListParser.test.ts +19 -0
- package/src/util/string-parsers/createTypedListParser.ts +19 -0
- package/src/util/string-parsers/parseBoolean.test.ts +30 -0
- package/src/util/string-parsers/parseBoolean.ts +12 -0
- package/src/util/string-parsers/parseInteger.test.ts +52 -0
- package/src/util/string-parsers/parseInteger.ts +9 -0
- package/src/util/string-parsers/parseNumber.test.ts +53 -0
- package/src/util/string-parsers/parseNumber.ts +6 -0
- package/src/util/string-parsers/parseString.test.ts +7 -0
- package/src/util/string-parsers/parseString.ts +3 -0
- package/src/util/types/Any.ts +2 -0
- package/src/util/types/DeepArray.ts +12 -0
- package/src/util/types/DeepObject.ts +16 -0
- package/src/util/types/JsonArray.ts +8 -0
- package/src/util/types/JsonDefinedPrimitive.ts +5 -0
- package/src/util/types/JsonObject.ts +8 -0
- package/src/util/types/JsonRawPrimitive.ts +7 -0
- package/src/util/types/JsonValue.ts +14 -0
- package/src/util/types/ObjectKey.ts +1 -0
- package/src/util/types/TConstructor.ts +6 -0
- package/src/util/types/TFunction.ts +5 -0
- package/src/util/types/TFunctionNoNew.ts +3 -0
- package/src/util/types/TPlainObject.ts +4 -0
- package/src/util/types/TPrimitive.ts +1 -0
- package/src/util/types/TStringParser.ts +1 -0
- package/src/util/types/TValidator.ts +3 -0
- package/src/util/validation/createTypedArrayValidator.test.ts +34 -0
- package/src/util/validation/createTypedArrayValidator.ts +25 -0
- package/src/util/validation/ensureThat.test.ts +37 -0
- package/src/util/validation/ensureThat.ts +14 -0
- package/src/util/validation/isArray.test.ts +7 -0
- package/src/util/validation/isArray.ts +1 -0
- package/src/util/validation/isBoolean.test.ts +31 -0
- package/src/util/validation/isBoolean.ts +3 -0
- package/src/util/validation/isFunction.test.ts +54 -0
- package/src/util/validation/isFunction.ts +14 -0
- package/src/util/validation/isNamedFunction.test.ts +28 -0
- package/src/util/validation/isNamedFunction.ts +8 -0
- package/src/util/validation/isNamedFunctionArray.test.ts +14 -0
- package/src/util/validation/isNamedFunctionArray.ts +5 -0
- package/src/util/validation/isObject.test.ts +57 -0
- package/src/util/validation/isObject.ts +17 -0
- package/src/util/validation/isPlainObject.test.ts +21 -0
- package/src/util/validation/isPlainObject.ts +14 -0
- package/src/util/validation/isPrimitive.ts +15 -0
- package/src/util/validation/isString.test.ts +23 -0
- package/src/util/validation/isString.ts +3 -0
- package/src/util/validation/isStringArray.test.ts +24 -0
- package/src/util/validation/isStringArray.ts +8 -0
- package/src/util/validation/isStringWithNoSpacesOrDashes.test.ts +28 -0
- package/src/util/validation/isStringWithNoSpacesOrDashes.ts +5 -0
- package/src/util/validation/numbers/isInteger.test.ts +25 -0
- package/src/util/validation/numbers/isInteger.ts +13 -0
- package/src/util/validation/numbers/isValidNumber.test.ts +20 -0
- package/src/util/validation/numbers/isValidNumber.ts +17 -0
- package/tsconfig.json +32 -0
- package/tsconfig.lib.json +18 -0
- package/tsconfig.spec.json +10 -0
- package/index.cjs.d.ts +0 -1
- package/index.cjs.js +0 -3231
- package/index.esm.js +0 -3119
- package/src/cmd/CLI.d.ts +0 -2
- package/src/cmd/DefaultHelpConfig.d.ts +0 -2
- package/src/proto/overrideCommanderPrototype.d.ts +0 -8
- package/src/util/types/TFunction.d.ts +0 -4
- package/src/util/types/TValidator.d.ts +0 -1
- /package/{src → dist/types}/core/splitCombinedArgvShorts.d.ts +0 -0
- /package/{src → dist/types}/db/JsonFile.d.ts +0 -0
- /package/{src → dist/types}/util/array/arrLast.d.ts +0 -0
- /package/{src → dist/types}/util/array/arrSome.d.ts +0 -0
- /package/{src → dist/types}/util/array/types/ArrayPredicate.d.ts +0 -0
- /package/{src → dist/types}/util/errors/ErrorParser.d.ts +0 -0
- /package/{src → dist/types}/util/fs/promptUserEditInTextEditor/IGetUserInputFromEditorOptions.d.ts +0 -0
- /package/{src → dist/types}/util/fs/readFile/readFileSafeSync.d.ts +0 -0
- /package/{src → dist/types}/util/fs/readFile/readFileSync.d.ts +0 -0
- /package/{src → dist/types}/util/fs/removeFile/removeFile.d.ts +0 -0
- /package/{src → dist/types}/util/fs/types/IReadJsonFileOptions.d.ts +0 -0
- /package/{src → dist/types}/util/fs/writeFile/writeFileSafeSync.d.ts +0 -0
- /package/{src → dist/types}/util/fs/writeFile/writeFileSync.d.ts +0 -0
- /package/{src → dist/types}/util/fs/writeJsonFile/writeJsonFileSafe.d.ts +0 -0
- /package/{src → dist/types}/util/function/funSetName.d.ts +0 -0
- /package/{src → dist/types}/util/node/execInherit.d.ts +0 -0
- /package/{src → dist/types}/util/node/formatTableForTerminal.d.ts +0 -0
- /package/{src → dist/types}/util/object/arrAssign.d.ts +0 -0
- /package/{src → dist/types}/util/object/createArrayMerger.d.ts +0 -0
- /package/{src → dist/types}/util/object/objAssign.d.ts +0 -0
- /package/{src → dist/types}/util/object/realizeLazyProperty.d.ts +0 -0
- /package/{src → dist/types}/util/os/defaultOpenInEditorCommand.d.ts +0 -0
- /package/{src → dist/types}/util/os/isOSX.d.ts +0 -0
- /package/{src → dist/types}/util/os/isVsCodeInstalled.d.ts +0 -0
- /package/{src → dist/types}/util/os/isWindows.d.ts +0 -0
- /package/{src → dist/types}/util/path/getTempDataPath.d.ts +0 -0
- /package/{src → dist/types}/util/regex/regexEscapeString.d.ts +0 -0
- /package/{src → dist/types}/util/string/strEnsureStartsWith.d.ts +0 -0
- /package/{src → dist/types}/util/string/strFirstCharToUpperCase.d.ts +0 -0
- /package/{src → dist/types}/util/string/strIsLowerCase.d.ts +0 -0
- /package/{src → dist/types}/util/string/strIsUpperCase.d.ts +0 -0
- /package/{src → dist/types}/util/string/strSplitCamelCase.d.ts +0 -0
- /package/{src → dist/types}/util/string-parsers/createBooleanParser.d.ts +0 -0
- /package/{src → dist/types}/util/string-parsers/parseBoolean.d.ts +0 -0
- /package/{src → dist/types}/util/string-parsers/parseInteger.d.ts +0 -0
- /package/{src → dist/types}/util/string-parsers/parseNumber.d.ts +0 -0
- /package/{src → dist/types}/util/string-parsers/parseString.d.ts +0 -0
- /package/{src → dist/types}/util/types/Any.d.ts +0 -0
- /package/{src → dist/types}/util/types/JsonDefinedPrimitive.d.ts +0 -0
- /package/{src → dist/types}/util/types/ObjectKey.d.ts +0 -0
- /package/{src → dist/types}/util/types/TPrimitive.d.ts +0 -0
- /package/{src → dist/types}/util/types/TStringParser.d.ts +0 -0
- /package/{src → dist/types}/util/validation/createTypedArrayValidator.d.ts +0 -0
- /package/{src → dist/types}/util/validation/isArray.d.ts +0 -0
- /package/{src → dist/types}/util/validation/isBoolean.d.ts +0 -0
- /package/{src → dist/types}/util/validation/isNamedFunctionArray.d.ts +0 -0
- /package/{src → dist/types}/util/validation/isObject.d.ts +0 -0
- /package/{src → dist/types}/util/validation/isString.d.ts +0 -0
- /package/{src → dist/types}/util/validation/isStringArray.d.ts +0 -0
- /package/{src → dist/types}/util/validation/isStringWithNoSpacesOrDashes.d.ts +0 -0
- /package/{src → dist/types}/util/validation/numbers/isInteger.d.ts +0 -0
- /package/{src → dist/types}/util/validation/numbers/isValidNumber.d.ts +0 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { OptionBuilder } from './OptionBuilder'
|
|
2
|
+
import { OptionHelpers } from './OptionHelpers'
|
|
3
|
+
|
|
4
|
+
export class OptionReader {
|
|
5
|
+
constructor(protected readonly parent: OptionBuilder) {}
|
|
6
|
+
|
|
7
|
+
get $() {
|
|
8
|
+
return this.parent.$
|
|
9
|
+
}
|
|
10
|
+
get option() {
|
|
11
|
+
return this.parent.$
|
|
12
|
+
}
|
|
13
|
+
get description() {
|
|
14
|
+
return this.$.description
|
|
15
|
+
}
|
|
16
|
+
get optional() {
|
|
17
|
+
return this.$.optional
|
|
18
|
+
}
|
|
19
|
+
get mandatory() {
|
|
20
|
+
return this.$.mandatory
|
|
21
|
+
}
|
|
22
|
+
get hidden() {
|
|
23
|
+
return this.$.hidden
|
|
24
|
+
}
|
|
25
|
+
get variadic() {
|
|
26
|
+
return this.$.variadic
|
|
27
|
+
}
|
|
28
|
+
get short() {
|
|
29
|
+
return this.$.short
|
|
30
|
+
}
|
|
31
|
+
get long() {
|
|
32
|
+
return this.$.long
|
|
33
|
+
}
|
|
34
|
+
get preset() {
|
|
35
|
+
return this.$.presetArg
|
|
36
|
+
}
|
|
37
|
+
get default() {
|
|
38
|
+
return this.$.defaultValue
|
|
39
|
+
}
|
|
40
|
+
get choices() {
|
|
41
|
+
return this.$.argChoices
|
|
42
|
+
}
|
|
43
|
+
get env() {
|
|
44
|
+
return this.$.envVar
|
|
45
|
+
}
|
|
46
|
+
get flags() {
|
|
47
|
+
return this.$.flags
|
|
48
|
+
}
|
|
49
|
+
get name() {
|
|
50
|
+
return this.$.name()
|
|
51
|
+
}
|
|
52
|
+
get attributeName() {
|
|
53
|
+
return this.$.attributeName()
|
|
54
|
+
}
|
|
55
|
+
get defaultValueDescription() {
|
|
56
|
+
return this.$.defaultValueDescription
|
|
57
|
+
}
|
|
58
|
+
get hasArgument() {
|
|
59
|
+
return OptionHelpers.hasArgument(this.parent.$)
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { JsonValue } from '../util/types/JsonValue'
|
|
2
|
+
import type { TStringParser } from '../util/types/TStringParser'
|
|
3
|
+
import type { TValidator } from '../util/types/TValidator'
|
|
4
|
+
|
|
5
|
+
export interface IConfig<Val extends JsonValue> {
|
|
6
|
+
/**
|
|
7
|
+
* The default value of the property.
|
|
8
|
+
*/
|
|
9
|
+
defaultValue: Val
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* The description of the property.
|
|
13
|
+
*/
|
|
14
|
+
description: string
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* A function that parses a string to the desired type.
|
|
18
|
+
*/
|
|
19
|
+
parse?: TStringParser<Val>
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* A function that validates the value.
|
|
23
|
+
*/
|
|
24
|
+
validate?: TValidator<Val>
|
|
25
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Any } from '../util/types/Any'
|
|
2
|
+
import type { OptionValues } from '@commander-js/extra-typings'
|
|
3
|
+
|
|
4
|
+
export interface IPreset {
|
|
5
|
+
description: string
|
|
6
|
+
presets: string[]
|
|
7
|
+
args: Any[]
|
|
8
|
+
options: OptionValues
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export interface IPresetPartial {
|
|
12
|
+
description: string
|
|
13
|
+
presets?: string[]
|
|
14
|
+
args?: Any[]
|
|
15
|
+
options?: OptionValues
|
|
16
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { arrLast } from './arrLast'
|
|
2
|
+
|
|
3
|
+
describe(arrLast.name, () => {
|
|
4
|
+
it('should return the last element of a non-empty array', () => {
|
|
5
|
+
const array = [1, 2, 3]
|
|
6
|
+
const result = arrLast(array)
|
|
7
|
+
expect(result).toBe(3)
|
|
8
|
+
})
|
|
9
|
+
|
|
10
|
+
it('should throw an error when called with an empty array', () => {
|
|
11
|
+
expect(() => arrLast([])).toThrow('Cannot get last element of empty array.')
|
|
12
|
+
})
|
|
13
|
+
|
|
14
|
+
it('should return the last element of an array with a single element', () => {
|
|
15
|
+
const array = ['a']
|
|
16
|
+
const result = arrLast(array)
|
|
17
|
+
expect(result).toBe('a')
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
it('should return the last element of an array with multiple elements of different types', () => {
|
|
21
|
+
const array = [1, 'a', false, null]
|
|
22
|
+
const result = arrLast(array)
|
|
23
|
+
expect(result).toBe(null)
|
|
24
|
+
})
|
|
25
|
+
})
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Returns the last element of an array.
|
|
3
|
+
* Throws an error if the array is empty.
|
|
4
|
+
* @template T The type of elements in the array.
|
|
5
|
+
* @param array The array to get the last element from.
|
|
6
|
+
* @returns The last element of the array.
|
|
7
|
+
* @throws If the array is empty.
|
|
8
|
+
* @example const numbers = [1, 2, 3, 4, 5];
|
|
9
|
+
* const lastNumber = arrLast(numbers);
|
|
10
|
+
* //=> 5
|
|
11
|
+
*/
|
|
12
|
+
export function arrLast<T>(array: T[]): T {
|
|
13
|
+
if (!array.length) throw new Error('Cannot get last element of empty array.')
|
|
14
|
+
return array[array.length - 1]
|
|
15
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { arrSome } from './arrSome'
|
|
2
|
+
|
|
3
|
+
describe('arrSome', () => {
|
|
4
|
+
it('example', () => {
|
|
5
|
+
const arr = ['hello', 'world']
|
|
6
|
+
expect(
|
|
7
|
+
arrSome(arr, (element: any) => {
|
|
8
|
+
return element.length > 5
|
|
9
|
+
})
|
|
10
|
+
).toBe(false)
|
|
11
|
+
expect(
|
|
12
|
+
arrSome(arr, (element: any) => {
|
|
13
|
+
return element.length === 5
|
|
14
|
+
})
|
|
15
|
+
).toBe(true)
|
|
16
|
+
expect(
|
|
17
|
+
arrSome([], (element: any) => {
|
|
18
|
+
return element.length === 5
|
|
19
|
+
})
|
|
20
|
+
).toBe(false)
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
it('callback is passed all correct values', () => {
|
|
24
|
+
const arr = [1, 2, 3, 4, 5]
|
|
25
|
+
const indexCheck = new Array(arr.length)
|
|
26
|
+
arrSome(arr, (element: any, i: number, array: Array<any>) => {
|
|
27
|
+
expect(arr === array).toBe(true)
|
|
28
|
+
expect(arr[i] === array[i]).toBe(true)
|
|
29
|
+
expect(arr[i] === element).toBe(true)
|
|
30
|
+
expect(Number.isInteger(i)).toBe(true)
|
|
31
|
+
indexCheck[i] = arr[i]
|
|
32
|
+
return false
|
|
33
|
+
})
|
|
34
|
+
expect(indexCheck).toStrictEqual(arr)
|
|
35
|
+
})
|
|
36
|
+
|
|
37
|
+
it('should return false if the array is empty', () => {
|
|
38
|
+
const input: number[] = []
|
|
39
|
+
const predicate = (num: number) => num > 0
|
|
40
|
+
|
|
41
|
+
const result = arrSome(input, predicate)
|
|
42
|
+
|
|
43
|
+
expect(result).toBe(false)
|
|
44
|
+
})
|
|
45
|
+
|
|
46
|
+
it('should return false if no element satisfies the predicate', () => {
|
|
47
|
+
const input = [1, 2, 3, 4, 5]
|
|
48
|
+
const predicate = (num: number) => num > 5
|
|
49
|
+
|
|
50
|
+
const result = arrSome(input, predicate)
|
|
51
|
+
|
|
52
|
+
expect(result).toBe(false)
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
it('should return true if at least one element satisfies the predicate', () => {
|
|
56
|
+
const input = [1, 2, 3, 4, 5]
|
|
57
|
+
const predicate = (num: number) => num > 3
|
|
58
|
+
|
|
59
|
+
const result = arrSome(input, predicate)
|
|
60
|
+
|
|
61
|
+
expect(result).toBe(true)
|
|
62
|
+
})
|
|
63
|
+
|
|
64
|
+
it('should pass the index and the array to the predicate function', () => {
|
|
65
|
+
const input = [1, 2, 3, 4, 5]
|
|
66
|
+
const predicate = jest.fn((num: number, index: number, arr: number[]) => false)
|
|
67
|
+
|
|
68
|
+
const result = arrSome(input, predicate)
|
|
69
|
+
|
|
70
|
+
expect(result).toBe(false)
|
|
71
|
+
expect(predicate).toHaveBeenCalledTimes(5)
|
|
72
|
+
expect(predicate).toHaveBeenCalledWith(1, 0, input)
|
|
73
|
+
expect(predicate).toHaveBeenCalledWith(2, 1, input)
|
|
74
|
+
expect(predicate).toHaveBeenCalledWith(3, 2, input)
|
|
75
|
+
expect(predicate).toHaveBeenCalledWith(4, 3, input)
|
|
76
|
+
expect(predicate).toHaveBeenCalledWith(5, 4, input)
|
|
77
|
+
})
|
|
78
|
+
})
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ArrayPredicate } from './types/ArrayPredicate'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Checks if at least one element in the array satisfies the provided predicate.
|
|
5
|
+
* @param predicate The predicate function to apply to each element.
|
|
6
|
+
* @template T The type of elements in the input array.
|
|
7
|
+
* @returns Returns `true` if at least one element in the array passes the test implemented by the provided function, otherwise `false`.
|
|
8
|
+
* @param input The array to check.
|
|
9
|
+
* @example ```ts
|
|
10
|
+
* const numbers = [1, 2, 3, 4, 5];
|
|
11
|
+
* const isEven = (num) => num % 2 === 0;
|
|
12
|
+
* arrSome(numbers, isEven);
|
|
13
|
+
* //=> true
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
export function arrSome<T>(input: Array<T>, predicate: ArrayPredicate<T>): boolean {
|
|
17
|
+
for (let i = 0, len = input.length; i < len; i++) {
|
|
18
|
+
if (predicate(input[i], i, input) === true) {
|
|
19
|
+
return true
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return false
|
|
23
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definition for a predicate function that operates on arrays.
|
|
3
|
+
* @remarks This type is useful when you want to create a function that can be used with methods like `Array.prototype.filter`.
|
|
4
|
+
* @typeparam T - The type of elements in the array.
|
|
5
|
+
* @param value - The current element being processed in the array.
|
|
6
|
+
* @param index - The index of the current element being processed in the array.
|
|
7
|
+
* @param array - The array `ArrayPredicate` was called upon.
|
|
8
|
+
* @returns A boolean indicating whether the current element passes the test.
|
|
9
|
+
*/
|
|
10
|
+
export type ArrayPredicate<T> = (value: T, index: number, array: T[]) => boolean
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import { JsonDB } from './JsonDB'
|
|
2
|
+
import { readJsonFileSafeSync } from '../fs/readJsonFile/readJsonFileSafeSync'
|
|
3
|
+
import { writeJsonFileSafe } from '../fs/writeJsonFile/writeJsonFileSafe'
|
|
4
|
+
|
|
5
|
+
jest.mock('../fs/readJsonFile/readJsonFileSafeSync', () => ({
|
|
6
|
+
...jest.requireActual('../fs/readJsonFile/readJsonFileSafeSync'),
|
|
7
|
+
readJsonFileSafeSync: jest.fn(),
|
|
8
|
+
}))
|
|
9
|
+
|
|
10
|
+
jest.mock('../fs/writeJsonFile/writeJsonFileSafe', () => ({
|
|
11
|
+
...jest.requireActual('../fs/writeJsonFile/writeJsonFileSafe'),
|
|
12
|
+
writeJsonFileSafe: jest.fn(),
|
|
13
|
+
}))
|
|
14
|
+
|
|
15
|
+
describe('JsonDB', () => {
|
|
16
|
+
let jsonDB: JsonDB
|
|
17
|
+
const filepath = 'test.json'
|
|
18
|
+
const readJsonFileSafeSyncMock = readJsonFileSafeSync as jest.Mock
|
|
19
|
+
|
|
20
|
+
beforeEach(() => {
|
|
21
|
+
jsonDB = new JsonDB(filepath)
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
afterEach(() => {
|
|
25
|
+
jest.clearAllMocks()
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
describe('constructor', () => {
|
|
29
|
+
it('should initialize data with an empty object if the file does not exist', () => {
|
|
30
|
+
readJsonFileSafeSyncMock.mockReturnValueOnce(null)
|
|
31
|
+
const jsonDB = new JsonDB(filepath)
|
|
32
|
+
expect(jsonDB.get()).toEqual({})
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
it('should initialize data with the contents of the file if it exists', () => {
|
|
36
|
+
const data = { key: 'value' }
|
|
37
|
+
readJsonFileSafeSyncMock.mockReturnValueOnce(data)
|
|
38
|
+
const jsonDB = new JsonDB(filepath)
|
|
39
|
+
expect(jsonDB.get()).toEqual(data)
|
|
40
|
+
})
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
describe('setFilepath', () => {
|
|
44
|
+
it('should set the filepath property', () => {
|
|
45
|
+
const newFilepath = 'new-test.json'
|
|
46
|
+
jsonDB.setFilepath(newFilepath)
|
|
47
|
+
expect(jsonDB['filepath']).toEqual(newFilepath)
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
it('should save the data to the JSON file if save is true', () => {
|
|
51
|
+
const newFilepath = 'new-test.json'
|
|
52
|
+
jsonDB.setFilepath(newFilepath, true)
|
|
53
|
+
expect(writeJsonFileSafe).toHaveBeenCalledWith(newFilepath, jsonDB.get(), { spaces: jsonDB['indents'] })
|
|
54
|
+
})
|
|
55
|
+
|
|
56
|
+
it('should not save the data to the JSON file if save is false', () => {
|
|
57
|
+
const newFilepath = 'new-test.json'
|
|
58
|
+
jsonDB.setFilepath(newFilepath, false)
|
|
59
|
+
expect(writeJsonFileSafe).not.toHaveBeenCalled()
|
|
60
|
+
})
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
describe('save', () => {
|
|
64
|
+
it('should save the data to the JSON file', async () => {
|
|
65
|
+
await jsonDB.save()
|
|
66
|
+
expect(writeJsonFileSafe).toHaveBeenCalledWith(filepath, jsonDB.get(), { spaces: jsonDB['indents'] })
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
it('should save the data to the JSON file with the specified indents', async () => {
|
|
70
|
+
const indents = 2
|
|
71
|
+
await jsonDB.save(indents)
|
|
72
|
+
expect(writeJsonFileSafe).toHaveBeenCalledWith(filepath, jsonDB.get(), { spaces: indents })
|
|
73
|
+
})
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
describe('set', () => {
|
|
77
|
+
it('should set the data to the specified value if prefix is not provided', () => {
|
|
78
|
+
const value = { key: 'value' }
|
|
79
|
+
jsonDB.set(undefined, value)
|
|
80
|
+
expect(jsonDB.get()).toEqual(value)
|
|
81
|
+
})
|
|
82
|
+
|
|
83
|
+
it('should set the value at the specified prefix', () => {
|
|
84
|
+
const prefix = 'key'
|
|
85
|
+
const value = { key: 'value' }
|
|
86
|
+
jsonDB.set(prefix, value)
|
|
87
|
+
expect(jsonDB.get(prefix)).toEqual(value)
|
|
88
|
+
})
|
|
89
|
+
|
|
90
|
+
it('should create nested objects if the prefix contains dot-separated keys', () => {
|
|
91
|
+
const prefix = 'key1.key2.key3'
|
|
92
|
+
const value = 'value'
|
|
93
|
+
jsonDB.set(prefix, value)
|
|
94
|
+
expect(jsonDB.get()).toEqual({ key1: { key2: { key3: value } } })
|
|
95
|
+
})
|
|
96
|
+
|
|
97
|
+
it('should save the data to the JSON file if save is true', () => {
|
|
98
|
+
const value = { key: 'value' }
|
|
99
|
+
jsonDB.set(undefined, value, true)
|
|
100
|
+
expect(writeJsonFileSafe).toHaveBeenCalledWith(filepath, jsonDB.get(), { spaces: jsonDB['indents'] })
|
|
101
|
+
})
|
|
102
|
+
|
|
103
|
+
it('should not save the data to the JSON file if save is false', () => {
|
|
104
|
+
const value = { key: 'value' }
|
|
105
|
+
jsonDB.set(undefined, value, false)
|
|
106
|
+
expect(writeJsonFileSafe).not.toHaveBeenCalled()
|
|
107
|
+
})
|
|
108
|
+
})
|
|
109
|
+
|
|
110
|
+
describe('get', () => {
|
|
111
|
+
it('should return the value associated with the key', () => {
|
|
112
|
+
const prefix = 'key'
|
|
113
|
+
const value = { key: 'value' }
|
|
114
|
+
jsonDB.set(prefix, value)
|
|
115
|
+
const result = jsonDB.get(prefix)
|
|
116
|
+
expect(result).toEqual(value)
|
|
117
|
+
})
|
|
118
|
+
|
|
119
|
+
it('should throw an error if no entry is found at the specified key', () => {
|
|
120
|
+
const prefix = 'key'
|
|
121
|
+
expect(() => jsonDB.get(prefix)).toThrowError(`No entry at '${prefix}'`)
|
|
122
|
+
})
|
|
123
|
+
|
|
124
|
+
it('should clone the value before returning it', () => {
|
|
125
|
+
const prefix = 'key'
|
|
126
|
+
const value = { key: 'value' }
|
|
127
|
+
jsonDB.set(prefix, value)
|
|
128
|
+
const result = jsonDB.get(prefix)
|
|
129
|
+
expect(result).not.toBe(value)
|
|
130
|
+
})
|
|
131
|
+
})
|
|
132
|
+
|
|
133
|
+
describe('getSafe', () => {
|
|
134
|
+
it('should return the value associated with the key', () => {
|
|
135
|
+
const prefix = 'key'
|
|
136
|
+
const value = { key: 'value' }
|
|
137
|
+
jsonDB.set(prefix, value)
|
|
138
|
+
const result = jsonDB.getSafe(prefix)
|
|
139
|
+
expect(result).toEqual(value)
|
|
140
|
+
})
|
|
141
|
+
|
|
142
|
+
it('should return undefined if no entry is found at the specified key', () => {
|
|
143
|
+
const prefix = 'key'
|
|
144
|
+
const result = jsonDB.getSafe(prefix)
|
|
145
|
+
expect(result).toBeUndefined()
|
|
146
|
+
})
|
|
147
|
+
|
|
148
|
+
it('should clone the value before returning it', () => {
|
|
149
|
+
const prefix = 'key'
|
|
150
|
+
const value = { key: 'value' }
|
|
151
|
+
jsonDB.set(prefix, value)
|
|
152
|
+
const result = jsonDB.getSafe(prefix)
|
|
153
|
+
expect(result).not.toBe(value)
|
|
154
|
+
})
|
|
155
|
+
})
|
|
156
|
+
|
|
157
|
+
describe('has', () => {
|
|
158
|
+
it('should return true if the key exists', () => {
|
|
159
|
+
const prefix = 'key'
|
|
160
|
+
const value = { key: 'value' }
|
|
161
|
+
jsonDB.set(prefix, value)
|
|
162
|
+
const result = jsonDB.has(prefix)
|
|
163
|
+
expect(result).toBe(true)
|
|
164
|
+
})
|
|
165
|
+
|
|
166
|
+
it('should return false if the key does not exist', () => {
|
|
167
|
+
const prefix = 'key'
|
|
168
|
+
const result = jsonDB.has(prefix)
|
|
169
|
+
expect(result).toBe(false)
|
|
170
|
+
})
|
|
171
|
+
})
|
|
172
|
+
|
|
173
|
+
describe('delete', () => {
|
|
174
|
+
it('should delete the data if prefix is not provided', () => {
|
|
175
|
+
const prefix = 'key'
|
|
176
|
+
const value = { key: 'value' }
|
|
177
|
+
jsonDB.set(prefix, value)
|
|
178
|
+
jsonDB.delete()
|
|
179
|
+
expect(jsonDB.get()).toEqual({})
|
|
180
|
+
})
|
|
181
|
+
|
|
182
|
+
it('should delete the value at the specified prefix', () => {
|
|
183
|
+
const prefix = 'key'
|
|
184
|
+
const value = { key: 'value' }
|
|
185
|
+
jsonDB.set(prefix, value)
|
|
186
|
+
jsonDB.delete(prefix)
|
|
187
|
+
expect(jsonDB.getSafe(prefix)).toBeUndefined()
|
|
188
|
+
})
|
|
189
|
+
|
|
190
|
+
it('should delete nested objects if the prefix contains dot-separated keys', () => {
|
|
191
|
+
const prefix = 'key1.key2.key3'
|
|
192
|
+
const value = { key: 'value' }
|
|
193
|
+
jsonDB.set(prefix, value)
|
|
194
|
+
jsonDB.delete(prefix)
|
|
195
|
+
expect(jsonDB.getSafe(prefix)).toBeUndefined()
|
|
196
|
+
})
|
|
197
|
+
|
|
198
|
+
it('should save the data to the JSON file if save is true', () => {
|
|
199
|
+
const prefix = 'key'
|
|
200
|
+
const value = { key: 'value' }
|
|
201
|
+
jsonDB.set(prefix, value)
|
|
202
|
+
jsonDB.delete(prefix, true)
|
|
203
|
+
expect(writeJsonFileSafe).toHaveBeenCalledWith(filepath, jsonDB.get(), { spaces: jsonDB['indents'] })
|
|
204
|
+
})
|
|
205
|
+
|
|
206
|
+
it('should not save the data to the JSON file if save is false', () => {
|
|
207
|
+
const prefix = 'key'
|
|
208
|
+
const value = { key: 'value' }
|
|
209
|
+
jsonDB.set(prefix, value, false)
|
|
210
|
+
jsonDB.delete(prefix, false)
|
|
211
|
+
expect(writeJsonFileSafe).not.toHaveBeenCalled()
|
|
212
|
+
})
|
|
213
|
+
})
|
|
214
|
+
})
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { ensureThat } from '../validation/ensureThat'
|
|
2
|
+
import { isObject } from '../validation/isObject'
|
|
3
|
+
import type { JsonObject } from '../types/JsonObject'
|
|
4
|
+
import type { JsonValue } from '../types/JsonValue'
|
|
5
|
+
import { readJsonFileSafeSync } from '../fs/readJsonFile/readJsonFileSafeSync'
|
|
6
|
+
import { writeJsonFileSafe } from '../fs/writeJsonFile/writeJsonFileSafe'
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Represents a simple JSON file database.
|
|
10
|
+
*/
|
|
11
|
+
export class JsonDB {
|
|
12
|
+
/**
|
|
13
|
+
* The data stored in the JSON database.
|
|
14
|
+
*/
|
|
15
|
+
protected data: JsonObject
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Creates a new instance of the JsonDB class.
|
|
19
|
+
* @param filepath - The filepath where the data file is stored or to be stored.
|
|
20
|
+
*/
|
|
21
|
+
constructor(protected filepath: string, protected indents = 0) {
|
|
22
|
+
this.data = readJsonFileSafeSync(this.filepath) ?? {}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Saves the data to the JSON file.
|
|
27
|
+
*/
|
|
28
|
+
async save(indents = this.indents): Promise<void> {
|
|
29
|
+
return await writeJsonFileSafe(this.filepath, this.data, { spaces: indents })
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Sets the filepath of the JSON file.
|
|
34
|
+
* @param filepath - The new filepath.
|
|
35
|
+
*/
|
|
36
|
+
setFilepath(filepath: string, save = true): void {
|
|
37
|
+
if (this.filepath === filepath) return
|
|
38
|
+
this.filepath = filepath
|
|
39
|
+
if (save) this.save()
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Sets a value in the JSON database.
|
|
44
|
+
* @param prefix - Object path prefix as dot-separated keys.
|
|
45
|
+
* @param value - The value to set.
|
|
46
|
+
* @param save - Whether to save the data to the JSON file.
|
|
47
|
+
*/
|
|
48
|
+
set(prefix?: string, value: JsonValue = {}, save = true): void {
|
|
49
|
+
if (!prefix) {
|
|
50
|
+
this.data = ensureThat(value, isObject) as JsonObject
|
|
51
|
+
} else {
|
|
52
|
+
const keys = prefix.split('.')
|
|
53
|
+
const lastKey = keys.pop() as string
|
|
54
|
+
let node: JsonObject = this.data
|
|
55
|
+
for (const key of keys) {
|
|
56
|
+
if (!Object.hasOwn(node, key)) {
|
|
57
|
+
node[key] = {}
|
|
58
|
+
}
|
|
59
|
+
node = node[key] as JsonObject
|
|
60
|
+
}
|
|
61
|
+
node[lastKey] = this.cloneDeep(value)
|
|
62
|
+
}
|
|
63
|
+
if (save) this.save()
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Gets a value from the JSON database.
|
|
68
|
+
* @param prefix - Object path prefix as dot-separated keys.
|
|
69
|
+
* @returns The value associated with the key.
|
|
70
|
+
* @throws An error if no entry is found at the specified key.
|
|
71
|
+
*/
|
|
72
|
+
get<T = JsonValue>(prefix?: string): T {
|
|
73
|
+
const value = this.getSafe(prefix)
|
|
74
|
+
if (value === undefined) throw new Error(`No entry at '${prefix}'`)
|
|
75
|
+
return this.cloneDeep(value) as T
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Gets a value from the JSON database safely.
|
|
80
|
+
* @param prefix - Object path prefix as dot-separated keys.
|
|
81
|
+
* @returns The value associated with the key, or undefined if no entry is found.
|
|
82
|
+
*/
|
|
83
|
+
getSafe<T = JsonValue>(prefix?: string): T | undefined {
|
|
84
|
+
if (!prefix) return this.cloneDeep(this.data) as T
|
|
85
|
+
const keys = prefix.split('.')
|
|
86
|
+
let node: JsonObject = this.data
|
|
87
|
+
for (const key of keys) {
|
|
88
|
+
if (!Object.hasOwn(node, key)) {
|
|
89
|
+
return undefined
|
|
90
|
+
}
|
|
91
|
+
node = node[key] as JsonObject
|
|
92
|
+
}
|
|
93
|
+
return this.cloneDeep(node) as T
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Checks if a key exists in the JSON database.
|
|
98
|
+
* @param prefix - Object path prefix as dot-separated keys.
|
|
99
|
+
* @returns True if the key exists, false otherwise.
|
|
100
|
+
*/
|
|
101
|
+
has(prefix?: string): boolean {
|
|
102
|
+
if (!prefix) return true
|
|
103
|
+
return this.getSafe(prefix) !== undefined
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Deletes a value from the JSON database.
|
|
108
|
+
* @param prefix - Object path prefix as dot-separated keys.
|
|
109
|
+
* @param save - Whether to save the data to the JSON file.
|
|
110
|
+
*/
|
|
111
|
+
delete(prefix?: string, save = true): void {
|
|
112
|
+
if (!prefix) {
|
|
113
|
+
this.data = {}
|
|
114
|
+
} else {
|
|
115
|
+
const keys = prefix.split('.')
|
|
116
|
+
const lastKey = keys.pop() as string
|
|
117
|
+
let node: JsonObject = this.data
|
|
118
|
+
for (const key of keys) {
|
|
119
|
+
if (!Object.hasOwn(node, key)) {
|
|
120
|
+
return
|
|
121
|
+
}
|
|
122
|
+
node = node[key] as JsonObject
|
|
123
|
+
}
|
|
124
|
+
delete node[lastKey]
|
|
125
|
+
}
|
|
126
|
+
if (save) this.save()
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Creates a deep clone of an object.
|
|
131
|
+
* @param obj - The object to clone.
|
|
132
|
+
* @returns The cloned object.
|
|
133
|
+
*/
|
|
134
|
+
protected cloneDeep<T extends JsonValue>(obj: T): T {
|
|
135
|
+
if (typeof obj !== 'object') return obj
|
|
136
|
+
return JSON.parse(JSON.stringify(obj)) as T
|
|
137
|
+
}
|
|
138
|
+
}
|