@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,218 @@
|
|
|
1
|
+
import type { Any } from '../util/types/Any'
|
|
2
|
+
import { defaultOpenInEditorCommand } from '../util/os/defaultOpenInEditorCommand'
|
|
3
|
+
import { JsonFile } from './JsonFile'
|
|
4
|
+
import type { JsonValue } from '../util/types/JsonValue'
|
|
5
|
+
import { promptUserEditJsonInTextEditorSync } from '../util/fs/promptUserEditInTextEditor/promptUserEditJsonInTextEditorSync'
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* A class that represents a section of the JSON file used as a simple database.
|
|
9
|
+
*/
|
|
10
|
+
export abstract class AbstractJsonFileSection<Val = JsonValue> {
|
|
11
|
+
/**
|
|
12
|
+
* Indicates whether the section has been initialized.
|
|
13
|
+
*/
|
|
14
|
+
protected isInitialized = false
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* The default values for the section.
|
|
18
|
+
*/
|
|
19
|
+
readonly defaultValues: Record<string, Val> = {}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* The base string used as a prefix for the section.
|
|
23
|
+
*/
|
|
24
|
+
readonly prefixBaseString: string
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Creates an instance of AbstractJsonFileSection.
|
|
28
|
+
* @param file - The parent JsonFile instance.
|
|
29
|
+
* @param name - The name of the section.
|
|
30
|
+
* @param keysAreFixed - Indicates whether the keys in the section are fixed.
|
|
31
|
+
*/
|
|
32
|
+
constructor(readonly file: JsonFile, protected readonly name: string, protected readonly keysAreFixed: boolean) {
|
|
33
|
+
this.prefixBaseString = file.cmd.getPrefixArray().join('_')
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Asserts that a key-value pair is valid.
|
|
38
|
+
* @param key - The key to assert.
|
|
39
|
+
* @param value - The value to assert.
|
|
40
|
+
*/
|
|
41
|
+
abstract assertValid(key: string, value: Val): void
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Defines a property for the section.
|
|
45
|
+
* @param key - The key of the property.
|
|
46
|
+
* @param options - The options for the property.
|
|
47
|
+
*/
|
|
48
|
+
abstract defineProperty(key: string, options: Any): void
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Initializes the section.
|
|
52
|
+
* @param save - Indicates whether to save the section after initialization.
|
|
53
|
+
* @returns A string if an error occurred during initialization, otherwise void.
|
|
54
|
+
*/
|
|
55
|
+
abstract initialize(save?: boolean): void | string
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* The JsonDB associated with the section.
|
|
59
|
+
*/
|
|
60
|
+
get db() {
|
|
61
|
+
return this.file.db
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* The CommandBuilder associated with the section.
|
|
66
|
+
*/
|
|
67
|
+
get cmd() {
|
|
68
|
+
return this.file.cmd
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Saves the section.
|
|
73
|
+
* @returns A promise that resolves when the section is saved.
|
|
74
|
+
*/
|
|
75
|
+
async save() {
|
|
76
|
+
return await this.db.save()
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Gets the object path prefix as dot-separated keys for this section of the JSON file database.
|
|
81
|
+
* @param key - An optional key to append to the prefix path.
|
|
82
|
+
* @returns The object path prefix.
|
|
83
|
+
* @throws An error if the keys are fixed and the specified key does not exist in the default values.
|
|
84
|
+
*/
|
|
85
|
+
prefix(key?: string) {
|
|
86
|
+
if (this.keysAreFixed && key && !Object.hasOwn(this.defaultValues, key)) {
|
|
87
|
+
throw new Error(`No entry with key '${key}'`)
|
|
88
|
+
}
|
|
89
|
+
return this.prefixBaseString + '.' + this.name + (key ? '.' + key : '')
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Gets the value associated with the specified key.
|
|
94
|
+
* @param key - The key to get the value for.
|
|
95
|
+
* @returns The value associated with the key.
|
|
96
|
+
*/
|
|
97
|
+
get<T extends Val = Val>(key: string): T {
|
|
98
|
+
this.initialize(false)
|
|
99
|
+
return this.db.getSafe<T>(this.prefix(key)) ?? (this.defaultValues[key] as T)
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Gets all the values in the section.
|
|
104
|
+
* @returns All the values in the section.
|
|
105
|
+
*/
|
|
106
|
+
getAll() {
|
|
107
|
+
this.initialize(false)
|
|
108
|
+
return (this.db.getSafe(this.prefix()) ?? JSON.parse(JSON.stringify(this.defaultValues))) as Record<string, Val>
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Gets the keys in the section.
|
|
113
|
+
* @returns The keys in the section.
|
|
114
|
+
*/
|
|
115
|
+
get keys() {
|
|
116
|
+
// if (this.keysAreFixed) return Object.keys(this.defaultValues)
|
|
117
|
+
return Object.keys(this.getAll())
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Gets the number of keys in the section.
|
|
122
|
+
* @returns The number of keys in the section.
|
|
123
|
+
*/
|
|
124
|
+
count() {
|
|
125
|
+
return this.keys.length
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Sets the value associated with the specified key.
|
|
130
|
+
* @param key - The key to set the value for.
|
|
131
|
+
* @param value - The value to set.
|
|
132
|
+
* @param save - Indicates whether to save the section after setting the value.
|
|
133
|
+
*/
|
|
134
|
+
set(key: string, value: Val, save = true) {
|
|
135
|
+
this.initialize()
|
|
136
|
+
this.assertValid(key, value)
|
|
137
|
+
this.db.set(this.prefix(key), value as JsonValue, save)
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Sets all the values in the section.
|
|
142
|
+
* @param values - The values to set.
|
|
143
|
+
* @param save - Indicates whether to save the section after setting the values.
|
|
144
|
+
*/
|
|
145
|
+
setAll(values: typeof this.defaultValues, save = true) {
|
|
146
|
+
const original = this.getAll()
|
|
147
|
+
for (const [key, value] of Object.entries(values)) {
|
|
148
|
+
if (value === original[key]) continue
|
|
149
|
+
if (JSON.stringify(value) === JSON.stringify(original[key])) continue
|
|
150
|
+
this.set(key, value, false)
|
|
151
|
+
}
|
|
152
|
+
if (!this.keysAreFixed) {
|
|
153
|
+
for (const name of Object.keys(original)) {
|
|
154
|
+
if (Object.hasOwn(values, name)) continue
|
|
155
|
+
this.delete(name, false)
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
if (save) this.save()
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Updates the value associated with the specified key.
|
|
163
|
+
* @param key - The key to set the value for.
|
|
164
|
+
* @param callback - The callback function that returns the new value.
|
|
165
|
+
* @param save - Indicates whether to save the section after setting the value.
|
|
166
|
+
*/
|
|
167
|
+
update(key: string, callback: (val: Val, key: string) => Val, save = true) {
|
|
168
|
+
this.set(key, callback(this.get(key), key), save)
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Resets the value associated with the specified key to its default value.
|
|
173
|
+
* @param key - The key to reset.
|
|
174
|
+
* @param save - Indicates whether to save the section after resetting the value.
|
|
175
|
+
*/
|
|
176
|
+
reset(key: string, save = true) {
|
|
177
|
+
this.set(key, this.defaultValues[key], save)
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Resets all the values in the section to their default values.
|
|
182
|
+
* @param save - Indicates whether to save the section after resetting the values.
|
|
183
|
+
*/
|
|
184
|
+
resetAll(save = true) {
|
|
185
|
+
this.setAll(this.defaultValues, save)
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Deletes the value associated with the specified key.
|
|
190
|
+
* @param key - The key to delete.
|
|
191
|
+
* @param save - Indicates whether to save the section after deleting the value.
|
|
192
|
+
*/
|
|
193
|
+
delete(key: string, save = true) {
|
|
194
|
+
this.initialize()
|
|
195
|
+
this.db.delete(this.prefix(key), save)
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* Deletes all the values in the section.
|
|
200
|
+
* @param save - Indicates whether to save the section after deleting the values.
|
|
201
|
+
*/
|
|
202
|
+
deleteAll(save = true) {
|
|
203
|
+
for (const key of this.keys) {
|
|
204
|
+
this.delete(key, false)
|
|
205
|
+
}
|
|
206
|
+
if (save) this.save()
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* Edits the values in the section using a text editor.
|
|
211
|
+
* @param editor - The text editor to use. If not specified, the default text editor command will be used.
|
|
212
|
+
*/
|
|
213
|
+
edit(editor?: string) {
|
|
214
|
+
const original = this.getAll()
|
|
215
|
+
const parsed = promptUserEditJsonInTextEditorSync(original as JsonValue, editor || defaultOpenInEditorCommand())
|
|
216
|
+
this.setAll(parsed as Record<string, Val>)
|
|
217
|
+
}
|
|
218
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { AppDataSection } from './AppDataSection'
|
|
2
|
+
import { CommandBuilder } from '../cmd/CommandBuilder'
|
|
3
|
+
import { JsonFile } from './JsonFile'
|
|
4
|
+
|
|
5
|
+
describe(AppDataSection.name, () => {
|
|
6
|
+
let file: JsonFile
|
|
7
|
+
let section: AppDataSection
|
|
8
|
+
|
|
9
|
+
beforeEach(() => {
|
|
10
|
+
new CommandBuilder('t', (c) => {
|
|
11
|
+
file = c.db
|
|
12
|
+
section = file.appData
|
|
13
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
14
|
+
jest.spyOn(file.db, 'save').mockImplementation((() => {}) as any)
|
|
15
|
+
})
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
describe('constructor', () => {
|
|
19
|
+
it('should create an instance of AppDataSection', () => {
|
|
20
|
+
expect(section).toBeInstanceOf(AppDataSection)
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
it('should set the file property', () => {
|
|
24
|
+
expect(section.file).toBe(file)
|
|
25
|
+
})
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
describe('assertValid', () => {
|
|
29
|
+
it('should do nothing', () => {
|
|
30
|
+
expect(section.assertValid()).toBeUndefined()
|
|
31
|
+
})
|
|
32
|
+
})
|
|
33
|
+
|
|
34
|
+
describe('defineProperty', () => {
|
|
35
|
+
it('should define a property for the section', () => {
|
|
36
|
+
section.defineProperty('key', 'value')
|
|
37
|
+
expect(section.defaultValues['key']).toBe('value')
|
|
38
|
+
})
|
|
39
|
+
|
|
40
|
+
it('should clone value', () => {
|
|
41
|
+
const value = { a: 'value' }
|
|
42
|
+
section.defineProperty('key', value)
|
|
43
|
+
expect(section.defaultValues['key']).not.toBe(value)
|
|
44
|
+
expect(section.defaultValues['key']).toEqual(value)
|
|
45
|
+
})
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
describe('initialize', () => {
|
|
49
|
+
it('should do nothing if the section is already initialized', () => {
|
|
50
|
+
section.initialize()
|
|
51
|
+
const spy = jest.spyOn(section.db, 'getSafe')
|
|
52
|
+
section.initialize()
|
|
53
|
+
expect(spy).not.toHaveBeenCalled()
|
|
54
|
+
})
|
|
55
|
+
|
|
56
|
+
it('should set the values if the section is not initialized', () => {
|
|
57
|
+
section.defineProperty('key', 'value')
|
|
58
|
+
section.initialize()
|
|
59
|
+
expect(section.db.getSafe(section.prefix())).toEqual({ key: 'value' })
|
|
60
|
+
})
|
|
61
|
+
|
|
62
|
+
it('should set the values and save the section if save is true', () => {
|
|
63
|
+
section.defineProperty('key', 'value')
|
|
64
|
+
const spy = jest.spyOn(section.db, 'set')
|
|
65
|
+
section.initialize(true)
|
|
66
|
+
expect(spy).toBeCalledWith(section.prefix(), { key: 'value' }, true)
|
|
67
|
+
})
|
|
68
|
+
})
|
|
69
|
+
})
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { AbstractJsonFileSection } from './AbstractJsonFileSection'
|
|
2
|
+
import { JsonFile } from './JsonFile'
|
|
3
|
+
import type { JsonValue } from '../util/types/JsonValue'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* A class that represents the appdata section of the JSON file used as simple database.
|
|
7
|
+
*/
|
|
8
|
+
export class AppDataSection<Val extends JsonValue = JsonValue> extends AbstractJsonFileSection<Val> {
|
|
9
|
+
/**
|
|
10
|
+
* Creates an instance of AppDataSection.
|
|
11
|
+
* @param file - The parent JsonFile instance.
|
|
12
|
+
* @param name - The name of the section.
|
|
13
|
+
*/
|
|
14
|
+
constructor(file: JsonFile, name: string) {
|
|
15
|
+
super(file, name, false)
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Does nothing
|
|
20
|
+
*/
|
|
21
|
+
override assertValid() {
|
|
22
|
+
return
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Defines a property for the section.
|
|
27
|
+
* @param key - The key of the property.
|
|
28
|
+
*/
|
|
29
|
+
override defineProperty(key: string, value: Val) {
|
|
30
|
+
if (typeof value === 'object') value = JSON.parse(JSON.stringify(value)) as Val
|
|
31
|
+
this.defaultValues[key] = value
|
|
32
|
+
this.isInitialized = false
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Initializes the section.
|
|
37
|
+
* @param save - Indicates whether to save the section after initialization.
|
|
38
|
+
* @returns A string if an error occurred during initialization, otherwise void.
|
|
39
|
+
*/
|
|
40
|
+
override initialize(save = false) {
|
|
41
|
+
if (this.isInitialized) return
|
|
42
|
+
const data = this.db.getSafe<Record<string, Val>>(this.prefix())
|
|
43
|
+
if (!data) this.db.set(this.prefix(), this.defaultValues, save)
|
|
44
|
+
this.isInitialized = true
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { CommandBuilder } from '../cmd/CommandBuilder'
|
|
2
|
+
import { ConfigSection } from './ConfigSection'
|
|
3
|
+
import { createTypedArrayValidator } from '../util/validation/createTypedArrayValidator'
|
|
4
|
+
import { createTypedListParser } from '../util/string-parsers/createTypedListParser'
|
|
5
|
+
import { isInteger } from '../util/validation/numbers/isInteger'
|
|
6
|
+
import { JsonFile } from './JsonFile'
|
|
7
|
+
import { parseInteger } from '../util/string-parsers/parseInteger'
|
|
8
|
+
|
|
9
|
+
describe(ConfigSection.name, () => {
|
|
10
|
+
let file: JsonFile
|
|
11
|
+
let section: ConfigSection
|
|
12
|
+
const intConfigOptions = {
|
|
13
|
+
description: 'info',
|
|
14
|
+
defaultValue: 1,
|
|
15
|
+
parse: parseInteger,
|
|
16
|
+
validate: isInteger,
|
|
17
|
+
}
|
|
18
|
+
const intsConfigOptions = {
|
|
19
|
+
description: 'info',
|
|
20
|
+
defaultValue: [1],
|
|
21
|
+
parse: createTypedListParser(',', parseInteger),
|
|
22
|
+
validate: createTypedArrayValidator([isInteger]),
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
beforeEach(() => {
|
|
26
|
+
new CommandBuilder('t', (c) => {
|
|
27
|
+
file = c.db
|
|
28
|
+
section = file.config
|
|
29
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
30
|
+
jest.spyOn(file.db, 'save').mockImplementation((() => {}) as any)
|
|
31
|
+
})
|
|
32
|
+
})
|
|
33
|
+
|
|
34
|
+
describe('constructor', () => {
|
|
35
|
+
it('should create an instance of ConfigSection', () => {
|
|
36
|
+
expect(section).toBeInstanceOf(ConfigSection)
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
it('should set the file property', () => {
|
|
40
|
+
expect(section.file).toBe(file)
|
|
41
|
+
})
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
describe('assertValid', () => {
|
|
45
|
+
it('should validate', () => {
|
|
46
|
+
section.defineProperty('key', intConfigOptions)
|
|
47
|
+
expect(() => section.assertValid('key', 1)).not.toThrow()
|
|
48
|
+
expect(() => section.assertValid('key', 1.2)).toThrow()
|
|
49
|
+
})
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
describe('defineProperty', () => {
|
|
53
|
+
it('should define a property for the section', () => {
|
|
54
|
+
section.defineProperty('key', intConfigOptions)
|
|
55
|
+
expect(section.defaultValues['key']).toBe(1)
|
|
56
|
+
expect(section.parsers['key']).toBe(parseInteger)
|
|
57
|
+
expect(section.validators['key']).toBe(isInteger)
|
|
58
|
+
expect(section.descriptions['key']).toBe('info')
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
it('should clone value', () => {
|
|
62
|
+
section.defineProperty('key', intsConfigOptions)
|
|
63
|
+
expect(section.defaultValues['key']).not.toBe(intsConfigOptions.defaultValue)
|
|
64
|
+
expect(section.defaultValues['key']).toEqual(intsConfigOptions.defaultValue)
|
|
65
|
+
})
|
|
66
|
+
})
|
|
67
|
+
|
|
68
|
+
describe('initialize', () => {
|
|
69
|
+
it('should do nothing if the section is already initialized', () => {
|
|
70
|
+
section.initialize()
|
|
71
|
+
const spy = jest.spyOn(section.db, 'getSafe')
|
|
72
|
+
section.initialize()
|
|
73
|
+
expect(spy).not.toHaveBeenCalled()
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
it('should set the values if the section is not initialized', () => {
|
|
77
|
+
section.defineProperty('key', intConfigOptions)
|
|
78
|
+
section.initialize()
|
|
79
|
+
expect(section.getAll()).toEqual({ key: 1 })
|
|
80
|
+
})
|
|
81
|
+
|
|
82
|
+
it('should set the values and save the section if save is true', () => {
|
|
83
|
+
section.defineProperty('key', intConfigOptions)
|
|
84
|
+
const spy = jest.spyOn(section.db, 'set')
|
|
85
|
+
section.initialize(true)
|
|
86
|
+
expect(spy).toBeCalledWith(section.prefix(), { key: 1 }, true)
|
|
87
|
+
})
|
|
88
|
+
})
|
|
89
|
+
|
|
90
|
+
describe('prefix', () => {
|
|
91
|
+
it('should throw if key does not exist', () => {
|
|
92
|
+
expect(() => section.prefix('nonexistent')).toThrow()
|
|
93
|
+
})
|
|
94
|
+
})
|
|
95
|
+
})
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { AbstractJsonFileSection } from './AbstractJsonFileSection'
|
|
2
|
+
import { ensureThat } from '../util/validation/ensureThat'
|
|
3
|
+
import type { IConfig } from '../types/IConfig'
|
|
4
|
+
import { JsonFile } from './JsonFile'
|
|
5
|
+
import type { JsonValue } from '../util/types/JsonValue'
|
|
6
|
+
import { objAssign } from '../util/object/objAssign'
|
|
7
|
+
import type { TStringParser } from '../util/types/TStringParser'
|
|
8
|
+
import type { TValidator } from '../util/types/TValidator'
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* A class that represents the user-config section of the JSON file used as simple database.
|
|
12
|
+
*/
|
|
13
|
+
export class ConfigSection<Val extends JsonValue = JsonValue> extends AbstractJsonFileSection<Val> {
|
|
14
|
+
/**
|
|
15
|
+
* String parsers for when editing config from command-line.
|
|
16
|
+
*/
|
|
17
|
+
readonly parsers: Record<string, TStringParser<Val>> = {}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Descriptions for each property key.
|
|
21
|
+
*/
|
|
22
|
+
readonly descriptions: Record<string, string> = {}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Validators for each property key.
|
|
26
|
+
*/
|
|
27
|
+
readonly validators: Record<string, TValidator<Val>> = {}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Creates an instance of AbstractJsonFileSection.
|
|
31
|
+
* @param file - The parent JsonFile instance.
|
|
32
|
+
* @param name - The name of the section.
|
|
33
|
+
*/
|
|
34
|
+
constructor(file: JsonFile, name: string) {
|
|
35
|
+
super(file, name, true)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Asserts that a key-value pair is valid.
|
|
40
|
+
* @param key - The key to assert.
|
|
41
|
+
* @param value - The value to assert.
|
|
42
|
+
*/
|
|
43
|
+
override assertValid(key: string, value: Val) {
|
|
44
|
+
if (!this.validators[key]) return
|
|
45
|
+
ensureThat(value, this.validators[key])
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Defines a property for the section.
|
|
50
|
+
* @param key - The key of the property.
|
|
51
|
+
* @param options - The options for the property.
|
|
52
|
+
*/
|
|
53
|
+
override defineProperty(key: string, options: IConfig<Val>) {
|
|
54
|
+
const { description, defaultValue, parse, validate } = options
|
|
55
|
+
this.descriptions[key] = description
|
|
56
|
+
this.defaultValues[key] = typeof defaultValue === 'object' ? JSON.parse(JSON.stringify(defaultValue)) : defaultValue
|
|
57
|
+
if (parse) this.parsers[key] = parse
|
|
58
|
+
if (validate) this.validators[key] = validate
|
|
59
|
+
this.assertValid(key, options.defaultValue)
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Initializes the section.
|
|
64
|
+
* @param save - Indicates whether to save the section after initialization.
|
|
65
|
+
* @returns A string if an error occurred during initialization, otherwise void.
|
|
66
|
+
*/
|
|
67
|
+
override initialize(save = false) {
|
|
68
|
+
if (this.isInitialized) return
|
|
69
|
+
const data = this.db.getSafe<Record<string, Val>>(this.prefix())
|
|
70
|
+
const result = objAssign({}, JSON.parse(JSON.stringify(this.defaultValues)), data || {})
|
|
71
|
+
this.db.set(this.prefix(), result, save)
|
|
72
|
+
this.isInitialized = true
|
|
73
|
+
}
|
|
74
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { AppDataSection } from './AppDataSection'
|
|
2
|
+
import { CommandBuilder } from '../cmd/CommandBuilder'
|
|
3
|
+
import { ConfigSection } from './ConfigSection'
|
|
4
|
+
import { JsonDB } from '../util/db/JsonDB'
|
|
5
|
+
import { JsonFile } from './JsonFile'
|
|
6
|
+
import { PresetsSection } from './PresetsSection'
|
|
7
|
+
|
|
8
|
+
describe(JsonFile.name, () => {
|
|
9
|
+
describe('constructor', () => {
|
|
10
|
+
it('should return a JsonFile instance', () => {
|
|
11
|
+
new CommandBuilder('t', (c) => {
|
|
12
|
+
expect(c.db).toBeInstanceOf(JsonFile)
|
|
13
|
+
})
|
|
14
|
+
})
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
describe('db', () => {
|
|
18
|
+
it('should return a JsonDB instance', () => {
|
|
19
|
+
new CommandBuilder('t', (c) => {
|
|
20
|
+
expect(c.db.db).toBeInstanceOf(JsonDB)
|
|
21
|
+
})
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
it('should return the root commands db if subcommand', () => {
|
|
25
|
+
new CommandBuilder('t', (c) => {
|
|
26
|
+
c.command('sub', (s) => {
|
|
27
|
+
expect(s.db.db).toBe(c.db.db)
|
|
28
|
+
})
|
|
29
|
+
})
|
|
30
|
+
})
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
describe('config', () => {
|
|
34
|
+
it('should return a ConfigSection instance', () => {
|
|
35
|
+
new CommandBuilder('t', (c) => {
|
|
36
|
+
expect(c.db.config).toBeInstanceOf(ConfigSection)
|
|
37
|
+
})
|
|
38
|
+
})
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
describe('appData', () => {
|
|
42
|
+
it('should return a AppDataSection instance', () => {
|
|
43
|
+
new CommandBuilder('t', (c) => {
|
|
44
|
+
expect(c.db.appData).toBeInstanceOf(AppDataSection)
|
|
45
|
+
})
|
|
46
|
+
})
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
describe('presets', () => {
|
|
50
|
+
it('should return a PresetsSection instance', () => {
|
|
51
|
+
new CommandBuilder('t', (c) => {
|
|
52
|
+
expect(c.db.presets).toBeInstanceOf(PresetsSection)
|
|
53
|
+
})
|
|
54
|
+
})
|
|
55
|
+
})
|
|
56
|
+
})
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { AppDataSection } from './AppDataSection'
|
|
2
|
+
import { CommandBuilder } from '../cmd/CommandBuilder'
|
|
3
|
+
import { ConfigSection } from './ConfigSection'
|
|
4
|
+
import { JsonDB } from '../util/db/JsonDB'
|
|
5
|
+
import { PresetsSection } from './PresetsSection'
|
|
6
|
+
import { realizeLazyProperty } from '../util/object/realizeLazyProperty'
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* A class that represents the JSON file used as a simple database.
|
|
10
|
+
*/
|
|
11
|
+
export class JsonFile {
|
|
12
|
+
/**
|
|
13
|
+
* @param cmd The parent CommandBuilder instance.
|
|
14
|
+
*/
|
|
15
|
+
constructor(readonly cmd: CommandBuilder) {}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* A lazy-loaded instance of the JsonDB instance containing the data.
|
|
19
|
+
* Upon first property access, it is stored as a property on the instance.
|
|
20
|
+
* If the command is a subcommand, the root command's JsonDB instance is returned.
|
|
21
|
+
*/
|
|
22
|
+
get db(): JsonDB {
|
|
23
|
+
if (this.cmd.isRoot) {
|
|
24
|
+
return realizeLazyProperty(this, 'db', new JsonDB(this.cmd.dataFilepath, 2))
|
|
25
|
+
} else {
|
|
26
|
+
return this.cmd.root.db.db
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* A lazy-loaded instance of the `config` section of the JSON file.
|
|
32
|
+
* Upon first property access, it is stored as a property on the instance.
|
|
33
|
+
*/
|
|
34
|
+
get config(): ConfigSection {
|
|
35
|
+
return realizeLazyProperty(this, 'config', new ConfigSection(this, 'config'))
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* A lazy-loaded instance of the `appData` section of the JSON file.
|
|
40
|
+
* Upon first property access, it is stored as a property on the instance.
|
|
41
|
+
*/
|
|
42
|
+
get appData(): AppDataSection {
|
|
43
|
+
return realizeLazyProperty(this, 'appData', new AppDataSection(this, 'appData'))
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* A lazy-loaded instance of the `presets` section of the JSON file.
|
|
48
|
+
*/
|
|
49
|
+
get presets(): PresetsSection {
|
|
50
|
+
return realizeLazyProperty(this, 'presets', new PresetsSection(this, 'presets'))
|
|
51
|
+
}
|
|
52
|
+
}
|