From 435175b0fd7025e12a991abcfb9b8462c36b75c1 Mon Sep 17 00:00:00 2001 From: fureev Date: Sun, 24 Aug 2025 21:53:24 +0300 Subject: [PATCH 01/37] - Refactor `fileSize` utility to improve type safety and readability. - Update Jest config with support for `ts-jest` transform and use V8 coverage provider. - Overhaul TypeScript configurations for improved ES2022 support, stricter module settings, and better project structure. - Update `package.json` with additional type exports, devDependency versions, and refined scripts. - Migrate Prettier config to CJS format with detailed comments for clarity. - Adjust test cases for `equals` utility to improve structure and validation coverage. --- .prettierrc | 11 ----------- jest.config.js | 7 +++++++ package.json | 39 +++++++++++++++++++-------------------- prettier.config.cjs | 33 +++++++++++++++++++++++++++++++++ src/format/fileSize.ts | 10 ++++------ tests/object/equal.ts | 30 ++++++++++++++++++++---------- tsconfig.cjs.json | 18 +++++++++++++++--- tsconfig.esm.json | 17 ++++++++++++++--- tsconfig.json | 23 +++++++++++------------ tsconfig.types.json | 21 +++++++++++++++------ 10 files changed, 138 insertions(+), 71 deletions(-) delete mode 100644 .prettierrc create mode 100644 prettier.config.cjs diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index 90ac511..0000000 --- a/.prettierrc +++ /dev/null @@ -1,11 +0,0 @@ -{ - "printWidth": 120, - "singleQuote": true, - "useTabs": false, - "tabWidth": 2, - "semi": false, - "bracketSpacing": true, - "trailingComma": "es5", - "arrowParens": "avoid", - "endOfLine": "lf" -} diff --git a/jest.config.js b/jest.config.js index ffcf1df..9544b69 100644 --- a/jest.config.js +++ b/jest.config.js @@ -4,6 +4,11 @@ module.exports = { testEnvironment: 'node', testMatch: ['**/tests/**/*.ts'], testPathIgnorePatterns: ['/node_modules/', '/tests/utils.ts'], + + transform: { + '^.+\\.ts$': ['ts-jest', { tsconfig: 'tsconfig.json', isolatedModules: true }], + }, + collectCoverageFrom: [ '**/src/**/*.{js,ts}', '!**/node_modules/**', @@ -18,4 +23,6 @@ module.exports = { moduleNameMapper: { '^~/(.*)$': '/src/$1', }, + coverageProvider: 'v8', + moduleFileExtensions: ['ts', 'js', 'json'], } diff --git a/package.json b/package.json index e65766d..a9b9a6c 100644 --- a/package.json +++ b/package.json @@ -21,12 +21,13 @@ "package.json" ], "module": "./dist/esm/index.mjs", + "types": "./dist/types/index.d.ts", "exports": { ".": { "types": "./dist/types/index.d.ts", "import": "./dist/esm/index.mjs", "require": "./dist/cjs/index.js", - "default": "./dist/esm/mjs" + "default": "./dist/esm/index.mjs" }, "./*": { "types": "./dist/types/*.d.ts", @@ -36,9 +37,14 @@ }, "./array": { "types": "./dist/types/array/index.d.ts", - "import": "./dist/esm/index.mjs", + "import": "./dist/esm/array/index.mjs", "require": "./dist/cjs/array/index.js" }, + "./date": { + "types": "./dist/types/date/index.d.ts", + "import": "./dist/esm/date/index.mjs", + "require": "./dist/cjs/date/index.js" + }, "./core": { "types": "./dist/types/core/index.d.ts", "require": "./dist/cjs/core/index.js", @@ -97,18 +103,18 @@ } }, "devDependencies": { - "@types/jest": "^30.0.0", + "@types/jest": "^29.5.14", "docsify-cli": "^4.4.4", "formdata-node": "^6.0.3", "husky": "^9.1.7", - "jest": "^30.0.5", + "jest": "^29.7.0", "npm-run-all": "^4.1.5", "prettier": "^3.6.2", - "rimraf": "^5.0.10", - "ts-jest": "^29.4.0", + "rimraf": "^6.0.1", + "ts-jest": "^29.4.1", "tsc-alias": "^1.8.16", "ts-node": "^10.9.2", - "typescript": "^5.8.3" + "typescript": "^5.9.2" }, "keywords": [ "javascript", @@ -130,23 +136,16 @@ "rename": "ts-node ./.scripts/rename.ts", "coverage": "jest --coverage", "prepare": "husky install", - "lint": "prettier --write src/**/* tests/**/*", + "lint": "prettier --check \"src/**/*\" \"tests/**/*\"", + "lint:fix": "prettier --write \"src/**/*\" \"tests/**/*\"", "test": "jest", - "docsify": "docsify serve ./docs" + "docsify": "docsify serve ./docs", + "prepack": "yarn build" }, + "sideEffects": false, "engines": { - "node": "^20 || ^21 || ^22 || ^23 || ^24 || ^25" + "node": "^20 || ^22 || ^24" }, - "nyc": { - "extension": [ - ".ts" - ] - }, - "browserslist": [ - "last 3 versions", - "not ie 11", - "not op_mini all" - ], "typesVersions": { ">=4.2": { "*": [ diff --git a/prettier.config.cjs b/prettier.config.cjs new file mode 100644 index 0000000..54e5a3e --- /dev/null +++ b/prettier.config.cjs @@ -0,0 +1,33 @@ +// prettier.config.cjs +/** + * Prettier configuration + * - JS format allows comments and reuse of named constants + * - Behavior preserved from the original JSON + */ + +const MAX_LINE_LENGTH = 120 +const USE_SINGLE_QUOTES = true +const USE_TABS = false +const TAB_SIZE = 2 +const USE_SEMICOLONS = false + +const BRACKET_SPACING = true +const TRAILING_COMMA_STRATEGY = 'es5' // same as original +const ARROW_PARENS_STYLE = 'avoid' // same as original +const LINE_ENDINGS = 'lf' + +/** @type {import('prettier').Config} */ +module.exports = { + // Formatting width and whitespace + printWidth: MAX_LINE_LENGTH, + useTabs: USE_TABS, + tabWidth: TAB_SIZE, + semi: USE_SEMICOLONS, + singleQuote: USE_SINGLE_QUOTES, + // Punctuation and spacing + bracketSpacing: BRACKET_SPACING, + trailingComma: TRAILING_COMMA_STRATEGY, + arrowParens: ARROW_PARENS_STYLE, + // Cross-platform consistency + endOfLine: LINE_ENDINGS, +} diff --git a/src/format/fileSize.ts b/src/format/fileSize.ts index e06a86d..cd9c793 100644 --- a/src/format/fileSize.ts +++ b/src/format/fileSize.ts @@ -19,21 +19,19 @@ export default function fileSize( thousandsSeparator: string = ',', suffixSeparator: string = ' ' ): string { - const num = +size + const num = Number(size) - if (num <= 0) { + if (!Number.isFinite(num) || num <= 0) { return '0 bytes' } - if (num < kilo) { - decimals = 0 - } + const decimalsToUse = num < kilo ? 0 : decimals return intWord( num, ['bytes', 'Kb', 'Mb', 'Gb', 'Tb', 'Pb'], kilo, - decimals, + decimalsToUse, decPoint, thousandsSeparator, suffixSeparator diff --git a/tests/object/equal.ts b/tests/object/equal.ts index cc2cbe4..0729e7c 100644 --- a/tests/object/equal.ts +++ b/tests/object/equal.ts @@ -60,7 +60,6 @@ describe('equal', () => { expect(() => equals()).toThrow(errMsg) // @ts-ignore expect(() => equals(NaN, NaN)).toThrow(errMsg) - // @ts-ignore expect(() => equals(1, 1)).toThrow(errMsg) }) @@ -98,16 +97,27 @@ describe('equal', () => { }) it('should return false', () => { - expect(equals({}, {})).toBeTruthy() - expect(equals({ k: 1 }, { k: 1 })).toBeTruthy() - expect(equals({ k: 1, v: 2 }, { k: 1, v: 2 })).toBeTruthy() - expect(equals({ k: 1, v: [] }, { k: 1, v: [] })).toBeTruthy() - expect(equals({ k: 1, v: { k: 2 } }, { k: 1, v: { k: 2 } })).toBeTruthy() + // Различные значения + expect(equals({ k: 1 }, { k: 2 })).toBeFalsy() + expect(equals({ k: 1, v: 2 }, { k: 1, v: 3 })).toBeFalsy() + // Различная структура массива + expect(equals({ k: 1, v: [1, 2, 4] }, { k: 1, v: [1, 2, 5] })).toBeFalsy() + // Глубокое отличие expect( - equals({ k: 1, v: { k: 2, v: { k: 3, v: { k: 4 } } } }, { k: 1, v: { k: 2, v: { k: 3, v: { k: 4 } } } }) - ).toBeTruthy() - - expect(equals(first, second)).toBeTruthy() + equals({ k: 1, v: { k: 2, v: { k: 3, v: { k: 4 } } } }, { k: 1, v: { k: 2, v: { k: 3, v: { k: 5 } } } }) + ).toBeFalsy() + // Отличие в исходных структурах + const modifiedSecond = { + ...second, + items: { + ...second.items, + one: { + ...second.items.one, + val: 112, + }, + }, + } + expect(equals(first, modifiedSecond)).toBeFalsy() expect(equals(new Object(), new Object(2))).toBeFalsy() }) diff --git a/tsconfig.cjs.json b/tsconfig.cjs.json index 0d55c65..fb69ac2 100644 --- a/tsconfig.cjs.json +++ b/tsconfig.cjs.json @@ -1,8 +1,20 @@ { "extends": "./tsconfig.json", "compilerOptions": { - "outDir": "./dist/cjs", + "noEmit": false, + "module": "CommonJS", - "sourceMap": true - } + "target": "ES2022", + + "rootDir": "./src", + "outDir": "./dist/cjs", + + "sourceMap": true, + + "declaration": false, + "emitDeclarationOnly": false + }, + "include": ["src"], + "exclude": ["dist", "node_modules", "tests"] + } diff --git a/tsconfig.esm.json b/tsconfig.esm.json index 38b1936..889901b 100644 --- a/tsconfig.esm.json +++ b/tsconfig.esm.json @@ -1,8 +1,19 @@ { "extends": "./tsconfig.json", "compilerOptions": { + "noEmit": false, + + "module": "ES2022", + "target": "ES2022", + + "rootDir": "./src", "outDir": "./dist/esm", - "module": "ESNext", - "sourceMap": true - } + + "sourceMap": true, + + "declaration": false, + "emitDeclarationOnly": false + }, + "include": ["src"], + "exclude": ["dist", "node_modules", "tests"], } diff --git a/tsconfig.json b/tsconfig.json index f331006..555801b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -11,7 +11,9 @@ // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ /* Language and Environment */ - "target": "es2016", + "target": "ES2022", + "lib": ["ES2022"], + /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ // "jsx": "preserve", /* Specify what JSX code is generated. */ @@ -26,12 +28,12 @@ // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ /* Modules */ - // "module": "commonjs", /* Specify what module code is generated. */ - // "rootDir": "./", /* Specify the root folder within your source files. */ + "rootDir": "./src", /* Specify the root folder within your source files. */ + "module": "ES2022", "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ - "baseUrl": "./", + "baseUrl": ".", /* Specify the base directory to resolve non-relative module names. */ "paths": { "~/*": [ @@ -45,7 +47,7 @@ // "types": [], /* Specify type package names to be included without being referenced in a source file. */ // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ - // "resolveJsonModule": true, /* Enable importing .json files. */ + "resolveJsonModule": true, /* Enable importing .json files. */ // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ /* JavaScript Support */ @@ -62,7 +64,7 @@ "outDir": "./dist", /* Specify an output folder for all emitted files. */ // "removeComments": true, /* Disable emitting comments. */ - // "noEmit": true, /* Disable emitting files from a compilation. */ + "noEmit": true, /* Disable emitting files from a compilation. */ // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ @@ -81,7 +83,7 @@ /* Interop Constraints */ // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ - // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ @@ -115,9 +117,6 @@ "skipLibCheck": true /* Skip type checking all .d.ts files. */ }, - "exclude": [ - "dist", - "node_modules", - "tests" - ] + "include": ["src", "tests"], + "exclude": ["dist", "node_modules"], } diff --git a/tsconfig.types.json b/tsconfig.types.json index 23121c3..39fed08 100644 --- a/tsconfig.types.json +++ b/tsconfig.types.json @@ -1,12 +1,21 @@ { "extends": "./tsconfig", "compilerOptions": { - "outDir": "dist/types", + "noEmit": false, + + "module": "ES2022", + "target": "ES2022", + + "rootDir": "./src", + "outDir": "./dist/types", + "declaration": true, "declarationMap": true, - "isolatedModules": true, - "noEmit": false, - "allowJs": false, - "emitDeclarationOnly": true - } + "emitDeclarationOnly": true, + + "stripInternal": true + }, + "include": ["src"], + "exclude": ["dist", "node_modules", "tests"] + } From 7171be335e1f2e4c94be94165276f3a4ed380bf1 Mon Sep 17 00:00:00 2001 From: fureev Date: Sun, 24 Aug 2025 22:44:53 +0300 Subject: [PATCH 02/37] Remove `freeSelf` utility and associated files. Simplify `clone` logic and refactor `match` pattern handling for improved clarity. --- .scripts/rename.ts | 43 ++++-- dist/cjs/array/intersect.js | 20 ++- dist/cjs/array/intersect.js.map | 2 +- dist/cjs/array/random.js | 5 +- dist/cjs/array/random.js.map | 2 +- dist/cjs/core/clone.js | 24 +-- dist/cjs/core/clone.js.map | 2 +- dist/cjs/core/match.js | 5 +- dist/cjs/core/match.js.map | 2 +- dist/cjs/date/now.js | 2 +- dist/cjs/format/fileSize.js | 10 +- dist/cjs/format/fileSize.js.map | 2 +- dist/cjs/internal/base/baseGetTag.js | 2 +- dist/cjs/internal/base/baseGetTag.js.map | 2 +- dist/cjs/internal/free/freeSelf.js | 5 - dist/cjs/internal/free/freeSelf.js.map | 1 - dist/cjs/internal/getRawTag.js | 48 +++--- dist/cjs/internal/getRawTag.js.map | 2 +- dist/cjs/internal/root.js | 17 ++- dist/cjs/internal/root.js.map | 2 +- dist/cjs/is/isBuffer.js | 2 +- dist/cjs/is/isBuffer.js.map | 2 +- dist/cjs/object/equals.js | 85 +++++------ dist/cjs/object/equals.js.map | 2 +- dist/cjs/object/merge.js | 36 +++-- dist/cjs/object/merge.js.map | 2 +- dist/cjs/object/removeEmpty.js | 52 +++---- dist/cjs/object/removeEmpty.js.map | 2 +- dist/cjs/string/camelCase.js | 5 +- dist/cjs/string/camelCase.js.map | 2 +- dist/cjs/structures/CollectionArray.js | 14 +- dist/cjs/structures/CollectionArray.js.map | 2 +- dist/cjs/structures/PriorityQueue.js | 109 ++++++++++++++ dist/cjs/structures/PriorityQueue.js.map | 1 + dist/cjs/structures/Queue.js | 4 +- dist/cjs/structures/Queue.js.map | 2 +- dist/cjs/structures/Stack.js | 4 +- dist/cjs/structures/Stack.js.map | 2 +- dist/esm/array/arrayEach.mjs.map | 2 +- dist/esm/array/clear.mjs.map | 2 +- dist/esm/array/difference.mjs.map | 2 +- dist/esm/array/equals.mjs.map | 2 +- dist/esm/array/index.mjs.map | 2 +- dist/esm/array/intersect.mjs | 20 ++- dist/esm/array/intersect.mjs.map | 2 +- dist/esm/array/random.mjs | 5 +- dist/esm/array/random.mjs.map | 2 +- dist/esm/array/symmetricalDifference.mjs.map | 2 +- dist/esm/config.mjs.map | 2 +- dist/esm/core/bind.mjs.map | 2 +- dist/esm/core/clone.mjs | 24 +-- dist/esm/core/clone.mjs.map | 2 +- dist/esm/core/equals.mjs.map | 2 +- dist/esm/core/forEach.mjs.map | 2 +- dist/esm/core/index.mjs.map | 2 +- dist/esm/core/keys.mjs.map | 2 +- dist/esm/core/match.mjs | 5 +- dist/esm/core/match.mjs.map | 2 +- dist/esm/core/tap.mjs.map | 2 +- dist/esm/core/vars.mjs.map | 2 +- dist/esm/date/elapsed.mjs.map | 2 +- dist/esm/date/index.mjs.map | 2 +- dist/esm/date/now.mjs | 2 +- dist/esm/date/now.mjs.map | 2 +- dist/esm/date/toString.mjs.map | 2 +- dist/esm/format/fileSize.mjs | 10 +- dist/esm/format/fileSize.mjs.map | 2 +- dist/esm/format/index.mjs.map | 2 +- dist/esm/format/intWord.mjs.map | 2 +- dist/esm/format/number.mjs.map | 2 +- dist/esm/format/pad.mjs.map | 2 +- dist/esm/i18/index.mjs.map | 2 +- dist/esm/i18/ru.mjs.map | 2 +- dist/esm/i18/var.mjs.map | 2 +- dist/esm/index.mjs.map | 2 +- dist/esm/internal/arrayLikeKeys.mjs.map | 2 +- dist/esm/internal/base/baseGetTag.mjs | 2 +- dist/esm/internal/base/baseGetTag.mjs.map | 2 +- .../internal/base/baseIsTypedArray.mjs.map | 2 +- dist/esm/internal/base/baseKeys.mjs.map | 2 +- dist/esm/internal/copyArray.mjs.map | 2 +- dist/esm/internal/free/freeExports.mjs.map | 2 +- dist/esm/internal/free/freeGlobal.mjs.map | 2 +- dist/esm/internal/free/freeSelf.mjs | 3 - dist/esm/internal/free/freeSelf.mjs.map | 1 - dist/esm/internal/getRawTag.mjs | 48 +++--- dist/esm/internal/getRawTag.mjs.map | 2 +- dist/esm/internal/index.mjs.map | 2 +- dist/esm/internal/isIndex.mjs.map | 2 +- dist/esm/internal/node.mjs.map | 2 +- dist/esm/internal/root.mjs | 14 +- dist/esm/internal/root.mjs.map | 2 +- dist/esm/internal/types.mjs.map | 2 +- dist/esm/is/index.mjs.map | 2 +- dist/esm/is/isArguments.mjs.map | 2 +- dist/esm/is/isArray.mjs.map | 2 +- dist/esm/is/isArrayLike.mjs.map | 2 +- dist/esm/is/isBasicType.mjs.map | 2 +- dist/esm/is/isBlob.mjs.map | 2 +- dist/esm/is/isBoolean.mjs.map | 2 +- dist/esm/is/isBuffer.mjs | 2 +- dist/esm/is/isBuffer.mjs.map | 2 +- dist/esm/is/isDate.mjs.map | 2 +- dist/esm/is/isEmpty.mjs.map | 2 +- dist/esm/is/isEven.mjs.map | 2 +- dist/esm/is/isFloat.mjs.map | 2 +- dist/esm/is/isFunction.mjs.map | 2 +- dist/esm/is/isInteger.mjs.map | 2 +- dist/esm/is/isLength.mjs.map | 2 +- dist/esm/is/isNil.mjs.map | 2 +- dist/esm/is/isNumeric.mjs.map | 2 +- dist/esm/is/isObject.mjs.map | 2 +- dist/esm/is/isPrototype.mjs.map | 2 +- dist/esm/is/isString.mjs.map | 2 +- dist/esm/is/isSymbol.mjs.map | 2 +- dist/esm/is/isTypedArray.mjs.map | 2 +- dist/esm/is/isUrl.mjs.map | 2 +- dist/esm/object/defaults.mjs.map | 2 +- dist/esm/object/equals.mjs | 85 +++++------ dist/esm/object/equals.mjs.map | 2 +- dist/esm/object/filter.mjs.map | 2 +- dist/esm/object/flip.mjs.map | 2 +- dist/esm/object/fromQueryString.mjs.map | 2 +- dist/esm/object/getSize.mjs.map | 2 +- dist/esm/object/index.mjs.map | 2 +- dist/esm/object/logicalAnd.mjs.map | 2 +- dist/esm/object/merge.mjs | 36 +++-- dist/esm/object/merge.mjs.map | 2 +- dist/esm/object/pathToObject.mjs.map | 2 +- dist/esm/object/pick.mjs.map | 2 +- dist/esm/object/remove.mjs.map | 2 +- dist/esm/object/removeEmpty.mjs | 52 +++---- dist/esm/object/removeEmpty.mjs.map | 2 +- dist/esm/object/select.mjs.map | 2 +- dist/esm/object/sum.mjs.map | 2 +- dist/esm/object/toQueryObjects.mjs.map | 2 +- dist/esm/object/toQueryString.mjs.map | 2 +- dist/esm/object/values.mjs.map | 2 +- dist/esm/sort/index.mjs.map | 2 +- dist/esm/sort/sortByProperty.mjs.map | 2 +- .../sort/sortObjectsInArrayByProperty.mjs.map | 2 +- dist/esm/string/camelCase.mjs | 5 +- dist/esm/string/camelCase.mjs.map | 2 +- dist/esm/string/clearSpaces.mjs.map | 2 +- dist/esm/string/endsWith.mjs.map | 2 +- dist/esm/string/index.mjs.map | 2 +- dist/esm/string/normalize.mjs.map | 2 +- dist/esm/string/pad.mjs.map | 2 +- dist/esm/string/replace.mjs.map | 2 +- dist/esm/string/startsWith.mjs.map | 2 +- dist/esm/string/stringToArray.mjs.map | 2 +- dist/esm/string/strtr.mjs.map | 2 +- dist/esm/string/titleCase.mjs.map | 2 +- dist/esm/string/trim.mjs.map | 2 +- dist/esm/string/trimPrefix.mjs.map | 2 +- dist/esm/string/trimSuffix.mjs.map | 2 +- dist/esm/string/unicode.mjs.map | 2 +- dist/esm/string/upperFirst.mjs.map | 2 +- dist/esm/structures/CollectionArray.mjs | 14 +- dist/esm/structures/CollectionArray.mjs.map | 2 +- dist/esm/structures/PriorityQueue.mjs | 102 +++++++++++++ dist/esm/structures/PriorityQueue.mjs.map | 1 + dist/esm/structures/Queue.mjs | 4 +- dist/esm/structures/Queue.mjs.map | 2 +- dist/esm/structures/Stack.mjs | 4 +- dist/esm/structures/Stack.mjs.map | 2 +- dist/esm/structures/index.mjs.map | 2 +- dist/esm/to/index.mjs.map | 2 +- dist/esm/to/toArray.mjs.map | 2 +- dist/esm/to/toFinite.mjs.map | 2 +- dist/esm/to/toInteger.mjs.map | 2 +- dist/esm/to/toNumber.mjs.map | 2 +- dist/esm/to/toString.mjs.map | 2 +- dist/esm/utils/base64.mjs.map | 2 +- dist/esm/utils/index.mjs.map | 2 +- dist/esm/utils/pregQuote.mjs.map | 2 +- dist/esm/utils/times.mjs.map | 2 +- dist/types/array/intersect.d.ts.map | 2 +- dist/types/array/random.d.ts.map | 2 +- dist/types/date/now.d.ts | 2 +- dist/types/format/fileSize.d.ts.map | 2 +- dist/types/internal/free/freeSelf.d.ts | 4 - dist/types/internal/free/freeSelf.d.ts.map | 1 - dist/types/internal/getRawTag.d.ts | 2 +- dist/types/internal/getRawTag.d.ts.map | 2 +- dist/types/internal/root.d.ts | 5 +- dist/types/internal/root.d.ts.map | 2 +- dist/types/is/isBuffer.d.ts | 2 +- dist/types/object/equals.d.ts.map | 2 +- dist/types/object/merge.d.ts | 35 +---- dist/types/object/merge.d.ts.map | 2 +- dist/types/structures/CollectionArray.d.ts | 4 +- .../types/structures/CollectionArray.d.ts.map | 2 +- dist/types/structures/PriorityQueue.d.ts | 17 +++ dist/types/structures/PriorityQueue.d.ts.map | 1 + src/array/intersect.ts | 21 ++- src/array/random.ts | 4 +- src/core/clone.ts | 28 ++-- src/date/now.ts | 2 +- src/internal/base/baseGetTag.ts | 2 +- src/internal/free/freeSelf.ts | 2 - src/internal/getRawTag.ts | 57 +++---- src/internal/root.ts | 21 ++- src/is/isBuffer.ts | 2 +- src/object/equals.ts | 96 ++++++------ src/object/merge.ts | 83 ++++------- src/object/removeEmpty.ts | 56 +++---- src/structures/CollectionArray.ts | 18 +-- src/structures/PriorityQueue.js | 60 -------- src/structures/PriorityQueue.ts | 124 ++++++++++++++++ tests/date/elapsed.test.ts | 20 +++ tests/structures/CollectionArray.test.ts | 91 ++++++++++++ tests/structures/PriorityQueue.test.ts | 139 ++++++++++++++++++ tsconfig.types.json | 1 + 214 files changed, 1341 insertions(+), 776 deletions(-) delete mode 100644 dist/cjs/internal/free/freeSelf.js delete mode 100644 dist/cjs/internal/free/freeSelf.js.map create mode 100644 dist/cjs/structures/PriorityQueue.js create mode 100644 dist/cjs/structures/PriorityQueue.js.map delete mode 100644 dist/esm/internal/free/freeSelf.mjs delete mode 100644 dist/esm/internal/free/freeSelf.mjs.map create mode 100644 dist/esm/structures/PriorityQueue.mjs create mode 100644 dist/esm/structures/PriorityQueue.mjs.map delete mode 100644 dist/types/internal/free/freeSelf.d.ts delete mode 100644 dist/types/internal/free/freeSelf.d.ts.map create mode 100644 dist/types/structures/PriorityQueue.d.ts create mode 100644 dist/types/structures/PriorityQueue.d.ts.map delete mode 100644 src/internal/free/freeSelf.ts delete mode 100644 src/structures/PriorityQueue.js create mode 100644 src/structures/PriorityQueue.ts create mode 100644 tests/date/elapsed.test.ts create mode 100644 tests/structures/CollectionArray.test.ts create mode 100644 tests/structures/PriorityQueue.test.ts diff --git a/.scripts/rename.ts b/.scripts/rename.ts index e1f5c70..747e7f2 100644 --- a/.scripts/rename.ts +++ b/.scripts/rename.ts @@ -1,10 +1,11 @@ import * as fs from 'fs/promises' import * as path from 'path' +import { fileURLToPath } from 'url' -async function* readdirP(dir: string): AsyncGenerator { +async function* walkDir(dir: string): AsyncGenerator { for (const entry of await fs.readdir(dir, { withFileTypes: true })) { if (entry.isDirectory()) { - for await (const sub of readdirP(path.join(dir, entry.name))) { + for await (const sub of walkDir(path.join(dir, entry.name))) { yield sub } } else if (entry.isFile()) { @@ -13,30 +14,42 @@ async function* readdirP(dir: string): AsyncGenerator { } } +// ESM-safe replacement for __dirname and target directory +const SCRIPT_DIR = path.dirname(fileURLToPath(import.meta.url)) +const DIST_DIR = path.resolve(SCRIPT_DIR, '..', 'dist/esm') + +// Regex and helper for import/export path rewriting +const IMPORT_EXPORT_REGEX = /^((import|export)\s+.+from\s+')(.+)('\s*)/gm + +function ensureMjsExtension(spec: string): string { + if ((spec.startsWith('./') || spec.startsWith('~/')) && !spec.endsWith('.mjs')) { + return `${spec}.mjs` + } + return spec +} + +// ... existing code ... + async function main(): Promise { - for await (const entry of readdirP(path.relative(process.cwd(), path.join(__dirname, '..', 'dist/esm')))) { + for await (const entry of walkDir(DIST_DIR)) { const match = /^(.*)(\.(js|js\.map|d\.ts))$/.exec(entry) if (match == null) { continue } - console.log(entry) + const file = match[1] const ext = match[2] if (ext === '.js') { let data = await fs.readFile(entry, 'utf-8') data = data.replace( - /^((import|export)\s+.+from\s+')(.+)('\s*)/gm, - (_, prefix: string, __, file: string, suffix: string) => { - if ((file.startsWith('./') || file.startsWith('~/')) && !file.endsWith('.mjs')) { - file += '.mjs' - } - return `${prefix}${file}${suffix}` + IMPORT_EXPORT_REGEX, + (_: string, prefix: string, _impExp: string, importPath: string, suffix: string) => { + const rewritten = ensureMjsExtension(importPath) + return `${prefix}${rewritten}${suffix}` } ) - data = data.replace( - `//# sourceMappingURL=${path.basename(file)}.js.map`, - `//# sourceMappingURL=${path.basename(file)}.mjs.map` - ) + const baseName = path.basename(file) + data = data.replace(`//# sourceMappingURL=${baseName}.js.map`, `//# sourceMappingURL=${baseName}.mjs.map`) await fs.writeFile(entry, data) await fs.rename(entry, `${file}.mjs`) } else if (ext === '.js.map') { @@ -50,6 +63,8 @@ async function main(): Promise { } } +// ... existing code ... + main().catch((e: Error) => { console.error(e) process.exit(1) diff --git a/dist/cjs/array/intersect.js b/dist/cjs/array/intersect.js index c72de87..0575170 100644 --- a/dist/cjs/array/intersect.js +++ b/dist/cjs/array/intersect.js @@ -10,8 +10,18 @@ exports.intersectAll = intersectAll; * @returns {any[]} */ function intersect(array, array2) { - const set = new Set(array); - return [...new Set(array2.filter(item => set.has(item)))]; + // Уникальное пересечение за один проход по меньшему множеству + const aSet = new Set(array); + const bSet = new Set(array2); + const result = []; + // Идём по меньшему набору уникальных значений + const [small, big] = aSet.size <= bSet.size ? [aSet, bSet] : [bSet, aSet]; + for (const v of small) { + if (big.has(v)) { + result.push(v); + } + } + return result; } /** * Return common items for all arrays @@ -21,8 +31,8 @@ function intersect(array, array2) { * @returns {*|any[]} */ function intersectAll(array, ...arrays) { - return arrays.reduce((previous, next) => { - return intersect(previous, next); - }, array); + // Начинаем с самого короткого массива для уменьшения промежуточных наборов + const all = [array, ...arrays].sort((a, b) => a.length - b.length); + return all.slice(1).reduce((prev, next) => intersect(prev, next), all[0]); } //# sourceMappingURL=intersect.js.map \ No newline at end of file diff --git a/dist/cjs/array/intersect.js.map b/dist/cjs/array/intersect.js.map index b96b895..31c7e0a 100644 --- a/dist/cjs/array/intersect.js.map +++ b/dist/cjs/array/intersect.js.map @@ -1 +1 @@ -{"version":3,"file":"intersect.js","sourceRoot":"","sources":["../../../src/array/intersect.ts"],"names":[],"mappings":";;AAOA,4BAGC;AASD,oCAIC;AAvBD;;;;;;GAMG;AACH,SAAwB,SAAS,CAAC,KAAY,EAAE,MAAa;IAC3D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAA;IAC1B,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;AAC3D,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,YAAY,CAAC,KAAY,EAAE,GAAG,MAAa;IACzD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE;QACtC,OAAO,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;IAClC,CAAC,EAAE,KAAK,CAAC,CAAA;AACX,CAAC"} \ No newline at end of file +{"version":3,"file":"intersect.js","sourceRoot":"","sources":["../../../src/array/intersect.ts"],"names":[],"mappings":";;AAOA,4BAcC;AASD,oCAIC;AAlCD;;;;;;GAMG;AACH,SAAwB,SAAS,CAAC,KAAY,EAAE,MAAa;IAC3D,8DAA8D;IAC9D,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAA;IAC3B,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAA;IAC5B,MAAM,MAAM,GAAU,EAAE,CAAA;IAExB,8CAA8C;IAC9C,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IACzE,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAChB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,YAAY,CAAC,KAAY,EAAE,GAAG,MAAa;IACzD,2EAA2E;IAC3E,MAAM,GAAG,GAAG,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAA;IAClE,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;AAC3E,CAAC"} \ No newline at end of file diff --git a/dist/cjs/array/random.js b/dist/cjs/array/random.js index fc96799..5617c1a 100644 --- a/dist/cjs/array/random.js +++ b/dist/cjs/array/random.js @@ -8,6 +8,9 @@ exports.default = random; * @returns {unknown} */ function random(array) { - return array[Math.floor(Math.random() * array.length)]; + const { length } = array; + if (length === 0) + return undefined; + return array[Math.floor(Math.random() * length)]; } //# sourceMappingURL=random.js.map \ No newline at end of file diff --git a/dist/cjs/array/random.js.map b/dist/cjs/array/random.js.map index 8383ee1..a486af3 100644 --- a/dist/cjs/array/random.js.map +++ b/dist/cjs/array/random.js.map @@ -1 +1 @@ -{"version":3,"file":"random.js","sourceRoot":"","sources":["../../../src/array/random.ts"],"names":[],"mappings":";;AAMA,yBAEC;AARD;;;;;GAKG;AACH,SAAwB,MAAM,CAAC,KAAY;IACzC,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;AACxD,CAAC"} \ No newline at end of file +{"version":3,"file":"random.js","sourceRoot":"","sources":["../../../src/array/random.ts"],"names":[],"mappings":";;AAMA,yBAIC;AAVD;;;;;GAKG;AACH,SAAwB,MAAM,CAAC,KAAY;IACzC,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAA;IACxB,IAAI,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IAClC,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAA;AAClD,CAAC"} \ No newline at end of file diff --git a/dist/cjs/core/clone.js b/dist/cjs/core/clone.js index f8510d3..36270bc 100644 --- a/dist/cjs/core/clone.js +++ b/dist/cjs/core/clone.js @@ -24,7 +24,6 @@ function clone(item, cloneDom = true) { // @ts-ignore return item.cloneNode(true); } - const type = Object.prototype.toString.call(item); // Date if ((0, isDate_1.default)(item)) { // @ts-ignore @@ -40,21 +39,22 @@ function clone(item, cloneDom = true) { } return newClone; } - // Object + const type = Object.prototype.toString.call(item); + // Plain Object if (type === '[object Object]' && item.constructor === Object) { - let key; - let newClone = {}; - for (key in item) { - newClone[key] = clone(item[key], cloneDom); + const src = item; + const newClone = {}; + for (const key in src) { + if (Object.prototype.hasOwnProperty.call(src, key)) { + newClone[key] = clone(src[key], cloneDom); + } } - if (enumerables) { - for (j = enumerables.length; j--;) { - let k = enumerables[j]; - if (Object.prototype.hasOwnProperty.call(item, k)) { - newClone[k] = item[k]; - } + for (const k of enumerables) { + if (Object.prototype.hasOwnProperty.call(src, k)) { + newClone[k] = src[k]; } } + // @ts-ignore return newClone; } return item; diff --git a/dist/cjs/core/clone.js.map b/dist/cjs/core/clone.js.map index c2a63d2..00fae6f 100644 --- a/dist/cjs/core/clone.js.map +++ b/dist/cjs/core/clone.js.map @@ -1 +1 @@ -{"version":3,"file":"clone.js","sourceRoot":"","sources":["../../../src/core/clone.ts"],"names":[],"mappings":";;;;;AAaA,wBAuDC;AApED,yDAAgC;AAEhC,MAAM,WAAW,GAAG,CAAC,SAAS,EAAE,gBAAgB,EAAE,UAAU,EAAE,aAAa,CAAC,CAAA;AAE5E;;;;;;;;GAQG;AACH,SAAwB,KAAK,CAAuB,IAAO,EAAE,WAAoB,IAAI;IACnF,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACxC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,aAAa;IACb,IAAI,QAAQ,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QAChD,aAAa;QACb,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;IAC7B,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAEjD,OAAO;IACP,IAAI,IAAA,gBAAM,EAAC,IAAI,CAAC,EAAE,CAAC;QACjB,aAAa;QACb,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;IACjC,CAAC;IAED,IAAI,CAAS,EAAE,CAAS,EAAE,CAAC,CAAA;IAE3B,QAAQ;IACR,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,CAAC,GAAG,IAAI,CAAC,MAAM,CAAA;QACf,IAAI,QAAQ,GAAwB,EAAE,CAAA;QAEtC,OAAO,CAAC,EAAE,EAAE,CAAC;YACX,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAM,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;QAC7C,CAAC;QAED,OAAU,QAAQ,CAAA;IACpB,CAAC;IAED,SAAS;IACT,IAAI,IAAI,KAAK,iBAAiB,IAAa,IAAK,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;QACxE,IAAI,GAAgB,CAAA;QACpB,IAAI,QAAQ,GAA6B,EAAE,CAAA;QAE3C,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;YACjB,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAiC,IAAK,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAA;QAC7E,CAAC;QAED,IAAI,WAAW,EAAE,CAAC;YAChB,KAAK,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,GAAI,CAAC;gBACnC,IAAI,CAAC,GAAW,WAAW,CAAC,CAAC,CAAC,CAAA;gBAC9B,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;oBAClD,QAAQ,CAAC,CAAC,CAAC,GAAyB,IAAK,CAAC,CAAC,CAAC,CAAA;gBAC9C,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC"} \ No newline at end of file +{"version":3,"file":"clone.js","sourceRoot":"","sources":["../../../src/core/clone.ts"],"names":[],"mappings":";;;;;AAaA,wBAuDC;AApED,yDAAgC;AAEhC,MAAM,WAAW,GAAG,CAAC,SAAS,EAAE,gBAAgB,EAAE,UAAU,EAAE,aAAa,CAAC,CAAA;AAE5E;;;;;;;;GAQG;AACH,SAAwB,KAAK,CAAuB,IAAO,EAAE,WAAoB,IAAI;IACnF,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACxC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,aAAa;IACb,IAAI,QAAQ,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QAChD,aAAa;QACb,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;IAC7B,CAAC;IAED,OAAO;IACP,IAAI,IAAA,gBAAM,EAAC,IAAI,CAAC,EAAE,CAAC;QACjB,aAAa;QACb,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;IACjC,CAAC;IAED,IAAI,CAAS,EAAE,CAAS,EAAE,CAAC,CAAA;IAE3B,QAAQ;IACR,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,CAAC,GAAG,IAAI,CAAC,MAAM,CAAA;QACf,IAAI,QAAQ,GAAwB,EAAE,CAAA;QAEtC,OAAO,CAAC,EAAE,EAAE,CAAC;YACX,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAM,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;QAC7C,CAAC;QAED,OAAU,QAAQ,CAAA;IACpB,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAEjD,eAAe;IACf,IAAI,IAAI,KAAK,iBAAiB,IAAK,IAAe,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;QAC1E,MAAM,GAAG,GAAG,IAAgC,CAAA;QAC5C,MAAM,QAAQ,GAA6B,EAAE,CAAA;QAE7C,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;YACtB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;gBACnD,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAM,GAAG,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAA;YAChD,CAAC;QACH,CAAC;QAED,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;YAC5B,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;gBACjD,QAAQ,CAAC,CAAC,CAAC,GAAI,GAA2B,CAAC,CAAC,CAAC,CAAA;YAC/C,CAAC;QACH,CAAC;QAED,aAAa;QACb,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC"} \ No newline at end of file diff --git a/dist/cjs/core/match.js b/dist/cjs/core/match.js index d89a0c3..99a3049 100644 --- a/dist/cjs/core/match.js +++ b/dist/cjs/core/match.js @@ -12,7 +12,10 @@ const isObject_1 = __importDefault(require("../is/isObject")); * @return {*} */ function match(expr, cases, options) { - const opt = Object.assign({ strict: true }, ((0, isObject_1.default)(options) ? options : {})); + const opt = { + strict: true, + ...((0, isObject_1.default)(options) ? options : {}), + }; for (const [pattern, action] of Array.isArray(cases) ? cases : Object.entries(cases)) { const prn = typeof pattern === 'function' ? pattern() : pattern; if (opt.strict ? expr === prn : expr == prn) { diff --git a/dist/cjs/core/match.js.map b/dist/cjs/core/match.js.map index aea441f..8ad7da4 100644 --- a/dist/cjs/core/match.js.map +++ b/dist/cjs/core/match.js.map @@ -1 +1 @@ -{"version":3,"file":"match.js","sourceRoot":"","sources":["../../../src/core/match.ts"],"names":[],"mappings":";;;;;AAiBA,wBAeC;AAhCD,6DAAoC;AAWpC;;;;;GAKG;AACH,SAAwB,KAAK,CAAC,IAAS,EAAE,KAAgB,EAAE,OAAsB;IAC/E,MAAM,GAAG,mBACP,MAAM,EAAE,IAAI,IACT,CAAC,IAAA,kBAAQ,EAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CACtC,CAAA;IAED,KAAK,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACrF,MAAM,GAAG,GAAG,OAAO,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAA;QAE/D,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;YAC5C,OAAO,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAA;QACzD,CAAC;IACH,CAAC;IAED,OAAO,OAAO,GAAG,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAA;AACxE,CAAC"} \ No newline at end of file +{"version":3,"file":"match.js","sourceRoot":"","sources":["../../../src/core/match.ts"],"names":[],"mappings":";;;;;AAiBA,wBAeC;AAhCD,6DAAoC;AAWpC;;;;;GAKG;AACH,SAAwB,KAAK,CAAC,IAAS,EAAE,KAAgB,EAAE,OAAsB;IAC/E,MAAM,GAAG,GAAG;QACV,MAAM,EAAE,IAAI;QACZ,GAAG,CAAC,IAAA,kBAAQ,EAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;KACtC,CAAA;IAED,KAAK,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACrF,MAAM,GAAG,GAAG,OAAO,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAA;QAE/D,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;YAC5C,OAAO,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAA;QACzD,CAAC;IACH,CAAC;IAED,OAAO,OAAO,GAAG,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAA;AACxE,CAAC"} \ No newline at end of file diff --git a/dist/cjs/date/now.js b/dist/cjs/date/now.js index acbae77..0098705 100644 --- a/dist/cjs/date/now.js +++ b/dist/cjs/date/now.js @@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.default = now; const nowFn = Date.now || (() => new Date().getTime()); /** - * This function return Date now + * return Date now */ function now() { return nowFn(); diff --git a/dist/cjs/format/fileSize.js b/dist/cjs/format/fileSize.js index 6a5f5c3..515a256 100644 --- a/dist/cjs/format/fileSize.js +++ b/dist/cjs/format/fileSize.js @@ -16,13 +16,11 @@ const intWord_1 = __importDefault(require("./intWord")); * @returns {string} */ function fileSize(size, kilo = 1024, decimals = 2, decPoint = '.', thousandsSeparator = ',', suffixSeparator = ' ') { - const num = +size; - if (num <= 0) { + const num = Number(size); + if (!Number.isFinite(num) || num <= 0) { return '0 bytes'; } - if (num < kilo) { - decimals = 0; - } - return (0, intWord_1.default)(num, ['bytes', 'Kb', 'Mb', 'Gb', 'Tb', 'Pb'], kilo, decimals, decPoint, thousandsSeparator, suffixSeparator); + const decimalsToUse = num < kilo ? 0 : decimals; + return (0, intWord_1.default)(num, ['bytes', 'Kb', 'Mb', 'Gb', 'Tb', 'Pb'], kilo, decimalsToUse, decPoint, thousandsSeparator, suffixSeparator); } //# sourceMappingURL=fileSize.js.map \ No newline at end of file diff --git a/dist/cjs/format/fileSize.js.map b/dist/cjs/format/fileSize.js.map index 3954571..95160f9 100644 --- a/dist/cjs/format/fileSize.js.map +++ b/dist/cjs/format/fileSize.js.map @@ -1 +1 @@ -{"version":3,"file":"fileSize.js","sourceRoot":"","sources":["../../../src/format/fileSize.ts"],"names":[],"mappings":";;;;;AAaA,2BA2BC;AAxCD,wDAA+B;AAG/B;;;;;;;;;GASG;AACH,SAAwB,QAAQ,CAC9B,IAAgB,EAChB,OAAe,IAAI,EACnB,WAAmB,CAAC,EACpB,WAAmB,GAAG,EACtB,qBAA6B,GAAG,EAChC,kBAA0B,GAAG;IAE7B,MAAM,GAAG,GAAG,CAAC,IAAI,CAAA;IAEjB,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;QACb,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,IAAI,GAAG,GAAG,IAAI,EAAE,CAAC;QACf,QAAQ,GAAG,CAAC,CAAA;IACd,CAAC;IAED,OAAO,IAAA,iBAAO,EACZ,GAAG,EACH,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EACvC,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,kBAAkB,EAClB,eAAe,CAChB,CAAA;AACH,CAAC"} \ No newline at end of file +{"version":3,"file":"fileSize.js","sourceRoot":"","sources":["../../../src/format/fileSize.ts"],"names":[],"mappings":";;;;;AAaA,2BAyBC;AAtCD,wDAA+B;AAG/B;;;;;;;;;GASG;AACH,SAAwB,QAAQ,CAC9B,IAAgB,EAChB,OAAe,IAAI,EACnB,WAAmB,CAAC,EACpB,WAAmB,GAAG,EACtB,qBAA6B,GAAG,EAChC,kBAA0B,GAAG;IAE7B,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;IAExB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;QACtC,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,MAAM,aAAa,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA;IAE/C,OAAO,IAAA,iBAAO,EACZ,GAAG,EACH,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EACvC,IAAI,EACJ,aAAa,EACb,QAAQ,EACR,kBAAkB,EAClB,eAAe,CAChB,CAAA;AACH,CAAC"} \ No newline at end of file diff --git a/dist/cjs/internal/base/baseGetTag.js b/dist/cjs/internal/base/baseGetTag.js index 5ab99a0..7001754 100644 --- a/dist/cjs/internal/base/baseGetTag.js +++ b/dist/cjs/internal/base/baseGetTag.js @@ -8,7 +8,7 @@ const root_1 = __importDefault(require("../../internal/root")); const getRawTag_1 = __importDefault(require("../../internal/getRawTag")); const nullTag = '[object Null]'; const undefinedTag = '[object Undefined]'; -const symToStringTag = root_1.default.Symbol ? root_1.default.Symbol.toStringTag : undefined; +const symToStringTag = root_1.default?.Symbol ? root_1.default.Symbol.toStringTag : undefined; /** * The base implementation of `getTag` without fallbacks for buggy environments. * diff --git a/dist/cjs/internal/base/baseGetTag.js.map b/dist/cjs/internal/base/baseGetTag.js.map index cf57886..97bd41f 100644 --- a/dist/cjs/internal/base/baseGetTag.js.map +++ b/dist/cjs/internal/base/baseGetTag.js.map @@ -1 +1 @@ -{"version":3,"file":"baseGetTag.js","sourceRoot":"","sources":["../../../../src/internal/base/baseGetTag.ts"],"names":[],"mappings":";;;;;AA0CA,6BAQC;AAlDD,2DAAkC;AAClC,qEAA4C;AA8B5C,MAAM,OAAO,GAAG,eAAe,CAAA;AAC/B,MAAM,YAAY,GAAG,oBAAoB,CAAA;AACzC,MAAM,cAAc,GAAG,cAAI,CAAC,MAAM,CAAC,CAAC,CAAC,cAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAA;AAExE;;;;;;GAMG;AACH,SAAwB,UAAU,CAAC,KAAU;IAC3C,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAClB,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAA;IACrD,CAAC;IAED,OAAO,cAAc,IAAI,cAAc,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC;QAC1D,CAAC,CAAC,IAAA,mBAAS,EAAC,KAAK,CAAC;QAClB,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAC3C,CAAC"} \ No newline at end of file +{"version":3,"file":"baseGetTag.js","sourceRoot":"","sources":["../../../../src/internal/base/baseGetTag.ts"],"names":[],"mappings":";;;;;AA0CA,6BAQC;AAlDD,2DAAkC;AAClC,qEAA4C;AA8B5C,MAAM,OAAO,GAAG,eAAe,CAAA;AAC/B,MAAM,YAAY,GAAG,oBAAoB,CAAA;AACzC,MAAM,cAAc,GAAG,cAAI,EAAE,MAAM,CAAC,CAAC,CAAC,cAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAA;AAEzE;;;;;;GAMG;AACH,SAAwB,UAAU,CAAC,KAAU;IAC3C,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAClB,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAA;IACrD,CAAC;IAED,OAAO,cAAc,IAAI,cAAc,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC;QAC1D,CAAC,CAAC,IAAA,mBAAS,EAAC,KAAK,CAAC;QAClB,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAC3C,CAAC"} \ No newline at end of file diff --git a/dist/cjs/internal/free/freeSelf.js b/dist/cjs/internal/free/freeSelf.js deleted file mode 100644 index 681e809..0000000 --- a/dist/cjs/internal/free/freeSelf.js +++ /dev/null @@ -1,5 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -/** Detect free variable `self`. */ -exports.default = typeof self === 'object' && self && self.Object === Object && self; -//# sourceMappingURL=freeSelf.js.map \ No newline at end of file diff --git a/dist/cjs/internal/free/freeSelf.js.map b/dist/cjs/internal/free/freeSelf.js.map deleted file mode 100644 index 5d2cc8c..0000000 --- a/dist/cjs/internal/free/freeSelf.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"freeSelf.js","sourceRoot":"","sources":["../../../../src/internal/free/freeSelf.ts"],"names":[],"mappings":";;AAAA,mCAAmC;AACnC,kBAAe,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,IAAI,CAAA"} \ No newline at end of file diff --git a/dist/cjs/internal/getRawTag.js b/dist/cjs/internal/getRawTag.js index b6ad01d..2b8c87f 100644 --- a/dist/cjs/internal/getRawTag.js +++ b/dist/cjs/internal/getRawTag.js @@ -5,18 +5,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) { Object.defineProperty(exports, "__esModule", { value: true }); exports.default = getRawTag; const root_1 = __importDefault(require("./root")); -/** Built-in value references. */ -const symToStringTag = root_1.default.Symbol ? root_1.default.Symbol.toStringTag : undefined; -/** Used for built-in method references. */ -const objectProto = Object.prototype; -/** Used to check objects for own properties. */ -const hasOwnProperty = objectProto.hasOwnProperty; -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -const nativeObjectToString = objectProto.toString; +// Prefer explicit, descriptive names for built-in references. +const TO_STRING_TAG = root_1.default?.Symbol ? root_1.default.Symbol.toStringTag : undefined; +const objectPrototype = Object.prototype; +const hasOwn = objectPrototype.hasOwnProperty; +const objectToString = objectPrototype.toString; +// Small, focused helper improves readability and reuse. +function isObjectLike(value) { + return value !== null && (typeof value === 'object' || typeof value === 'function'); +} /** * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. * @@ -25,20 +22,29 @@ const nativeObjectToString = objectProto.toString; * @returns {string} Returns the raw `toStringTag`. */ function getRawTag(value) { - const isOwn = hasOwnProperty.call(value, symToStringTag), tag = value[symToStringTag]; - let unmasked = false; + // Fast path: if no Symbol.toStringTag support or non-object, use default toString. + if (!TO_STRING_TAG || !isObjectLike(value)) { + return objectToString.call(value); + } + const obj = value; + const isOwn = hasOwn.call(obj, TO_STRING_TAG); + const previousTag = obj[TO_STRING_TAG]; + let masked = false; try { - value[symToStringTag] = undefined; - unmasked = true; + obj[TO_STRING_TAG] = undefined; + masked = true; + } + catch { + // Swallow errors from non-writable properties; fall through to toString. } - catch (error) { } - const result = nativeObjectToString.call(value); - if (unmasked) { + const result = objectToString.call(obj); + // Restore original state only if we managed to mask it. + if (masked) { if (isOwn) { - value[symToStringTag] = tag; + obj[TO_STRING_TAG] = previousTag; } else { - delete value[symToStringTag]; + delete obj[TO_STRING_TAG]; } } return result; diff --git a/dist/cjs/internal/getRawTag.js.map b/dist/cjs/internal/getRawTag.js.map index 5f690d1..9ddec0c 100644 --- a/dist/cjs/internal/getRawTag.js.map +++ b/dist/cjs/internal/getRawTag.js.map @@ -1 +1 @@ -{"version":3,"file":"getRawTag.js","sourceRoot":"","sources":["../../../src/internal/getRawTag.ts"],"names":[],"mappings":";;;;;AAyBA,4BAoBC;AA7CD,kDAAyB;AAEzB,iCAAiC;AACjC,MAAM,cAAc,GAAG,cAAI,CAAC,MAAM,CAAC,CAAC,CAAC,cAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAA;AAExE,2CAA2C;AAC3C,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAA;AAEpC,gDAAgD;AAChD,MAAM,cAAc,GAAG,WAAW,CAAC,cAAc,CAAA;AAEjD;;;;GAIG;AACH,MAAM,oBAAoB,GAAG,WAAW,CAAC,QAAQ,CAAA;AAEjD;;;;;;GAMG;AACH,SAAwB,SAAS,CAAC,KAAU;IAC1C,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,cAAc,CAAC,EACtD,GAAG,GAAG,KAAK,CAAC,cAAc,CAAC,CAAA;IAE7B,IAAI,QAAQ,GAAG,KAAK,CAAA;IAEpB,IAAI,CAAC;QACH,KAAK,CAAC,cAAc,CAAC,GAAG,SAAS,CAAA;QACjC,QAAQ,GAAG,IAAI,CAAA;IACjB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC,CAAA,CAAC;IAElB,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC/C,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,cAAc,CAAC,GAAG,GAAG,CAAA;QAC7B,CAAC;aAAM,CAAC;YACN,OAAO,KAAK,CAAC,cAAc,CAAC,CAAA;QAC9B,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC"} \ No newline at end of file +{"version":3,"file":"getRawTag.js","sourceRoot":"","sources":["../../../src/internal/getRawTag.ts"],"names":[],"mappings":";;;;;AAoBA,4BA8BC;AAlDD,kDAAyB;AAEzB,8DAA8D;AAC9D,MAAM,aAAa,GAAuB,cAAI,EAAE,MAAM,CAAC,CAAC,CAAC,cAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAA;AAC5F,MAAM,eAAe,GAAG,MAAM,CAAC,SAAS,CAAA;AACxC,MAAM,MAAM,GAAG,eAAe,CAAC,cAAc,CAAA;AAC7C,MAAM,cAAc,GAAG,eAAe,CAAC,QAAQ,CAAA;AAE/C,wDAAwD;AACxD,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,KAAK,KAAK,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,UAAU,CAAC,CAAA;AACrF,CAAC;AAED;;;;;;GAMG;AACH,SAAwB,SAAS,CAAC,KAAc;IAC9C,mFAAmF;IACnF,IAAI,CAAC,aAAa,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3C,OAAO,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACnC,CAAC;IAED,MAAM,GAAG,GAAG,KAAiC,CAAA;IAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAA;IAC7C,MAAM,WAAW,GAAG,GAAG,CAAC,aAAa,CAAC,CAAA;IAEtC,IAAI,MAAM,GAAG,KAAK,CAAA;IAClB,IAAI,CAAC;QACH,GAAG,CAAC,aAAa,CAAC,GAAG,SAAS,CAAA;QAC9B,MAAM,GAAG,IAAI,CAAA;IACf,CAAC;IAAC,MAAM,CAAC;QACP,yEAAyE;IAC3E,CAAC;IAED,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAEvC,wDAAwD;IACxD,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,KAAK,EAAE,CAAC;YACV,GAAG,CAAC,aAAa,CAAC,GAAG,WAAW,CAAA;QAClC,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,CAAC,aAAa,CAAC,CAAA;QAC3B,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"} \ No newline at end of file diff --git a/dist/cjs/internal/root.js b/dist/cjs/internal/root.js index 9908433..9d0d39b 100644 --- a/dist/cjs/internal/root.js +++ b/dist/cjs/internal/root.js @@ -1,10 +1,13 @@ "use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; Object.defineProperty(exports, "__esModule", { value: true }); -/** Used as a reference to the global object. */ -const freeGlobal_1 = __importDefault(require("./free/freeGlobal")); -const freeSelf_1 = __importDefault(require("./free/freeSelf")); -exports.default = freeGlobal_1.default || freeSelf_1.default || new Function('return this')(); +const root = typeof globalThis === 'object' + ? globalThis + : typeof self === 'object' + ? self + : typeof window === 'object' + ? window + : typeof global === 'object' + ? global + : undefined; +exports.default = root; //# sourceMappingURL=root.js.map \ No newline at end of file diff --git a/dist/cjs/internal/root.js.map b/dist/cjs/internal/root.js.map index 7390d0e..af5cf91 100644 --- a/dist/cjs/internal/root.js.map +++ b/dist/cjs/internal/root.js.map @@ -1 +1 @@ -{"version":3,"file":"root.js","sourceRoot":"","sources":["../../../src/internal/root.ts"],"names":[],"mappings":";;;;;AAAA,gDAAgD;AAChD,mEAA0C;AAC1C,+DAAsC;AAEtC,kBAAe,oBAAU,IAAI,kBAAQ,IAAI,IAAI,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAA"} \ No newline at end of file +{"version":3,"file":"root.js","sourceRoot":"","sources":["../../../src/internal/root.ts"],"names":[],"mappings":";;AAMA,MAAM,IAAI,GACR,OAAO,UAAU,KAAK,QAAQ;IAC5B,CAAC,CAAC,UAAU;IACZ,CAAC,CAAC,OAAO,IAAI,KAAK,QAAQ;QACxB,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,OAAO,MAAM,KAAK,QAAQ;YAC1B,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,OAAO,MAAM,KAAK,QAAQ;gBAC1B,CAAC,CAAC,MAAM;gBACR,CAAC,CAAC,SAAS,CAAA;AAErB,kBAAe,IAAI,CAAA"} \ No newline at end of file diff --git a/dist/cjs/is/isBuffer.js b/dist/cjs/is/isBuffer.js index ddb6fe9..91ba3e6 100644 --- a/dist/cjs/is/isBuffer.js +++ b/dist/cjs/is/isBuffer.js @@ -11,7 +11,7 @@ const freeModule = freeExports && typeof module == 'object' && module && !('node /** Detect the popular CommonJS extension `module.exports`. */ const moduleExports = freeModule && freeModule.exports === freeExports; /** Built-in value references. */ -const Buffer = moduleExports ? root_1.default.Buffer : undefined; +const Buffer = moduleExports ? root_1.default?.Buffer : undefined; /* Built-in method references for those with the same name as other `lodash` methods. */ const nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; /** diff --git a/dist/cjs/is/isBuffer.js.map b/dist/cjs/is/isBuffer.js.map index 92b4bf4..bf9eb05 100644 --- a/dist/cjs/is/isBuffer.js.map +++ b/dist/cjs/is/isBuffer.js.map @@ -1 +1 @@ -{"version":3,"file":"isBuffer.js","sourceRoot":"","sources":["../../../src/is/isBuffer.ts"],"names":[],"mappings":";;;;;AAAA,2DAAkC;AAElC,sCAAsC;AACtC,MAAM,WAAW,GAAG,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAA;AAE1F,qCAAqC;AACrC,MAAM,UAAU,GAAG,WAAW,IAAI,OAAO,MAAM,IAAI,QAAQ,IAAI,MAAM,IAAI,CAAC,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,MAAM,CAAA;AAE1G,8DAA8D;AAC9D,MAAM,aAAa,GAAG,UAAU,IAAI,UAAU,CAAC,OAAO,KAAK,WAAW,CAAA;AAEtE,iCAAiC;AACjC,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,cAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAA;AAEtD,wFAAwF;AACxF,MAAM,cAAc,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAA;AAE3D;;;;;;;;;;GAUG;AACH,kBAAe,cAAc,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAA"} \ No newline at end of file +{"version":3,"file":"isBuffer.js","sourceRoot":"","sources":["../../../src/is/isBuffer.ts"],"names":[],"mappings":";;;;;AAAA,2DAAkC;AAElC,sCAAsC;AACtC,MAAM,WAAW,GAAG,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAA;AAE1F,qCAAqC;AACrC,MAAM,UAAU,GAAG,WAAW,IAAI,OAAO,MAAM,IAAI,QAAQ,IAAI,MAAM,IAAI,CAAC,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,MAAM,CAAA;AAE1G,8DAA8D;AAC9D,MAAM,aAAa,GAAG,UAAU,IAAI,UAAU,CAAC,OAAO,KAAK,WAAW,CAAA;AAEtE,iCAAiC;AACjC,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,cAAI,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAA;AAEvD,wFAAwF;AACxF,MAAM,cAAc,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAA;AAE3D;;;;;;;;;;GAUG;AACH,kBAAe,cAAc,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAA"} \ No newline at end of file diff --git a/dist/cjs/object/equals.js b/dist/cjs/object/equals.js index 36a32d0..15e132b 100644 --- a/dist/cjs/object/equals.js +++ b/dist/cjs/object/equals.js @@ -9,27 +9,20 @@ exports.default = equal; */ const isObject_1 = __importDefault(require("../is/isObject")); function equal(origin, ...list) { - let i, l, leftChain, rightChain; + let i, l; + let leftVisited, rightVisited; if (!(0, isObject_1.default)(origin) || list.length === 0) { throw new Error('Need two or more arguments to compare'); } function compare2Objects(x, y) { - let p; - // remember that NaN === NaN returns false - // and isNaN(undefined) returns true - // isNumeric(x,y) - if (isNaN(x) && isNaN(y) && typeof x === 'number' && typeof y === 'number') { + // Быстрая проверка NaN + if (typeof x === 'number' && typeof y === 'number' && Number.isNaN(x) && Number.isNaN(y)) { return true; } - // Compare primitives and functions. - // Check if both arguments link to the same object. - // Especially useful on the step where we compare prototypes + // Базовое строгое равенство и кейсы для встроенных типов if (x === y) { return true; } - // Works in case when functions are created in constructor. - // Comparing dates is a common scenario. Another built-ins? - // We can even handle functions passed across iframes if ((typeof x === 'function' && typeof y === 'function') || (x instanceof Date && y instanceof Date) || (x instanceof RegExp && y instanceof RegExp) || @@ -37,63 +30,63 @@ function equal(origin, ...list) { (x instanceof Number && y instanceof Number)) { return x.toString() === y.toString(); } - // At last checking prototypes as good as we can + // Должны быть объектами дальше if (!(x instanceof Object && y instanceof Object)) { return false; } - if (Object.prototype.isPrototypeOf.call(x, y) || Object.prototype.isPrototypeOf.call(y, x)) { + // Прототипы/конструкторы + if (Object.getPrototypeOf(x) !== Object.getPrototypeOf(y)) { return false; } if (x.constructor !== y.constructor) { return false; } - if (x.prototype !== y.prototype) { + // Проверка на циклические ссылки + if (leftVisited.has(x) || rightVisited.has(y)) { return false; } - // Check for infinitive linking loops - if (leftChain.includes(x) || rightChain.includes(y)) { + // Быстрая проверка количества ключей (собственных) + const xKeys = Object.keys(x); + const yKeys = Object.keys(y); + if (xKeys.length !== yKeys.length) { return false; } - // Quick checking of one object being a subset of another. - // todo: cache the structure of arguments[0] for performance - for (p in y) { - if (Object.prototype.isPrototypeOf.call(y, p) !== Object.prototype.isPrototypeOf.call(x, p)) { + // Сопоставление ключей по типам значений (дополнительно) + for (let k = 0; k < yKeys.length; k++) { + const p = yKeys[k]; + if (!Object.prototype.hasOwnProperty.call(x, p)) { return false; } - else if (typeof y[p] !== typeof x[p]) { + if (typeof y[p] !== typeof x[p]) { return false; } } - for (p in x) { - if (Object.prototype.isPrototypeOf.call(y, p) !== Object.prototype.isPrototypeOf.call(x, p)) { - return false; - } - else if (typeof y[p] !== typeof x[p]) { - return false; + // Глубокое сравнение + leftVisited.add(x); + rightVisited.add(y); + for (let k = 0; k < xKeys.length; k++) { + const p = xKeys[k]; + const xv = x[p]; + const yv = y[p]; + const t = typeof xv; + if (t === 'object' || t === 'function') { + if (!compare2Objects(xv, yv)) { + return false; + } } - switch (typeof x[p]) { - case 'object': - case 'function': - leftChain.push(x); - rightChain.push(y); - if (!compare2Objects(x[p], y[p])) { - return false; - } - leftChain.pop(); - rightChain.pop(); - break; - default: - if (x[p] !== y[p]) { - return false; - } - break; + else { + if (xv !== yv) { + return false; + } } } + leftVisited.delete(x); + rightVisited.delete(y); return true; } for (i = 0, l = list.length; i < l; i++) { - leftChain = []; // @Todo: this can be cached - rightChain = []; + leftVisited = new Set(); + rightVisited = new Set(); if (!compare2Objects(origin, list[i])) { return false; } diff --git a/dist/cjs/object/equals.js.map b/dist/cjs/object/equals.js.map index 2b0c239..d44da2f 100644 --- a/dist/cjs/object/equals.js.map +++ b/dist/cjs/object/equals.js.map @@ -1 +1 @@ -{"version":3,"file":"equals.js","sourceRoot":"","sources":["../../../src/object/equals.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"equals.js","sourceRoot":"","sources":["../../../src/object/equals.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/object/merge.js b/dist/cjs/object/merge.js index e3db331..b4237a3 100644 --- a/dist/cjs/object/merge.js +++ b/dist/cjs/object/merge.js @@ -6,20 +6,36 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.default = merge; const clone_1 = __importDefault(require("../core/clone")); const isObject_1 = __importDefault(require("../is/isObject")); +// Узкое определение plain object без опоры на constructor +function isPlainObject(val) { + if (!(0, isObject_1.default)(val)) + return false; + const proto = Object.getPrototypeOf(val); + return proto === Object.prototype || proto === null; +} +/** + * Merge objects recursively + */ function merge(original, ...values) { - const ln = values.length; - let i = 0, object, key, value, sourceKey; - for (; i < ln; i++) { - object = values[i]; + for (let i = 0; i < values.length; i++) { + const object = values[i]; if (!(0, isObject_1.default)(object)) { continue; } - for (key in object) { - value = object[key]; - if (value && value.constructor === Object) { - sourceKey = original[key]; - if (sourceKey && sourceKey.constructor === Object) { - merge(sourceKey, value); + for (const key in object) { + if (!Object.prototype.hasOwnProperty.call(object, key)) + continue; + const value = object[key]; + const target = original[key]; + // Массивы: перезаписываем клоном (предсказуемее, чем неявные стратегии) + if (Array.isArray(value)) { + ; + original[key] = (0, clone_1.default)(value); + continue; + } + if (isPlainObject(value)) { + if (isPlainObject(target)) { + merge(target, value); } else { ; diff --git a/dist/cjs/object/merge.js.map b/dist/cjs/object/merge.js.map index f6c22f5..beaba02 100644 --- a/dist/cjs/object/merge.js.map +++ b/dist/cjs/object/merge.js.map @@ -1 +1 @@ -{"version":3,"file":"merge.js","sourceRoot":"","sources":["../../../src/object/merge.ts"],"names":[],"mappings":";;;;;AAyCA,wBA6BC;AAtED,yDAAgC;AAChC,6DAAoC;AAwCpC,SAAwB,KAAK,CAA4B,QAAoB,EAAE,GAAG,MAAoB;IACpG,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAA;IACxB,IAAI,CAAC,GAAG,CAAC,EACP,MAAkB,EAClB,GAAgB,EAChB,KAAU,EACV,SAAc,CAAA;IAEhB,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QACnB,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QAClB,IAAI,CAAC,IAAA,kBAAQ,EAAC,MAAM,CAAC,EAAE,CAAC;YACtB,SAAQ;QACV,CAAC;QACD,KAAK,GAAG,IAAI,MAAM,EAAE,CAAC;YACnB,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;YACnB,IAAI,KAAK,IAAI,KAAK,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;gBAC1C,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;gBACzB,IAAI,SAAS,IAAI,SAAS,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;oBAClD,KAAK,CAAI,SAAS,EAAE,KAAK,CAAC,CAAA;gBAC5B,CAAC;qBAAM,CAAC;oBACN,CAAC;oBAAI,QAAQ,CAAC,GAAG,CAAE,GAAG,IAAA,eAAK,EAAI,KAAK,CAAC,CAAA;gBACvC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,CAAC;gBAAI,QAAQ,CAAC,GAAG,CAAE,GAAG,KAAK,CAAA;YAC7B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAU,QAAQ,CAAA;AACpB,CAAC"} \ No newline at end of file +{"version":3,"file":"merge.js","sourceRoot":"","sources":["../../../src/object/merge.ts"],"names":[],"mappings":";;;;;AAeA,wBAgCC;AA/CD,yDAAgC;AAChC,6DAAoC;AAIpC,0DAA0D;AAC1D,SAAS,aAAa,CAAC,GAAQ;IAC7B,IAAI,CAAC,IAAA,kBAAQ,EAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAA;IAChC,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;IACxC,OAAO,KAAK,KAAK,MAAM,CAAC,SAAS,IAAI,KAAK,KAAK,IAAI,CAAA;AACrD,CAAC;AAED;;GAEG;AACH,SAAwB,KAAK,CAA4B,QAAoB,EAAE,GAAG,MAAoB;IACpG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QACxB,IAAI,CAAC,IAAA,kBAAQ,EAAC,MAAM,CAAC,EAAE,CAAC;YACtB,SAAQ;QACV,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC;gBAAE,SAAQ;YAEhE,MAAM,KAAK,GAAI,MAAc,CAAC,GAAG,CAAC,CAAA;YAClC,MAAM,MAAM,GAAI,QAAgB,CAAC,GAAG,CAAC,CAAA;YAErC,wEAAwE;YACxE,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,CAAC;gBAAC,QAAgB,CAAC,GAAG,CAAC,GAAG,IAAA,eAAK,EAAC,KAAK,CAAC,CAAA;gBACtC,SAAQ;YACV,CAAC;YAED,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC1B,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;gBACtB,CAAC;qBAAM,CAAC;oBACN,CAAC;oBAAC,QAAgB,CAAC,GAAG,CAAC,GAAG,IAAA,eAAK,EAAC,KAAK,CAAC,CAAA;gBACxC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,CAAC;gBAAC,QAAgB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;YACjC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,QAAa,CAAA;AACtB,CAAC"} \ No newline at end of file diff --git a/dist/cjs/object/removeEmpty.js b/dist/cjs/object/removeEmpty.js index 13ee44f..bfe5324 100644 --- a/dist/cjs/object/removeEmpty.js +++ b/dist/cjs/object/removeEmpty.js @@ -14,36 +14,38 @@ const isEmpty_1 = __importDefault(require("../is/isEmpty")); * @return {{}} */ function removeEmpty(object) { - let result = {}, key; - for (key in object) { - if (object.hasOwnProperty(key) && !(0, isEmpty_1.default)(object[key])) { - if ((0, isObject_1.default)(object[key])) { - const r = removeEmpty(object[key]); - if (!(0, isEmpty_1.default)(r)) { - result[key] = r; + const result = {}; + for (const [key, value] of Object.entries(object)) { + if ((0, isEmpty_1.default)(value)) { + continue; + } + // Сначала массивы, затем plain-объекты + if (Array.isArray(value)) { + const a = []; + for (const v of value) { + if ((0, isString_1.default)(v)) { + a.push(v); } - continue; - } - if (Array.isArray(object[key])) { - const a = []; - object[key].forEach((v) => { - if ((0, isString_1.default)(v)) { - a.push(v); - } - else { - const r = removeEmpty(v); - if (!(0, isEmpty_1.default)(r)) { - a.push(r); - } + else { + const r = removeEmpty(v); + if (!(0, isEmpty_1.default)(r)) { + a.push(r); } - }); - if (!(0, isEmpty_1.default)(a)) { - result[key] = a; } - continue; } - result[key] = object[key]; + if (!(0, isEmpty_1.default)(a)) { + result[key] = a; + } + continue; + } + if ((0, isObject_1.default)(value)) { + const r = removeEmpty(value); + if (!(0, isEmpty_1.default)(r)) { + result[key] = r; + } + continue; } + result[key] = value; } return result; } diff --git a/dist/cjs/object/removeEmpty.js.map b/dist/cjs/object/removeEmpty.js.map index 07cbb98..457aece 100644 --- a/dist/cjs/object/removeEmpty.js.map +++ b/dist/cjs/object/removeEmpty.js.map @@ -1 +1 @@ -{"version":3,"file":"removeEmpty.js","sourceRoot":"","sources":["../../../src/object/removeEmpty.ts"],"names":[],"mappings":";;;;;AAUA,8BAuCC;AAjDD,6DAAoC;AACpC,6DAAoC;AACpC,2DAAkC;AAElC;;;;;GAKG;AACH,SAAwB,WAAW,CAAC,MAAgC;IAClE,IAAI,MAAM,GAA6B,EAAE,EACvC,GAAgB,CAAA;IAElB,KAAK,GAAG,IAAI,MAAM,EAAE,CAAC;QACnB,IAAI,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAA,iBAAO,EAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACxD,IAAI,IAAA,kBAAQ,EAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBAC1B,MAAM,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;gBAClC,IAAI,CAAC,IAAA,iBAAO,EAAC,CAAC,CAAC,EAAE,CAAC;oBAChB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBACjB,CAAC;gBAED,SAAQ;YACV,CAAC;YAED,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBAC/B,MAAM,CAAC,GAAU,EAAE,CAAA;gBACnB,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAM,EAAE,EAAE;oBAC7B,IAAI,IAAA,kBAAQ,EAAC,CAAC,CAAC,EAAE,CAAC;wBAChB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;oBACX,CAAC;yBAAM,CAAC;wBACN,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;wBACxB,IAAI,CAAC,IAAA,iBAAO,EAAC,CAAC,CAAC,EAAE,CAAC;4BAChB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;wBACX,CAAC;oBACH,CAAC;gBACH,CAAC,CAAC,CAAA;gBACF,IAAI,CAAC,IAAA,iBAAO,EAAC,CAAC,CAAC,EAAE,CAAC;oBAChB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBACjB,CAAC;gBAED,SAAQ;YACV,CAAC;YAED,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;QAC3B,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"} \ No newline at end of file +{"version":3,"file":"removeEmpty.js","sourceRoot":"","sources":["../../../src/object/removeEmpty.ts"],"names":[],"mappings":";;;;;AAUA,8BAuCC;AAjDD,6DAAoC;AACpC,6DAAoC;AACpC,2DAAkC;AAElC;;;;;GAKG;AACH,SAAwB,WAAW,CAAC,MAAgC;IAClE,MAAM,MAAM,GAA6B,EAAE,CAAA;IAE3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,IAAI,IAAA,iBAAO,EAAC,KAAK,CAAC,EAAE,CAAC;YACnB,SAAQ;QACV,CAAC;QAED,uCAAuC;QACvC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,GAAU,EAAE,CAAA;YACnB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;gBACtB,IAAI,IAAA,kBAAQ,EAAC,CAAC,CAAC,EAAE,CAAC;oBAChB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBACX,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,GAAG,WAAW,CAAC,CAAQ,CAAC,CAAA;oBAC/B,IAAI,CAAC,IAAA,iBAAO,EAAC,CAAC,CAAC,EAAE,CAAC;wBAChB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;oBACX,CAAC;gBACH,CAAC;YACH,CAAC;YACD,IAAI,CAAC,IAAA,iBAAO,EAAC,CAAC,CAAC,EAAE,CAAC;gBAChB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACjB,CAAC;YACD,SAAQ;QACV,CAAC;QAED,IAAI,IAAA,kBAAQ,EAAC,KAAK,CAAC,EAAE,CAAC;YACpB,MAAM,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAA;YAC5B,IAAI,CAAC,IAAA,iBAAO,EAAC,CAAC,CAAC,EAAE,CAAC;gBAChB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACjB,CAAC;YACD,SAAQ;QACV,CAAC;QAED,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;IACrB,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"} \ No newline at end of file diff --git a/dist/cjs/string/camelCase.js b/dist/cjs/string/camelCase.js index 6cb44e4..40202cb 100644 --- a/dist/cjs/string/camelCase.js +++ b/dist/cjs/string/camelCase.js @@ -32,7 +32,10 @@ const preserveCamelCase = (value) => { return value; }; const camelCase = (input, options) => { - options = Object.assign({ pascalCase: false }, (options ? options : {})); + options = { + pascalCase: false, + ...(options ? options : {}), + }; const postProcess = (x) => options && options.pascalCase ? x.charAt(0).toUpperCase() + x.slice(1) : x; let str = typeof input === 'string' ? input.trim() diff --git a/dist/cjs/string/camelCase.js.map b/dist/cjs/string/camelCase.js.map index 41d8856..fd9e758 100644 --- a/dist/cjs/string/camelCase.js.map +++ b/dist/cjs/string/camelCase.js.map @@ -1 +1 @@ -{"version":3,"file":"camelCase.js","sourceRoot":"","sources":["../../../src/string/camelCase.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"camelCase.js","sourceRoot":"","sources":["../../../src/string/camelCase.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/structures/CollectionArray.js b/dist/cjs/structures/CollectionArray.js index 9de1587..fb13174 100644 --- a/dist/cjs/structures/CollectionArray.js +++ b/dist/cjs/structures/CollectionArray.js @@ -7,9 +7,7 @@ exports.CollectionArray = void 0; const isFunction_1 = __importDefault(require("../is/isFunction")); const toString_1 = __importDefault(require("../to/toString")); class CollectionArray { - constructor() { - this.items = []; - } + items = []; push(item) { this.items.push(item); } @@ -26,18 +24,16 @@ class CollectionArray { return [...this.items]; } toString(callback) { - const data = this.toArray(); if (callback && (0, isFunction_1.default)(callback)) { - return data.map(item => callback(item)).toString(); + return this.items.map(item => callback(item)).toString(); } - return data.toString(); + return this.items.toString(); } map(callback) { - const data = this.toArray(); if (!(0, isFunction_1.default)(callback)) { - throw Error('Invalid map-function: ' + (0, toString_1.default)(callback)); + throw Error(`Invalid map-function: ${(0, toString_1.default)(callback)}`); } - return data.map(item => callback(item)); + return this.items.map((item, index, array) => callback(item, index, array)); } } exports.CollectionArray = CollectionArray; diff --git a/dist/cjs/structures/CollectionArray.js.map b/dist/cjs/structures/CollectionArray.js.map index eb4e937..8188e59 100644 --- a/dist/cjs/structures/CollectionArray.js.map +++ b/dist/cjs/structures/CollectionArray.js.map @@ -1 +1 @@ -{"version":3,"file":"CollectionArray.js","sourceRoot":"","sources":["../../../src/structures/CollectionArray.ts"],"names":[],"mappings":";;;;;;AAAA,iEAAwC;AACxC,6DAAoC;AAEpC,MAAa,eAAe;IAA5B;QACY,UAAK,GAAQ,EAAE,CAAA;IAyC3B,CAAC;IAvCQ,IAAI,CAAC,IAAO;QACjB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACvB,CAAC;IAEM,IAAI;QACT,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;IACvD,CAAC;IAEM,IAAI;QACT,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAA;IAC1B,CAAC;IAEM,OAAO;QACZ,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IAC1B,CAAC;IAEM,OAAO;QACZ,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAA;IACxB,CAAC;IAEM,QAAQ,CAAC,QAAwB;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAA;QAE3B,IAAI,QAAQ,IAAI,IAAA,oBAAU,EAAC,QAAQ,CAAC,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;QACpD,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAA;IACxB,CAAC;IAEM,GAAG,CAAgB,QAAuB;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAA;QAE3B,IAAI,CAAC,IAAA,oBAAU,EAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,MAAM,KAAK,CAAC,wBAAwB,GAAG,IAAA,kBAAQ,EAAC,QAAQ,CAAC,CAAC,CAAA;QAC5D,CAAC;QAED,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;IACzC,CAAC;CACF;AA1CD,0CA0CC;AAED,kBAAe,IAAI,eAAe,EAAE,CAAA"} \ No newline at end of file +{"version":3,"file":"CollectionArray.js","sourceRoot":"","sources":["../../../src/structures/CollectionArray.ts"],"names":[],"mappings":";;;;;;AAAA,iEAAwC;AACxC,6DAAoC;AAEpC,MAAa,eAAe;IAChB,KAAK,GAAQ,EAAE,CAAA;IAElB,IAAI,CAAC,IAAO;QACjB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACvB,CAAC;IAEM,IAAI;QACT,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;IACvD,CAAC;IAEM,IAAI;QACT,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAA;IAC1B,CAAC;IAEM,OAAO;QACZ,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IAC1B,CAAC;IAEM,OAAO;QACZ,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAA;IACxB,CAAC;IAEM,QAAQ,CAAC,QAA4B;QAC1C,IAAI,QAAQ,IAAI,IAAA,oBAAU,EAAC,QAAQ,CAAC,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;QAC1D,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAA;IAC9B,CAAC;IAEM,GAAG,CAAI,QAAyD;QACrE,IAAI,CAAC,IAAA,oBAAU,EAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,MAAM,KAAK,CAAC,yBAAyB,IAAA,kBAAQ,EAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QAC5D,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAA;IAC7E,CAAC;CACF;AApCD,0CAoCC;AAED,kBAAe,IAAI,eAAe,EAAE,CAAA"} \ No newline at end of file diff --git a/dist/cjs/structures/PriorityQueue.js b/dist/cjs/structures/PriorityQueue.js new file mode 100644 index 0000000..f403a19 --- /dev/null +++ b/dist/cjs/structures/PriorityQueue.js @@ -0,0 +1,109 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PriorityQueue = void 0; +const isFunction_1 = __importDefault(require("../is/isFunction")); +const DEFAULT_PRIORITY = 0; +// Priority queue implemented as an array of buckets (queues) keyed by priority. +// Higher numeric priority is dequeued first. +class PriorityQueue { + // Buckets indexed by priority: each bucket is a FIFO queue (array) of items. + buckets = []; + // Total number of items across all buckets. + count = 0; + // Highest priority index that currently has (or last had) items; -1 means empty. + maxPriority = -1; + push(item, priority = DEFAULT_PRIORITY) { + if (priority < 0 || !Number.isFinite(priority)) { + throw new TypeError(`priority must be a non-negative finite number, got: ${priority}`); + } + if (!this.buckets[priority]) { + this.buckets[priority] = []; + } + this.buckets[priority].push(item); + this.count++; + if (priority > this.maxPriority) { + this.maxPriority = priority; + } + } + pull() { + if (this.isEmpty()) { + return undefined; + } + // Scan down from current highest priority to find the next non-empty bucket. + for (let p = this.maxPriority; p >= 0; p--) { + const bucket = this.buckets[p]; + if (bucket && bucket.length > 0) { + const result = bucket.shift(); + this.count--; + // If the bucket becomes empty and this was the highest, adjust maxPriority. + if (bucket.length === 0 && p === this.maxPriority) { + this.recalculateMaxPriority(); + } + return result; + } + } + // No items found; normalize internal state. + this.maxPriority = -1; + return undefined; + } + peek() { + if (this.isEmpty()) { + return undefined; + } + for (let p = this.maxPriority; p >= 0; p--) { + const bucket = this.buckets[p]; + if (bucket && bucket.length > 0) { + return bucket[0]; + } + } + return undefined; + } + toArray() { + // Flatten from high to low priority while preserving FIFO within each bucket. + const result = []; + for (let p = this.maxPriority; p >= 0; p--) { + const bucket = this.buckets[p]; + if (bucket && bucket.length > 0) { + // Maintain order within the same priority. + for (let i = 0; i < bucket.length; i++) { + result.push(bucket[i]); + } + } + } + return result; + } + size() { + return this.count; + } + isEmpty() { + return this.count === 0; + } + reset() { + this.buckets = []; + this.count = 0; + this.maxPriority = -1; + } + toString(callback) { + const data = this.toArray(); + if (callback && (0, isFunction_1.default)(callback)) { + return data.map(item => callback(item)).toString(); + } + return data.toString(); + } + recalculateMaxPriority() { + // Find the next lower priority that still has items. + while (this.maxPriority >= 0) { + const bucket = this.buckets[this.maxPriority]; + if (bucket && bucket.length > 0) { + break; + } + this.maxPriority--; + } + } +} +exports.PriorityQueue = PriorityQueue; +exports.default = new PriorityQueue(); +//# sourceMappingURL=PriorityQueue.js.map \ No newline at end of file diff --git a/dist/cjs/structures/PriorityQueue.js.map b/dist/cjs/structures/PriorityQueue.js.map new file mode 100644 index 0000000..d713f00 --- /dev/null +++ b/dist/cjs/structures/PriorityQueue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"PriorityQueue.js","sourceRoot":"","sources":["../../../src/structures/PriorityQueue.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/structures/Queue.js b/dist/cjs/structures/Queue.js index 323141b..9b7975c 100644 --- a/dist/cjs/structures/Queue.js +++ b/dist/cjs/structures/Queue.js @@ -6,9 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.Queue = void 0; const isFunction_1 = __importDefault(require("../is/isFunction")); class Queue { - constructor() { - this.data = []; - } + data = []; push(item) { this.data.push(item); } diff --git a/dist/cjs/structures/Queue.js.map b/dist/cjs/structures/Queue.js.map index f7cc90a..31b3d3e 100644 --- a/dist/cjs/structures/Queue.js.map +++ b/dist/cjs/structures/Queue.js.map @@ -1 +1 @@ -{"version":3,"file":"Queue.js","sourceRoot":"","sources":["../../../src/structures/Queue.ts"],"names":[],"mappings":";;;;;;AAAA,iEAAwC;AAExC,MAAa,KAAK;IAAlB;QACY,SAAI,GAAQ,EAAE,CAAA;IAuC1B,CAAC;IArCQ,IAAI,CAAC,IAAO;QACjB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACtB,CAAC;IAEM,IAAI;QACT,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;IACxD,CAAC;IAEM,IAAI;QACT,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACnD,CAAC;IAEM,IAAI;QACT,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAA;IACzB,CAAC;IAEM,OAAO;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAA;IAC/B,CAAC;IAEM,OAAO;QACZ,OAAO,IAAI,CAAC,IAAI,CAAA;IAClB,CAAC;IAEM,KAAK;QACV,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;IACtB,CAAC;IAEM,QAAQ,CAAC,QAAwB;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAA;QAE3B,IAAI,QAAQ,IAAI,IAAA,oBAAU,EAAC,QAAQ,CAAC,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;QACpD,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAA;IACxB,CAAC;CACF;AAxCD,sBAwCC;AAED,kBAAe,IAAI,KAAK,EAAE,CAAA"} \ No newline at end of file +{"version":3,"file":"Queue.js","sourceRoot":"","sources":["../../../src/structures/Queue.ts"],"names":[],"mappings":";;;;;;AAAA,iEAAwC;AAExC,MAAa,KAAK;IACN,IAAI,GAAQ,EAAE,CAAA;IAEjB,IAAI,CAAC,IAAO;QACjB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACtB,CAAC;IAEM,IAAI;QACT,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;IACxD,CAAC;IAEM,IAAI;QACT,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACnD,CAAC;IAEM,IAAI;QACT,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAA;IACzB,CAAC;IAEM,OAAO;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAA;IAC/B,CAAC;IAEM,OAAO;QACZ,OAAO,IAAI,CAAC,IAAI,CAAA;IAClB,CAAC;IAEM,KAAK;QACV,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;IACtB,CAAC;IAEM,QAAQ,CAAC,QAAwB;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAA;QAE3B,IAAI,QAAQ,IAAI,IAAA,oBAAU,EAAC,QAAQ,CAAC,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;QACpD,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAA;IACxB,CAAC;CACF;AAxCD,sBAwCC;AAED,kBAAe,IAAI,KAAK,EAAE,CAAA"} \ No newline at end of file diff --git a/dist/cjs/structures/Stack.js b/dist/cjs/structures/Stack.js index 0d7e887..7b736e3 100644 --- a/dist/cjs/structures/Stack.js +++ b/dist/cjs/structures/Stack.js @@ -6,9 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.Stack = void 0; const isFunction_1 = __importDefault(require("../is/isFunction")); class Stack { - constructor() { - this.data = []; - } + data = []; push(item) { this.data.push(item); } diff --git a/dist/cjs/structures/Stack.js.map b/dist/cjs/structures/Stack.js.map index ba8d5de..d9f8c09 100644 --- a/dist/cjs/structures/Stack.js.map +++ b/dist/cjs/structures/Stack.js.map @@ -1 +1 @@ -{"version":3,"file":"Stack.js","sourceRoot":"","sources":["../../../src/structures/Stack.ts"],"names":[],"mappings":";;;;;;AAAA,iEAAwC;AAExC,MAAa,KAAK;IAAlB;QACY,SAAI,GAAQ,EAAE,CAAA;IAmC1B,CAAC;IAjCQ,IAAI,CAAC,IAAO;QACjB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACtB,CAAC;IAEM,IAAI;QACT,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;IACtD,CAAC;IAEM,IAAI;QACT,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACjE,CAAC;IAEM,IAAI;QACT,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAA;IACzB,CAAC;IAEM,OAAO;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAA;IAC/B,CAAC;IAEM,OAAO;QACZ,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAA;IACjC,CAAC;IAEM,QAAQ,CAAC,QAAwB;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAA;QAE3B,IAAI,QAAQ,IAAI,IAAA,oBAAU,EAAC,QAAQ,CAAC,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;QACpD,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAA;IACxB,CAAC;CACF;AApCD,sBAoCC;AAED,kBAAe,IAAI,KAAK,EAAE,CAAA"} \ No newline at end of file +{"version":3,"file":"Stack.js","sourceRoot":"","sources":["../../../src/structures/Stack.ts"],"names":[],"mappings":";;;;;;AAAA,iEAAwC;AAExC,MAAa,KAAK;IACN,IAAI,GAAQ,EAAE,CAAA;IAEjB,IAAI,CAAC,IAAO;QACjB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACtB,CAAC;IAEM,IAAI;QACT,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;IACtD,CAAC;IAEM,IAAI;QACT,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACjE,CAAC;IAEM,IAAI;QACT,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAA;IACzB,CAAC;IAEM,OAAO;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAA;IAC/B,CAAC;IAEM,OAAO;QACZ,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAA;IACjC,CAAC;IAEM,QAAQ,CAAC,QAAwB;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAA;QAE3B,IAAI,QAAQ,IAAI,IAAA,oBAAU,EAAC,QAAQ,CAAC,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;QACpD,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAA;IACxB,CAAC;CACF;AApCD,sBAoCC;AAED,kBAAe,IAAI,KAAK,EAAE,CAAA"} \ No newline at end of file diff --git a/dist/esm/array/arrayEach.mjs.map b/dist/esm/array/arrayEach.mjs.map index 08e3918..3d9a99b 100644 --- a/dist/esm/array/arrayEach.mjs.map +++ b/dist/esm/array/arrayEach.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/array/arrayEach.mjs","sourceRoot":"","sources":["../../../src/array/arrayEach.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAI,KAAU,EAAE,QAA8B;IAC7E,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;IAC3B,IAAI,KAAK,GAAG,CAAC,CAAC,CAAA;IAEd,OAAO,EAAE,KAAK,GAAG,MAAM,EAAE,CAAC;QACxB,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC;YACnD,MAAK;QACP,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/array/arrayEach.mjs","sourceRoot":"","sources":["../../../src/array/arrayEach.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAI,KAAU,EAAE,QAA8B;IAC7E,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;IAC3B,IAAI,KAAK,GAAG,CAAC,CAAC,CAAA;IAEd,OAAO,EAAE,KAAK,GAAG,MAAM,EAAE,CAAC;QACxB,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC;YACnD,MAAK;QACP,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC"} \ No newline at end of file diff --git a/dist/esm/array/clear.mjs.map b/dist/esm/array/clear.mjs.map index 8ee72aa..38989de 100644 --- a/dist/esm/array/clear.mjs.map +++ b/dist/esm/array/clear.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/array/clear.mjs","sourceRoot":"","sources":["../../../src/array/clear.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,KAAiB;IAC7C,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;AAClB,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/array/clear.mjs","sourceRoot":"","sources":["../../../src/array/clear.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,KAAiB;IAC7C,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;AAClB,CAAC"} \ No newline at end of file diff --git a/dist/esm/array/difference.mjs.map b/dist/esm/array/difference.mjs.map index e7fc51d..f56d970 100644 --- a/dist/esm/array/difference.mjs.map +++ b/dist/esm/array/difference.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/array/difference.mjs","sourceRoot":"","sources":["../../../src/array/difference.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,UAAU,CAAI,KAAU,EAAE,MAAW;IAC3D,OAAO,CAAC,GAAG,IAAI,GAAG,CAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAChE,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/array/difference.mjs","sourceRoot":"","sources":["../../../src/array/difference.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,UAAU,CAAI,KAAU,EAAE,MAAW;IAC3D,OAAO,CAAC,GAAG,IAAI,GAAG,CAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAChE,CAAC"} \ No newline at end of file diff --git a/dist/esm/array/equals.mjs.map b/dist/esm/array/equals.mjs.map index 30c15b6..f7859f7 100644 --- a/dist/esm/array/equals.mjs.map +++ b/dist/esm/array/equals.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/array/equals.mjs","sourceRoot":"","sources":["../../../src/array/equals.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,eAAe,CAAA;AACpC,OAAO,YAAY,MAAM,iBAAiB,CAAA;AAE1C;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,MAAa,EAAE,MAAa;IACzD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAA;IAC7B,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAA;IAC7B,IAAI,CAAC,CAAA;IAEL,kDAAkD;IAClD,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,OAAO,KAAK,CAAA;IACd,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;QAC7B,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3B,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAClC,OAAO,KAAK,CAAA;gBACd,CAAC;gBACD,SAAQ;YACV,CAAC;YAED,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/C,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACxC,OAAO,KAAK,CAAA;gBACd,CAAC;gBACD,SAAQ;YACV,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5B,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/array/equals.mjs","sourceRoot":"","sources":["../../../src/array/equals.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,eAAe,CAAA;AACpC,OAAO,YAAY,MAAM,iBAAiB,CAAA;AAE1C;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,MAAa,EAAE,MAAa;IACzD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAA;IAC7B,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAA;IAC7B,IAAI,CAAC,CAAA;IAEL,kDAAkD;IAClD,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,OAAO,KAAK,CAAA;IACd,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;QAC7B,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3B,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAClC,OAAO,KAAK,CAAA;gBACd,CAAC;gBACD,SAAQ;YACV,CAAC;YAED,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/C,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACxC,OAAO,KAAK,CAAA;gBACd,CAAC;gBACD,SAAQ;YACV,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5B,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC"} \ No newline at end of file diff --git a/dist/esm/array/index.mjs.map b/dist/esm/array/index.mjs.map index a44d3e4..de911ee 100644 --- a/dist/esm/array/index.mjs.map +++ b/dist/esm/array/index.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/array/index.mjs","sourceRoot":"","sources":["../../../src/array/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,SAAS,CAAA;AAC3B,OAAO,SAAS,MAAM,aAAa,CAAA;AACnC,OAAO,UAAU,MAAM,cAAc,CAAA;AACrC,OAAO,YAAY,MAAM,UAAU,CAAA;AACnC,OAAO,MAAM,MAAM,UAAU,CAAA;AAC7B,OAAO,qBAAqB,MAAM,yBAAyB,CAAA;AAC3D,OAAO,SAAS,EAAE,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAErD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,qBAAqB,EAAE,SAAS,EAAE,YAAY,EAAE,CAAA"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/array/index.mjs","sourceRoot":"","sources":["../../../src/array/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,SAAS,CAAA;AAC3B,OAAO,SAAS,MAAM,aAAa,CAAA;AACnC,OAAO,UAAU,MAAM,cAAc,CAAA;AACrC,OAAO,YAAY,MAAM,UAAU,CAAA;AACnC,OAAO,MAAM,MAAM,UAAU,CAAA;AAC7B,OAAO,qBAAqB,MAAM,yBAAyB,CAAA;AAC3D,OAAO,SAAS,EAAE,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAErD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,qBAAqB,EAAE,SAAS,EAAE,YAAY,EAAE,CAAA"} \ No newline at end of file diff --git a/dist/esm/array/intersect.mjs b/dist/esm/array/intersect.mjs index 4446009..21ec2b3 100644 --- a/dist/esm/array/intersect.mjs +++ b/dist/esm/array/intersect.mjs @@ -6,8 +6,18 @@ * @returns {any[]} */ export default function intersect(array, array2) { - const set = new Set(array); - return [...new Set(array2.filter(item => set.has(item)))]; + // Уникальное пересечение за один проход по меньшему множеству + const aSet = new Set(array); + const bSet = new Set(array2); + const result = []; + // Идём по меньшему набору уникальных значений + const [small, big] = aSet.size <= bSet.size ? [aSet, bSet] : [bSet, aSet]; + for (const v of small) { + if (big.has(v)) { + result.push(v); + } + } + return result; } /** * Return common items for all arrays @@ -17,8 +27,8 @@ export default function intersect(array, array2) { * @returns {*|any[]} */ export function intersectAll(array, ...arrays) { - return arrays.reduce((previous, next) => { - return intersect(previous, next); - }, array); + // Начинаем с самого короткого массива для уменьшения промежуточных наборов + const all = [array, ...arrays].sort((a, b) => a.length - b.length); + return all.slice(1).reduce((prev, next) => intersect(prev, next), all[0]); } //# sourceMappingURL=intersect.mjs.map \ No newline at end of file diff --git a/dist/esm/array/intersect.mjs.map b/dist/esm/array/intersect.mjs.map index 409e59c..2097f43 100644 --- a/dist/esm/array/intersect.mjs.map +++ b/dist/esm/array/intersect.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/array/intersect.mjs","sourceRoot":"","sources":["../../../src/array/intersect.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,KAAY,EAAE,MAAa;IAC3D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAA;IAC1B,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;AAC3D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,KAAY,EAAE,GAAG,MAAa;IACzD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE;QACtC,OAAO,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;IAClC,CAAC,EAAE,KAAK,CAAC,CAAA;AACX,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/array/intersect.mjs","sourceRoot":"","sources":["../../../src/array/intersect.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,KAAY,EAAE,MAAa;IAC3D,8DAA8D;IAC9D,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAA;IAC3B,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAA;IAC5B,MAAM,MAAM,GAAU,EAAE,CAAA;IAExB,8CAA8C;IAC9C,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IACzE,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAChB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,KAAY,EAAE,GAAG,MAAa;IACzD,2EAA2E;IAC3E,MAAM,GAAG,GAAG,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAA;IAClE,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;AAC3E,CAAC"} \ No newline at end of file diff --git a/dist/esm/array/random.mjs b/dist/esm/array/random.mjs index 65fee9e..d07c154 100644 --- a/dist/esm/array/random.mjs +++ b/dist/esm/array/random.mjs @@ -5,6 +5,9 @@ * @returns {unknown} */ export default function random(array) { - return array[Math.floor(Math.random() * array.length)]; + const { length } = array; + if (length === 0) + return undefined; + return array[Math.floor(Math.random() * length)]; } //# sourceMappingURL=random.mjs.map \ No newline at end of file diff --git a/dist/esm/array/random.mjs.map b/dist/esm/array/random.mjs.map index 1ee2624..12c1d8e 100644 --- a/dist/esm/array/random.mjs.map +++ b/dist/esm/array/random.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/array/random.mjs","sourceRoot":"","sources":["../../../src/array/random.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,KAAY;IACzC,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;AACxD,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/array/random.mjs","sourceRoot":"","sources":["../../../src/array/random.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,KAAY;IACzC,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAA;IACxB,IAAI,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IAClC,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAA;AAClD,CAAC"} \ No newline at end of file diff --git a/dist/esm/array/symmetricalDifference.mjs.map b/dist/esm/array/symmetricalDifference.mjs.map index 7e735e6..bd21293 100644 --- a/dist/esm/array/symmetricalDifference.mjs.map +++ b/dist/esm/array/symmetricalDifference.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/array/symmetricalDifference.mjs","sourceRoot":"","sources":["../../../src/array/symmetricalDifference.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,qBAAqB,CAAC,KAAY,EAAE,MAAa;IACvE,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAC5G,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/array/symmetricalDifference.mjs","sourceRoot":"","sources":["../../../src/array/symmetricalDifference.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,qBAAqB,CAAC,KAAY,EAAE,MAAa;IACvE,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAC5G,CAAC"} \ No newline at end of file diff --git a/dist/esm/config.mjs.map b/dist/esm/config.mjs.map index 62243d7..dd12de8 100644 --- a/dist/esm/config.mjs.map +++ b/dist/esm/config.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/config.mjs","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAA"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/config.mjs","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAA"} \ No newline at end of file diff --git a/dist/esm/core/bind.mjs.map b/dist/esm/core/bind.mjs.map index 9200bb1..45192f8 100644 --- a/dist/esm/core/bind.mjs.map +++ b/dist/esm/core/bind.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/core/bind.mjs","sourceRoot":"","sources":["../../../src/core/bind.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,MAAc,EAAE,MAAgB;IAC3D,OAAO;QACL,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IACxC,CAAC,CAAA;AACH,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/core/bind.mjs","sourceRoot":"","sources":["../../../src/core/bind.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,MAAc,EAAE,MAAgB;IAC3D,OAAO;QACL,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IACxC,CAAC,CAAA;AACH,CAAC"} \ No newline at end of file diff --git a/dist/esm/core/clone.mjs b/dist/esm/core/clone.mjs index 1a5f9d9..111a802 100644 --- a/dist/esm/core/clone.mjs +++ b/dist/esm/core/clone.mjs @@ -18,7 +18,6 @@ export default function clone(item, cloneDom = true) { // @ts-ignore return item.cloneNode(true); } - const type = Object.prototype.toString.call(item); // Date if (isDate(item)) { // @ts-ignore @@ -34,21 +33,22 @@ export default function clone(item, cloneDom = true) { } return newClone; } - // Object + const type = Object.prototype.toString.call(item); + // Plain Object if (type === '[object Object]' && item.constructor === Object) { - let key; - let newClone = {}; - for (key in item) { - newClone[key] = clone(item[key], cloneDom); + const src = item; + const newClone = {}; + for (const key in src) { + if (Object.prototype.hasOwnProperty.call(src, key)) { + newClone[key] = clone(src[key], cloneDom); + } } - if (enumerables) { - for (j = enumerables.length; j--;) { - let k = enumerables[j]; - if (Object.prototype.hasOwnProperty.call(item, k)) { - newClone[k] = item[k]; - } + for (const k of enumerables) { + if (Object.prototype.hasOwnProperty.call(src, k)) { + newClone[k] = src[k]; } } + // @ts-ignore return newClone; } return item; diff --git a/dist/esm/core/clone.mjs.map b/dist/esm/core/clone.mjs.map index 17bddd7..5a7d6c7 100644 --- a/dist/esm/core/clone.mjs.map +++ b/dist/esm/core/clone.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/core/clone.mjs","sourceRoot":"","sources":["../../../src/core/clone.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAA;AAEhC,MAAM,WAAW,GAAG,CAAC,SAAS,EAAE,gBAAgB,EAAE,UAAU,EAAE,aAAa,CAAC,CAAA;AAE5E;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,UAAU,KAAK,CAAuB,IAAO,EAAE,WAAoB,IAAI;IACnF,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACxC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,aAAa;IACb,IAAI,QAAQ,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QAChD,aAAa;QACb,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;IAC7B,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAEjD,OAAO;IACP,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACjB,aAAa;QACb,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;IACjC,CAAC;IAED,IAAI,CAAS,EAAE,CAAS,EAAE,CAAC,CAAA;IAE3B,QAAQ;IACR,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,CAAC,GAAG,IAAI,CAAC,MAAM,CAAA;QACf,IAAI,QAAQ,GAAwB,EAAE,CAAA;QAEtC,OAAO,CAAC,EAAE,EAAE,CAAC;YACX,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAM,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;QAC7C,CAAC;QAED,OAAU,QAAQ,CAAA;IACpB,CAAC;IAED,SAAS;IACT,IAAI,IAAI,KAAK,iBAAiB,IAAa,IAAK,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;QACxE,IAAI,GAAgB,CAAA;QACpB,IAAI,QAAQ,GAA6B,EAAE,CAAA;QAE3C,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;YACjB,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAiC,IAAK,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAA;QAC7E,CAAC;QAED,IAAI,WAAW,EAAE,CAAC;YAChB,KAAK,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,GAAI,CAAC;gBACnC,IAAI,CAAC,GAAW,WAAW,CAAC,CAAC,CAAC,CAAA;gBAC9B,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;oBAClD,QAAQ,CAAC,CAAC,CAAC,GAAyB,IAAK,CAAC,CAAC,CAAC,CAAA;gBAC9C,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/core/clone.mjs","sourceRoot":"","sources":["../../../src/core/clone.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAA;AAEhC,MAAM,WAAW,GAAG,CAAC,SAAS,EAAE,gBAAgB,EAAE,UAAU,EAAE,aAAa,CAAC,CAAA;AAE5E;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,UAAU,KAAK,CAAuB,IAAO,EAAE,WAAoB,IAAI;IACnF,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACxC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,aAAa;IACb,IAAI,QAAQ,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QAChD,aAAa;QACb,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;IAC7B,CAAC;IAED,OAAO;IACP,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACjB,aAAa;QACb,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;IACjC,CAAC;IAED,IAAI,CAAS,EAAE,CAAS,EAAE,CAAC,CAAA;IAE3B,QAAQ;IACR,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,CAAC,GAAG,IAAI,CAAC,MAAM,CAAA;QACf,IAAI,QAAQ,GAAwB,EAAE,CAAA;QAEtC,OAAO,CAAC,EAAE,EAAE,CAAC;YACX,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAM,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;QAC7C,CAAC;QAED,OAAU,QAAQ,CAAA;IACpB,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAEjD,eAAe;IACf,IAAI,IAAI,KAAK,iBAAiB,IAAK,IAAe,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;QAC1E,MAAM,GAAG,GAAG,IAAgC,CAAA;QAC5C,MAAM,QAAQ,GAA6B,EAAE,CAAA;QAE7C,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;YACtB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;gBACnD,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAM,GAAG,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAA;YAChD,CAAC;QACH,CAAC;QAED,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;YAC5B,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;gBACjD,QAAQ,CAAC,CAAC,CAAC,GAAI,GAA2B,CAAC,CAAC,CAAC,CAAA;YAC/C,CAAC;QACH,CAAC;QAED,aAAa;QACb,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC"} \ No newline at end of file diff --git a/dist/esm/core/equals.mjs.map b/dist/esm/core/equals.mjs.map index 1b0158a..e7e0da5 100644 --- a/dist/esm/core/equals.mjs.map +++ b/dist/esm/core/equals.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/core/equals.mjs","sourceRoot":"","sources":["../../../src/core/equals.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,iBAAiB,CAAA;AAC1C,OAAO,YAAY,MAAM,gBAAgB,CAAA;AACzC,OAAO,QAAQ,MAAM,eAAe,CAAA;AACpC,OAAO,QAAQ,MAAM,eAAe,CAAA;AACpC,OAAO,SAAS,MAAM,gBAAgB,CAAA;AACtC,OAAO,SAAS,MAAM,gBAAgB,CAAA;AACtC,OAAO,UAAU,MAAM,iBAAiB,CAAA;AAExC;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,KAAU,EAAE,MAAW;IACpD,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACrB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5D,OAAO,KAAK,KAAK,MAAM,CAAA;IACzB,CAAC;IAED,IAAI,CAAC,KAAK,YAAY,IAAI,IAAI,MAAM,YAAY,IAAI,CAAC,IAAI,CAAC,KAAK,YAAY,MAAM,IAAI,MAAM,YAAY,MAAM,CAAC,EAAE,CAAC;QAC/G,OAAO,KAAK,CAAC,QAAQ,EAAE,KAAK,MAAM,CAAC,QAAQ,EAAE,CAAA;IAC/C,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,OAAO,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IACpC,CAAC;IAED,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACxC,OAAO,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IACpC,CAAC;IAED,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5C,OAAO,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,OAAO,EAAE,CAAA;IAC3D,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/core/equals.mjs","sourceRoot":"","sources":["../../../src/core/equals.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,iBAAiB,CAAA;AAC1C,OAAO,YAAY,MAAM,gBAAgB,CAAA;AACzC,OAAO,QAAQ,MAAM,eAAe,CAAA;AACpC,OAAO,QAAQ,MAAM,eAAe,CAAA;AACpC,OAAO,SAAS,MAAM,gBAAgB,CAAA;AACtC,OAAO,SAAS,MAAM,gBAAgB,CAAA;AACtC,OAAO,UAAU,MAAM,iBAAiB,CAAA;AAExC;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,KAAU,EAAE,MAAW;IACpD,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACrB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5D,OAAO,KAAK,KAAK,MAAM,CAAA;IACzB,CAAC;IAED,IAAI,CAAC,KAAK,YAAY,IAAI,IAAI,MAAM,YAAY,IAAI,CAAC,IAAI,CAAC,KAAK,YAAY,MAAM,IAAI,MAAM,YAAY,MAAM,CAAC,EAAE,CAAC;QAC/G,OAAO,KAAK,CAAC,QAAQ,EAAE,KAAK,MAAM,CAAC,QAAQ,EAAE,CAAA;IAC/C,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,OAAO,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IACpC,CAAC;IAED,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACxC,OAAO,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IACpC,CAAC;IAED,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5C,OAAO,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,OAAO,EAAE,CAAA;IAC3D,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC"} \ No newline at end of file diff --git a/dist/esm/core/forEach.mjs.map b/dist/esm/core/forEach.mjs.map index 781388a..8b95309 100644 --- a/dist/esm/core/forEach.mjs.map +++ b/dist/esm/core/forEach.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/core/forEach.mjs","sourceRoot":"","sources":["../../../src/core/forEach.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAA;AACzC,OAAO,IAAI,MAAM,QAAQ,CAAA;AAGzB,OAAO,WAAW,MAAM,kBAAkB,CAAA;AAE1C,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,UAA0B,EAAE,SAA6B;IACvF,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAQ,UAAU,EAAE,SAAS,CAAC,CAAA;IAChD,CAAC;IAED,MAAM,QAAQ,GAAG,CAAC,MAAe,EAAE,SAA6B,EAAW,EAAE;QAC3E,OAAO,MAAM,IAAI,aAAa,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;IAC3D,CAAC,CAAA;IAED,MAAM,IAAI,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAA;IAErC,OAAO,IAAI,CAA2B,UAAU,EAAE,SAAS,CAAC,CAAA;AAC9D,CAAC;AAQD,SAAS,aAAa,CAAC,YAAqB,KAAK;IAC/C,OAAO,UAAU,MAAe,EAAE,SAA6B,EAAE,QAAsB;QACrF,IAAI,KAAK,GAAG,CAAC,CAAC,EACZ,QAAQ,GAAY,IAAI,MAAM,CAAC,MAAM,CAAC,EACtC,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,EAC7B,MAAM,GAAW,UAAU,CAAC,MAAM,EAClC,GAAgB,CAAA;QAElB,OAAO,MAAM,EAAE,EAAE,CAAC;YAChB,GAAG,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;YAC9C,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,KAAK,KAAK,EAAE,CAAC;gBACtD,MAAK;YACP,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC,CAAA;AACH,CAAC;AAID,SAAS,cAAc,CAAC,QAAsB,EAAE,YAAqB,KAAK;IACxE,OAAO,UAAU,UAAoC,EAAE,SAA6B;QAClF,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;YACvB,OAAO,UAAU,CAAA;QACnB,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7B,OAAO,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;QACxC,CAAC;QAED,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAA;QAChC,MAAM,QAAQ,GAAY,IAAI,MAAM,CAAC,UAAU,CAAC,CAAA;QAEhD,IAAI,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAEnC,OAAO,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,MAAM,EAAE,CAAC;YAC9C,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,KAAK,EAAE,CAAC;gBAC1D,MAAK;YACP,CAAC;QACH,CAAC;QACD,OAAO,UAAU,CAAA;IACnB,CAAC,CAAA;AACH,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/core/forEach.mjs","sourceRoot":"","sources":["../../../src/core/forEach.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAA;AACzC,OAAO,IAAI,MAAM,QAAQ,CAAA;AAGzB,OAAO,WAAW,MAAM,kBAAkB,CAAA;AAE1C,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,UAA0B,EAAE,SAA6B;IACvF,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAQ,UAAU,EAAE,SAAS,CAAC,CAAA;IAChD,CAAC;IAED,MAAM,QAAQ,GAAG,CAAC,MAAe,EAAE,SAA6B,EAAW,EAAE;QAC3E,OAAO,MAAM,IAAI,aAAa,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;IAC3D,CAAC,CAAA;IAED,MAAM,IAAI,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAA;IAErC,OAAO,IAAI,CAA2B,UAAU,EAAE,SAAS,CAAC,CAAA;AAC9D,CAAC;AAQD,SAAS,aAAa,CAAC,YAAqB,KAAK;IAC/C,OAAO,UAAU,MAAe,EAAE,SAA6B,EAAE,QAAsB;QACrF,IAAI,KAAK,GAAG,CAAC,CAAC,EACZ,QAAQ,GAAY,IAAI,MAAM,CAAC,MAAM,CAAC,EACtC,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,EAC7B,MAAM,GAAW,UAAU,CAAC,MAAM,EAClC,GAAgB,CAAA;QAElB,OAAO,MAAM,EAAE,EAAE,CAAC;YAChB,GAAG,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;YAC9C,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,KAAK,KAAK,EAAE,CAAC;gBACtD,MAAK;YACP,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC,CAAA;AACH,CAAC;AAID,SAAS,cAAc,CAAC,QAAsB,EAAE,YAAqB,KAAK;IACxE,OAAO,UAAU,UAAoC,EAAE,SAA6B;QAClF,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;YACvB,OAAO,UAAU,CAAA;QACnB,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7B,OAAO,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;QACxC,CAAC;QAED,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAA;QAChC,MAAM,QAAQ,GAAY,IAAI,MAAM,CAAC,UAAU,CAAC,CAAA;QAEhD,IAAI,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAEnC,OAAO,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,MAAM,EAAE,CAAC;YAC9C,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,KAAK,EAAE,CAAC;gBAC1D,MAAK;YACP,CAAC;QACH,CAAC;QACD,OAAO,UAAU,CAAA;IACnB,CAAC,CAAA;AACH,CAAC"} \ No newline at end of file diff --git a/dist/esm/core/index.mjs.map b/dist/esm/core/index.mjs.map index 3841e31..7c267fb 100644 --- a/dist/esm/core/index.mjs.map +++ b/dist/esm/core/index.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/core/index.mjs","sourceRoot":"","sources":["../../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,QAAQ,CAAA;AACzB,OAAO,KAAK,MAAM,SAAS,CAAA;AAC3B,OAAO,GAAG,MAAM,OAAO,CAAA;AACvB,OAAO,IAAI,MAAM,QAAQ,CAAA;AACzB,OAAO,MAAM,MAAM,UAAU,CAAA;AAC7B,OAAO,OAAO,MAAM,WAAW,CAAA;AAC/B,OAAO,KAAK,MAAM,SAAS,CAAA;AAE3B,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/core/index.mjs","sourceRoot":"","sources":["../../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,QAAQ,CAAA;AACzB,OAAO,KAAK,MAAM,SAAS,CAAA;AAC3B,OAAO,GAAG,MAAM,OAAO,CAAA;AACvB,OAAO,IAAI,MAAM,QAAQ,CAAA;AACzB,OAAO,MAAM,MAAM,UAAU,CAAA;AAC7B,OAAO,OAAO,MAAM,WAAW,CAAA;AAC/B,OAAO,KAAK,MAAM,SAAS,CAAA;AAE3B,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA"} \ No newline at end of file diff --git a/dist/esm/core/keys.mjs.map b/dist/esm/core/keys.mjs.map index 618c691..230824f 100644 --- a/dist/esm/core/keys.mjs.map +++ b/dist/esm/core/keys.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/core/keys.mjs","sourceRoot":"","sources":["../../../src/core/keys.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,kBAAkB,CAAA;AAC1C,OAAO,aAAa,MAAM,0BAA0B,CAAA;AACpD,OAAO,QAAQ,MAAM,0BAA0B,CAAA;AAE/C;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,MAAW;IACtC,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;AACvE,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/core/keys.mjs","sourceRoot":"","sources":["../../../src/core/keys.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,kBAAkB,CAAA;AAC1C,OAAO,aAAa,MAAM,0BAA0B,CAAA;AACpD,OAAO,QAAQ,MAAM,0BAA0B,CAAA;AAE/C;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,MAAW;IACtC,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;AACvE,CAAC"} \ No newline at end of file diff --git a/dist/esm/core/match.mjs b/dist/esm/core/match.mjs index ed34084..f0e7999 100644 --- a/dist/esm/core/match.mjs +++ b/dist/esm/core/match.mjs @@ -6,7 +6,10 @@ import isObject from '../is/isObject.mjs'; * @return {*} */ export default function match(expr, cases, options) { - const opt = Object.assign({ strict: true }, (isObject(options) ? options : {})); + const opt = { + strict: true, + ...(isObject(options) ? options : {}), + }; for (const [pattern, action] of Array.isArray(cases) ? cases : Object.entries(cases)) { const prn = typeof pattern === 'function' ? pattern() : pattern; if (opt.strict ? expr === prn : expr == prn) { diff --git a/dist/esm/core/match.mjs.map b/dist/esm/core/match.mjs.map index 622b480..34349bf 100644 --- a/dist/esm/core/match.mjs.map +++ b/dist/esm/core/match.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/core/match.mjs","sourceRoot":"","sources":["../../../src/core/match.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,eAAe,CAAA;AAWpC;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,IAAS,EAAE,KAAgB,EAAE,OAAsB;IAC/E,MAAM,GAAG,mBACP,MAAM,EAAE,IAAI,IACT,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CACtC,CAAA;IAED,KAAK,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACrF,MAAM,GAAG,GAAG,OAAO,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAA;QAE/D,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;YAC5C,OAAO,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAA;QACzD,CAAC;IACH,CAAC;IAED,OAAO,OAAO,GAAG,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAA;AACxE,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/core/match.mjs","sourceRoot":"","sources":["../../../src/core/match.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,eAAe,CAAA;AAWpC;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,IAAS,EAAE,KAAgB,EAAE,OAAsB;IAC/E,MAAM,GAAG,GAAG;QACV,MAAM,EAAE,IAAI;QACZ,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;KACtC,CAAA;IAED,KAAK,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACrF,MAAM,GAAG,GAAG,OAAO,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAA;QAE/D,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;YAC5C,OAAO,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAA;QACzD,CAAC;IACH,CAAC;IAED,OAAO,OAAO,GAAG,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAA;AACxE,CAAC"} \ No newline at end of file diff --git a/dist/esm/core/tap.mjs.map b/dist/esm/core/tap.mjs.map index 4b2d2b7..cb469e6 100644 --- a/dist/esm/core/tap.mjs.map +++ b/dist/esm/core/tap.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/core/tap.mjs","sourceRoot":"","sources":["../../../src/core/tap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,UAAU,MAAM,iBAAiB,CAAA;AACxC,OAAO,WAAW,MAAM,kBAAkB,CAAA;AAE1C,MAAM,CAAC,OAAO,UAAU,GAAG,CAAC,KAAU,EAAE,WAAsB;IAC5D,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACtB,KAAK,GAAG,KAAK,EAAE,CAAA;IACjB,CAAC;IAED,IAAI,WAAW,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC3C,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,WAAW,CAAC,KAAK,CAAC,CAAA;QAC3B,CAAC;QAED,WAAW,CAAC,KAAK,CAAC,CAAA;IACpB,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/core/tap.mjs","sourceRoot":"","sources":["../../../src/core/tap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,UAAU,MAAM,iBAAiB,CAAA;AACxC,OAAO,WAAW,MAAM,kBAAkB,CAAA;AAE1C,MAAM,CAAC,OAAO,UAAU,GAAG,CAAC,KAAU,EAAE,WAAsB;IAC5D,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACtB,KAAK,GAAG,KAAK,EAAE,CAAA;IACjB,CAAC;IAED,IAAI,WAAW,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC3C,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,WAAW,CAAC,KAAK,CAAC,CAAA;QAC3B,CAAC;QAED,WAAW,CAAC,KAAK,CAAC,CAAA;IACpB,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC"} \ No newline at end of file diff --git a/dist/esm/core/vars.mjs.map b/dist/esm/core/vars.mjs.map index ba43083..be7778e 100644 --- a/dist/esm/core/vars.mjs.map +++ b/dist/esm/core/vars.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/core/vars.mjs","sourceRoot":"","sources":["../../../src/core/vars.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,gBAAgB,CAAA;AAE1C,MAAM,CAAC,MAAM,MAAM,GAAG,YAAY,CAAA;AAElC,2CAA2C;AAC3C,MAAM,CAAC,MAAM,UAAU,GAAG,YAAY,CAAA;AAEtC,0CAA0C;AAC1C,MAAM,CAAC,MAAM,SAAS,GAAG,aAAa,CAAA;AAEtC,2DAA2D;AAC3D,MAAM,CAAC,MAAM,UAAU,GAAG,mBAAmB,CAAA;AAE7C,8CAA8C;AAC9C,MAAM,CAAC,MAAM,QAAQ,GAAG,kBAAkB,CAAA;AAE1C,mCAAmC;AACnC,MAAM,CAAC,MAAM,SAAS,GAAG,kBAAkB,CAAA"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/core/vars.mjs","sourceRoot":"","sources":["../../../src/core/vars.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,gBAAgB,CAAA;AAE1C,MAAM,CAAC,MAAM,MAAM,GAAG,YAAY,CAAA;AAElC,2CAA2C;AAC3C,MAAM,CAAC,MAAM,UAAU,GAAG,YAAY,CAAA;AAEtC,0CAA0C;AAC1C,MAAM,CAAC,MAAM,SAAS,GAAG,aAAa,CAAA;AAEtC,2DAA2D;AAC3D,MAAM,CAAC,MAAM,UAAU,GAAG,mBAAmB,CAAA;AAE7C,8CAA8C;AAC9C,MAAM,CAAC,MAAM,QAAQ,GAAG,kBAAkB,CAAA;AAE1C,mCAAmC;AACnC,MAAM,CAAC,MAAM,SAAS,GAAG,kBAAkB,CAAA"} \ No newline at end of file diff --git a/dist/esm/date/elapsed.mjs.map b/dist/esm/date/elapsed.mjs.map index 91e7cbc..0480e1b 100644 --- a/dist/esm/date/elapsed.mjs.map +++ b/dist/esm/date/elapsed.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/date/elapsed.mjs","sourceRoot":"","sources":["../../../src/date/elapsed.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,OAAO,CAAA;AAEvB;;;;;;;;;GASG;AACH,MAAM,UAAU,OAAO,CAAC,KAAW,EAAE,KAAW;IAC9C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC,CAAA;AAC7C,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/date/elapsed.mjs","sourceRoot":"","sources":["../../../src/date/elapsed.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,OAAO,CAAA;AAEvB;;;;;;;;;GASG;AACH,MAAM,UAAU,OAAO,CAAC,KAAW,EAAE,KAAW;IAC9C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC,CAAA;AAC7C,CAAC"} \ No newline at end of file diff --git a/dist/esm/date/index.mjs.map b/dist/esm/date/index.mjs.map index 189a857..f6b37ec 100644 --- a/dist/esm/date/index.mjs.map +++ b/dist/esm/date/index.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/date/index.mjs","sourceRoot":"","sources":["../../../src/date/index.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,OAAO,CAAA;AACvB,OAAO,YAAY,MAAM,YAAY,CAAA;AAErC,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,CAAA"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/date/index.mjs","sourceRoot":"","sources":["../../../src/date/index.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,OAAO,CAAA;AACvB,OAAO,YAAY,MAAM,YAAY,CAAA;AAErC,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,CAAA"} \ No newline at end of file diff --git a/dist/esm/date/now.mjs b/dist/esm/date/now.mjs index b5dc91f..fae2e71 100644 --- a/dist/esm/date/now.mjs +++ b/dist/esm/date/now.mjs @@ -1,6 +1,6 @@ const nowFn = Date.now || (() => new Date().getTime()); /** - * This function return Date now + * return Date now */ export default function now() { return nowFn(); diff --git a/dist/esm/date/now.mjs.map b/dist/esm/date/now.mjs.map index bd2e2a1..c812d35 100644 --- a/dist/esm/date/now.mjs.map +++ b/dist/esm/date/now.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/date/now.mjs","sourceRoot":"","sources":["../../../src/date/now.ts"],"names":[],"mappings":"AAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC,CAAA;AAEtD;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,GAAG;IACzB,OAAO,KAAK,EAAE,CAAA;AAChB,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/date/now.mjs","sourceRoot":"","sources":["../../../src/date/now.ts"],"names":[],"mappings":"AAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC,CAAA;AAEtD;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,GAAG;IACzB,OAAO,KAAK,EAAE,CAAA;AAChB,CAAC"} \ No newline at end of file diff --git a/dist/esm/date/toString.mjs.map b/dist/esm/date/toString.mjs.map index 5f208f8..bb4ad5d 100644 --- a/dist/esm/date/toString.mjs.map +++ b/dist/esm/date/toString.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/date/toString.mjs","sourceRoot":"","sources":["../../../src/date/toString.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE1C;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,OAAa,IAAI,IAAI,EAAE;IACtD,OAAO,CACL,IAAI,CAAC,WAAW,EAAE;QAClB,GAAG;QACH,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAChC,GAAG;QACH,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAC3B,GAAG;QACH,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC5B,GAAG;QACH,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QAC9B,GAAG;QACH,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAC/B,CAAA;AACH,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/date/toString.mjs","sourceRoot":"","sources":["../../../src/date/toString.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE1C;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,OAAa,IAAI,IAAI,EAAE;IACtD,OAAO,CACL,IAAI,CAAC,WAAW,EAAE;QAClB,GAAG;QACH,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAChC,GAAG;QACH,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAC3B,GAAG;QACH,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC5B,GAAG;QACH,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QAC9B,GAAG;QACH,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAC/B,CAAA;AACH,CAAC"} \ No newline at end of file diff --git a/dist/esm/format/fileSize.mjs b/dist/esm/format/fileSize.mjs index 7ce904c..a8ef252 100644 --- a/dist/esm/format/fileSize.mjs +++ b/dist/esm/format/fileSize.mjs @@ -10,13 +10,11 @@ import intWord from './intWord.mjs'; * @returns {string} */ export default function fileSize(size, kilo = 1024, decimals = 2, decPoint = '.', thousandsSeparator = ',', suffixSeparator = ' ') { - const num = +size; - if (num <= 0) { + const num = Number(size); + if (!Number.isFinite(num) || num <= 0) { return '0 bytes'; } - if (num < kilo) { - decimals = 0; - } - return intWord(num, ['bytes', 'Kb', 'Mb', 'Gb', 'Tb', 'Pb'], kilo, decimals, decPoint, thousandsSeparator, suffixSeparator); + const decimalsToUse = num < kilo ? 0 : decimals; + return intWord(num, ['bytes', 'Kb', 'Mb', 'Gb', 'Tb', 'Pb'], kilo, decimalsToUse, decPoint, thousandsSeparator, suffixSeparator); } //# sourceMappingURL=fileSize.mjs.map \ No newline at end of file diff --git a/dist/esm/format/fileSize.mjs.map b/dist/esm/format/fileSize.mjs.map index 398c521..069954b 100644 --- a/dist/esm/format/fileSize.mjs.map +++ b/dist/esm/format/fileSize.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/format/fileSize.mjs","sourceRoot":"","sources":["../../../src/format/fileSize.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,WAAW,CAAA;AAG/B;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAC9B,IAAgB,EAChB,OAAe,IAAI,EACnB,WAAmB,CAAC,EACpB,WAAmB,GAAG,EACtB,qBAA6B,GAAG,EAChC,kBAA0B,GAAG;IAE7B,MAAM,GAAG,GAAG,CAAC,IAAI,CAAA;IAEjB,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;QACb,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,IAAI,GAAG,GAAG,IAAI,EAAE,CAAC;QACf,QAAQ,GAAG,CAAC,CAAA;IACd,CAAC;IAED,OAAO,OAAO,CACZ,GAAG,EACH,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EACvC,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,kBAAkB,EAClB,eAAe,CAChB,CAAA;AACH,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/format/fileSize.mjs","sourceRoot":"","sources":["../../../src/format/fileSize.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,WAAW,CAAA;AAG/B;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAC9B,IAAgB,EAChB,OAAe,IAAI,EACnB,WAAmB,CAAC,EACpB,WAAmB,GAAG,EACtB,qBAA6B,GAAG,EAChC,kBAA0B,GAAG;IAE7B,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;IAExB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;QACtC,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,MAAM,aAAa,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA;IAE/C,OAAO,OAAO,CACZ,GAAG,EACH,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EACvC,IAAI,EACJ,aAAa,EACb,QAAQ,EACR,kBAAkB,EAClB,eAAe,CAChB,CAAA;AACH,CAAC"} \ No newline at end of file diff --git a/dist/esm/format/index.mjs.map b/dist/esm/format/index.mjs.map index 54b61d8..2a016d7 100644 --- a/dist/esm/format/index.mjs.map +++ b/dist/esm/format/index.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/format/index.mjs","sourceRoot":"","sources":["../../../src/format/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AAC9C,OAAO,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,OAAO,MAAM,WAAW,CAAA;AAC/B,OAAO,QAAQ,MAAM,YAAY,CAAA;AAEjC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAA"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/format/index.mjs","sourceRoot":"","sources":["../../../src/format/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AAC9C,OAAO,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,OAAO,MAAM,WAAW,CAAA;AAC/B,OAAO,QAAQ,MAAM,YAAY,CAAA;AAEjC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAA"} \ No newline at end of file diff --git a/dist/esm/format/intWord.mjs.map b/dist/esm/format/intWord.mjs.map index e028dd5..e1cda70 100644 --- a/dist/esm/format/intWord.mjs.map +++ b/dist/esm/format/intWord.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/format/intWord.mjs","sourceRoot":"","sources":["../../../src/format/intWord.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,UAAU,CAAA;AAG7B,MAAM,YAAY,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;AAC7C;;;;;;;;;;GAUG;AACH,MAAM,CAAC,OAAO,UAAU,OAAO,CAC7B,KAAiB,EACjB,QAAkB,YAAY,EAC9B,OAAe,IAAI,EACnB,WAAmB,CAAC,EACpB,WAAmB,GAAG,EACtB,qBAA6B,GAAG,EAChC,kBAA0B,EAAE;IAE5B,IAAI,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;IAC3B,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IACnD,MAAM,GAAG,GAAG,CAAC,KAAK,CAAA;IAElB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,IAAI,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC1B,IAAI,GAAG,CAAC,CAAA;YACR,MAAK;QACP,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,CAAA;IACpC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAE/D,OAAO,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,kBAAkB,CAAC,GAAG,MAAM,CAAA;AAC3E,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/format/intWord.mjs","sourceRoot":"","sources":["../../../src/format/intWord.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,UAAU,CAAA;AAG7B,MAAM,YAAY,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;AAC7C;;;;;;;;;;GAUG;AACH,MAAM,CAAC,OAAO,UAAU,OAAO,CAC7B,KAAiB,EACjB,QAAkB,YAAY,EAC9B,OAAe,IAAI,EACnB,WAAmB,CAAC,EACpB,WAAmB,GAAG,EACtB,qBAA6B,GAAG,EAChC,kBAA0B,EAAE;IAE5B,IAAI,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;IAC3B,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IACnD,MAAM,GAAG,GAAG,CAAC,KAAK,CAAA;IAElB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,IAAI,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC1B,IAAI,GAAG,CAAC,CAAA;YACR,MAAK;QACP,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,CAAA;IACpC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAE/D,OAAO,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,kBAAkB,CAAC,GAAG,MAAM,CAAA;AAC3E,CAAC"} \ No newline at end of file diff --git a/dist/esm/format/number.mjs.map b/dist/esm/format/number.mjs.map index 01cac0f..af4698f 100644 --- a/dist/esm/format/number.mjs.map +++ b/dist/esm/format/number.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/format/number.mjs","sourceRoot":"","sources":["../../../src/format/number.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,gBAAgB,CAAA;AAGtC;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAC5B,KAAiB,EACjB,WAAmB,CAAC,EACpB,WAAmB,GAAG,EACtB,qBAA6B,GAAG,EAChC,gBAAyB,KAAK;IAE9B,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IACnD,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IACzB,MAAM,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/B,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;IAE3B,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,CAAA;IACxD,kCAAkC;IAClC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAErD,OAAO,CACL,IAAI;QACJ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,GAAG,kBAAkB,CAAC;QACrE,CAAC,QAAQ;YACP,CAAC,CAAC,aAAa,IAAI,SAAS,CAAC,GAAG,CAAC;gBAC/B,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,QAAQ;oBACR,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC;yBACrB,OAAO,CAAC,QAAQ,CAAC;yBACjB,KAAK,CAAC,CAAC,CAAC;YACf,CAAC,CAAC,EAAE,CAAC,CACR,CAAA;AACH,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAiB,EAAE,WAAmB,CAAC;IAC/D,OAAO,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;AAChD,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/format/number.mjs","sourceRoot":"","sources":["../../../src/format/number.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,gBAAgB,CAAA;AAGtC;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAC5B,KAAiB,EACjB,WAAmB,CAAC,EACpB,WAAmB,GAAG,EACtB,qBAA6B,GAAG,EAChC,gBAAyB,KAAK;IAE9B,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IACnD,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IACzB,MAAM,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/B,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;IAE3B,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,CAAA;IACxD,kCAAkC;IAClC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAErD,OAAO,CACL,IAAI;QACJ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,GAAG,kBAAkB,CAAC;QACrE,CAAC,QAAQ;YACP,CAAC,CAAC,aAAa,IAAI,SAAS,CAAC,GAAG,CAAC;gBAC/B,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,QAAQ;oBACR,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC;yBACrB,OAAO,CAAC,QAAQ,CAAC;yBACjB,KAAK,CAAC,CAAC,CAAC;YACf,CAAC,CAAC,EAAE,CAAC,CACR,CAAA;AACH,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAiB,EAAE,WAAmB,CAAC;IAC/D,OAAO,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;AAChD,CAAC"} \ No newline at end of file diff --git a/dist/esm/format/pad.mjs.map b/dist/esm/format/pad.mjs.map index efa3fb9..a3a7844 100644 --- a/dist/esm/format/pad.mjs.map +++ b/dist/esm/format/pad.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/format/pad.mjs","sourceRoot":"","sources":["../../../src/format/pad.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,MAAM,YAAY,CAAA;AAG9B,MAAM,UAAU,SAAS,CAAC,KAAyB,EAAE,YAAoB;IACvE,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACjB,OAAO,GAAG,CAAA;IACZ,CAAC;IACD,OAAO,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,CAAC,CAAA;AAC3C,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAyB;IACnD,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACjB,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;AAChC,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/format/pad.mjs","sourceRoot":"","sources":["../../../src/format/pad.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,MAAM,YAAY,CAAA;AAG9B,MAAM,UAAU,SAAS,CAAC,KAAyB,EAAE,YAAoB;IACvE,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACjB,OAAO,GAAG,CAAA;IACZ,CAAC;IACD,OAAO,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,CAAC,CAAA;AAC3C,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAyB;IACnD,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACjB,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;AAChC,CAAC"} \ No newline at end of file diff --git a/dist/esm/i18/index.mjs.map b/dist/esm/i18/index.mjs.map index ee4fd46..bc82312 100644 --- a/dist/esm/i18/index.mjs.map +++ b/dist/esm/i18/index.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/i18/index.mjs","sourceRoot":"","sources":["../../../src/i18/index.ts"],"names":[],"mappings":""} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/i18/index.mjs","sourceRoot":"","sources":["../../../src/i18/index.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/dist/esm/i18/ru.mjs.map b/dist/esm/i18/ru.mjs.map index e95a97c..1e31b02 100644 --- a/dist/esm/i18/ru.mjs.map +++ b/dist/esm/i18/ru.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/i18/ru.mjs","sourceRoot":"","sources":["../../../src/i18/ru.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,QAAQ,GAAiB;IACpC,aAAa;IACb,aAAa;IACb,SAAS;IACT,OAAO;IACP,SAAS;IACT,SAAS;IACT,SAAS;CACV,CAAA;AAED,MAAM,CAAC,MAAM,UAAU,GAAmB;IACxC,QAAQ;IACR,SAAS;IACT,MAAM;IACN,QAAQ;IACR,KAAK;IACL,MAAM;IACN,MAAM;IACN,QAAQ;IACR,UAAU;IACV,SAAS;IACT,QAAQ;IACR,SAAS;CACV,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,MAAM,EAAE,CAAC;IACT,GAAG,EAAE,CAAC;IACN,OAAO,EAAE,CAAC;IACV,GAAG,EAAE,CAAC;IACN,IAAI,EAAE,CAAC;IACP,GAAG,EAAE,CAAC;IACN,MAAM,EAAE,CAAC;IACT,GAAG,EAAE,CAAC;IACN,GAAG,EAAE,CAAC;IACN,IAAI,EAAE,CAAC;IACP,GAAG,EAAE,CAAC;IACN,IAAI,EAAE,CAAC;IACP,GAAG,EAAE,CAAC;IACN,MAAM,EAAE,CAAC;IACT,GAAG,EAAE,CAAC;IACN,QAAQ,EAAE,CAAC;IACX,IAAI,EAAE,CAAC;IACP,OAAO,EAAE,CAAC;IACV,GAAG,EAAE,CAAC;IACN,MAAM,EAAE,EAAE;IACV,GAAG,EAAE,EAAE;IACP,OAAO,EAAE,EAAE;IACX,GAAG,EAAE,EAAE;CACR,CAAA;AAED,eAAe,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,CAAA"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/i18/ru.mjs","sourceRoot":"","sources":["../../../src/i18/ru.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,QAAQ,GAAiB;IACpC,aAAa;IACb,aAAa;IACb,SAAS;IACT,OAAO;IACP,SAAS;IACT,SAAS;IACT,SAAS;CACV,CAAA;AAED,MAAM,CAAC,MAAM,UAAU,GAAmB;IACxC,QAAQ;IACR,SAAS;IACT,MAAM;IACN,QAAQ;IACR,KAAK;IACL,MAAM;IACN,MAAM;IACN,QAAQ;IACR,UAAU;IACV,SAAS;IACT,QAAQ;IACR,SAAS;CACV,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,MAAM,EAAE,CAAC;IACT,GAAG,EAAE,CAAC;IACN,OAAO,EAAE,CAAC;IACV,GAAG,EAAE,CAAC;IACN,IAAI,EAAE,CAAC;IACP,GAAG,EAAE,CAAC;IACN,MAAM,EAAE,CAAC;IACT,GAAG,EAAE,CAAC;IACN,GAAG,EAAE,CAAC;IACN,IAAI,EAAE,CAAC;IACP,GAAG,EAAE,CAAC;IACN,IAAI,EAAE,CAAC;IACP,GAAG,EAAE,CAAC;IACN,MAAM,EAAE,CAAC;IACT,GAAG,EAAE,CAAC;IACN,QAAQ,EAAE,CAAC;IACX,IAAI,EAAE,CAAC;IACP,OAAO,EAAE,CAAC;IACV,GAAG,EAAE,CAAC;IACN,MAAM,EAAE,EAAE;IACV,GAAG,EAAE,EAAE;IACP,OAAO,EAAE,EAAE;IACX,GAAG,EAAE,EAAE;CACR,CAAA;AAED,eAAe,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,CAAA"} \ No newline at end of file diff --git a/dist/esm/i18/var.mjs.map b/dist/esm/i18/var.mjs.map index 1881235..5dd2b9b 100644 --- a/dist/esm/i18/var.mjs.map +++ b/dist/esm/i18/var.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/i18/var.mjs","sourceRoot":"","sources":["../../../src/i18/var.ts"],"names":[],"mappings":""} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/i18/var.mjs","sourceRoot":"","sources":["../../../src/i18/var.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/dist/esm/index.mjs.map b/dist/esm/index.mjs.map index b386fef..d998f7e 100644 --- a/dist/esm/index.mjs.map +++ b/dist/esm/index.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/index.mjs","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,oBAAoB,CAAA;AAClC,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA;AAC7B,cAAc,kBAAkB,CAAA"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/index.mjs","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,oBAAoB,CAAA;AAClC,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA;AAC7B,cAAc,kBAAkB,CAAA"} \ No newline at end of file diff --git a/dist/esm/internal/arrayLikeKeys.mjs.map b/dist/esm/internal/arrayLikeKeys.mjs.map index dd9ef0d..04e8ec1 100644 --- a/dist/esm/internal/arrayLikeKeys.mjs.map +++ b/dist/esm/internal/arrayLikeKeys.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/internal/arrayLikeKeys.mjs","sourceRoot":"","sources":["../../../src/internal/arrayLikeKeys.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,kBAAkB,CAAA;AAC1C,OAAO,QAAQ,MAAM,eAAe,CAAA;AACpC,OAAO,YAAY,MAAM,mBAAmB,CAAA;AAE5C,OAAO,KAAK,MAAM,eAAe,CAAA;AACjC,OAAO,OAAO,MAAM,WAAW,CAAA;AAE/B,2CAA2C;AAC3C,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAA;AAEpC,gDAAgD;AAChD,MAAM,cAAc,GAAG,WAAW,CAAC,cAAc,CAAA;AAEjD;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,KAAU,EAAE,YAAqB,KAAK;IAC1E,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EACnC,UAAU,GAAG,CAAC,QAAQ,IAAI,WAAW,CAAC,KAAK,CAAC,EAC5C,MAAM,GAAG,CAAC,QAAQ,IAAI,CAAC,UAAU,IAAI,QAAQ,CAAC,KAAK,CAAC,EACpD,MAAM,GAAG,CAAC,QAAQ,IAAI,CAAC,UAAU,IAAI,CAAC,MAAM,IAAI,YAAY,CAAC,KAAK,CAAC,EACnE,WAAW,GAAG,QAAQ,IAAI,UAAU,IAAI,MAAM,IAAI,MAAM,EACxD,MAAM,GAAG,WAAW,CAAC,CAAC,CAAE,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAc,CAAC,CAAC,CAAC,EAAE,EACrE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;IAExB,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,IACE,CAAC,SAAS,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC9C,CAAC,CACC,WAAW;gBACX,6DAA6D;gBAC7D,CAAC,GAAG,KAAK,QAAQ;oBACf,+DAA+D;oBAC/D,CAAC,MAAM,IAAI,CAAC,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,QAAQ,CAAC,CAAC;oBAClD,mEAAmE;oBACnE,CAAC,MAAM,IAAI,CAAC,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,YAAY,IAAI,GAAG,KAAK,YAAY,CAAC,CAAC;oBAC9E,yBAAyB;oBACzB,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CACxB,EACD,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAClB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/internal/arrayLikeKeys.mjs","sourceRoot":"","sources":["../../../src/internal/arrayLikeKeys.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,kBAAkB,CAAA;AAC1C,OAAO,QAAQ,MAAM,eAAe,CAAA;AACpC,OAAO,YAAY,MAAM,mBAAmB,CAAA;AAE5C,OAAO,KAAK,MAAM,eAAe,CAAA;AACjC,OAAO,OAAO,MAAM,WAAW,CAAA;AAE/B,2CAA2C;AAC3C,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAA;AAEpC,gDAAgD;AAChD,MAAM,cAAc,GAAG,WAAW,CAAC,cAAc,CAAA;AAEjD;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,KAAU,EAAE,YAAqB,KAAK;IAC1E,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EACnC,UAAU,GAAG,CAAC,QAAQ,IAAI,WAAW,CAAC,KAAK,CAAC,EAC5C,MAAM,GAAG,CAAC,QAAQ,IAAI,CAAC,UAAU,IAAI,QAAQ,CAAC,KAAK,CAAC,EACpD,MAAM,GAAG,CAAC,QAAQ,IAAI,CAAC,UAAU,IAAI,CAAC,MAAM,IAAI,YAAY,CAAC,KAAK,CAAC,EACnE,WAAW,GAAG,QAAQ,IAAI,UAAU,IAAI,MAAM,IAAI,MAAM,EACxD,MAAM,GAAG,WAAW,CAAC,CAAC,CAAE,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAc,CAAC,CAAC,CAAC,EAAE,EACrE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;IAExB,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,IACE,CAAC,SAAS,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC9C,CAAC,CACC,WAAW;gBACX,6DAA6D;gBAC7D,CAAC,GAAG,KAAK,QAAQ;oBACf,+DAA+D;oBAC/D,CAAC,MAAM,IAAI,CAAC,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,QAAQ,CAAC,CAAC;oBAClD,mEAAmE;oBACnE,CAAC,MAAM,IAAI,CAAC,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,YAAY,IAAI,GAAG,KAAK,YAAY,CAAC,CAAC;oBAC9E,yBAAyB;oBACzB,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CACxB,EACD,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAClB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"} \ No newline at end of file diff --git a/dist/esm/internal/base/baseGetTag.mjs b/dist/esm/internal/base/baseGetTag.mjs index a84a375..13270c0 100644 --- a/dist/esm/internal/base/baseGetTag.mjs +++ b/dist/esm/internal/base/baseGetTag.mjs @@ -2,7 +2,7 @@ import root from '../../internal/root.mjs'; import getRawTag from '../../internal/getRawTag.mjs'; const nullTag = '[object Null]'; const undefinedTag = '[object Undefined]'; -const symToStringTag = root.Symbol ? root.Symbol.toStringTag : undefined; +const symToStringTag = root?.Symbol ? root.Symbol.toStringTag : undefined; /** * The base implementation of `getTag` without fallbacks for buggy environments. * diff --git a/dist/esm/internal/base/baseGetTag.mjs.map b/dist/esm/internal/base/baseGetTag.mjs.map index 8db1180..084d991 100644 --- a/dist/esm/internal/base/baseGetTag.mjs.map +++ b/dist/esm/internal/base/baseGetTag.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/internal/base/baseGetTag.mjs","sourceRoot":"","sources":["../../../../src/internal/base/baseGetTag.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,iBAAiB,CAAA;AAClC,OAAO,SAAS,MAAM,sBAAsB,CAAA;AA8B5C,MAAM,OAAO,GAAG,eAAe,CAAA;AAC/B,MAAM,YAAY,GAAG,oBAAoB,CAAA;AACzC,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAA;AAExE;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,KAAU;IAC3C,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAClB,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAA;IACrD,CAAC;IAED,OAAO,cAAc,IAAI,cAAc,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC;QAC1D,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC;QAClB,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAC3C,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/internal/base/baseGetTag.mjs","sourceRoot":"","sources":["../../../../src/internal/base/baseGetTag.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,iBAAiB,CAAA;AAClC,OAAO,SAAS,MAAM,sBAAsB,CAAA;AA8B5C,MAAM,OAAO,GAAG,eAAe,CAAA;AAC/B,MAAM,YAAY,GAAG,oBAAoB,CAAA;AACzC,MAAM,cAAc,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAA;AAEzE;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,KAAU;IAC3C,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAClB,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAA;IACrD,CAAC;IAED,OAAO,cAAc,IAAI,cAAc,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC;QAC1D,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC;QAClB,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAC3C,CAAC"} \ No newline at end of file diff --git a/dist/esm/internal/base/baseIsTypedArray.mjs.map b/dist/esm/internal/base/baseIsTypedArray.mjs.map index 54b24c2..b31c4ba 100644 --- a/dist/esm/internal/base/baseIsTypedArray.mjs.map +++ b/dist/esm/internal/base/baseIsTypedArray.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/internal/base/baseIsTypedArray.mjs","sourceRoot":"","sources":["../../../../src/internal/base/baseIsTypedArray.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,QAAQ,MAAM,eAAe,CAAA;AAEpC,OAAO,UAAU,MAAM,cAAc,CAAA;AAErC,MAAM,YAAY,GAAG,oBAAoB,EACvC,QAAQ,GAAG,gBAAgB,EAC3B,OAAO,GAAG,kBAAkB,EAC5B,OAAO,GAAG,eAAe,EACzB,QAAQ,GAAG,gBAAgB,EAC3B,OAAO,GAAG,mBAAmB,EAC7B,MAAM,GAAG,cAAc,EACvB,SAAS,GAAG,iBAAiB,EAC7B,SAAS,GAAG,iBAAiB,EAC7B,SAAS,GAAG,iBAAiB,EAC7B,MAAM,GAAG,cAAc,EACvB,SAAS,GAAG,iBAAiB,EAC7B,UAAU,GAAG,kBAAkB,CAAA;AAEjC,MAAM,cAAc,GAAG,sBAAsB,EAC3C,WAAW,GAAG,mBAAmB,EACjC,UAAU,GAAG,uBAAuB,EACpC,UAAU,GAAG,uBAAuB,EACpC,OAAO,GAAG,oBAAoB,EAC9B,QAAQ,GAAG,qBAAqB,EAChC,QAAQ,GAAG,qBAAqB,EAChC,QAAQ,GAAG,qBAAqB,EAChC,eAAe,GAAG,4BAA4B,EAC9C,SAAS,GAAG,sBAAsB,EAClC,SAAS,GAAG,sBAAsB,CAAA;AAEpC,6DAA6D;AAC7D,MAAM,cAAc,GAAsC,EAAE,CAAA;AAE5D,cAAc,CAAC,UAAU,CAAC;IACxB,cAAc,CAAC,UAAU,CAAC;QAC1B,cAAc,CAAC,OAAO,CAAC;YACvB,cAAc,CAAC,QAAQ,CAAC;gBACxB,cAAc,CAAC,QAAQ,CAAC;oBACxB,cAAc,CAAC,QAAQ,CAAC;wBACxB,cAAc,CAAC,eAAe,CAAC;4BAC/B,cAAc,CAAC,SAAS,CAAC;gCACzB,cAAc,CAAC,SAAS,CAAC;oCACvB,IAAI,CAAA;AAER,cAAc,CAAC,YAAY,CAAC;IAC1B,cAAc,CAAC,QAAQ,CAAC;QACxB,cAAc,CAAC,cAAc,CAAC;YAC9B,cAAc,CAAC,OAAO,CAAC;gBACvB,cAAc,CAAC,WAAW,CAAC;oBAC3B,cAAc,CAAC,OAAO,CAAC;wBACvB,cAAc,CAAC,QAAQ,CAAC;4BACxB,cAAc,CAAC,OAAO,CAAC;gCACvB,cAAc,CAAC,MAAM,CAAC;oCACtB,cAAc,CAAC,SAAS,CAAC;wCACzB,cAAc,CAAC,SAAS,CAAC;4CACzB,cAAc,CAAC,SAAS,CAAC;gDACzB,cAAc,CAAC,MAAM,CAAC;oDACtB,cAAc,CAAC,SAAS,CAAC;wDACzB,cAAc,CAAC,UAAU,CAAC;4DACxB,KAAK,CAAA;AAET;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,KAAU;IACjD,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAA;AAC3F,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/internal/base/baseIsTypedArray.mjs","sourceRoot":"","sources":["../../../../src/internal/base/baseIsTypedArray.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,QAAQ,MAAM,eAAe,CAAA;AAEpC,OAAO,UAAU,MAAM,cAAc,CAAA;AAErC,MAAM,YAAY,GAAG,oBAAoB,EACvC,QAAQ,GAAG,gBAAgB,EAC3B,OAAO,GAAG,kBAAkB,EAC5B,OAAO,GAAG,eAAe,EACzB,QAAQ,GAAG,gBAAgB,EAC3B,OAAO,GAAG,mBAAmB,EAC7B,MAAM,GAAG,cAAc,EACvB,SAAS,GAAG,iBAAiB,EAC7B,SAAS,GAAG,iBAAiB,EAC7B,SAAS,GAAG,iBAAiB,EAC7B,MAAM,GAAG,cAAc,EACvB,SAAS,GAAG,iBAAiB,EAC7B,UAAU,GAAG,kBAAkB,CAAA;AAEjC,MAAM,cAAc,GAAG,sBAAsB,EAC3C,WAAW,GAAG,mBAAmB,EACjC,UAAU,GAAG,uBAAuB,EACpC,UAAU,GAAG,uBAAuB,EACpC,OAAO,GAAG,oBAAoB,EAC9B,QAAQ,GAAG,qBAAqB,EAChC,QAAQ,GAAG,qBAAqB,EAChC,QAAQ,GAAG,qBAAqB,EAChC,eAAe,GAAG,4BAA4B,EAC9C,SAAS,GAAG,sBAAsB,EAClC,SAAS,GAAG,sBAAsB,CAAA;AAEpC,6DAA6D;AAC7D,MAAM,cAAc,GAAsC,EAAE,CAAA;AAE5D,cAAc,CAAC,UAAU,CAAC;IACxB,cAAc,CAAC,UAAU,CAAC;QAC1B,cAAc,CAAC,OAAO,CAAC;YACvB,cAAc,CAAC,QAAQ,CAAC;gBACxB,cAAc,CAAC,QAAQ,CAAC;oBACxB,cAAc,CAAC,QAAQ,CAAC;wBACxB,cAAc,CAAC,eAAe,CAAC;4BAC/B,cAAc,CAAC,SAAS,CAAC;gCACzB,cAAc,CAAC,SAAS,CAAC;oCACvB,IAAI,CAAA;AAER,cAAc,CAAC,YAAY,CAAC;IAC1B,cAAc,CAAC,QAAQ,CAAC;QACxB,cAAc,CAAC,cAAc,CAAC;YAC9B,cAAc,CAAC,OAAO,CAAC;gBACvB,cAAc,CAAC,WAAW,CAAC;oBAC3B,cAAc,CAAC,OAAO,CAAC;wBACvB,cAAc,CAAC,QAAQ,CAAC;4BACxB,cAAc,CAAC,OAAO,CAAC;gCACvB,cAAc,CAAC,MAAM,CAAC;oCACtB,cAAc,CAAC,SAAS,CAAC;wCACzB,cAAc,CAAC,SAAS,CAAC;4CACzB,cAAc,CAAC,SAAS,CAAC;gDACzB,cAAc,CAAC,MAAM,CAAC;oDACtB,cAAc,CAAC,SAAS,CAAC;wDACzB,cAAc,CAAC,UAAU,CAAC;4DACxB,KAAK,CAAA;AAET;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,KAAU;IACjD,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAA;AAC3F,CAAC"} \ No newline at end of file diff --git a/dist/esm/internal/base/baseKeys.mjs.map b/dist/esm/internal/base/baseKeys.mjs.map index d8c1d24..f780849 100644 --- a/dist/esm/internal/base/baseKeys.mjs.map +++ b/dist/esm/internal/base/baseKeys.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/internal/base/baseKeys.mjs","sourceRoot":"","sources":["../../../../src/internal/base/baseKeys.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,OAAO,WAAW,MAAM,kBAAkB,CAAA;AAE1C,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAA;AAEpC,gDAAgD;AAChD,MAAM,cAAc,GAAG,WAAW,CAAC,cAAc,CAAA;AAEjD,MAAM,UAAU,GAAG,CAAC,QAAa,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAA;AAEvE;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,MAAc;IAC7C,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,OAAO,UAAU,CAAC,MAAM,CAAC,CAAA;IAC3B,CAAC;IACD,MAAM,MAAM,GAAG,EAAE,CAAA;IACjB,IAAI,GAAG,CAAA;IAEP,KAAK,GAAG,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,GAAG,KAAK,aAAa,EAAE,CAAC;YAC9D,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAClB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/internal/base/baseKeys.mjs","sourceRoot":"","sources":["../../../../src/internal/base/baseKeys.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,OAAO,WAAW,MAAM,kBAAkB,CAAA;AAE1C,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAA;AAEpC,gDAAgD;AAChD,MAAM,cAAc,GAAG,WAAW,CAAC,cAAc,CAAA;AAEjD,MAAM,UAAU,GAAG,CAAC,QAAa,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAA;AAEvE;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,MAAc;IAC7C,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,OAAO,UAAU,CAAC,MAAM,CAAC,CAAA;IAC3B,CAAC;IACD,MAAM,MAAM,GAAG,EAAE,CAAA;IACjB,IAAI,GAAG,CAAA;IAEP,KAAK,GAAG,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,GAAG,KAAK,aAAa,EAAE,CAAC;YAC9D,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAClB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC"} \ No newline at end of file diff --git a/dist/esm/internal/copyArray.mjs.map b/dist/esm/internal/copyArray.mjs.map index 3907326..1b5b49e 100644 --- a/dist/esm/internal/copyArray.mjs.map +++ b/dist/esm/internal/copyArray.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/internal/copyArray.mjs","sourceRoot":"","sources":["../../../src/internal/copyArray.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,MAAa,EAAE,KAAa;IAC5D,IAAI,KAAK,GAAG,CAAC,CAAC,CAAA;IACd,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;IAE5B,KAAK,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;IACpC,OAAO,EAAE,KAAK,GAAG,MAAM,EAAE,CAAC;QACxB,KAAK,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAC9B,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/internal/copyArray.mjs","sourceRoot":"","sources":["../../../src/internal/copyArray.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,MAAa,EAAE,KAAa;IAC5D,IAAI,KAAK,GAAG,CAAC,CAAC,CAAA;IACd,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;IAE5B,KAAK,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;IACpC,OAAO,EAAE,KAAK,GAAG,MAAM,EAAE,CAAC;QACxB,KAAK,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAC9B,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC"} \ No newline at end of file diff --git a/dist/esm/internal/free/freeExports.mjs.map b/dist/esm/internal/free/freeExports.mjs.map index c87833c..f84c5e4 100644 --- a/dist/esm/internal/free/freeExports.mjs.map +++ b/dist/esm/internal/free/freeExports.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/internal/free/freeExports.mjs","sourceRoot":"","sources":["../../../../src/internal/free/freeExports.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,eAAe,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAA"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/internal/free/freeExports.mjs","sourceRoot":"","sources":["../../../../src/internal/free/freeExports.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,eAAe,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAA"} \ No newline at end of file diff --git a/dist/esm/internal/free/freeGlobal.mjs.map b/dist/esm/internal/free/freeGlobal.mjs.map index d51e1f4..c45b8bb 100644 --- a/dist/esm/internal/free/freeGlobal.mjs.map +++ b/dist/esm/internal/free/freeGlobal.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/internal/free/freeGlobal.mjs","sourceRoot":"","sources":["../../../../src/internal/free/freeGlobal.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,eAAe,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,IAAI,MAAM,CAAA"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/internal/free/freeGlobal.mjs","sourceRoot":"","sources":["../../../../src/internal/free/freeGlobal.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,eAAe,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,IAAI,MAAM,CAAA"} \ No newline at end of file diff --git a/dist/esm/internal/free/freeSelf.mjs b/dist/esm/internal/free/freeSelf.mjs deleted file mode 100644 index ef67927..0000000 --- a/dist/esm/internal/free/freeSelf.mjs +++ /dev/null @@ -1,3 +0,0 @@ -/** Detect free variable `self`. */ -export default typeof self === 'object' && self && self.Object === Object && self; -//# sourceMappingURL=freeSelf.mjs.map \ No newline at end of file diff --git a/dist/esm/internal/free/freeSelf.mjs.map b/dist/esm/internal/free/freeSelf.mjs.map deleted file mode 100644 index 6867639..0000000 --- a/dist/esm/internal/free/freeSelf.mjs.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"dist/esm/internal/free/freeSelf.mjs","sourceRoot":"","sources":["../../../../src/internal/free/freeSelf.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,eAAe,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,IAAI,CAAA"} \ No newline at end of file diff --git a/dist/esm/internal/getRawTag.mjs b/dist/esm/internal/getRawTag.mjs index 48179b7..dc9cbc8 100644 --- a/dist/esm/internal/getRawTag.mjs +++ b/dist/esm/internal/getRawTag.mjs @@ -1,16 +1,13 @@ import root from './root.mjs'; -/** Built-in value references. */ -const symToStringTag = root.Symbol ? root.Symbol.toStringTag : undefined; -/** Used for built-in method references. */ -const objectProto = Object.prototype; -/** Used to check objects for own properties. */ -const hasOwnProperty = objectProto.hasOwnProperty; -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -const nativeObjectToString = objectProto.toString; +// Prefer explicit, descriptive names for built-in references. +const TO_STRING_TAG = root?.Symbol ? root.Symbol.toStringTag : undefined; +const objectPrototype = Object.prototype; +const hasOwn = objectPrototype.hasOwnProperty; +const objectToString = objectPrototype.toString; +// Small, focused helper improves readability and reuse. +function isObjectLike(value) { + return value !== null && (typeof value === 'object' || typeof value === 'function'); +} /** * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. * @@ -19,20 +16,29 @@ const nativeObjectToString = objectProto.toString; * @returns {string} Returns the raw `toStringTag`. */ export default function getRawTag(value) { - const isOwn = hasOwnProperty.call(value, symToStringTag), tag = value[symToStringTag]; - let unmasked = false; + // Fast path: if no Symbol.toStringTag support or non-object, use default toString. + if (!TO_STRING_TAG || !isObjectLike(value)) { + return objectToString.call(value); + } + const obj = value; + const isOwn = hasOwn.call(obj, TO_STRING_TAG); + const previousTag = obj[TO_STRING_TAG]; + let masked = false; try { - value[symToStringTag] = undefined; - unmasked = true; + obj[TO_STRING_TAG] = undefined; + masked = true; + } + catch { + // Swallow errors from non-writable properties; fall through to toString. } - catch (error) { } - const result = nativeObjectToString.call(value); - if (unmasked) { + const result = objectToString.call(obj); + // Restore original state only if we managed to mask it. + if (masked) { if (isOwn) { - value[symToStringTag] = tag; + obj[TO_STRING_TAG] = previousTag; } else { - delete value[symToStringTag]; + delete obj[TO_STRING_TAG]; } } return result; diff --git a/dist/esm/internal/getRawTag.mjs.map b/dist/esm/internal/getRawTag.mjs.map index d0de0d0..bdfeb96 100644 --- a/dist/esm/internal/getRawTag.mjs.map +++ b/dist/esm/internal/getRawTag.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/internal/getRawTag.mjs","sourceRoot":"","sources":["../../../src/internal/getRawTag.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,QAAQ,CAAA;AAEzB,iCAAiC;AACjC,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAA;AAExE,2CAA2C;AAC3C,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAA;AAEpC,gDAAgD;AAChD,MAAM,cAAc,GAAG,WAAW,CAAC,cAAc,CAAA;AAEjD;;;;GAIG;AACH,MAAM,oBAAoB,GAAG,WAAW,CAAC,QAAQ,CAAA;AAEjD;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,KAAU;IAC1C,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,cAAc,CAAC,EACtD,GAAG,GAAG,KAAK,CAAC,cAAc,CAAC,CAAA;IAE7B,IAAI,QAAQ,GAAG,KAAK,CAAA;IAEpB,IAAI,CAAC;QACH,KAAK,CAAC,cAAc,CAAC,GAAG,SAAS,CAAA;QACjC,QAAQ,GAAG,IAAI,CAAA;IACjB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC,CAAA,CAAC;IAElB,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC/C,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,cAAc,CAAC,GAAG,GAAG,CAAA;QAC7B,CAAC;aAAM,CAAC;YACN,OAAO,KAAK,CAAC,cAAc,CAAC,CAAA;QAC9B,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/internal/getRawTag.mjs","sourceRoot":"","sources":["../../../src/internal/getRawTag.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,QAAQ,CAAA;AAEzB,8DAA8D;AAC9D,MAAM,aAAa,GAAuB,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAA;AAC5F,MAAM,eAAe,GAAG,MAAM,CAAC,SAAS,CAAA;AACxC,MAAM,MAAM,GAAG,eAAe,CAAC,cAAc,CAAA;AAC7C,MAAM,cAAc,GAAG,eAAe,CAAC,QAAQ,CAAA;AAE/C,wDAAwD;AACxD,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,KAAK,KAAK,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,UAAU,CAAC,CAAA;AACrF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,KAAc;IAC9C,mFAAmF;IACnF,IAAI,CAAC,aAAa,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3C,OAAO,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACnC,CAAC;IAED,MAAM,GAAG,GAAG,KAAiC,CAAA;IAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAA;IAC7C,MAAM,WAAW,GAAG,GAAG,CAAC,aAAa,CAAC,CAAA;IAEtC,IAAI,MAAM,GAAG,KAAK,CAAA;IAClB,IAAI,CAAC;QACH,GAAG,CAAC,aAAa,CAAC,GAAG,SAAS,CAAA;QAC9B,MAAM,GAAG,IAAI,CAAA;IACf,CAAC;IAAC,MAAM,CAAC;QACP,yEAAyE;IAC3E,CAAC;IAED,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAEvC,wDAAwD;IACxD,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,KAAK,EAAE,CAAC;YACV,GAAG,CAAC,aAAa,CAAC,GAAG,WAAW,CAAA;QAClC,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,CAAC,aAAa,CAAC,CAAA;QAC3B,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"} \ No newline at end of file diff --git a/dist/esm/internal/index.mjs.map b/dist/esm/internal/index.mjs.map index ca6439c..708e888 100644 --- a/dist/esm/internal/index.mjs.map +++ b/dist/esm/internal/index.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/internal/index.mjs","sourceRoot":"","sources":["../../../src/internal/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,QAAQ,CAAA;AAEzB,OAAO,EAAE,IAAI,EAAE,CAAA"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/internal/index.mjs","sourceRoot":"","sources":["../../../src/internal/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,QAAQ,CAAA;AAEzB,OAAO,EAAE,IAAI,EAAE,CAAA"} \ No newline at end of file diff --git a/dist/esm/internal/isIndex.mjs.map b/dist/esm/internal/isIndex.mjs.map index 9ec6d5f..1b4b861 100644 --- a/dist/esm/internal/isIndex.mjs.map +++ b/dist/esm/internal/isIndex.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/internal/isIndex.mjs","sourceRoot":"","sources":["../../../src/internal/isIndex.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAEtC;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,KAAU,EAAE,MAAe;IACzD,MAAM,IAAI,GAAG,OAAO,KAAK,CAAA;IACzB,MAAM,GAAG,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAA;IAE1D,OAAO,CACL,CAAC,CAAC,MAAM;QACR,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAClE,KAAK,GAAG,CAAC,CAAC;QACV,KAAK,GAAG,CAAC,KAAK,CAAC;QACf,KAAK,GAAG,MAAM,CACf,CAAA;AACH,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/internal/isIndex.mjs","sourceRoot":"","sources":["../../../src/internal/isIndex.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAEtC;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,KAAU,EAAE,MAAe;IACzD,MAAM,IAAI,GAAG,OAAO,KAAK,CAAA;IACzB,MAAM,GAAG,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAA;IAE1D,OAAO,CACL,CAAC,CAAC,MAAM;QACR,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAClE,KAAK,GAAG,CAAC,CAAC;QACV,KAAK,GAAG,CAAC,KAAK,CAAC;QACf,KAAK,GAAG,MAAM,CACf,CAAA;AACH,CAAC"} \ No newline at end of file diff --git a/dist/esm/internal/node.mjs.map b/dist/esm/internal/node.mjs.map index af89a89..538321e 100644 --- a/dist/esm/internal/node.mjs.map +++ b/dist/esm/internal/node.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/internal/node.mjs","sourceRoot":"","sources":["../../../src/internal/node.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,OAAO,WAAW,MAAM,oBAAoB,CAAA;AAE5C,qCAAqC;AACrC,MAAM,UAAU,GAAG,WAAW,IAAI,OAAO,MAAM,IAAI,QAAQ,IAAI,MAAM,IAAI,CAAC,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,MAAM,CAAA;AAE1G,6CAA6C;AAC7C,eAAe,CAAC;IACd,IAAI,CAAC;QACH,oCAAoC;QACpC,OAAO,UAAU,IAAI,UAAU,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAA;IAC7E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC,CAAA,CAAC;AACpB,CAAC,CAAC,EAAE,CAAA"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/internal/node.mjs","sourceRoot":"","sources":["../../../src/internal/node.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,OAAO,WAAW,MAAM,oBAAoB,CAAA;AAE5C,qCAAqC;AACrC,MAAM,UAAU,GAAG,WAAW,IAAI,OAAO,MAAM,IAAI,QAAQ,IAAI,MAAM,IAAI,CAAC,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,MAAM,CAAA;AAE1G,6CAA6C;AAC7C,eAAe,CAAC;IACd,IAAI,CAAC;QACH,oCAAoC;QACpC,OAAO,UAAU,IAAI,UAAU,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAA;IAC7E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC,CAAA,CAAC;AACpB,CAAC,CAAC,EAAE,CAAA"} \ No newline at end of file diff --git a/dist/esm/internal/root.mjs b/dist/esm/internal/root.mjs index 9e320c2..804b718 100644 --- a/dist/esm/internal/root.mjs +++ b/dist/esm/internal/root.mjs @@ -1,5 +1,11 @@ -/** Used as a reference to the global object. */ -import freeGlobal from './free/freeGlobal.mjs'; -import freeSelf from './free/freeSelf.mjs'; -export default freeGlobal || freeSelf || new Function('return this')(); +const root = typeof globalThis === 'object' + ? globalThis + : typeof self === 'object' + ? self + : typeof window === 'object' + ? window + : typeof global === 'object' + ? global + : undefined; +export default root; //# sourceMappingURL=root.mjs.map \ No newline at end of file diff --git a/dist/esm/internal/root.mjs.map b/dist/esm/internal/root.mjs.map index 6cc0090..6b55d5a 100644 --- a/dist/esm/internal/root.mjs.map +++ b/dist/esm/internal/root.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/internal/root.mjs","sourceRoot":"","sources":["../../../src/internal/root.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,OAAO,UAAU,MAAM,mBAAmB,CAAA;AAC1C,OAAO,QAAQ,MAAM,iBAAiB,CAAA;AAEtC,eAAe,UAAU,IAAI,QAAQ,IAAI,IAAI,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAA"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/internal/root.mjs","sourceRoot":"","sources":["../../../src/internal/root.ts"],"names":[],"mappings":"AAMA,MAAM,IAAI,GACR,OAAO,UAAU,KAAK,QAAQ;IAC5B,CAAC,CAAC,UAAU;IACZ,CAAC,CAAC,OAAO,IAAI,KAAK,QAAQ;QACxB,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,OAAO,MAAM,KAAK,QAAQ;YAC1B,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,OAAO,MAAM,KAAK,QAAQ;gBAC1B,CAAC,CAAC,MAAM;gBACR,CAAC,CAAC,SAAS,CAAA;AAErB,eAAe,IAAI,CAAA"} \ No newline at end of file diff --git a/dist/esm/internal/types.mjs.map b/dist/esm/internal/types.mjs.map index 70d2591..fa297b4 100644 --- a/dist/esm/internal/types.mjs.map +++ b/dist/esm/internal/types.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/internal/types.mjs","sourceRoot":"","sources":["../../../src/internal/types.ts"],"names":[],"mappings":""} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/internal/types.mjs","sourceRoot":"","sources":["../../../src/internal/types.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/dist/esm/is/index.mjs.map b/dist/esm/is/index.mjs.map index b5f5630..6567f20 100644 --- a/dist/esm/is/index.mjs.map +++ b/dist/esm/is/index.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/is/index.mjs","sourceRoot":"","sources":["../../../src/is/index.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,eAAe,CAAA;AACvC,OAAO,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAC7C,OAAO,WAAW,MAAM,eAAe,CAAA;AACvC,OAAO,WAAW,EAAE,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC3D,OAAO,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAC1C,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,QAAQ,MAAM,YAAY,CAAA;AACjC,OAAO,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAC1C,OAAO,OAAO,MAAM,WAAW,CAAA;AAC/B,OAAO,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAC1C,OAAO,OAAO,EAAE,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAC/D,OAAO,UAAU,EAAE,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AACtD,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,QAAQ,MAAM,YAAY,CAAA;AACjC,OAAO,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACxD,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,QAAQ,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAC7E,OAAO,WAAW,MAAM,eAAe,CAAA;AACvC,OAAO,QAAQ,EAAE,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,QAAQ,MAAM,YAAY,CAAA;AACjC,OAAO,YAAY,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,MAAM,SAAS,CAAA;AAE3B,OAAO,EACL,cAAc,EACd,WAAW,EACX,OAAO,EACP,WAAW,EACX,QAAQ,EACR,WAAW,EACX,MAAM,EACN,OAAO,EACP,SAAS,EACT,UAAU,EACV,QAAQ,EACR,MAAM,EACN,OAAO,EACP,OAAO,EACP,aAAa,EACb,MAAM,EACN,OAAO,EACP,OAAO,EACP,gBAAgB,EAChB,QAAQ,EACR,UAAU,EACV,WAAW,EACX,SAAS,EACT,UAAU,EACV,QAAQ,EACR,KAAK,EACL,MAAM,EACN,MAAM,EACN,OAAO,EACP,SAAS,EACT,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,SAAS,EACT,WAAW,EACX,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,KAAK,GACN,CAAA"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/is/index.mjs","sourceRoot":"","sources":["../../../src/is/index.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,eAAe,CAAA;AACvC,OAAO,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAC7C,OAAO,WAAW,MAAM,eAAe,CAAA;AACvC,OAAO,WAAW,EAAE,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC3D,OAAO,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAC1C,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,QAAQ,MAAM,YAAY,CAAA;AACjC,OAAO,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAC1C,OAAO,OAAO,MAAM,WAAW,CAAA;AAC/B,OAAO,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAC1C,OAAO,OAAO,EAAE,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAC/D,OAAO,UAAU,EAAE,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AACtD,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,QAAQ,MAAM,YAAY,CAAA;AACjC,OAAO,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACxD,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,QAAQ,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAC7E,OAAO,WAAW,MAAM,eAAe,CAAA;AACvC,OAAO,QAAQ,EAAE,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,QAAQ,MAAM,YAAY,CAAA;AACjC,OAAO,YAAY,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,MAAM,SAAS,CAAA;AAE3B,OAAO,EACL,cAAc,EACd,WAAW,EACX,OAAO,EACP,WAAW,EACX,QAAQ,EACR,WAAW,EACX,MAAM,EACN,OAAO,EACP,SAAS,EACT,UAAU,EACV,QAAQ,EACR,MAAM,EACN,OAAO,EACP,OAAO,EACP,aAAa,EACb,MAAM,EACN,OAAO,EACP,OAAO,EACP,gBAAgB,EAChB,QAAQ,EACR,UAAU,EACV,WAAW,EACX,SAAS,EACT,UAAU,EACV,QAAQ,EACR,KAAK,EACL,MAAM,EACN,MAAM,EACN,OAAO,EACP,SAAS,EACT,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,SAAS,EACT,WAAW,EACX,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,KAAK,GACN,CAAA"} \ No newline at end of file diff --git a/dist/esm/is/isArguments.mjs.map b/dist/esm/is/isArguments.mjs.map index 0a46b19..670d2a7 100644 --- a/dist/esm/is/isArguments.mjs.map +++ b/dist/esm/is/isArguments.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/is/isArguments.mjs","sourceRoot":"","sources":["../../../src/is/isArguments.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,OAAO,UAAU,MAAM,4BAA4B,CAAA;AAEnD,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAA;AAEpC,gDAAgD;AAChD,MAAM,cAAc,GAAG,WAAW,CAAC,cAAc,CAAA;AAEjD,iCAAiC;AACjC,MAAM,oBAAoB,GAAG,WAAW,CAAC,oBAAoB,CAAA;AAE7D,2CAA2C;AAC3C,MAAM,YAAY,GAAG,oBAAoB,CAAA;AAEzC;;;;GAIG;AACH,MAAM,eAAe,GAAG,CAAC,KAAU,EAAE,EAAE;IACrC,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,UAAU,CAAC,KAAK,CAAC,KAAK,YAAY,CAAA;AAC1F,CAAC,CAAA;AAED;;;;;;;;;;GAUG;AACH,eAAe,eAAe,CAC5B,CAAC;IACC,OAAO,SAAS,CAAA;AAClB,CAAC,CAAC,EAAE,CACL;IACC,CAAC,CAAC,eAAe;IACjB,CAAC,CAAC,UAAU,KAAU;QAClB,OAAO,CACL,KAAK,KAAK,IAAI;YACd,OAAO,KAAK,KAAK,QAAQ;YACzB,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC;YACpC,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAC5C,CAAA;IACH,CAAC,CAAA"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/is/isArguments.mjs","sourceRoot":"","sources":["../../../src/is/isArguments.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,OAAO,UAAU,MAAM,4BAA4B,CAAA;AAEnD,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAA;AAEpC,gDAAgD;AAChD,MAAM,cAAc,GAAG,WAAW,CAAC,cAAc,CAAA;AAEjD,iCAAiC;AACjC,MAAM,oBAAoB,GAAG,WAAW,CAAC,oBAAoB,CAAA;AAE7D,2CAA2C;AAC3C,MAAM,YAAY,GAAG,oBAAoB,CAAA;AAEzC;;;;GAIG;AACH,MAAM,eAAe,GAAG,CAAC,KAAU,EAAE,EAAE;IACrC,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,UAAU,CAAC,KAAK,CAAC,KAAK,YAAY,CAAA;AAC1F,CAAC,CAAA;AAED;;;;;;;;;;GAUG;AACH,eAAe,eAAe,CAC5B,CAAC;IACC,OAAO,SAAS,CAAA;AAClB,CAAC,CAAC,EAAE,CACL;IACC,CAAC,CAAC,eAAe;IACjB,CAAC,CAAC,UAAU,KAAU;QAClB,OAAO,CACL,KAAK,KAAK,IAAI;YACd,OAAO,KAAK,KAAK,QAAQ;YACzB,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC;YACpC,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAC5C,CAAA;IACH,CAAC,CAAA"} \ No newline at end of file diff --git a/dist/esm/is/isArray.mjs.map b/dist/esm/is/isArray.mjs.map index 8625a64..fef171f 100644 --- a/dist/esm/is/isArray.mjs.map +++ b/dist/esm/is/isArray.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/is/isArray.mjs","sourceRoot":"","sources":["../../../src/is/isArray.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,KAAU;IACxC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAC7B,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAG,UAAiB;IAC3C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAA;IAC3E,CAAC;IAED,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAA;AAC3D,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/is/isArray.mjs","sourceRoot":"","sources":["../../../src/is/isArray.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,KAAU;IACxC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAC7B,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAG,UAAiB;IAC3C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAA;IAC3E,CAAC;IAED,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAA;AAC3D,CAAC"} \ No newline at end of file diff --git a/dist/esm/is/isArrayLike.mjs.map b/dist/esm/is/isArrayLike.mjs.map index ad4c750..35d268e 100644 --- a/dist/esm/is/isArrayLike.mjs.map +++ b/dist/esm/is/isArrayLike.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/is/isArrayLike.mjs","sourceRoot":"","sources":["../../../src/is/isArrayLike.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,iBAAiB,CAAA;AACxC,OAAO,QAAQ,MAAM,eAAe,CAAA;AAEpC;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,KAAU;IAC5C,OAAO,KAAK,IAAI,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;AACtE,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/is/isArrayLike.mjs","sourceRoot":"","sources":["../../../src/is/isArrayLike.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,iBAAiB,CAAA;AACxC,OAAO,QAAQ,MAAM,eAAe,CAAA;AAEpC;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,KAAU;IAC5C,OAAO,KAAK,IAAI,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;AACtE,CAAC"} \ No newline at end of file diff --git a/dist/esm/is/isBasicType.mjs.map b/dist/esm/is/isBasicType.mjs.map index e959c3f..b311b74 100644 --- a/dist/esm/is/isBasicType.mjs.map +++ b/dist/esm/is/isBasicType.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/is/isBasicType.mjs","sourceRoot":"","sources":["../../../src/is/isBasicType.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,aAAa,CAAA;AACnC,OAAO,KAAK,MAAM,SAAS,CAAA;AAC3B,OAAO,SAAS,MAAM,aAAa,CAAA;AACnC,OAAO,QAAQ,MAAM,YAAY,CAAA;AACjC,OAAO,QAAQ,MAAM,YAAY,CAAA;AAEjC,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,KAAU;IAC5C,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;AAC/B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAU;IACvC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAC3G,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/is/isBasicType.mjs","sourceRoot":"","sources":["../../../src/is/isBasicType.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,aAAa,CAAA;AACnC,OAAO,KAAK,MAAM,SAAS,CAAA;AAC3B,OAAO,SAAS,MAAM,aAAa,CAAA;AACnC,OAAO,QAAQ,MAAM,YAAY,CAAA;AACjC,OAAO,QAAQ,MAAM,YAAY,CAAA;AAEjC,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,KAAU;IAC5C,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;AAC/B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAU;IACvC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAC3G,CAAC"} \ No newline at end of file diff --git a/dist/esm/is/isBlob.mjs.map b/dist/esm/is/isBlob.mjs.map index 7a95777..41d80c8 100644 --- a/dist/esm/is/isBlob.mjs.map +++ b/dist/esm/is/isBlob.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/is/isBlob.mjs","sourceRoot":"","sources":["../../../src/is/isBlob.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,GAAG,UAAiB;IAC1C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAA;IAC3E,CAAC;IAED,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAA;AAC1D,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,KAAU;IACvC,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,eAAe,CAAA;AAClE,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/is/isBlob.mjs","sourceRoot":"","sources":["../../../src/is/isBlob.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,GAAG,UAAiB;IAC1C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAA;IAC3E,CAAC;IAED,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAA;AAC1D,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,KAAU;IACvC,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,eAAe,CAAA;AAClE,CAAC"} \ No newline at end of file diff --git a/dist/esm/is/isBoolean.mjs.map b/dist/esm/is/isBoolean.mjs.map index a4d5ba9..7961716 100644 --- a/dist/esm/is/isBoolean.mjs.map +++ b/dist/esm/is/isBoolean.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/is/isBoolean.mjs","sourceRoot":"","sources":["../../../src/is/isBoolean.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,KAAU;IAC1C,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,kBAAkB,CAAA;AAC1G,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAG,UAAiB;IAC7C,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAA;AAC7D,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/is/isBoolean.mjs","sourceRoot":"","sources":["../../../src/is/isBoolean.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,KAAU;IAC1C,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,kBAAkB,CAAA;AAC1G,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAG,UAAiB;IAC7C,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAA;AAC7D,CAAC"} \ No newline at end of file diff --git a/dist/esm/is/isBuffer.mjs b/dist/esm/is/isBuffer.mjs index a23302f..d5d44b4 100644 --- a/dist/esm/is/isBuffer.mjs +++ b/dist/esm/is/isBuffer.mjs @@ -6,7 +6,7 @@ const freeModule = freeExports && typeof module == 'object' && module && !('node /** Detect the popular CommonJS extension `module.exports`. */ const moduleExports = freeModule && freeModule.exports === freeExports; /** Built-in value references. */ -const Buffer = moduleExports ? root.Buffer : undefined; +const Buffer = moduleExports ? root?.Buffer : undefined; /* Built-in method references for those with the same name as other `lodash` methods. */ const nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; /** diff --git a/dist/esm/is/isBuffer.mjs.map b/dist/esm/is/isBuffer.mjs.map index 8f0deca..5c5045d 100644 --- a/dist/esm/is/isBuffer.mjs.map +++ b/dist/esm/is/isBuffer.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/is/isBuffer.mjs","sourceRoot":"","sources":["../../../src/is/isBuffer.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,iBAAiB,CAAA;AAElC,sCAAsC;AACtC,MAAM,WAAW,GAAG,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAA;AAE1F,qCAAqC;AACrC,MAAM,UAAU,GAAG,WAAW,IAAI,OAAO,MAAM,IAAI,QAAQ,IAAI,MAAM,IAAI,CAAC,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,MAAM,CAAA;AAE1G,8DAA8D;AAC9D,MAAM,aAAa,GAAG,UAAU,IAAI,UAAU,CAAC,OAAO,KAAK,WAAW,CAAA;AAEtE,iCAAiC;AACjC,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAA;AAEtD,wFAAwF;AACxF,MAAM,cAAc,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAA;AAE3D;;;;;;;;;;GAUG;AACH,eAAe,cAAc,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAA"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/is/isBuffer.mjs","sourceRoot":"","sources":["../../../src/is/isBuffer.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,iBAAiB,CAAA;AAElC,sCAAsC;AACtC,MAAM,WAAW,GAAG,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAA;AAE1F,qCAAqC;AACrC,MAAM,UAAU,GAAG,WAAW,IAAI,OAAO,MAAM,IAAI,QAAQ,IAAI,MAAM,IAAI,CAAC,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,MAAM,CAAA;AAE1G,8DAA8D;AAC9D,MAAM,aAAa,GAAG,UAAU,IAAI,UAAU,CAAC,OAAO,KAAK,WAAW,CAAA;AAEtE,iCAAiC;AACjC,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAA;AAEvD,wFAAwF;AACxF,MAAM,cAAc,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAA;AAE3D;;;;;;;;;;GAUG;AACH,eAAe,cAAc,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAA"} \ No newline at end of file diff --git a/dist/esm/is/isDate.mjs.map b/dist/esm/is/isDate.mjs.map index a8024e5..05e133a 100644 --- a/dist/esm/is/isDate.mjs.map +++ b/dist/esm/is/isDate.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/is/isDate.mjs","sourceRoot":"","sources":["../../../src/is/isDate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,GAAG,UAAiB;IAC1C,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAA;AAC1D,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,KAAU;IACvC,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,eAAe,CAAA;AAClE,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/is/isDate.mjs","sourceRoot":"","sources":["../../../src/is/isDate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,GAAG,UAAiB;IAC1C,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAA;AAC1D,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,KAAU;IACvC,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,eAAe,CAAA;AAClE,CAAC"} \ No newline at end of file diff --git a/dist/esm/is/isEmpty.mjs.map b/dist/esm/is/isEmpty.mjs.map index 01f66d7..1b3e6e5 100644 --- a/dist/esm/is/isEmpty.mjs.map +++ b/dist/esm/is/isEmpty.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/is/isEmpty.mjs","sourceRoot":"","sources":["../../../src/is/isEmpty.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE1C;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,GAAG,UAAiB;IAClD,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;QAC1C,QAAQ,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAClD,KAAK,iBAAiB;gBACpB,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM;oBAAE,OAAO,IAAI,CAAA;gBACxC,MAAK;YACP,KAAK,iBAAiB;gBACpB,IAAI,SAAS,KAAK,CAAC;oBAAE,OAAO,IAAI,CAAA;gBAChC,MAAK;YACP,KAAK,eAAe;gBAClB,OAAO,IAAI,CAAA;YACb,KAAK,gBAAgB;gBACnB,OAAO,SAAS,CAAC,MAAM,KAAK,CAAC,CAAA;YAC/B,KAAK,kBAAkB;gBACrB,OAAO,SAAS,KAAK,KAAK,CAAA;YAC5B,KAAK,iBAAiB;gBACpB,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAA;YAClC,4BAA4B;YAC5B,iCAAiC;YACjC,6BAA6B;YAC7B,wBAAwB;QAC1B,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC,CAAC,CAAA;IAEF,OAAO,CAAC,OAAO,CAAA;AACjB,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/is/isEmpty.mjs","sourceRoot":"","sources":["../../../src/is/isEmpty.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE1C;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,GAAG,UAAiB;IAClD,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;QAC1C,QAAQ,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAClD,KAAK,iBAAiB;gBACpB,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM;oBAAE,OAAO,IAAI,CAAA;gBACxC,MAAK;YACP,KAAK,iBAAiB;gBACpB,IAAI,SAAS,KAAK,CAAC;oBAAE,OAAO,IAAI,CAAA;gBAChC,MAAK;YACP,KAAK,eAAe;gBAClB,OAAO,IAAI,CAAA;YACb,KAAK,gBAAgB;gBACnB,OAAO,SAAS,CAAC,MAAM,KAAK,CAAC,CAAA;YAC/B,KAAK,kBAAkB;gBACrB,OAAO,SAAS,KAAK,KAAK,CAAA;YAC5B,KAAK,iBAAiB;gBACpB,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAA;YAClC,4BAA4B;YAC5B,iCAAiC;YACjC,6BAA6B;YAC7B,wBAAwB;QAC1B,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC,CAAC,CAAA;IAEF,OAAO,CAAC,OAAO,CAAA;AACjB,CAAC"} \ No newline at end of file diff --git a/dist/esm/is/isEven.mjs.map b/dist/esm/is/isEven.mjs.map index 71f2d4d..b81cda0 100644 --- a/dist/esm/is/isEven.mjs.map +++ b/dist/esm/is/isEven.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/is/isEven.mjs","sourceRoot":"","sources":["../../../src/is/isEven.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,KAAU;IACvC,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QACvE,OAAO,KAAK,CAAA;IACd,CAAC;IAED,OAAO,KAAK,GAAG,CAAC,KAAK,CAAC,CAAA;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,GAAG,UAAiB;IAC1C,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YACvB,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/is/isEven.mjs","sourceRoot":"","sources":["../../../src/is/isEven.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,KAAU;IACvC,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QACvE,OAAO,KAAK,CAAA;IACd,CAAC;IAED,OAAO,KAAK,GAAG,CAAC,KAAK,CAAC,CAAA;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,GAAG,UAAiB;IAC1C,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YACvB,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC"} \ No newline at end of file diff --git a/dist/esm/is/isFloat.mjs.map b/dist/esm/is/isFloat.mjs.map index 498cda0..9bd8dac 100644 --- a/dist/esm/is/isFloat.mjs.map +++ b/dist/esm/is/isFloat.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/is/isFloat.mjs","sourceRoot":"","sources":["../../../src/is/isFloat.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAGvC,MAAM,UAAU,QAAQ,CAAC,GAAG,UAAiB;IAC3C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAA;IACvG,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;QAC1E,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;IAEpE,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;AAC9E,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,MAAW;IACzC,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;IACnC,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;AACvC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAkB;IACjD,OAAO,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;AACvC,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/is/isFloat.mjs","sourceRoot":"","sources":["../../../src/is/isFloat.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAGvC,MAAM,UAAU,QAAQ,CAAC,GAAG,UAAiB;IAC3C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAA;IACvG,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;QAC1E,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;IAEpE,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;AAC9E,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,MAAW;IACzC,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;IACnC,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;AACvC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAkB;IACjD,OAAO,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;AACvC,CAAC"} \ No newline at end of file diff --git a/dist/esm/is/isFunction.mjs.map b/dist/esm/is/isFunction.mjs.map index 4b17df9..d567afb 100644 --- a/dist/esm/is/isFunction.mjs.map +++ b/dist/esm/is/isFunction.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/is/isFunction.mjs","sourceRoot":"","sources":["../../../src/is/isFunction.ts"],"names":[],"mappings":"AAAA,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW,CAAA;AAEzC,MAAM,QAAQ,GAAG,wBAAwB,EACvC,OAAO,GAAG,mBAAmB,EAC7B,MAAM,GAAG,4BAA4B,EACrC,OAAO,GAAG,eAAe,EACzB,QAAQ,GAAG,gBAAgB,EAC3B,YAAY,GAAG,oBAAoB,CAAA;AAErC;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,GAAG,UAAiB;IAC9C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAA;IAC9E,CAAC;IAED,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAA;IAEpE,OAAO,CAAC,OAAO,CAAA;AACjB,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,SAAc;IAC/C,MAAM,GAAG,GAAG,UAAU,CAAC,SAAS,CAAC,CAAA;IACjC,OAAO,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,QAAQ,CAAA;AAClF,CAAC;AAED;;;;GAIG;AACH,SAAS,UAAU,CAAC,KAAU;IAC5B,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAClB,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAA;IACrD,CAAC;IACD,OAAO,cAAc,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;AACvF,CAAC;AAED;;;;GAIG;AACH,SAAS,SAAS,CAAC,KAAU;IAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,cAAc,CAAC,CAAA;IACzE,MAAM,GAAG,GAAG,KAAK,CAAC,cAAc,CAAC,CAAA;IAEjC,IAAI,QAAQ,GAAG,KAAK,CAAA;IAEpB,IAAI,CAAC;QACH,KAAK,CAAC,cAAc,CAAC,GAAG,SAAS,CAAA;QACjC,QAAQ,GAAG,IAAI,CAAA;IACjB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC,CAAA,CAAC;IAElB,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,CAAA;IACpC,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,cAAc,CAAC,GAAG,GAAG,CAAA;QAC7B,CAAC;aAAM,CAAC;YACN,OAAO,KAAK,CAAC,cAAc,CAAC,CAAA;QAC9B,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,KAAU;IAChC,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAC9C,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/is/isFunction.mjs","sourceRoot":"","sources":["../../../src/is/isFunction.ts"],"names":[],"mappings":"AAAA,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW,CAAA;AAEzC,MAAM,QAAQ,GAAG,wBAAwB,EACvC,OAAO,GAAG,mBAAmB,EAC7B,MAAM,GAAG,4BAA4B,EACrC,OAAO,GAAG,eAAe,EACzB,QAAQ,GAAG,gBAAgB,EAC3B,YAAY,GAAG,oBAAoB,CAAA;AAErC;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,GAAG,UAAiB;IAC9C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAA;IAC9E,CAAC;IAED,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAA;IAEpE,OAAO,CAAC,OAAO,CAAA;AACjB,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,SAAc;IAC/C,MAAM,GAAG,GAAG,UAAU,CAAC,SAAS,CAAC,CAAA;IACjC,OAAO,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,QAAQ,CAAA;AAClF,CAAC;AAED;;;;GAIG;AACH,SAAS,UAAU,CAAC,KAAU;IAC5B,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAClB,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAA;IACrD,CAAC;IACD,OAAO,cAAc,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;AACvF,CAAC;AAED;;;;GAIG;AACH,SAAS,SAAS,CAAC,KAAU;IAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,cAAc,CAAC,CAAA;IACzE,MAAM,GAAG,GAAG,KAAK,CAAC,cAAc,CAAC,CAAA;IAEjC,IAAI,QAAQ,GAAG,KAAK,CAAA;IAEpB,IAAI,CAAC;QACH,KAAK,CAAC,cAAc,CAAC,GAAG,SAAS,CAAA;QACjC,QAAQ,GAAG,IAAI,CAAA;IACjB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC,CAAA,CAAC;IAElB,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,CAAA;IACpC,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,cAAc,CAAC,GAAG,GAAG,CAAA;QAC7B,CAAC;aAAM,CAAC;YACN,OAAO,KAAK,CAAC,cAAc,CAAC,CAAA;QAC9B,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,KAAU;IAChC,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAC9C,CAAC"} \ No newline at end of file diff --git a/dist/esm/is/isInteger.mjs.map b/dist/esm/is/isInteger.mjs.map index d5d3821..2b07a5d 100644 --- a/dist/esm/is/isInteger.mjs.map +++ b/dist/esm/is/isInteger.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/is/isInteger.mjs","sourceRoot":"","sources":["../../../src/is/isInteger.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,KAAU;IAC1C,OAAO,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAA;AACnD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAG,UAAiB;IAC7C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAA;IAC9E,CAAC;IAED,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7E,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAA;IACtE,CAAC;IAED,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAA;AAC7D,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/is/isInteger.mjs","sourceRoot":"","sources":["../../../src/is/isInteger.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,KAAU;IAC1C,OAAO,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAA;AACnD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAG,UAAiB;IAC7C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAA;IAC9E,CAAC;IAED,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7E,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAA;IACtE,CAAC;IAED,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAA;AAC7D,CAAC"} \ No newline at end of file diff --git a/dist/esm/is/isLength.mjs.map b/dist/esm/is/isLength.mjs.map index f0271a6..b3017f1 100644 --- a/dist/esm/is/isLength.mjs.map +++ b/dist/esm/is/isLength.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/is/isLength.mjs","sourceRoot":"","sources":["../../../src/is/isLength.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,KAAU;IACzC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,GAAG,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,MAAM,CAAC,gBAAgB,CAAA;AACvG,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/is/isLength.mjs","sourceRoot":"","sources":["../../../src/is/isLength.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,KAAU;IACzC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,GAAG,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,MAAM,CAAC,gBAAgB,CAAA;AACvG,CAAC"} \ No newline at end of file diff --git a/dist/esm/is/isNil.mjs.map b/dist/esm/is/isNil.mjs.map index 4d4d920..5167396 100644 --- a/dist/esm/is/isNil.mjs.map +++ b/dist/esm/is/isNil.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/is/isNil.mjs","sourceRoot":"","sources":["../../../src/is/isNil.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,GAAG,UAAiB;IAC1C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAA;IAC1E,CAAC;IAED,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAA;AAC1D,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,GAAG,UAAiB;IACzC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAA;IAC1E,CAAC;IAED,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAA;AACzD,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,KAAU;IACtC,OAAO,KAAK,IAAI,IAAI,CAAA;AACtB,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,KAAU;IAC/B,OAAO,KAAK,KAAK,IAAI,CAAA;AACvB,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/is/isNil.mjs","sourceRoot":"","sources":["../../../src/is/isNil.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,GAAG,UAAiB;IAC1C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAA;IAC1E,CAAC;IAED,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAA;AAC1D,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,GAAG,UAAiB;IACzC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAA;IAC1E,CAAC;IAED,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAA;AACzD,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,KAAU;IACtC,OAAO,KAAK,IAAI,IAAI,CAAA;AACtB,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,KAAU;IAC/B,OAAO,KAAK,KAAK,IAAI,CAAA;AACvB,CAAC"} \ No newline at end of file diff --git a/dist/esm/is/isNumeric.mjs.map b/dist/esm/is/isNumeric.mjs.map index c3b19ae..8dd949f 100644 --- a/dist/esm/is/isNumeric.mjs.map +++ b/dist/esm/is/isNumeric.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/is/isNumeric.mjs","sourceRoot":"","sources":["../../../src/is/isNumeric.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,KAAU;IAC1C,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;AAChF,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAG,UAAiB;IAC7C,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAA;IAEnE,OAAO,CAAC,OAAO,CAAA;AACjB,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/is/isNumeric.mjs","sourceRoot":"","sources":["../../../src/is/isNumeric.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,KAAU;IAC1C,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;AAChF,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAG,UAAiB;IAC7C,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAA;IAEnE,OAAO,CAAC,OAAO,CAAA;AACjB,CAAC"} \ No newline at end of file diff --git a/dist/esm/is/isObject.mjs.map b/dist/esm/is/isObject.mjs.map index 8b6e895..5bdf4c2 100644 --- a/dist/esm/is/isObject.mjs.map +++ b/dist/esm/is/isObject.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/is/isObject.mjs","sourceRoot":"","sources":["../../../src/is/isObject.ts"],"names":[],"mappings":"AAAA,MAAM,GAAG,GACP,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,iBAAiB;IACxD,CAAC,CAAC,UAAU,KAAU;QAClB,wDAAwD;QACxD,OAAO,CACL,KAAK,IAAI,IAAI;YACb,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,iBAAiB;YAC3D,KAAK,CAAC,aAAa,KAAK,SAAS,CAClC,CAAA;IACH,CAAC;IACH,CAAC,CAAC,UAAU,KAAU;QAClB,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,iBAAiB,CAAA;IACpE,CAAC,CAAA;AAEP;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,GAAG,UAAiB;IAC5C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAA;IAC7E,CAAC;IAED,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAA;IAE7D,OAAO,CAAC,OAAO,CAAA;AACjB,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,KAAW;IAC1C,OAAO,GAAG,CAAC,KAAK,CAAC,CAAA;AACnB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAG,UAAiB;IAChD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAA;IAC7E,CAAC;IAED,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;QAC1C,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;YAAE,OAAO,IAAI,CAAA;QAErC,KAAK,MAAM,GAAG,IAAI,SAAS;YAAE,OAAO,IAAI,CAAA;IAC1C,CAAC,CAAC,CAAA;IAEF,OAAO,CAAC,OAAO,CAAA;AACjB,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,YAAY,CAAC,KAAU;IACrC,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAA;AACpD,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/is/isObject.mjs","sourceRoot":"","sources":["../../../src/is/isObject.ts"],"names":[],"mappings":"AAAA,MAAM,GAAG,GACP,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,iBAAiB;IACxD,CAAC,CAAC,UAAU,KAAU;QAClB,wDAAwD;QACxD,OAAO,CACL,KAAK,IAAI,IAAI;YACb,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,iBAAiB;YAC3D,KAAK,CAAC,aAAa,KAAK,SAAS,CAClC,CAAA;IACH,CAAC;IACH,CAAC,CAAC,UAAU,KAAU;QAClB,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,iBAAiB,CAAA;IACpE,CAAC,CAAA;AAEP;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,GAAG,UAAiB;IAC5C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAA;IAC7E,CAAC;IAED,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAA;IAE7D,OAAO,CAAC,OAAO,CAAA;AACjB,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,KAAW;IAC1C,OAAO,GAAG,CAAC,KAAK,CAAC,CAAA;AACnB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAG,UAAiB;IAChD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAA;IAC7E,CAAC;IAED,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;QAC1C,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;YAAE,OAAO,IAAI,CAAA;QAErC,KAAK,MAAM,GAAG,IAAI,SAAS;YAAE,OAAO,IAAI,CAAA;IAC1C,CAAC,CAAC,CAAA;IAEF,OAAO,CAAC,OAAO,CAAA;AACjB,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,YAAY,CAAC,KAAU;IACrC,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAA;AACpD,CAAC"} \ No newline at end of file diff --git a/dist/esm/is/isPrototype.mjs.map b/dist/esm/is/isPrototype.mjs.map index 891527a..5588ae1 100644 --- a/dist/esm/is/isPrototype.mjs.map +++ b/dist/esm/is/isPrototype.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/is/isPrototype.mjs","sourceRoot":"","sources":["../../../src/is/isPrototype.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,OAAO,UAAU,MAAM,cAAc,CAAA;AAErC,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAA;AAEpC;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,KAAU;IAC5C,MAAM,IAAI,GAAG,KAAK,IAAI,KAAK,CAAC,WAAW,EACrC,KAAK,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,WAAW,CAAA;IAE7D,OAAO,KAAK,KAAK,KAAK,CAAA;AACxB,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/is/isPrototype.mjs","sourceRoot":"","sources":["../../../src/is/isPrototype.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,OAAO,UAAU,MAAM,cAAc,CAAA;AAErC,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAA;AAEpC;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,KAAU;IAC5C,MAAM,IAAI,GAAG,KAAK,IAAI,KAAK,CAAC,WAAW,EACrC,KAAK,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,WAAW,CAAA;IAE7D,OAAO,KAAK,KAAK,KAAK,CAAA;AACxB,CAAC"} \ No newline at end of file diff --git a/dist/esm/is/isString.mjs.map b/dist/esm/is/isString.mjs.map index 606ed00..dfef149 100644 --- a/dist/esm/is/isString.mjs.map +++ b/dist/esm/is/isString.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/is/isString.mjs","sourceRoot":"","sources":["../../../src/is/isString.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,GAAG,UAAiB;IAC5C,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAA;AAC5D,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,KAAU;IACzC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAA;AAClC,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/is/isString.mjs","sourceRoot":"","sources":["../../../src/is/isString.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,GAAG,UAAiB;IAC5C,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAA;AAC5D,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,KAAU;IACzC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAA;AAClC,CAAC"} \ No newline at end of file diff --git a/dist/esm/is/isSymbol.mjs.map b/dist/esm/is/isSymbol.mjs.map index e11056b..b912fc5 100644 --- a/dist/esm/is/isSymbol.mjs.map +++ b/dist/esm/is/isSymbol.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/is/isSymbol.mjs","sourceRoot":"","sources":["../../../src/is/isSymbol.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEzC;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,OAAO,WAAW,GAAG,UAAiB;IAC3C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAA;IAC9E,CAAC;IAED,OAAO,UAAU,CAAC,IAAI,CACpB,KAAK,CAAC,EAAE,CACN,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,iBAAiB,CAAC,CACpH,CAAA;AACH,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/is/isSymbol.mjs","sourceRoot":"","sources":["../../../src/is/isSymbol.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEzC;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,OAAO,WAAW,GAAG,UAAiB;IAC3C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAA;IAC9E,CAAC;IAED,OAAO,UAAU,CAAC,IAAI,CACpB,KAAK,CAAC,EAAE,CACN,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,iBAAiB,CAAC,CACpH,CAAA;AACH,CAAC"} \ No newline at end of file diff --git a/dist/esm/is/isTypedArray.mjs.map b/dist/esm/is/isTypedArray.mjs.map index ca94973..ae62247 100644 --- a/dist/esm/is/isTypedArray.mjs.map +++ b/dist/esm/is/isTypedArray.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/is/isTypedArray.mjs","sourceRoot":"","sources":["../../../src/is/isTypedArray.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,iBAAiB,CAAA;AAClC,OAAO,gBAAgB,MAAM,kCAAkC,CAAA;AAE/D,MAAM,gBAAgB,GAAG,IAAI,IAAI,IAAI,CAAC,YAAY,CAAA;AAElD;;;;;;;;;;;;GAYG;AACH,eAAe,gBAAgB,CAAC,CAAC,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAA"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/is/isTypedArray.mjs","sourceRoot":"","sources":["../../../src/is/isTypedArray.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,iBAAiB,CAAA;AAClC,OAAO,gBAAgB,MAAM,kCAAkC,CAAA;AAE/D,MAAM,gBAAgB,GAAG,IAAI,IAAI,IAAI,CAAC,YAAY,CAAA;AAElD;;;;;;;;;;;;GAYG;AACH,eAAe,gBAAgB,CAAC,CAAC,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAA"} \ No newline at end of file diff --git a/dist/esm/is/isUrl.mjs.map b/dist/esm/is/isUrl.mjs.map index aec4605..3350fdb 100644 --- a/dist/esm/is/isUrl.mjs.map +++ b/dist/esm/is/isUrl.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/is/isUrl.mjs","sourceRoot":"","sources":["../../../src/is/isUrl.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,GAAQ;IACpC,IAAI,GAAG,CAAA;IACP,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAA;IACpB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,KAAK,CAAA;IACd,CAAC;IAED,OAAO,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAA;AAC9D,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/is/isUrl.mjs","sourceRoot":"","sources":["../../../src/is/isUrl.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,GAAQ;IACpC,IAAI,GAAG,CAAA;IACP,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAA;IACpB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,KAAK,CAAA;IACd,CAAC;IAED,OAAO,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAA;AAC9D,CAAC"} \ No newline at end of file diff --git a/dist/esm/object/defaults.mjs.map b/dist/esm/object/defaults.mjs.map index 35cd132..848657a 100644 --- a/dist/esm/object/defaults.mjs.map +++ b/dist/esm/object/defaults.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/object/defaults.mjs","sourceRoot":"","sources":["../../../src/object/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,cAAc,CAAA;AAChC,OAAO,QAAQ,MAAM,eAAe,CAAA;AAEpC;;;;;;;;;;;;GAYG;AAEH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAC9B,MAAgC,EAChC,GAAG,YAAwC;IAE3C,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,CAAA;IAE9B,IAAI,CAAC,GAAG,CAAC,EACP,MAAM,EACN,GAAG,EACH,KAAK,EACL,SAAS,CAAA;IAEX,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QACnB,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,CAAA;QACxB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACtB,SAAQ;QACV,CAAC;QACD,KAAK,GAAG,IAAI,MAAM,EAAE,CAAC;YACnB,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;YACnB,IAAI,KAAK,IAAI,KAAK,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;gBAC1C,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;gBACvB,IAAI,SAAS,IAAI,SAAS,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;oBAClD,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;gBAC5B,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAA;gBAC5B,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;oBACvD,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;gBACrB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/object/defaults.mjs","sourceRoot":"","sources":["../../../src/object/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,cAAc,CAAA;AAChC,OAAO,QAAQ,MAAM,eAAe,CAAA;AAEpC;;;;;;;;;;;;GAYG;AAEH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAC9B,MAAgC,EAChC,GAAG,YAAwC;IAE3C,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,CAAA;IAE9B,IAAI,CAAC,GAAG,CAAC,EACP,MAAM,EACN,GAAG,EACH,KAAK,EACL,SAAS,CAAA;IAEX,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QACnB,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,CAAA;QACxB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACtB,SAAQ;QACV,CAAC;QACD,KAAK,GAAG,IAAI,MAAM,EAAE,CAAC;YACnB,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;YACnB,IAAI,KAAK,IAAI,KAAK,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;gBAC1C,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;gBACvB,IAAI,SAAS,IAAI,SAAS,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;oBAClD,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;gBAC5B,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAA;gBAC5B,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;oBACvD,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;gBACrB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"} \ No newline at end of file diff --git a/dist/esm/object/equals.mjs b/dist/esm/object/equals.mjs index 979e160..8f8bfc0 100644 --- a/dist/esm/object/equals.mjs +++ b/dist/esm/object/equals.mjs @@ -3,27 +3,20 @@ */ import isObject from '../is/isObject.mjs'; export default function equal(origin, ...list) { - let i, l, leftChain, rightChain; + let i, l; + let leftVisited, rightVisited; if (!isObject(origin) || list.length === 0) { throw new Error('Need two or more arguments to compare'); } function compare2Objects(x, y) { - let p; - // remember that NaN === NaN returns false - // and isNaN(undefined) returns true - // isNumeric(x,y) - if (isNaN(x) && isNaN(y) && typeof x === 'number' && typeof y === 'number') { + // Быстрая проверка NaN + if (typeof x === 'number' && typeof y === 'number' && Number.isNaN(x) && Number.isNaN(y)) { return true; } - // Compare primitives and functions. - // Check if both arguments link to the same object. - // Especially useful on the step where we compare prototypes + // Базовое строгое равенство и кейсы для встроенных типов if (x === y) { return true; } - // Works in case when functions are created in constructor. - // Comparing dates is a common scenario. Another built-ins? - // We can even handle functions passed across iframes if ((typeof x === 'function' && typeof y === 'function') || (x instanceof Date && y instanceof Date) || (x instanceof RegExp && y instanceof RegExp) || @@ -31,63 +24,63 @@ export default function equal(origin, ...list) { (x instanceof Number && y instanceof Number)) { return x.toString() === y.toString(); } - // At last checking prototypes as good as we can + // Должны быть объектами дальше if (!(x instanceof Object && y instanceof Object)) { return false; } - if (Object.prototype.isPrototypeOf.call(x, y) || Object.prototype.isPrototypeOf.call(y, x)) { + // Прототипы/конструкторы + if (Object.getPrototypeOf(x) !== Object.getPrototypeOf(y)) { return false; } if (x.constructor !== y.constructor) { return false; } - if (x.prototype !== y.prototype) { + // Проверка на циклические ссылки + if (leftVisited.has(x) || rightVisited.has(y)) { return false; } - // Check for infinitive linking loops - if (leftChain.includes(x) || rightChain.includes(y)) { + // Быстрая проверка количества ключей (собственных) + const xKeys = Object.keys(x); + const yKeys = Object.keys(y); + if (xKeys.length !== yKeys.length) { return false; } - // Quick checking of one object being a subset of another. - // todo: cache the structure of arguments[0] for performance - for (p in y) { - if (Object.prototype.isPrototypeOf.call(y, p) !== Object.prototype.isPrototypeOf.call(x, p)) { + // Сопоставление ключей по типам значений (дополнительно) + for (let k = 0; k < yKeys.length; k++) { + const p = yKeys[k]; + if (!Object.prototype.hasOwnProperty.call(x, p)) { return false; } - else if (typeof y[p] !== typeof x[p]) { + if (typeof y[p] !== typeof x[p]) { return false; } } - for (p in x) { - if (Object.prototype.isPrototypeOf.call(y, p) !== Object.prototype.isPrototypeOf.call(x, p)) { - return false; - } - else if (typeof y[p] !== typeof x[p]) { - return false; + // Глубокое сравнение + leftVisited.add(x); + rightVisited.add(y); + for (let k = 0; k < xKeys.length; k++) { + const p = xKeys[k]; + const xv = x[p]; + const yv = y[p]; + const t = typeof xv; + if (t === 'object' || t === 'function') { + if (!compare2Objects(xv, yv)) { + return false; + } } - switch (typeof x[p]) { - case 'object': - case 'function': - leftChain.push(x); - rightChain.push(y); - if (!compare2Objects(x[p], y[p])) { - return false; - } - leftChain.pop(); - rightChain.pop(); - break; - default: - if (x[p] !== y[p]) { - return false; - } - break; + else { + if (xv !== yv) { + return false; + } } } + leftVisited.delete(x); + rightVisited.delete(y); return true; } for (i = 0, l = list.length; i < l; i++) { - leftChain = []; // @Todo: this can be cached - rightChain = []; + leftVisited = new Set(); + rightVisited = new Set(); if (!compare2Objects(origin, list[i])) { return false; } diff --git a/dist/esm/object/equals.mjs.map b/dist/esm/object/equals.mjs.map index 83f1ef0..8911298 100644 --- a/dist/esm/object/equals.mjs.map +++ b/dist/esm/object/equals.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/object/equals.mjs","sourceRoot":"","sources":["../../../src/object/equals.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/object/equals.mjs","sourceRoot":"","sources":["../../../src/object/equals.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/object/filter.mjs.map b/dist/esm/object/filter.mjs.map index 78f2ab1..00e1326 100644 --- a/dist/esm/object/filter.mjs.map +++ b/dist/esm/object/filter.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/object/filter.mjs","sourceRoot":"","sources":["../../../src/object/filter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,CAAC,OAAO,UAAU,MAAM,CAC5B,MAA8B,EAC9B,SAAuC;IAEvC,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAA;AACrE,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/object/filter.mjs","sourceRoot":"","sources":["../../../src/object/filter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,CAAC,OAAO,UAAU,MAAM,CAC5B,MAA8B,EAC9B,SAAuC;IAEvC,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAA;AACrE,CAAC"} \ No newline at end of file diff --git a/dist/esm/object/flip.mjs.map b/dist/esm/object/flip.mjs.map index d97c2ed..cfd5381 100644 --- a/dist/esm/object/flip.mjs.map +++ b/dist/esm/object/flip.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/object/flip.mjs","sourceRoot":"","sources":["../../../src/object/flip.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,MAAgC;IAC3D,MAAM,MAAM,GAA6B,EAAE,CAAA;IAC3C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;IAC3B,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/object/flip.mjs","sourceRoot":"","sources":["../../../src/object/flip.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,MAAgC;IAC3D,MAAM,MAAM,GAA6B,EAAE,CAAA;IAC3C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;IAC3B,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC"} \ No newline at end of file diff --git a/dist/esm/object/fromQueryString.mjs.map b/dist/esm/object/fromQueryString.mjs.map index ce9f670..56d46f1 100644 --- a/dist/esm/object/fromQueryString.mjs.map +++ b/dist/esm/object/fromQueryString.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/object/fromQueryString.mjs","sourceRoot":"","sources":["../../../src/object/fromQueryString.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/object/fromQueryString.mjs","sourceRoot":"","sources":["../../../src/object/fromQueryString.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/object/getSize.mjs.map b/dist/esm/object/getSize.mjs.map index 8aaf66e..c549413 100644 --- a/dist/esm/object/getSize.mjs.map +++ b/dist/esm/object/getSize.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/object/getSize.mjs","sourceRoot":"","sources":["../../../src/object/getSize.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,eAAe,CAAA;AAEpC;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,MAAgC;IAC9D,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAA;IACxC,CAAC;IAED,IAAI,IAAI,GAAG,CAAC,CAAA;IACZ,IAAI,QAAQ,CAAA;IAEZ,KAAK,QAAQ,IAAI,MAAM,EAAE,CAAC;QACxB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC;YAC3D,IAAI,EAAE,CAAA;QACR,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/object/getSize.mjs","sourceRoot":"","sources":["../../../src/object/getSize.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,eAAe,CAAA;AAEpC;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,MAAgC;IAC9D,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAA;IACxC,CAAC;IAED,IAAI,IAAI,GAAG,CAAC,CAAA;IACZ,IAAI,QAAQ,CAAA;IAEZ,KAAK,QAAQ,IAAI,MAAM,EAAE,CAAC;QACxB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC;YAC3D,IAAI,EAAE,CAAA;QACR,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC"} \ No newline at end of file diff --git a/dist/esm/object/index.mjs.map b/dist/esm/object/index.mjs.map index f363527..f9ef98a 100644 --- a/dist/esm/object/index.mjs.map +++ b/dist/esm/object/index.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/object/index.mjs","sourceRoot":"","sources":["../../../src/object/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,YAAY,CAAA;AACjC,OAAO,YAAY,MAAM,UAAU,CAAA;AACnC,OAAO,MAAM,MAAM,UAAU,CAAA;AAC7B,OAAO,IAAI,MAAM,QAAQ,CAAA;AACzB,OAAO,eAAe,MAAM,mBAAmB,CAAA;AAC/C,OAAO,OAAO,MAAM,WAAW,CAAA;AAC/B,OAAO,UAAU,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,MAAM,SAAS,CAAA;AAC3B,OAAO,YAAY,MAAM,gBAAgB,CAAA;AACzC,OAAO,IAAI,MAAM,QAAQ,CAAA;AACzB,OAAO,MAAM,MAAM,UAAU,CAAA;AAC7B,OAAO,WAAW,MAAM,eAAe,CAAA;AACvC,OAAO,MAAM,MAAM,UAAU,CAAA;AAC7B,OAAO,GAAG,MAAM,OAAO,CAAA;AACvB,OAAO,cAAc,MAAM,kBAAkB,CAAA;AAC7C,OAAO,aAAa,MAAM,iBAAiB,CAAA;AAC3C,OAAO,MAAM,MAAM,UAAU,CAAA;AAE7B,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,MAAM,EACN,IAAI,EACJ,eAAe,EACf,OAAO,EACP,UAAU,EACV,KAAK,EACL,YAAY,EACZ,IAAI,EACJ,MAAM,EACN,WAAW,EACX,MAAM,EACN,GAAG,EACH,cAAc,EACd,aAAa,EACb,MAAM,GACP,CAAA"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/object/index.mjs","sourceRoot":"","sources":["../../../src/object/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,YAAY,CAAA;AACjC,OAAO,YAAY,MAAM,UAAU,CAAA;AACnC,OAAO,MAAM,MAAM,UAAU,CAAA;AAC7B,OAAO,IAAI,MAAM,QAAQ,CAAA;AACzB,OAAO,eAAe,MAAM,mBAAmB,CAAA;AAC/C,OAAO,OAAO,MAAM,WAAW,CAAA;AAC/B,OAAO,UAAU,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,MAAM,SAAS,CAAA;AAC3B,OAAO,YAAY,MAAM,gBAAgB,CAAA;AACzC,OAAO,IAAI,MAAM,QAAQ,CAAA;AACzB,OAAO,MAAM,MAAM,UAAU,CAAA;AAC7B,OAAO,WAAW,MAAM,eAAe,CAAA;AACvC,OAAO,MAAM,MAAM,UAAU,CAAA;AAC7B,OAAO,GAAG,MAAM,OAAO,CAAA;AACvB,OAAO,cAAc,MAAM,kBAAkB,CAAA;AAC7C,OAAO,aAAa,MAAM,iBAAiB,CAAA;AAC3C,OAAO,MAAM,MAAM,UAAU,CAAA;AAE7B,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,MAAM,EACN,IAAI,EACJ,eAAe,EACf,OAAO,EACP,UAAU,EACV,KAAK,EACL,YAAY,EACZ,IAAI,EACJ,MAAM,EACN,WAAW,EACX,MAAM,EACN,GAAG,EACH,cAAc,EACd,aAAa,EACb,MAAM,GACP,CAAA"} \ No newline at end of file diff --git a/dist/esm/object/logicalAnd.mjs.map b/dist/esm/object/logicalAnd.mjs.map index 068bf24..92860aa 100644 --- a/dist/esm/object/logicalAnd.mjs.map +++ b/dist/esm/object/logicalAnd.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/object/logicalAnd.mjs","sourceRoot":"","sources":["../../../src/object/logicalAnd.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,MAAgC;IACjE,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC;YAC1B,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/object/logicalAnd.mjs","sourceRoot":"","sources":["../../../src/object/logicalAnd.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,MAAgC;IACjE,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC;YAC1B,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC"} \ No newline at end of file diff --git a/dist/esm/object/merge.mjs b/dist/esm/object/merge.mjs index 4db476c..9e0f9dc 100644 --- a/dist/esm/object/merge.mjs +++ b/dist/esm/object/merge.mjs @@ -1,19 +1,35 @@ import clone from '../core/clone.mjs'; import isObject from '../is/isObject.mjs'; +// Узкое определение plain object без опоры на constructor +function isPlainObject(val) { + if (!isObject(val)) + return false; + const proto = Object.getPrototypeOf(val); + return proto === Object.prototype || proto === null; +} +/** + * Merge objects recursively + */ export default function merge(original, ...values) { - const ln = values.length; - let i = 0, object, key, value, sourceKey; - for (; i < ln; i++) { - object = values[i]; + for (let i = 0; i < values.length; i++) { + const object = values[i]; if (!isObject(object)) { continue; } - for (key in object) { - value = object[key]; - if (value && value.constructor === Object) { - sourceKey = original[key]; - if (sourceKey && sourceKey.constructor === Object) { - merge(sourceKey, value); + for (const key in object) { + if (!Object.prototype.hasOwnProperty.call(object, key)) + continue; + const value = object[key]; + const target = original[key]; + // Массивы: перезаписываем клоном (предсказуемее, чем неявные стратегии) + if (Array.isArray(value)) { + ; + original[key] = clone(value); + continue; + } + if (isPlainObject(value)) { + if (isPlainObject(target)) { + merge(target, value); } else { ; diff --git a/dist/esm/object/merge.mjs.map b/dist/esm/object/merge.mjs.map index ab0bbf0..b79464a 100644 --- a/dist/esm/object/merge.mjs.map +++ b/dist/esm/object/merge.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/object/merge.mjs","sourceRoot":"","sources":["../../../src/object/merge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,cAAc,CAAA;AAChC,OAAO,QAAQ,MAAM,eAAe,CAAA;AAwCpC,MAAM,CAAC,OAAO,UAAU,KAAK,CAA4B,QAAoB,EAAE,GAAG,MAAoB;IACpG,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAA;IACxB,IAAI,CAAC,GAAG,CAAC,EACP,MAAkB,EAClB,GAAgB,EAChB,KAAU,EACV,SAAc,CAAA;IAEhB,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QACnB,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QAClB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACtB,SAAQ;QACV,CAAC;QACD,KAAK,GAAG,IAAI,MAAM,EAAE,CAAC;YACnB,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;YACnB,IAAI,KAAK,IAAI,KAAK,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;gBAC1C,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;gBACzB,IAAI,SAAS,IAAI,SAAS,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;oBAClD,KAAK,CAAI,SAAS,EAAE,KAAK,CAAC,CAAA;gBAC5B,CAAC;qBAAM,CAAC;oBACN,CAAC;oBAAI,QAAQ,CAAC,GAAG,CAAE,GAAG,KAAK,CAAI,KAAK,CAAC,CAAA;gBACvC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,CAAC;gBAAI,QAAQ,CAAC,GAAG,CAAE,GAAG,KAAK,CAAA;YAC7B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAU,QAAQ,CAAA;AACpB,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/object/merge.mjs","sourceRoot":"","sources":["../../../src/object/merge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,cAAc,CAAA;AAChC,OAAO,QAAQ,MAAM,eAAe,CAAA;AAIpC,0DAA0D;AAC1D,SAAS,aAAa,CAAC,GAAQ;IAC7B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAA;IAChC,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;IACxC,OAAO,KAAK,KAAK,MAAM,CAAC,SAAS,IAAI,KAAK,KAAK,IAAI,CAAA;AACrD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,KAAK,CAA4B,QAAoB,EAAE,GAAG,MAAoB;IACpG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QACxB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACtB,SAAQ;QACV,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC;gBAAE,SAAQ;YAEhE,MAAM,KAAK,GAAI,MAAc,CAAC,GAAG,CAAC,CAAA;YAClC,MAAM,MAAM,GAAI,QAAgB,CAAC,GAAG,CAAC,CAAA;YAErC,wEAAwE;YACxE,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,CAAC;gBAAC,QAAgB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAA;gBACtC,SAAQ;YACV,CAAC;YAED,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC1B,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;gBACtB,CAAC;qBAAM,CAAC;oBACN,CAAC;oBAAC,QAAgB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAA;gBACxC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,CAAC;gBAAC,QAAgB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;YACjC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,QAAa,CAAA;AACtB,CAAC"} \ No newline at end of file diff --git a/dist/esm/object/pathToObject.mjs.map b/dist/esm/object/pathToObject.mjs.map index e1fec9f..4e57d54 100644 --- a/dist/esm/object/pathToObject.mjs.map +++ b/dist/esm/object/pathToObject.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/object/pathToObject.mjs","sourceRoot":"","sources":["../../../src/object/pathToObject.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAA;AAClC,OAAO,QAAQ,MAAM,eAAe,CAAA;AAEpC,MAAM,CAAC,OAAO,UAAU,YAAY,CAClC,QAAgB,EAAE,EAClB,QAAa,IAAI,EACjB,SAAmC,EAAE,EACrC,UAAkB,GAAG,EACrB,iBAA0B,IAAI;IAE9B,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO,MAAM,CAAA;IACf,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EACrC,UAAU,GAAG,UAAU,CAAC,MAAM,CAAA;IAEhC,IAAI,OAAO,GAAG,MAAM,CAAA;IAEpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;QAEvB,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACtB,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzB,IAAI,UAAU,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBACzB,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAA;gBACpB,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;oBAChF,OAAO,CAAC,CAAC,CAAC,GAAG,UAAU,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;gBAChD,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IACtB,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/object/pathToObject.mjs","sourceRoot":"","sources":["../../../src/object/pathToObject.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAA;AAClC,OAAO,QAAQ,MAAM,eAAe,CAAA;AAEpC,MAAM,CAAC,OAAO,UAAU,YAAY,CAClC,QAAgB,EAAE,EAClB,QAAa,IAAI,EACjB,SAAmC,EAAE,EACrC,UAAkB,GAAG,EACrB,iBAA0B,IAAI;IAE9B,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO,MAAM,CAAA;IACf,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EACrC,UAAU,GAAG,UAAU,CAAC,MAAM,CAAA;IAEhC,IAAI,OAAO,GAAG,MAAM,CAAA;IAEpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;QAEvB,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACtB,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzB,IAAI,UAAU,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBACzB,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAA;gBACpB,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;oBAChF,OAAO,CAAC,CAAC,CAAC,GAAG,UAAU,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;gBAChD,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IACtB,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"} \ No newline at end of file diff --git a/dist/esm/object/pick.mjs.map b/dist/esm/object/pick.mjs.map index 7d366cb..3d7b915 100644 --- a/dist/esm/object/pick.mjs.map +++ b/dist/esm/object/pick.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/object/pick.mjs","sourceRoot":"","sources":["../../../src/object/pick.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAA;AAClC,OAAO,OAAO,MAAM,gBAAgB,CAAA;AACpC,OAAO,MAAM,MAAM,UAAU,CAAA;AAE7B;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,MAAgC,EAAE,KAAe;IAC5E,MAAM,GAAG,GAA6B,EAAE,CAAA;IACxC,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACpB,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE;QACjB,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAC5B,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/object/pick.mjs","sourceRoot":"","sources":["../../../src/object/pick.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAA;AAClC,OAAO,OAAO,MAAM,gBAAgB,CAAA;AACpC,OAAO,MAAM,MAAM,UAAU,CAAA;AAE7B;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,MAAgC,EAAE,KAAe;IAC5E,MAAM,GAAG,GAA6B,EAAE,CAAA;IACxC,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACpB,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE;QACjB,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAC5B,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC"} \ No newline at end of file diff --git a/dist/esm/object/remove.mjs.map b/dist/esm/object/remove.mjs.map index 00078ff..c2b4477 100644 --- a/dist/esm/object/remove.mjs.map +++ b/dist/esm/object/remove.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/object/remove.mjs","sourceRoot":"","sources":["../../../src/object/remove.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,eAAe,CAAA;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAE9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAC5B,MAAgC,EAChC,QAA2B,EAC3B,UAAkB,GAAG;IAErB,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,QAAQ,GAAG,CAAC,QAAQ,CAAC,CAAA;IACvB,CAAC;IAED,MAAM,gBAAgB,GAAG,UAAU,IAA8B,EAAE,IAAc;QAC/E,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;gBAChC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC5D,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;gBAChD,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxB,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YACzC,CAAC;iBAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;YACtB,CAAC;QACH,CAAC;IACH,CAAC,CAAA;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACnB,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAA;QAC5C,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/object/remove.mjs","sourceRoot":"","sources":["../../../src/object/remove.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,eAAe,CAAA;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAE9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAC5B,MAAgC,EAChC,QAA2B,EAC3B,UAAkB,GAAG;IAErB,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,QAAQ,GAAG,CAAC,QAAQ,CAAC,CAAA;IACvB,CAAC;IAED,MAAM,gBAAgB,GAAG,UAAU,IAA8B,EAAE,IAAc;QAC/E,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;gBAChC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC5D,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;gBAChD,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxB,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YACzC,CAAC;iBAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;YACtB,CAAC;QACH,CAAC;IACH,CAAC,CAAA;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACnB,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAA;QAC5C,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"} \ No newline at end of file diff --git a/dist/esm/object/removeEmpty.mjs b/dist/esm/object/removeEmpty.mjs index c45acb2..aafec3c 100644 --- a/dist/esm/object/removeEmpty.mjs +++ b/dist/esm/object/removeEmpty.mjs @@ -8,36 +8,38 @@ import isEmpty from '../is/isEmpty.mjs'; * @return {{}} */ export default function removeEmpty(object) { - let result = {}, key; - for (key in object) { - if (object.hasOwnProperty(key) && !isEmpty(object[key])) { - if (isObject(object[key])) { - const r = removeEmpty(object[key]); - if (!isEmpty(r)) { - result[key] = r; + const result = {}; + for (const [key, value] of Object.entries(object)) { + if (isEmpty(value)) { + continue; + } + // Сначала массивы, затем plain-объекты + if (Array.isArray(value)) { + const a = []; + for (const v of value) { + if (isString(v)) { + a.push(v); } - continue; - } - if (Array.isArray(object[key])) { - const a = []; - object[key].forEach((v) => { - if (isString(v)) { - a.push(v); - } - else { - const r = removeEmpty(v); - if (!isEmpty(r)) { - a.push(r); - } + else { + const r = removeEmpty(v); + if (!isEmpty(r)) { + a.push(r); } - }); - if (!isEmpty(a)) { - result[key] = a; } - continue; } - result[key] = object[key]; + if (!isEmpty(a)) { + result[key] = a; + } + continue; + } + if (isObject(value)) { + const r = removeEmpty(value); + if (!isEmpty(r)) { + result[key] = r; + } + continue; } + result[key] = value; } return result; } diff --git a/dist/esm/object/removeEmpty.mjs.map b/dist/esm/object/removeEmpty.mjs.map index cf30925..e68c4ac 100644 --- a/dist/esm/object/removeEmpty.mjs.map +++ b/dist/esm/object/removeEmpty.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/object/removeEmpty.mjs","sourceRoot":"","sources":["../../../src/object/removeEmpty.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,eAAe,CAAA;AACpC,OAAO,QAAQ,MAAM,eAAe,CAAA;AACpC,OAAO,OAAO,MAAM,cAAc,CAAA;AAElC;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,MAAgC;IAClE,IAAI,MAAM,GAA6B,EAAE,EACvC,GAAgB,CAAA;IAElB,KAAK,GAAG,IAAI,MAAM,EAAE,CAAC;QACnB,IAAI,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACxD,IAAI,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBAC1B,MAAM,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;gBAClC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;oBAChB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBACjB,CAAC;gBAED,SAAQ;YACV,CAAC;YAED,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBAC/B,MAAM,CAAC,GAAU,EAAE,CAAA;gBACnB,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAM,EAAE,EAAE;oBAC7B,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;wBAChB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;oBACX,CAAC;yBAAM,CAAC;wBACN,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;wBACxB,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;4BAChB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;wBACX,CAAC;oBACH,CAAC;gBACH,CAAC,CAAC,CAAA;gBACF,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;oBAChB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBACjB,CAAC;gBAED,SAAQ;YACV,CAAC;YAED,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;QAC3B,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/object/removeEmpty.mjs","sourceRoot":"","sources":["../../../src/object/removeEmpty.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,eAAe,CAAA;AACpC,OAAO,QAAQ,MAAM,eAAe,CAAA;AACpC,OAAO,OAAO,MAAM,cAAc,CAAA;AAElC;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,MAAgC;IAClE,MAAM,MAAM,GAA6B,EAAE,CAAA;IAE3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACnB,SAAQ;QACV,CAAC;QAED,uCAAuC;QACvC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,GAAU,EAAE,CAAA;YACnB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;gBACtB,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;oBAChB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBACX,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,GAAG,WAAW,CAAC,CAAQ,CAAC,CAAA;oBAC/B,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;wBAChB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;oBACX,CAAC;gBACH,CAAC;YACH,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACjB,CAAC;YACD,SAAQ;QACV,CAAC;QAED,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACpB,MAAM,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAA;YAC5B,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACjB,CAAC;YACD,SAAQ;QACV,CAAC;QAED,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;IACrB,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"} \ No newline at end of file diff --git a/dist/esm/object/select.mjs.map b/dist/esm/object/select.mjs.map index 23083e9..4421b3e 100644 --- a/dist/esm/object/select.mjs.map +++ b/dist/esm/object/select.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/object/select.mjs","sourceRoot":"","sources":["../../../src/object/select.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAC5B,IAA8B,EAC9B,QAAgB,EAChB,eAAoB,SAAS,EAC7B,UAA2B,GAAG;IAE9B,OAAO,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,UAAU,QAAQ,EAAE,OAAO;QAC/D,IAAI,QAAQ,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;YACpC,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAA;QAC1B,CAAC;QACD,OAAO,YAAY,CAAA;IACrB,CAAC,EAAE,IAAI,CAAC,CAAA;AACV,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/object/select.mjs","sourceRoot":"","sources":["../../../src/object/select.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAC5B,IAA8B,EAC9B,QAAgB,EAChB,eAAoB,SAAS,EAC7B,UAA2B,GAAG;IAE9B,OAAO,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,UAAU,QAAQ,EAAE,OAAO;QAC/D,IAAI,QAAQ,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;YACpC,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAA;QAC1B,CAAC;QACD,OAAO,YAAY,CAAA;IACrB,CAAC,EAAE,IAAI,CAAC,CAAA;AACV,CAAC"} \ No newline at end of file diff --git a/dist/esm/object/sum.mjs.map b/dist/esm/object/sum.mjs.map index 3e5dffd..5b87e3a 100644 --- a/dist/esm/object/sum.mjs.map +++ b/dist/esm/object/sum.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/object/sum.mjs","sourceRoot":"","sources":["../../../src/object/sum.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,YAAY,CAAA;AAC9B,OAAO,SAAS,MAAM,gBAAgB,CAAA;AAEtC,MAAM,CAAC,OAAO,UAAU,GAAG,CAAC,MAA4D;IACtF,IAAI,MAAM,GAAG,CAAC,CAAA;IACd,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,IAAI,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;QACvB,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;YAC9B,KAAK,GAAG,KAAK,EAAE,CAAA;QACjB,CAAC;QAED,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;YACpC,KAAK,GAAG,CAAC,CAAA;QACX,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YACtB,KAAK,GAAG,CAAC,CAAA;QACX,CAAC;QAED,MAAM,IAAY,KAAK,CAAA;IACzB,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/object/sum.mjs","sourceRoot":"","sources":["../../../src/object/sum.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,YAAY,CAAA;AAC9B,OAAO,SAAS,MAAM,gBAAgB,CAAA;AAEtC,MAAM,CAAC,OAAO,UAAU,GAAG,CAAC,MAA4D;IACtF,IAAI,MAAM,GAAG,CAAC,CAAA;IACd,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,IAAI,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;QACvB,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;YAC9B,KAAK,GAAG,KAAK,EAAE,CAAA;QACjB,CAAC;QAED,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;YACpC,KAAK,GAAG,CAAC,CAAA;QACX,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YACtB,KAAK,GAAG,CAAC,CAAA;QACX,CAAC;QAED,MAAM,IAAY,KAAK,CAAA;IACzB,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"} \ No newline at end of file diff --git a/dist/esm/object/toQueryObjects.mjs.map b/dist/esm/object/toQueryObjects.mjs.map index f39c8c2..b263894 100644 --- a/dist/esm/object/toQueryObjects.mjs.map +++ b/dist/esm/object/toQueryObjects.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/object/toQueryObjects.mjs","sourceRoot":"","sources":["../../../src/object/toQueryObjects.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,eAAe,CAAA;AA4CpC,MAAM,CAAC,OAAO,UAAU,cAAc,CACpC,IAAY,EACZ,KAAyB,EACzB,YAAqB,KAAK;IAE1B,IAAI,OAAO,GAAe,EAAE,CAAA;IAC5B,IAAI,CAAC,EAAE,EAAE,CAAA;IAET,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,UAAU,GAAG,KAAmB,CAAA;QACtC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAChD,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA;YACrF,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,IAAI;oBACV,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;iBACrB,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACpB,MAAM,WAAW,GAAG,KAAc,CAAA;QAClC,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC;YAChB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC;gBACnD,IAAI,SAAS,EAAE,CAAC;oBACd,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA;gBACtF,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI,EAAE,IAAI;wBACV,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;qBACtB,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,OAAO,CAAC,IAAI,CAAC;QACX,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,KAAK;KACb,CAAC,CAAA;IAEF,OAAO,OAAO,CAAA;AAChB,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/object/toQueryObjects.mjs","sourceRoot":"","sources":["../../../src/object/toQueryObjects.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,eAAe,CAAA;AA4CpC,MAAM,CAAC,OAAO,UAAU,cAAc,CACpC,IAAY,EACZ,KAAyB,EACzB,YAAqB,KAAK;IAE1B,IAAI,OAAO,GAAe,EAAE,CAAA;IAC5B,IAAI,CAAC,EAAE,EAAE,CAAA;IAET,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,UAAU,GAAG,KAAmB,CAAA;QACtC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAChD,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA;YACrF,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,IAAI;oBACV,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;iBACrB,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACpB,MAAM,WAAW,GAAG,KAAc,CAAA;QAClC,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC;YAChB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC;gBACnD,IAAI,SAAS,EAAE,CAAC;oBACd,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA;gBACtF,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI,EAAE,IAAI;wBACV,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;qBACtB,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,OAAO,CAAC,IAAI,CAAC;QACX,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,KAAK;KACb,CAAC,CAAA;IAEF,OAAO,OAAO,CAAA;AAChB,CAAC"} \ No newline at end of file diff --git a/dist/esm/object/toQueryString.mjs.map b/dist/esm/object/toQueryString.mjs.map index ce40e30..b6bee58 100644 --- a/dist/esm/object/toQueryString.mjs.map +++ b/dist/esm/object/toQueryString.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/object/toQueryString.mjs","sourceRoot":"","sources":["../../../src/object/toQueryString.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,gBAAgB,CAAA;AACtC,OAAO,MAAM,MAAM,aAAa,CAAA;AAChC,OAAO,OAAO,MAAM,cAAc,CAAA;AAClC,OAAO,cAAc,MAAM,kBAAkB,CAAA;AAC7C,OAAO,YAAY,MAAM,iBAAiB,CAAA;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAM/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,MAAM,CAAC,OAAO,UAAU,aAAa,CACnC,MAA2B,EAC3B,YAAqB,KAAK,EAC1B,UAAgC,EAAE,UAAU,EAAE,IAAI,EAAE;IAEpD,IAAI,gBAAgB,GAA0B,EAAE,CAAA;IAChD,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,eAAe,EAAE,KAAK,CAAA;IAEpC,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;QACjB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC;YACpD,gBAAgB,GAAG,gBAAgB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAA;QACrF,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,EAAE,CAAA;IAErB,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QACtD,eAAe,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAA;QACrC,KAAK,GAAG,eAAe,CAAC,KAAK,CAAA;QAE7B,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YACrB,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,CAAA;QAChC,CAAC;aAAM,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,KAAK,GAAG,EAAE,CAAA;QACZ,CAAC;aAAM,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAA;QAC7B,CAAC;QAED,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,kBAAkB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAA;QACjG,UAAU,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IACjE,CAAC;IAED,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC7B,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/object/toQueryString.mjs","sourceRoot":"","sources":["../../../src/object/toQueryString.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,gBAAgB,CAAA;AACtC,OAAO,MAAM,MAAM,aAAa,CAAA;AAChC,OAAO,OAAO,MAAM,cAAc,CAAA;AAClC,OAAO,cAAc,MAAM,kBAAkB,CAAA;AAC7C,OAAO,YAAY,MAAM,iBAAiB,CAAA;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAM/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,MAAM,CAAC,OAAO,UAAU,aAAa,CACnC,MAA2B,EAC3B,YAAqB,KAAK,EAC1B,UAAgC,EAAE,UAAU,EAAE,IAAI,EAAE;IAEpD,IAAI,gBAAgB,GAA0B,EAAE,CAAA;IAChD,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,eAAe,EAAE,KAAK,CAAA;IAEpC,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;QACjB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC;YACpD,gBAAgB,GAAG,gBAAgB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAA;QACrF,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,EAAE,CAAA;IAErB,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QACtD,eAAe,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAA;QACrC,KAAK,GAAG,eAAe,CAAC,KAAK,CAAA;QAE7B,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YACrB,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,CAAA;QAChC,CAAC;aAAM,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,KAAK,GAAG,EAAE,CAAA;QACZ,CAAC;aAAM,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAA;QAC7B,CAAC;QAED,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,kBAAkB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAA;QACjG,UAAU,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IACjE,CAAC;IAED,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC7B,CAAC"} \ No newline at end of file diff --git a/dist/esm/object/values.mjs.map b/dist/esm/object/values.mjs.map index 69929eb..1a3cde5 100644 --- a/dist/esm/object/values.mjs.map +++ b/dist/esm/object/values.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/object/values.mjs","sourceRoot":"","sources":["../../../src/object/values.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,aAAa,CAAA;AAE9B;;;;;;;GAOG;AACH,SAAS,UAAU,CAAC,MAA2B,EAAE,UAAoB;IACnE,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;AACrD,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,MAAY;IACzC,OAAO,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;AAC/D,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/object/values.mjs","sourceRoot":"","sources":["../../../src/object/values.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,aAAa,CAAA;AAE9B;;;;;;;GAOG;AACH,SAAS,UAAU,CAAC,MAA2B,EAAE,UAAoB;IACnE,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;AACrD,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,MAAY;IACzC,OAAO,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;AAC/D,CAAC"} \ No newline at end of file diff --git a/dist/esm/sort/index.mjs.map b/dist/esm/sort/index.mjs.map index d592963..b69f160 100644 --- a/dist/esm/sort/index.mjs.map +++ b/dist/esm/sort/index.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/sort/index.mjs","sourceRoot":"","sources":["../../../src/sort/index.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,kBAAkB,CAAA;AAC7C,OAAO,4BAA4B,EAAE,EAAE,gCAAgC,EAAE,MAAM,gCAAgC,CAAA;AAC/G,OAAO,EAAE,cAAc,EAAE,4BAA4B,EAAE,gCAAgC,EAAE,CAAA"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/sort/index.mjs","sourceRoot":"","sources":["../../../src/sort/index.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,kBAAkB,CAAA;AAC7C,OAAO,4BAA4B,EAAE,EAAE,gCAAgC,EAAE,MAAM,gCAAgC,CAAA;AAC/G,OAAO,EAAE,cAAc,EAAE,4BAA4B,EAAE,gCAAgC,EAAE,CAAA"} \ No newline at end of file diff --git a/dist/esm/sort/sortByProperty.mjs.map b/dist/esm/sort/sortByProperty.mjs.map index 98bfd96..234498d 100644 --- a/dist/esm/sort/sortByProperty.mjs.map +++ b/dist/esm/sort/sortByProperty.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/sort/sortByProperty.mjs","sourceRoot":"","sources":["../../../src/sort/sortByProperty.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,QAAQ,MAAM,eAAe,CAAA;AAEpC,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,QAAgB,EAAE,MAAe,IAAI,EAAE,aAAsB,IAAI;IACtG,OAAO,UAAU,CAA2B,EAAE,CAA2B;QACvE,IAAI,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAA;QACvB,IAAI,UAAU,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAClC,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAA;QAC7B,CAAC;QAED,IAAI,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAA;QACvB,IAAI,UAAU,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAClC,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAA;QAC7B,CAAC;QAED,IAAI,KAAK,GAAG,KAAK,EAAE,CAAC;YAClB,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACrB,CAAC;QAED,IAAI,KAAK,GAAG,KAAK,EAAE,CAAC;YAClB,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACrB,CAAC;QAED,OAAO,CAAC,CAAA;IACV,CAAC,CAAA;AACH,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/sort/sortByProperty.mjs","sourceRoot":"","sources":["../../../src/sort/sortByProperty.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,QAAQ,MAAM,eAAe,CAAA;AAEpC,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,QAAgB,EAAE,MAAe,IAAI,EAAE,aAAsB,IAAI;IACtG,OAAO,UAAU,CAA2B,EAAE,CAA2B;QACvE,IAAI,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAA;QACvB,IAAI,UAAU,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAClC,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAA;QAC7B,CAAC;QAED,IAAI,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAA;QACvB,IAAI,UAAU,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAClC,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAA;QAC7B,CAAC;QAED,IAAI,KAAK,GAAG,KAAK,EAAE,CAAC;YAClB,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACrB,CAAC;QAED,IAAI,KAAK,GAAG,KAAK,EAAE,CAAC;YAClB,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACrB,CAAC;QAED,OAAO,CAAC,CAAA;IACV,CAAC,CAAA;AACH,CAAC"} \ No newline at end of file diff --git a/dist/esm/sort/sortObjectsInArrayByProperty.mjs.map b/dist/esm/sort/sortObjectsInArrayByProperty.mjs.map index 5e182b9..e6ece22 100644 --- a/dist/esm/sort/sortObjectsInArrayByProperty.mjs.map +++ b/dist/esm/sort/sortObjectsInArrayByProperty.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/sort/sortObjectsInArrayByProperty.mjs","sourceRoot":"","sources":["../../../src/sort/sortObjectsInArrayByProperty.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,kBAAkB,CAAA;AAC7C,OAAO,QAAQ,MAAM,eAAe,CAAA;AACpC,OAAO,QAAQ,MAAM,eAAe,CAAA;AACpC,OAAO,MAAM,MAAM,iBAAiB,CAAA;AACpC,OAAO,KAAK,MAAM,cAAc,CAAA;AAChC,OAAO,YAAY,MAAM,uBAAuB,CAAA;AAEhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,MAAM,CAAC,OAAO,UAAU,4BAA4B,CAClD,GAA6B,EAC7B,QAAgB,EAChB,MAAe,IAAI,EACnB,aAAsB,IAAI;IAE1B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;IAC3C,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,CAAA;IAC5D,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;IACxD,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAA;IAClF,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAA;IAE3B,MAAM,IAAI,GAAa,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAC1B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAA;IACpC,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC5B,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;IAEjC,MAAM,OAAO,GAAG,4BAA4B,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,CAAC,CAAA;IAEzE,OAAO,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;AAC/C,CAAC;AAED,MAAM,UAAU,gCAAgC,CAC9C,GAA6B,EAC7B,QAAgB,EAChB,aAAsB,IAAI;IAE1B,OAAO,4BAA4B,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,CAAA;AACvE,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/sort/sortObjectsInArrayByProperty.mjs","sourceRoot":"","sources":["../../../src/sort/sortObjectsInArrayByProperty.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,kBAAkB,CAAA;AAC7C,OAAO,QAAQ,MAAM,eAAe,CAAA;AACpC,OAAO,QAAQ,MAAM,eAAe,CAAA;AACpC,OAAO,MAAM,MAAM,iBAAiB,CAAA;AACpC,OAAO,KAAK,MAAM,cAAc,CAAA;AAChC,OAAO,YAAY,MAAM,uBAAuB,CAAA;AAEhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,MAAM,CAAC,OAAO,UAAU,4BAA4B,CAClD,GAA6B,EAC7B,QAAgB,EAChB,MAAe,IAAI,EACnB,aAAsB,IAAI;IAE1B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;IAC3C,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,CAAA;IAC5D,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;IACxD,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAA;IAClF,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAA;IAE3B,MAAM,IAAI,GAAa,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAC1B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAA;IACpC,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC5B,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;IAEjC,MAAM,OAAO,GAAG,4BAA4B,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,CAAC,CAAA;IAEzE,OAAO,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;AAC/C,CAAC;AAED,MAAM,UAAU,gCAAgC,CAC9C,GAA6B,EAC7B,QAAgB,EAChB,aAAsB,IAAI;IAE1B,OAAO,4BAA4B,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,CAAA;AACvE,CAAC"} \ No newline at end of file diff --git a/dist/esm/string/camelCase.mjs b/dist/esm/string/camelCase.mjs index b16f5af..4355769 100644 --- a/dist/esm/string/camelCase.mjs +++ b/dist/esm/string/camelCase.mjs @@ -29,7 +29,10 @@ const preserveCamelCase = (value) => { return value; }; const camelCase = (input, options) => { - options = Object.assign({ pascalCase: false }, (options ? options : {})); + options = { + pascalCase: false, + ...(options ? options : {}), + }; const postProcess = (x) => options && options.pascalCase ? x.charAt(0).toUpperCase() + x.slice(1) : x; let str = typeof input === 'string' ? input.trim() diff --git a/dist/esm/string/camelCase.mjs.map b/dist/esm/string/camelCase.mjs.map index ecb7185..800c269 100644 --- a/dist/esm/string/camelCase.mjs.map +++ b/dist/esm/string/camelCase.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/string/camelCase.mjs","sourceRoot":"","sources":["../../../src/string/camelCase.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/string/camelCase.mjs","sourceRoot":"","sources":["../../../src/string/camelCase.ts"],"names":[],"mappings":"AAAA,MAAM,iBAAiB,GAAG,CAAC,KAAa,EAAU,EAAE;IAClD,IAAI,eAAe,GAAG,KAAK,CAAA;IAC3B,IAAI,eAAe,GAAG,KAAK,CAAA;IAC3B,IAAI,mBAAmB,GAAG,KAAK,CAAA;IAE/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QAE1B,IAAI,eAAe,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,WAAW,EAAE,KAAK,SAAS,EAAE,CAAC;YAC3F,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAChD,eAAe,GAAG,KAAK,CAAA;YACvB,mBAAmB,GAAG,eAAe,CAAA;YACrC,eAAe,GAAG,IAAI,CAAA;YACtB,CAAC,EAAE,CAAA;QACL,CAAC;aAAM,IACL,eAAe;YACf,mBAAmB;YACnB,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;YAC1B,SAAS,CAAC,WAAW,EAAE,KAAK,SAAS,EACrC,CAAC;YACD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;YACxD,mBAAmB,GAAG,eAAe,CAAA;YACrC,eAAe,GAAG,KAAK,CAAA;YACvB,eAAe,GAAG,IAAI,CAAA;QACxB,CAAC;aAAM,CAAC;YACN,eAAe,GAAG,SAAS,CAAC,WAAW,EAAE,KAAK,SAAS,IAAI,SAAS,CAAC,WAAW,EAAE,KAAK,SAAS,CAAA;YAChG,mBAAmB,GAAG,eAAe,CAAA;YACrC,eAAe,GAAG,SAAS,CAAC,WAAW,EAAE,KAAK,SAAS,IAAI,SAAS,CAAC,WAAW,EAAE,KAAK,SAAS,CAAA;QAClG,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAMD,MAAM,SAAS,GAAG,CAAC,KAAwB,EAAE,OAAuB,EAAU,EAAE;IAC9E,OAAO,GAAG;QACR,UAAU,EAAE,KAAK;QACjB,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5B,CAAA;IAED,MAAM,WAAW,GAAG,CAAC,CAAS,EAAU,EAAE,CACxC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAE5E,IAAI,GAAG,GACL,OAAO,KAAK,KAAK,QAAQ;QACvB,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE;QACd,CAAC,CAAC,KAAK;aACF,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aAClB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;aACrB,IAAI,CAAC,GAAG,CAAC,CAAA;IAElB,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,EAAE,CAAA;IACX,CAAC;IAED,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAA;IACnE,CAAC;IAED,MAAM,YAAY,GAAG,GAAG,KAAK,GAAG,CAAC,WAAW,EAAE,CAAA;IAE9C,IAAI,YAAY,EAAE,CAAC;QACjB,GAAG,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAA;IAC9B,CAAC;IAED,GAAG,GAAG,GAAG;SACN,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;SACxB,WAAW,EAAE;SACb,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;SACvD,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAA;IAE9C,OAAO,WAAW,CAAC,GAAG,CAAC,CAAA;AACzB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAwB,EAAU,EAAE;IAC7D,OAAO,SAAS,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAA;AAC/C,CAAC,CAAA;AAED,eAAe,SAAS,CAAA"} \ No newline at end of file diff --git a/dist/esm/string/clearSpaces.mjs.map b/dist/esm/string/clearSpaces.mjs.map index 0b7ebdb..0e8d8b1 100644 --- a/dist/esm/string/clearSpaces.mjs.map +++ b/dist/esm/string/clearSpaces.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/string/clearSpaces.mjs","sourceRoot":"","sources":["../../../src/string/clearSpaces.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,GAAW;IAC7C,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;AACnD,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/string/clearSpaces.mjs","sourceRoot":"","sources":["../../../src/string/clearSpaces.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,GAAW;IAC7C,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;AACnD,CAAC"} \ No newline at end of file diff --git a/dist/esm/string/endsWith.mjs.map b/dist/esm/string/endsWith.mjs.map index dc761f1..f931dae 100644 --- a/dist/esm/string/endsWith.mjs.map +++ b/dist/esm/string/endsWith.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/string/endsWith.mjs","sourceRoot":"","sources":["../../../src/string/endsWith.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,eAAe,CAAA;AAEpC;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,GAAW,EAAE,MAAc;IAC1D,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;IACnB,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAA;IAEzB,IAAI,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAA;IACzB,MAAM,GAAG,GAAG,QAAQ,CAAA;IAEpB,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAA;IAEzB,OAAO,QAAQ,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,MAAM,CAAA;AAC7D,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/string/endsWith.mjs","sourceRoot":"","sources":["../../../src/string/endsWith.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,eAAe,CAAA;AAEpC;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,GAAW,EAAE,MAAc;IAC1D,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;IACnB,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAA;IAEzB,IAAI,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAA;IACzB,MAAM,GAAG,GAAG,QAAQ,CAAA;IAEpB,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAA;IAEzB,OAAO,QAAQ,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,MAAM,CAAA;AAC7D,CAAC"} \ No newline at end of file diff --git a/dist/esm/string/index.mjs.map b/dist/esm/string/index.mjs.map index aa7f121..b547022 100644 --- a/dist/esm/string/index.mjs.map +++ b/dist/esm/string/index.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/string/index.mjs","sourceRoot":"","sources":["../../../src/string/index.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,WAAW,MAAM,eAAe,CAAA;AACvC,OAAO,QAAQ,MAAM,YAAY,CAAA;AACjC,OAAO,aAAa,EAAE,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5E,OAAO,GAAG,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAC7C,OAAO,UAAU,MAAM,cAAc,CAAA;AACrC,OAAO,aAAa,MAAM,iBAAiB,CAAA;AAC3C,OAAO,KAAK,EAAE,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,SAAS,MAAM,aAAa,CAAA;AACnC,OAAO,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AACtC,OAAO,UAAU,MAAM,cAAc,CAAA;AACrC,OAAO,UAAU,MAAM,cAAc,CAAA;AACrC,OAAO,UAAU,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,EAAE,2BAA2B,EAAE,MAAM,WAAW,CAAA;AAEvD,OAAO,EACL,SAAS,EACT,WAAW,EACX,QAAQ,EACR,UAAU,EACV,eAAe,EACf,cAAc,EACd,aAAa,EACb,GAAG,EACH,MAAM,EACN,QAAQ,EACR,UAAU,EACV,2BAA2B,EAC3B,iBAAiB,EACjB,UAAU,EACV,aAAa,EACb,KAAK,EACL,SAAS,EACT,IAAI,EACJ,OAAO,EACP,UAAU,EACV,UAAU,EACV,UAAU,GACX,CAAA"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/string/index.mjs","sourceRoot":"","sources":["../../../src/string/index.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,WAAW,MAAM,eAAe,CAAA;AACvC,OAAO,QAAQ,MAAM,YAAY,CAAA;AACjC,OAAO,aAAa,EAAE,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5E,OAAO,GAAG,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAC7C,OAAO,UAAU,MAAM,cAAc,CAAA;AACrC,OAAO,aAAa,MAAM,iBAAiB,CAAA;AAC3C,OAAO,KAAK,EAAE,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,SAAS,MAAM,aAAa,CAAA;AACnC,OAAO,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AACtC,OAAO,UAAU,MAAM,cAAc,CAAA;AACrC,OAAO,UAAU,MAAM,cAAc,CAAA;AACrC,OAAO,UAAU,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,EAAE,2BAA2B,EAAE,MAAM,WAAW,CAAA;AAEvD,OAAO,EACL,SAAS,EACT,WAAW,EACX,QAAQ,EACR,UAAU,EACV,eAAe,EACf,cAAc,EACd,aAAa,EACb,GAAG,EACH,MAAM,EACN,QAAQ,EACR,UAAU,EACV,2BAA2B,EAC3B,iBAAiB,EACjB,UAAU,EACV,aAAa,EACb,KAAK,EACL,SAAS,EACT,IAAI,EACJ,OAAO,EACP,UAAU,EACV,UAAU,EACV,UAAU,GACX,CAAA"} \ No newline at end of file diff --git a/dist/esm/string/normalize.mjs.map b/dist/esm/string/normalize.mjs.map index adbfb0d..d952ac1 100644 --- a/dist/esm/string/normalize.mjs.map +++ b/dist/esm/string/normalize.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/string/normalize.mjs","sourceRoot":"","sources":["../../../src/string/normalize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAChC,OAAO,EAAE,2BAA2B,EAAE,MAAM,WAAW,CAAA;AAEvD;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,UAAU,aAAa,CACnC,GAAW,EACX,UAAkB,GAAG,EACrB,QAA2B,CAAC,GAAG,EAAE,GAAG,CAAC;IAErC,OAAO,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,CAAA;AACzD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,OAAO,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,iBAAiB,EAAE,GAAG,CAAC,CAAA;AAC1D,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAW,EAAE,UAAkB,GAAG,EAAE,EAAU,EAAE,KAAwB;IACtG,OAAO,2BAA2B,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,CAAA;AAC5F,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/string/normalize.mjs","sourceRoot":"","sources":["../../../src/string/normalize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAChC,OAAO,EAAE,2BAA2B,EAAE,MAAM,WAAW,CAAA;AAEvD;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,UAAU,aAAa,CACnC,GAAW,EACX,UAAkB,GAAG,EACrB,QAA2B,CAAC,GAAG,EAAE,GAAG,CAAC;IAErC,OAAO,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,CAAA;AACzD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,OAAO,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,iBAAiB,EAAE,GAAG,CAAC,CAAA;AAC1D,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAW,EAAE,UAAkB,GAAG,EAAE,EAAU,EAAE,KAAwB;IACtG,OAAO,2BAA2B,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,CAAA;AAC5F,CAAC"} \ No newline at end of file diff --git a/dist/esm/string/pad.mjs.map b/dist/esm/string/pad.mjs.map index e89a397..ad476f1 100644 --- a/dist/esm/string/pad.mjs.map +++ b/dist/esm/string/pad.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/string/pad.mjs","sourceRoot":"","sources":["../../../src/string/pad.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,YAAY,CAAA;AAG9B;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,UAAU,GAAG,CACzB,KAAyB,EACzB,YAAoB,EACpB,YAAoB,GAAG,EACvB,UAAmB,IAAI;IAEvB,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA,CAAC,6CAA6C;IACrF,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACjB,OAAO,EAAE,CAAA;IACX,CAAC;IACD,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAErB,IAAI,KAAK,CAAC,MAAM,GAAG,YAAY,EAAE,CAAC;QAChC,OAAO,KAAK,CAAA;IACd,CAAC;IAED,YAAY,GAAG,YAAY,GAAG,KAAK,CAAC,MAAM,CAAA;IAC1C,IAAI,YAAY,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;QACpC,SAAS,IAAI,SAAS,CAAC,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC,CAAA,CAAC,wDAAwD;IACzH,CAAC;IAED,OAAO,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAA;AACtG,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAyB,EAAE,YAAoB,EAAE,YAAoB,GAAG;IAC/F,OAAO,GAAG,CAAC,KAAK,EAAE,YAAY,EAAE,SAAS,CAAC,CAAA;AAC5C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,MAAM,CAAC,KAAyB,EAAE,YAAoB,EAAE,YAAoB,GAAG;IAC7F,OAAO,GAAG,CAAC,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,CAAC,CAAA;AACnD,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/string/pad.mjs","sourceRoot":"","sources":["../../../src/string/pad.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,YAAY,CAAA;AAG9B;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,UAAU,GAAG,CACzB,KAAyB,EACzB,YAAoB,EACpB,YAAoB,GAAG,EACvB,UAAmB,IAAI;IAEvB,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA,CAAC,6CAA6C;IACrF,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACjB,OAAO,EAAE,CAAA;IACX,CAAC;IACD,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAErB,IAAI,KAAK,CAAC,MAAM,GAAG,YAAY,EAAE,CAAC;QAChC,OAAO,KAAK,CAAA;IACd,CAAC;IAED,YAAY,GAAG,YAAY,GAAG,KAAK,CAAC,MAAM,CAAA;IAC1C,IAAI,YAAY,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;QACpC,SAAS,IAAI,SAAS,CAAC,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC,CAAA,CAAC,wDAAwD;IACzH,CAAC;IAED,OAAO,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAA;AACtG,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAyB,EAAE,YAAoB,EAAE,YAAoB,GAAG;IAC/F,OAAO,GAAG,CAAC,KAAK,EAAE,YAAY,EAAE,SAAS,CAAC,CAAA;AAC5C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,MAAM,CAAC,KAAyB,EAAE,YAAoB,EAAE,YAAoB,GAAG;IAC7F,OAAO,GAAG,CAAC,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,CAAC,CAAA;AACnD,CAAC"} \ No newline at end of file diff --git a/dist/esm/string/replace.mjs.map b/dist/esm/string/replace.mjs.map index d4923bd..d04bfbf 100644 --- a/dist/esm/string/replace.mjs.map +++ b/dist/esm/string/replace.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/string/replace.mjs","sourceRoot":"","sources":["../../../src/string/replace.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,UAAU,2BAA2B,CAAC,GAAW,EAAE,MAAyB,EAAE;IAClF,MAAM,GAAG,GAAa,EAAE,CAAA;IACxB,MAAM,UAAU,GAAa,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;IAClE,MAAM,YAAY,GAAY,UAAU,CAAC,MAAM,GAAG,CAAC,CAAA;IACnD,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAExB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACzE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACrB,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/string/replace.mjs","sourceRoot":"","sources":["../../../src/string/replace.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,UAAU,2BAA2B,CAAC,GAAW,EAAE,MAAyB,EAAE;IAClF,MAAM,GAAG,GAAa,EAAE,CAAA;IACxB,MAAM,UAAU,GAAa,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;IAClE,MAAM,YAAY,GAAY,UAAU,CAAC,MAAM,GAAG,CAAC,CAAA;IACnD,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAExB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACzE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACrB,CAAC"} \ No newline at end of file diff --git a/dist/esm/string/startsWith.mjs.map b/dist/esm/string/startsWith.mjs.map index b1909ab..850545e 100644 --- a/dist/esm/string/startsWith.mjs.map +++ b/dist/esm/string/startsWith.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/string/startsWith.mjs","sourceRoot":"","sources":["../../../src/string/startsWith.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,eAAe,CAAA;AAEpC;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,GAAW,EAAE,MAAc;IAC5D,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAA;IAEzB,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,MAAM,CAAA;AACzD,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/string/startsWith.mjs","sourceRoot":"","sources":["../../../src/string/startsWith.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,eAAe,CAAA;AAEpC;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,GAAW,EAAE,MAAc;IAC5D,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAA;IAEzB,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,MAAM,CAAA;AACzD,CAAC"} \ No newline at end of file diff --git a/dist/esm/string/stringToArray.mjs.map b/dist/esm/string/stringToArray.mjs.map index 434b930..364171c 100644 --- a/dist/esm/string/stringToArray.mjs.map +++ b/dist/esm/string/stringToArray.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/string/stringToArray.mjs","sourceRoot":"","sources":["../../../src/string/stringToArray.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAEjD;;;;;;GAMG;AACH,SAAS,cAAc,CAAC,KAAa;IACnC,OAAO,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAA;AACrC,CAAC;AAED;;;;;;GAMG;AACH,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;AACxB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,KAAa;IACjD,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;AACxE,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/string/stringToArray.mjs","sourceRoot":"","sources":["../../../src/string/stringToArray.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAEjD;;;;;;GAMG;AACH,SAAS,cAAc,CAAC,KAAa;IACnC,OAAO,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAA;AACrC,CAAC;AAED;;;;;;GAMG;AACH,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;AACxB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,KAAa;IACjD,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;AACxE,CAAC"} \ No newline at end of file diff --git a/dist/esm/string/strtr.mjs.map b/dist/esm/string/strtr.mjs.map index 8cdf600..4d4f2d9 100644 --- a/dist/esm/string/strtr.mjs.map +++ b/dist/esm/string/strtr.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/string/strtr.mjs","sourceRoot":"","sources":["../../../src/string/strtr.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAA;AAGzC;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAW,EAAE,GAA+B;IAC5E,IAAI,SAAS,GAAG,EAAE,EAChB,MAAM,GAAG,CAAC,EACV,IAAI,GAAG,CAAC,CAAC,EACT,SAAS,GAAG,EAAE,CAAA;IAEhB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QAChD,SAAS,IAAI,GAAG,CAAA;IAClB,CAAC;IAED,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,MAAM,GAAG,CAAC,CAAA;QAEV,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;QAC3B,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YAC/C,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnE,MAAM,GAAG,IAAI,GAAG,CAAC,CAAA;gBACjB,SAAQ;YACV,CAAC;YAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACpC,SAAS,IAAI,GAAG,CAAA;YAClB,CAAC;YAED,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;YAEtG,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;YACxE,MAAM,GAAG,IAAI,GAAG,GAAG,CAAC,MAAM,CAAA,CAAC,KAAK;YAChC,SAAS,GAAG,EAAE,CAAA;QAChB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,GAAW,EAAE,IAAyC,EAAE,EAAW;IAC/F,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IACrC,CAAC;IACD,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,GAAG,CAAA;IACZ,CAAC;IACD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QACjD,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;IACrF,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/string/strtr.mjs","sourceRoot":"","sources":["../../../src/string/strtr.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAA;AAGzC;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAW,EAAE,GAA+B;IAC5E,IAAI,SAAS,GAAG,EAAE,EAChB,MAAM,GAAG,CAAC,EACV,IAAI,GAAG,CAAC,CAAC,EACT,SAAS,GAAG,EAAE,CAAA;IAEhB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QAChD,SAAS,IAAI,GAAG,CAAA;IAClB,CAAC;IAED,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,MAAM,GAAG,CAAC,CAAA;QAEV,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;QAC3B,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YAC/C,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnE,MAAM,GAAG,IAAI,GAAG,CAAC,CAAA;gBACjB,SAAQ;YACV,CAAC;YAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACpC,SAAS,IAAI,GAAG,CAAA;YAClB,CAAC;YAED,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;YAEtG,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;YACxE,MAAM,GAAG,IAAI,GAAG,GAAG,CAAC,MAAM,CAAA,CAAC,KAAK;YAChC,SAAS,GAAG,EAAE,CAAA;QAChB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,GAAW,EAAE,IAAyC,EAAE,EAAW;IAC/F,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IACrC,CAAC;IACD,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,GAAG,CAAA;IACZ,CAAC;IACD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QACjD,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;IACrF,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC"} \ No newline at end of file diff --git a/dist/esm/string/titleCase.mjs.map b/dist/esm/string/titleCase.mjs.map index c55b363..4ed22fa 100644 --- a/dist/esm/string/titleCase.mjs.map +++ b/dist/esm/string/titleCase.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/string/titleCase.mjs","sourceRoot":"","sources":["../../../src/string/titleCase.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,cAAc,CAAA;AACrC,OAAO,WAAW,MAAM,eAAe,CAAA;AAEvC;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,MAAW;IAC3C,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAA;AACtE,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/string/titleCase.mjs","sourceRoot":"","sources":["../../../src/string/titleCase.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,cAAc,CAAA;AACrC,OAAO,WAAW,MAAM,eAAe,CAAA;AAEvC;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,MAAW;IAC3C,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAA;AACtE,CAAC"} \ No newline at end of file diff --git a/dist/esm/string/trim.mjs.map b/dist/esm/string/trim.mjs.map index 5ea6229..616c5be 100644 --- a/dist/esm/string/trim.mjs.map +++ b/dist/esm/string/trim.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/string/trim.mjs","sourceRoot":"","sources":["../../../src/string/trim.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,eAAe,CAAA;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,MAAW;IACtC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAA;IAEzB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,MAAM,CAAA;IACf,CAAC;IAED,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;AACnC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,GAAW,EAAE,KAAwB;IAC3D,IAAI,KAAK,GAAG,CAAC,EACX,GAAG,GAAG,GAAG,CAAC,MAAM,CAAA;IAElB,MAAM,UAAU,GAAa,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IAExE,OAAO,KAAK,GAAG,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;QAAE,EAAE,KAAK,CAAA;IAElE,OAAO,GAAG,GAAG,KAAK,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QAAE,EAAE,GAAG,CAAA;IAElE,OAAO,KAAK,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;AACxE,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/string/trim.mjs","sourceRoot":"","sources":["../../../src/string/trim.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,eAAe,CAAA;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,MAAW;IACtC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAA;IAEzB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,MAAM,CAAA;IACf,CAAC;IAED,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;AACnC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,GAAW,EAAE,KAAwB;IAC3D,IAAI,KAAK,GAAG,CAAC,EACX,GAAG,GAAG,GAAG,CAAC,MAAM,CAAA;IAElB,MAAM,UAAU,GAAa,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IAExE,OAAO,KAAK,GAAG,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;QAAE,EAAE,KAAK,CAAA;IAElE,OAAO,GAAG,GAAG,KAAK,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QAAE,EAAE,GAAG,CAAA;IAElE,OAAO,KAAK,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;AACxE,CAAC"} \ No newline at end of file diff --git a/dist/esm/string/trimPrefix.mjs.map b/dist/esm/string/trimPrefix.mjs.map index 34189cc..d02543d 100644 --- a/dist/esm/string/trimPrefix.mjs.map +++ b/dist/esm/string/trimPrefix.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/string/trimPrefix.mjs","sourceRoot":"","sources":["../../../src/string/trimPrefix.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,cAAc,CAAA;AAErC;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,GAAW,EAAE,MAAc;IAC5D,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC;QAChD,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,OAAO,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;AACrC,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/string/trimPrefix.mjs","sourceRoot":"","sources":["../../../src/string/trimPrefix.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,cAAc,CAAA;AAErC;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,GAAW,EAAE,MAAc;IAC5D,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC;QAChD,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,OAAO,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;AACrC,CAAC"} \ No newline at end of file diff --git a/dist/esm/string/trimSuffix.mjs.map b/dist/esm/string/trimSuffix.mjs.map index 714ad08..551265b 100644 --- a/dist/esm/string/trimSuffix.mjs.map +++ b/dist/esm/string/trimSuffix.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/string/trimSuffix.mjs","sourceRoot":"","sources":["../../../src/string/trimSuffix.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,YAAY,CAAA;AAEjC;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,GAAW,EAAE,MAAc;IAC5D,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC;QAC9C,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;AACrD,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/string/trimSuffix.mjs","sourceRoot":"","sources":["../../../src/string/trimSuffix.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,YAAY,CAAA;AAEjC;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,GAAW,EAAE,MAAc;IAC5D,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC;QAC9C,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;AACrD,CAAC"} \ No newline at end of file diff --git a/dist/esm/string/unicode.mjs.map b/dist/esm/string/unicode.mjs.map index 884539f..89074a0 100644 --- a/dist/esm/string/unicode.mjs.map +++ b/dist/esm/string/unicode.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/string/unicode.mjs","sourceRoot":"","sources":["../../../src/string/unicode.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/string/unicode.mjs","sourceRoot":"","sources":["../../../src/string/unicode.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/string/upperFirst.mjs.map b/dist/esm/string/upperFirst.mjs.map index 4ea613a..0ed8573 100644 --- a/dist/esm/string/upperFirst.mjs.map +++ b/dist/esm/string/upperFirst.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/string/upperFirst.mjs","sourceRoot":"","sources":["../../../src/string/upperFirst.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,MAAW;IAC5C,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE,CAAA;IAChC,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;AAC/E,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/string/upperFirst.mjs","sourceRoot":"","sources":["../../../src/string/upperFirst.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,MAAW;IAC5C,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE,CAAA;IAChC,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;AAC/E,CAAC"} \ No newline at end of file diff --git a/dist/esm/structures/CollectionArray.mjs b/dist/esm/structures/CollectionArray.mjs index 58f4814..836ea9d 100644 --- a/dist/esm/structures/CollectionArray.mjs +++ b/dist/esm/structures/CollectionArray.mjs @@ -1,9 +1,7 @@ import isFunction from '../is/isFunction.mjs'; import toString from '../to/toString.mjs'; export class CollectionArray { - constructor() { - this.items = []; - } + items = []; push(item) { this.items.push(item); } @@ -20,18 +18,16 @@ export class CollectionArray { return [...this.items]; } toString(callback) { - const data = this.toArray(); if (callback && isFunction(callback)) { - return data.map(item => callback(item)).toString(); + return this.items.map(item => callback(item)).toString(); } - return data.toString(); + return this.items.toString(); } map(callback) { - const data = this.toArray(); if (!isFunction(callback)) { - throw Error('Invalid map-function: ' + toString(callback)); + throw Error(`Invalid map-function: ${toString(callback)}`); } - return data.map(item => callback(item)); + return this.items.map((item, index, array) => callback(item, index, array)); } } export default new CollectionArray(); diff --git a/dist/esm/structures/CollectionArray.mjs.map b/dist/esm/structures/CollectionArray.mjs.map index 64e1f5a..468aa75 100644 --- a/dist/esm/structures/CollectionArray.mjs.map +++ b/dist/esm/structures/CollectionArray.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/structures/CollectionArray.mjs","sourceRoot":"","sources":["../../../src/structures/CollectionArray.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,iBAAiB,CAAA;AACxC,OAAO,QAAQ,MAAM,eAAe,CAAA;AAEpC,MAAM,OAAO,eAAe;IAA5B;QACY,UAAK,GAAQ,EAAE,CAAA;IAyC3B,CAAC;IAvCQ,IAAI,CAAC,IAAO;QACjB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACvB,CAAC;IAEM,IAAI;QACT,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;IACvD,CAAC;IAEM,IAAI;QACT,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAA;IAC1B,CAAC;IAEM,OAAO;QACZ,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IAC1B,CAAC;IAEM,OAAO;QACZ,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAA;IACxB,CAAC;IAEM,QAAQ,CAAC,QAAwB;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAA;QAE3B,IAAI,QAAQ,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;QACpD,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAA;IACxB,CAAC;IAEM,GAAG,CAAgB,QAAuB;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAA;QAE3B,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,MAAM,KAAK,CAAC,wBAAwB,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAA;QAC5D,CAAC;QAED,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;IACzC,CAAC;CACF;AAED,eAAe,IAAI,eAAe,EAAE,CAAA"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/structures/CollectionArray.mjs","sourceRoot":"","sources":["../../../src/structures/CollectionArray.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,iBAAiB,CAAA;AACxC,OAAO,QAAQ,MAAM,eAAe,CAAA;AAEpC,MAAM,OAAO,eAAe;IAChB,KAAK,GAAQ,EAAE,CAAA;IAElB,IAAI,CAAC,IAAO;QACjB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACvB,CAAC;IAEM,IAAI;QACT,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;IACvD,CAAC;IAEM,IAAI;QACT,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAA;IAC1B,CAAC;IAEM,OAAO;QACZ,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IAC1B,CAAC;IAEM,OAAO;QACZ,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAA;IACxB,CAAC;IAEM,QAAQ,CAAC,QAA4B;QAC1C,IAAI,QAAQ,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;QAC1D,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAA;IAC9B,CAAC;IAEM,GAAG,CAAI,QAAyD;QACrE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,MAAM,KAAK,CAAC,yBAAyB,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QAC5D,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAA;IAC7E,CAAC;CACF;AAED,eAAe,IAAI,eAAe,EAAE,CAAA"} \ No newline at end of file diff --git a/dist/esm/structures/PriorityQueue.mjs b/dist/esm/structures/PriorityQueue.mjs new file mode 100644 index 0000000..bc964a4 --- /dev/null +++ b/dist/esm/structures/PriorityQueue.mjs @@ -0,0 +1,102 @@ +import isFunction from '../is/isFunction.mjs'; +const DEFAULT_PRIORITY = 0; +// Priority queue implemented as an array of buckets (queues) keyed by priority. +// Higher numeric priority is dequeued first. +export class PriorityQueue { + // Buckets indexed by priority: each bucket is a FIFO queue (array) of items. + buckets = []; + // Total number of items across all buckets. + count = 0; + // Highest priority index that currently has (or last had) items; -1 means empty. + maxPriority = -1; + push(item, priority = DEFAULT_PRIORITY) { + if (priority < 0 || !Number.isFinite(priority)) { + throw new TypeError(`priority must be a non-negative finite number, got: ${priority}`); + } + if (!this.buckets[priority]) { + this.buckets[priority] = []; + } + this.buckets[priority].push(item); + this.count++; + if (priority > this.maxPriority) { + this.maxPriority = priority; + } + } + pull() { + if (this.isEmpty()) { + return undefined; + } + // Scan down from current highest priority to find the next non-empty bucket. + for (let p = this.maxPriority; p >= 0; p--) { + const bucket = this.buckets[p]; + if (bucket && bucket.length > 0) { + const result = bucket.shift(); + this.count--; + // If the bucket becomes empty and this was the highest, adjust maxPriority. + if (bucket.length === 0 && p === this.maxPriority) { + this.recalculateMaxPriority(); + } + return result; + } + } + // No items found; normalize internal state. + this.maxPriority = -1; + return undefined; + } + peek() { + if (this.isEmpty()) { + return undefined; + } + for (let p = this.maxPriority; p >= 0; p--) { + const bucket = this.buckets[p]; + if (bucket && bucket.length > 0) { + return bucket[0]; + } + } + return undefined; + } + toArray() { + // Flatten from high to low priority while preserving FIFO within each bucket. + const result = []; + for (let p = this.maxPriority; p >= 0; p--) { + const bucket = this.buckets[p]; + if (bucket && bucket.length > 0) { + // Maintain order within the same priority. + for (let i = 0; i < bucket.length; i++) { + result.push(bucket[i]); + } + } + } + return result; + } + size() { + return this.count; + } + isEmpty() { + return this.count === 0; + } + reset() { + this.buckets = []; + this.count = 0; + this.maxPriority = -1; + } + toString(callback) { + const data = this.toArray(); + if (callback && isFunction(callback)) { + return data.map(item => callback(item)).toString(); + } + return data.toString(); + } + recalculateMaxPriority() { + // Find the next lower priority that still has items. + while (this.maxPriority >= 0) { + const bucket = this.buckets[this.maxPriority]; + if (bucket && bucket.length > 0) { + break; + } + this.maxPriority--; + } + } +} +export default new PriorityQueue(); +//# sourceMappingURL=PriorityQueue.mjs.map \ No newline at end of file diff --git a/dist/esm/structures/PriorityQueue.mjs.map b/dist/esm/structures/PriorityQueue.mjs.map new file mode 100644 index 0000000..a230e9c --- /dev/null +++ b/dist/esm/structures/PriorityQueue.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/structures/PriorityQueue.mjs","sourceRoot":"","sources":["../../../src/structures/PriorityQueue.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/structures/Queue.mjs b/dist/esm/structures/Queue.mjs index 16a73d1..fca0f7d 100644 --- a/dist/esm/structures/Queue.mjs +++ b/dist/esm/structures/Queue.mjs @@ -1,8 +1,6 @@ import isFunction from '../is/isFunction.mjs'; export class Queue { - constructor() { - this.data = []; - } + data = []; push(item) { this.data.push(item); } diff --git a/dist/esm/structures/Queue.mjs.map b/dist/esm/structures/Queue.mjs.map index 1e0e1c2..010a187 100644 --- a/dist/esm/structures/Queue.mjs.map +++ b/dist/esm/structures/Queue.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/structures/Queue.mjs","sourceRoot":"","sources":["../../../src/structures/Queue.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,iBAAiB,CAAA;AAExC,MAAM,OAAO,KAAK;IAAlB;QACY,SAAI,GAAQ,EAAE,CAAA;IAuC1B,CAAC;IArCQ,IAAI,CAAC,IAAO;QACjB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACtB,CAAC;IAEM,IAAI;QACT,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;IACxD,CAAC;IAEM,IAAI;QACT,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACnD,CAAC;IAEM,IAAI;QACT,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAA;IACzB,CAAC;IAEM,OAAO;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAA;IAC/B,CAAC;IAEM,OAAO;QACZ,OAAO,IAAI,CAAC,IAAI,CAAA;IAClB,CAAC;IAEM,KAAK;QACV,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;IACtB,CAAC;IAEM,QAAQ,CAAC,QAAwB;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAA;QAE3B,IAAI,QAAQ,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;QACpD,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAA;IACxB,CAAC;CACF;AAED,eAAe,IAAI,KAAK,EAAE,CAAA"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/structures/Queue.mjs","sourceRoot":"","sources":["../../../src/structures/Queue.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,iBAAiB,CAAA;AAExC,MAAM,OAAO,KAAK;IACN,IAAI,GAAQ,EAAE,CAAA;IAEjB,IAAI,CAAC,IAAO;QACjB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACtB,CAAC;IAEM,IAAI;QACT,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;IACxD,CAAC;IAEM,IAAI;QACT,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACnD,CAAC;IAEM,IAAI;QACT,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAA;IACzB,CAAC;IAEM,OAAO;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAA;IAC/B,CAAC;IAEM,OAAO;QACZ,OAAO,IAAI,CAAC,IAAI,CAAA;IAClB,CAAC;IAEM,KAAK;QACV,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;IACtB,CAAC;IAEM,QAAQ,CAAC,QAAwB;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAA;QAE3B,IAAI,QAAQ,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;QACpD,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAA;IACxB,CAAC;CACF;AAED,eAAe,IAAI,KAAK,EAAE,CAAA"} \ No newline at end of file diff --git a/dist/esm/structures/Stack.mjs b/dist/esm/structures/Stack.mjs index 6173b3a..25ad81b 100644 --- a/dist/esm/structures/Stack.mjs +++ b/dist/esm/structures/Stack.mjs @@ -1,8 +1,6 @@ import isFunction from '../is/isFunction.mjs'; export class Stack { - constructor() { - this.data = []; - } + data = []; push(item) { this.data.push(item); } diff --git a/dist/esm/structures/Stack.mjs.map b/dist/esm/structures/Stack.mjs.map index 94eb483..1bde0fe 100644 --- a/dist/esm/structures/Stack.mjs.map +++ b/dist/esm/structures/Stack.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/structures/Stack.mjs","sourceRoot":"","sources":["../../../src/structures/Stack.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,iBAAiB,CAAA;AAExC,MAAM,OAAO,KAAK;IAAlB;QACY,SAAI,GAAQ,EAAE,CAAA;IAmC1B,CAAC;IAjCQ,IAAI,CAAC,IAAO;QACjB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACtB,CAAC;IAEM,IAAI;QACT,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;IACtD,CAAC;IAEM,IAAI;QACT,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACjE,CAAC;IAEM,IAAI;QACT,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAA;IACzB,CAAC;IAEM,OAAO;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAA;IAC/B,CAAC;IAEM,OAAO;QACZ,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAA;IACjC,CAAC;IAEM,QAAQ,CAAC,QAAwB;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAA;QAE3B,IAAI,QAAQ,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;QACpD,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAA;IACxB,CAAC;CACF;AAED,eAAe,IAAI,KAAK,EAAE,CAAA"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/structures/Stack.mjs","sourceRoot":"","sources":["../../../src/structures/Stack.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,iBAAiB,CAAA;AAExC,MAAM,OAAO,KAAK;IACN,IAAI,GAAQ,EAAE,CAAA;IAEjB,IAAI,CAAC,IAAO;QACjB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACtB,CAAC;IAEM,IAAI;QACT,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;IACtD,CAAC;IAEM,IAAI;QACT,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACjE,CAAC;IAEM,IAAI;QACT,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAA;IACzB,CAAC;IAEM,OAAO;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAA;IAC/B,CAAC;IAEM,OAAO;QACZ,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAA;IACjC,CAAC;IAEM,QAAQ,CAAC,QAAwB;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAA;QAE3B,IAAI,QAAQ,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;QACpD,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAA;IACxB,CAAC;CACF;AAED,eAAe,IAAI,KAAK,EAAE,CAAA"} \ No newline at end of file diff --git a/dist/esm/structures/index.mjs.map b/dist/esm/structures/index.mjs.map index c822b15..c4885b1 100644 --- a/dist/esm/structures/index.mjs.map +++ b/dist/esm/structures/index.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/structures/index.mjs","sourceRoot":"","sources":["../../../src/structures/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEnD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,CAAA"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/structures/index.mjs","sourceRoot":"","sources":["../../../src/structures/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEnD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,CAAA"} \ No newline at end of file diff --git a/dist/esm/to/index.mjs.map b/dist/esm/to/index.mjs.map index 94e5c8c..3eacb6f 100644 --- a/dist/esm/to/index.mjs.map +++ b/dist/esm/to/index.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/to/index.mjs","sourceRoot":"","sources":["../../../src/to/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,YAAY,CAAA;AACjC,OAAO,QAAQ,MAAM,YAAY,CAAA;AACjC,OAAO,QAAQ,MAAM,YAAY,CAAA;AACjC,OAAO,SAAS,MAAM,aAAa,CAAA;AACnC,OAAO,OAAO,MAAM,WAAW,CAAA;AAE/B,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAA"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/to/index.mjs","sourceRoot":"","sources":["../../../src/to/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,YAAY,CAAA;AACjC,OAAO,QAAQ,MAAM,YAAY,CAAA;AACjC,OAAO,QAAQ,MAAM,YAAY,CAAA;AACjC,OAAO,SAAS,MAAM,aAAa,CAAA;AACnC,OAAO,OAAO,MAAM,WAAW,CAAA;AAE/B,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAA"} \ No newline at end of file diff --git a/dist/esm/to/toArray.mjs.map b/dist/esm/to/toArray.mjs.map index 12fa1cb..766d3a1 100644 --- a/dist/esm/to/toArray.mjs.map +++ b/dist/esm/to/toArray.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/to/toArray.mjs","sourceRoot":"","sources":["../../../src/to/toArray.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,kBAAkB,CAAA;AAC1C,OAAO,SAAS,MAAM,gBAAgB,CAAA;AACtC,OAAO,SAAS,MAAM,gBAAgB,CAAA;AACtC,OAAO,KAAK,MAAM,YAAY,CAAA;AAC9B,OAAO,QAAQ,MAAM,eAAe,CAAA;AACpC,OAAO,SAAS,MAAM,sBAAsB,CAAA;AAC5C,OAAO,aAAa,MAAM,wBAAwB,CAAA;AAClD,OAAO,MAAM,MAAM,iBAAiB,CAAA;AAEpC,iCAAiC;AACjC,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAA;AAExD;;;;;;GAMG;AACH,SAAS,eAAe,CAAC,QAAuB;IAC9C,IAAI,IAAI,CAAA;IACR,MAAM,MAAM,GAAG,EAAE,CAAA;IAEjB,OAAO,CAAC,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACzB,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,QAAa,EAAE;IAC7C,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACjB,OAAO,EAAE,CAAA;IACX,CAAC;IAED,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IAClE,CAAC;IAED,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QACzC,OAAO,CAAC,KAAK,CAAC,CAAA;IAChB,CAAC;IAED,IAAI,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;QACtC,OAAO,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;IAC9C,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;AACtB,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/to/toArray.mjs","sourceRoot":"","sources":["../../../src/to/toArray.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,kBAAkB,CAAA;AAC1C,OAAO,SAAS,MAAM,gBAAgB,CAAA;AACtC,OAAO,SAAS,MAAM,gBAAgB,CAAA;AACtC,OAAO,KAAK,MAAM,YAAY,CAAA;AAC9B,OAAO,QAAQ,MAAM,eAAe,CAAA;AACpC,OAAO,SAAS,MAAM,sBAAsB,CAAA;AAC5C,OAAO,aAAa,MAAM,wBAAwB,CAAA;AAClD,OAAO,MAAM,MAAM,iBAAiB,CAAA;AAEpC,iCAAiC;AACjC,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAA;AAExD;;;;;;GAMG;AACH,SAAS,eAAe,CAAC,QAAuB;IAC9C,IAAI,IAAI,CAAA;IACR,MAAM,MAAM,GAAG,EAAE,CAAA;IAEjB,OAAO,CAAC,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACzB,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,QAAa,EAAE;IAC7C,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACjB,OAAO,EAAE,CAAA;IACX,CAAC;IAED,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IAClE,CAAC;IAED,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QACzC,OAAO,CAAC,KAAK,CAAC,CAAA;IAChB,CAAC;IAED,IAAI,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;QACtC,OAAO,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;IAC9C,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;AACtB,CAAC"} \ No newline at end of file diff --git a/dist/esm/to/toFinite.mjs.map b/dist/esm/to/toFinite.mjs.map index b942b42..daebb68 100644 --- a/dist/esm/to/toFinite.mjs.map +++ b/dist/esm/to/toFinite.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/to/toFinite.mjs","sourceRoot":"","sources":["../../../src/to/toFinite.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,YAAY,CAAA;AAEjC;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,KAAU;IACzC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAChC,CAAC;IACD,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAEvB,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC9C,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAA;IACzD,CAAC;IAED,OAAO,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AACpC,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/to/toFinite.mjs","sourceRoot":"","sources":["../../../src/to/toFinite.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,YAAY,CAAA;AAEjC;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,KAAU;IACzC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAChC,CAAC;IACD,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAEvB,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC9C,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAA;IACzD,CAAC;IAED,OAAO,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AACpC,CAAC"} \ No newline at end of file diff --git a/dist/esm/to/toInteger.mjs.map b/dist/esm/to/toInteger.mjs.map index e7d873f..0aea9c5 100644 --- a/dist/esm/to/toInteger.mjs.map +++ b/dist/esm/to/toInteger.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/to/toInteger.mjs","sourceRoot":"","sources":["../../../src/to/toInteger.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,YAAY,CAAA;AAEjC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,KAAU;IAC1C,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC9B,IAAI,SAAS,GAAG,MAAM,GAAG,CAAC,CAAA;IAE1B,OAAO,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAC1E,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/to/toInteger.mjs","sourceRoot":"","sources":["../../../src/to/toInteger.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,YAAY,CAAA;AAEjC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,KAAU;IAC1C,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC9B,IAAI,SAAS,GAAG,MAAM,GAAG,CAAC,CAAA;IAE1B,OAAO,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAC1E,CAAC"} \ No newline at end of file diff --git a/dist/esm/to/toNumber.mjs.map b/dist/esm/to/toNumber.mjs.map index ae15918..59d075b 100644 --- a/dist/esm/to/toNumber.mjs.map +++ b/dist/esm/to/toNumber.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/to/toNumber.mjs","sourceRoot":"","sources":["../../../src/to/toNumber.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,eAAe,CAAA;AACpC,OAAO,QAAQ,MAAM,eAAe,CAAA;AACpC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEvE;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,KAAU;IACzC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACpB,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACpB,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,CAAA;QAC3E,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAA;IAC9C,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IACrC,CAAC;IAED,OAAO,cAAc,CAAC,KAAK,CAAC,CAAA;AAC9B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IACjC,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAEvC,OAAO,QAAQ,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;QACtC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;YACtB,CAAC,CAAC,GAAG;YACL,CAAC,CAAC,CAAC,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,OAAO,CAAC,KAAK,CAAA;AACf,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/to/toNumber.mjs","sourceRoot":"","sources":["../../../src/to/toNumber.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,eAAe,CAAA;AACpC,OAAO,QAAQ,MAAM,eAAe,CAAA;AACpC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEvE;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,KAAU;IACzC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACpB,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACpB,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,CAAA;QAC3E,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAA;IAC9C,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IACrC,CAAC;IAED,OAAO,cAAc,CAAC,KAAK,CAAC,CAAA;AAC9B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IACjC,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAEvC,OAAO,QAAQ,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;QACtC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;YACtB,CAAC,CAAC,GAAG;YACL,CAAC,CAAC,CAAC,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,OAAO,CAAC,KAAK,CAAA;AACf,CAAC"} \ No newline at end of file diff --git a/dist/esm/to/toString.mjs.map b/dist/esm/to/toString.mjs.map index b41a34f..a7e183b 100644 --- a/dist/esm/to/toString.mjs.map +++ b/dist/esm/to/toString.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/to/toString.mjs","sourceRoot":"","sources":["../../../src/to/toString.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,eAAe,CAAA;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EACvD,cAAc,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAA;AACjE;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,KAAU;IACzC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAA;IACzB,CAAC;IAED,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACpB,OAAO,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACzD,CAAC;IAED,QAAQ,OAAO,KAAK,EAAE,CAAC;QACrB,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;QAClC,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAA;QACzB,KAAK,QAAQ;YACX,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;QACpD,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAA;IAC3B,CAAC;IAED,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,CAAA;IACX,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,GAAG,EAAE,CAAA;IAEzB,OAAO,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAA;AAClE,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/to/toString.mjs","sourceRoot":"","sources":["../../../src/to/toString.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,eAAe,CAAA;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EACvD,cAAc,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAA;AACjE;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,KAAU;IACzC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAA;IACzB,CAAC;IAED,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACpB,OAAO,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACzD,CAAC;IAED,QAAQ,OAAO,KAAK,EAAE,CAAC;QACrB,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;QAClC,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAA;QACzB,KAAK,QAAQ;YACX,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;QACpD,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAA;IAC3B,CAAC;IAED,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,CAAA;IACX,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,GAAG,EAAE,CAAA;IAEzB,OAAO,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAA;AAClE,CAAC"} \ No newline at end of file diff --git a/dist/esm/utils/base64.mjs.map b/dist/esm/utils/base64.mjs.map index da082ba..2170274 100644 --- a/dist/esm/utils/base64.mjs.map +++ b/dist/esm/utils/base64.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/utils/base64.mjs","sourceRoot":"","sources":["../../../src/utils/base64.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,gBAAgB,CAAA;AAElC,MAAM,aAAa,GAAG,CAAC,GAAW,EAAU,EAAE;IAC5C,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;AAC5C,CAAC,CAAA;AAED,MAAM,iBAAiB,GAAG,CAAC,MAAc,EAAU,EAAE;IACnD,OAAO,aAAa,CAAC,MAAM,CAAC,CAAA;AAC9B,CAAC,CAAA;AAED,MAAM,aAAa,GAAG,CAAC,MAAc,EAAU,EAAE;IAC/C,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAA;AACjD,CAAC,CAAA;AAED,MAAM,iBAAiB,GAAG,CAAC,MAAc,EAAU,EAAE;IACnD,OAAO,aAAa,CAAC,MAAM,CAAC,CAAA;AAC9B,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,MAAc;IACtC,OAAO,iBAAiB,CAAC,QAAQ,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;AAChE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,MAAc;IACtC,OAAO,kBAAkB,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;AAC9D,CAAC;AAED,MAAM,gBAAgB,GAAG,KAAK,CAAA;AAC9B,MAAM,gBAAgB,GAAG,KAAK,CAAA;AAE9B;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,OAAO,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,CAAA;AAC7E,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,OAAO,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,CAAA;AAC7E,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/utils/base64.mjs","sourceRoot":"","sources":["../../../src/utils/base64.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,gBAAgB,CAAA;AAElC,MAAM,aAAa,GAAG,CAAC,GAAW,EAAU,EAAE;IAC5C,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;AAC5C,CAAC,CAAA;AAED,MAAM,iBAAiB,GAAG,CAAC,MAAc,EAAU,EAAE;IACnD,OAAO,aAAa,CAAC,MAAM,CAAC,CAAA;AAC9B,CAAC,CAAA;AAED,MAAM,aAAa,GAAG,CAAC,MAAc,EAAU,EAAE;IAC/C,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAA;AACjD,CAAC,CAAA;AAED,MAAM,iBAAiB,GAAG,CAAC,MAAc,EAAU,EAAE;IACnD,OAAO,aAAa,CAAC,MAAM,CAAC,CAAA;AAC9B,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,MAAc;IACtC,OAAO,iBAAiB,CAAC,QAAQ,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;AAChE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,MAAc;IACtC,OAAO,kBAAkB,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;AAC9D,CAAC;AAED,MAAM,gBAAgB,GAAG,KAAK,CAAA;AAC9B,MAAM,gBAAgB,GAAG,KAAK,CAAA;AAE9B;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,OAAO,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,CAAA;AAC7E,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,OAAO,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,CAAA;AAC7E,CAAC"} \ No newline at end of file diff --git a/dist/esm/utils/index.mjs.map b/dist/esm/utils/index.mjs.map index fdec5b5..d8b8f47 100644 --- a/dist/esm/utils/index.mjs.map +++ b/dist/esm/utils/index.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/utils/index.mjs","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,SAAS,CAAA;AAC3B,OAAO,SAAS,MAAM,aAAa,CAAA;AACnC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAE7E,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,CAAA"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/utils/index.mjs","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,SAAS,CAAA;AAC3B,OAAO,SAAS,MAAM,aAAa,CAAA;AACnC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAE7E,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,CAAA"} \ No newline at end of file diff --git a/dist/esm/utils/pregQuote.mjs.map b/dist/esm/utils/pregQuote.mjs.map index 17741db..782fa82 100644 --- a/dist/esm/utils/pregQuote.mjs.map +++ b/dist/esm/utils/pregQuote.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/utils/pregQuote.mjs","sourceRoot":"","sources":["../../../src/utils/pregQuote.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,MAAc;IAC9C,sCAAsC;IACtC,OAAO,MAAM,CAAC,OAAO,CAAC,4BAA4B,EAAE,MAAM,CAAC,CAAA;AAC7D,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/utils/pregQuote.mjs","sourceRoot":"","sources":["../../../src/utils/pregQuote.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,MAAc;IAC9C,sCAAsC;IACtC,OAAO,MAAM,CAAC,OAAO,CAAC,4BAA4B,EAAE,MAAM,CAAC,CAAA;AAC7D,CAAC"} \ No newline at end of file diff --git a/dist/esm/utils/times.mjs.map b/dist/esm/utils/times.mjs.map index 5f7dfaf..2492fa4 100644 --- a/dist/esm/utils/times.mjs.map +++ b/dist/esm/utils/times.mjs.map @@ -1 +1 @@ -{"version":3,"file":"dist/esm/utils/times.mjs","sourceRoot":"","sources":["../../../src/utils/times.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,iBAAiB,CAAA;AAgBxC,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,IAAY,CAAC,EAAE,QAAyB;IACpE,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAA;IAC3B,IAAI,KAAK,GAAG,CAAC,CAAC,CAAA;IAEd,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAA;IAEjC,OAAO,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC;QACnB,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAE,QAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QAEtD,MAAM,CAAC,KAAK,CAAC,GAAG,SAAS,IAAI,QAAQ,IAAI,KAAK,CAAA;IAChD,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"} \ No newline at end of file +{"version":3,"file":"/Volumes/Data/Dev/dev/me/js/packages/µ/dist/esm/utils/times.mjs","sourceRoot":"","sources":["../../../src/utils/times.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,iBAAiB,CAAA;AAgBxC,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,IAAY,CAAC,EAAE,QAAyB;IACpE,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAA;IAC3B,IAAI,KAAK,GAAG,CAAC,CAAC,CAAA;IAEd,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAA;IAEjC,OAAO,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC;QACnB,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAE,QAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QAEtD,MAAM,CAAC,KAAK,CAAC,GAAG,SAAS,IAAI,QAAQ,IAAI,KAAK,CAAA;IAChD,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"} \ No newline at end of file diff --git a/dist/types/array/intersect.d.ts.map b/dist/types/array/intersect.d.ts.map index 6266fa2..ef17e62 100644 --- a/dist/types/array/intersect.d.ts.map +++ b/dist/types/array/intersect.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"intersect.d.ts","sourceRoot":"","sources":["../../../src/array/intersect.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,CAGpE;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,OAI1D"} \ No newline at end of file +{"version":3,"file":"intersect.d.ts","sourceRoot":"","sources":["../../../src/array/intersect.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,CAcpE;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,OAI1D"} \ No newline at end of file diff --git a/dist/types/array/random.d.ts.map b/dist/types/array/random.d.ts.map index f3639f3..cdb0cd5 100644 --- a/dist/types/array/random.d.ts.map +++ b/dist/types/array/random.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"random.d.ts","sourceRoot":"","sources":["../../../src/array/random.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,GAAG,CAEhD"} \ No newline at end of file +{"version":3,"file":"random.d.ts","sourceRoot":"","sources":["../../../src/array/random.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,GAAG,CAIhD"} \ No newline at end of file diff --git a/dist/types/date/now.d.ts b/dist/types/date/now.d.ts index 46b6e86..53638cc 100644 --- a/dist/types/date/now.d.ts +++ b/dist/types/date/now.d.ts @@ -1,5 +1,5 @@ /** - * This function return Date now + * return Date now */ export default function now(): number; //# sourceMappingURL=now.d.ts.map \ No newline at end of file diff --git a/dist/types/format/fileSize.d.ts.map b/dist/types/format/fileSize.d.ts.map index d3a589e..964ed77 100644 --- a/dist/types/format/fileSize.d.ts.map +++ b/dist/types/format/fileSize.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"fileSize.d.ts","sourceRoot":"","sources":["../../../src/format/fileSize.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAElD;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAC9B,IAAI,EAAE,UAAU,EAChB,IAAI,GAAE,MAAa,EACnB,QAAQ,GAAE,MAAU,EACpB,QAAQ,GAAE,MAAY,EACtB,kBAAkB,GAAE,MAAY,EAChC,eAAe,GAAE,MAAY,GAC5B,MAAM,CAoBR"} \ No newline at end of file +{"version":3,"file":"fileSize.d.ts","sourceRoot":"","sources":["../../../src/format/fileSize.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAElD;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAC9B,IAAI,EAAE,UAAU,EAChB,IAAI,GAAE,MAAa,EACnB,QAAQ,GAAE,MAAU,EACpB,QAAQ,GAAE,MAAY,EACtB,kBAAkB,GAAE,MAAY,EAChC,eAAe,GAAE,MAAY,GAC5B,MAAM,CAkBR"} \ No newline at end of file diff --git a/dist/types/internal/free/freeSelf.d.ts b/dist/types/internal/free/freeSelf.d.ts deleted file mode 100644 index 0ba60d3..0000000 --- a/dist/types/internal/free/freeSelf.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -/** Detect free variable `self`. */ -declare const _default: false | (Window & typeof globalThis); -export default _default; -//# sourceMappingURL=freeSelf.d.ts.map \ No newline at end of file diff --git a/dist/types/internal/free/freeSelf.d.ts.map b/dist/types/internal/free/freeSelf.d.ts.map deleted file mode 100644 index 5d75729..0000000 --- a/dist/types/internal/free/freeSelf.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"freeSelf.d.ts","sourceRoot":"","sources":["../../../../src/internal/free/freeSelf.ts"],"names":[],"mappings":"AAAA,mCAAmC;;AACnC,wBAAiF"} \ No newline at end of file diff --git a/dist/types/internal/getRawTag.d.ts b/dist/types/internal/getRawTag.d.ts index 3c063d0..7b3ee93 100644 --- a/dist/types/internal/getRawTag.d.ts +++ b/dist/types/internal/getRawTag.d.ts @@ -5,5 +5,5 @@ * @param {*} value The value to query. * @returns {string} Returns the raw `toStringTag`. */ -export default function getRawTag(value: any): string; +export default function getRawTag(value: unknown): string; //# sourceMappingURL=getRawTag.d.ts.map \ No newline at end of file diff --git a/dist/types/internal/getRawTag.d.ts.map b/dist/types/internal/getRawTag.d.ts.map index 7272126..d58c31f 100644 --- a/dist/types/internal/getRawTag.d.ts.map +++ b/dist/types/internal/getRawTag.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"getRawTag.d.ts","sourceRoot":"","sources":["../../../src/internal/getRawTag.ts"],"names":[],"mappings":"AAkBA;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,CAoBpD"} \ No newline at end of file +{"version":3,"file":"getRawTag.d.ts","sourceRoot":"","sources":["../../../src/internal/getRawTag.ts"],"names":[],"mappings":"AAaA;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CA8BxD"} \ No newline at end of file diff --git a/dist/types/internal/root.d.ts b/dist/types/internal/root.d.ts index 759f51d..b576951 100644 --- a/dist/types/internal/root.d.ts +++ b/dist/types/internal/root.d.ts @@ -1,3 +1,4 @@ -declare const _default: any; -export default _default; +type Root = typeof globalThis | undefined; +declare const root: Root; +export default root; //# sourceMappingURL=root.d.ts.map \ No newline at end of file diff --git a/dist/types/internal/root.d.ts.map b/dist/types/internal/root.d.ts.map index b562cc6..1c83473 100644 --- a/dist/types/internal/root.d.ts.map +++ b/dist/types/internal/root.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"root.d.ts","sourceRoot":"","sources":["../../../src/internal/root.ts"],"names":[],"mappings":";AAIA,wBAAsE"} \ No newline at end of file +{"version":3,"file":"root.d.ts","sourceRoot":"","sources":["../../../src/internal/root.ts"],"names":[],"mappings":"AAIA,KAAK,IAAI,GAAG,OAAO,UAAU,GAAG,SAAS,CAAA;AAEzC,QAAA,MAAM,IAAI,EAAE,IASS,CAAA;AAErB,eAAe,IAAI,CAAA"} \ No newline at end of file diff --git a/dist/types/is/isBuffer.d.ts b/dist/types/is/isBuffer.d.ts index 465ca7e..cc921a3 100644 --- a/dist/types/is/isBuffer.d.ts +++ b/dist/types/is/isBuffer.d.ts @@ -9,6 +9,6 @@ * isBuffer(new Uint8Array(2)); * // => false */ -declare const _default: any; +declare const _default: ((obj: any) => obj is Buffer) | (() => boolean); export default _default; //# sourceMappingURL=isBuffer.d.ts.map \ No newline at end of file diff --git a/dist/types/object/equals.d.ts.map b/dist/types/object/equals.d.ts.map index 6f5277a..ec0ae3b 100644 --- a/dist/types/object/equals.d.ts.map +++ b/dist/types/object/equals.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"equals.d.ts","sourceRoot":"","sources":["../../../src/object/equals.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,GAAG,OAAO,CA+G5G"} \ No newline at end of file +{"version":3,"file":"equals.d.ts","sourceRoot":"","sources":["../../../src/object/equals.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,GAAG,OAAO,CAqG5G"} \ No newline at end of file diff --git a/dist/types/object/merge.d.ts b/dist/types/object/merge.d.ts index 4d53b9a..853d234 100644 --- a/dist/types/object/merge.d.ts +++ b/dist/types/object/merge.d.ts @@ -1,40 +1,7 @@ +type record = Record; /** * Merge objects recursively - * - * var js = { - * companyName: 'JS', - * products: ['JS', 'GWT', 'Designer'], - * isSuperCool: true, - * office: { - * size: 2000, - * location: 'Palo Alto', - * isFun: true - * } - * }; - * - * var newStuff = { - * companyName: 'Jacksonville', - * products: ['JS', 'GWT', 'Designer', 'Touch', 'Animator'], - * office: { - * size: 40000, - * location: 'Redwood City' - * } - * }; - * - * const result = merge(js, newStuff); - * - * { - * companyName: 'Jacksonville', - * products: ['JS', 'GWT', 'Designer', 'Touch', 'Animator'], - * isSuperCool: true, - * office: { - * size: 40000, - * location: 'Redwood City', - * isFun: true - * } - * } */ -type record = Record; export default function merge>(original: Partial, ...values: Partial[]): T; export {}; //# sourceMappingURL=merge.d.ts.map \ No newline at end of file diff --git a/dist/types/object/merge.d.ts.map b/dist/types/object/merge.d.ts.map index 13bc4b0..8793f30 100644 --- a/dist/types/object/merge.d.ts.map +++ b/dist/types/object/merge.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../../src/object/merge.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,KAAK,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,CAAA;AAEtC,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CA6BzG"} \ No newline at end of file +{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../../src/object/merge.ts"],"names":[],"mappings":"AAGA,KAAK,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,CAAA;AAStC;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAgCzG"} \ No newline at end of file diff --git a/dist/types/structures/CollectionArray.d.ts b/dist/types/structures/CollectionArray.d.ts index 66ad64d..bb9edee 100644 --- a/dist/types/structures/CollectionArray.d.ts +++ b/dist/types/structures/CollectionArray.d.ts @@ -5,8 +5,8 @@ export declare class CollectionArray { size(): number; isEmpty(): boolean; toArray(): T[]; - toString(callback?: (i: T) => any): string; - map(callback: (i: T) => any): R[]; + toString(callback?: (i: T) => unknown): string; + map(callback: (i: T, index: number, array: readonly T[]) => R): R[]; } declare const _default: CollectionArray; export default _default; diff --git a/dist/types/structures/CollectionArray.d.ts.map b/dist/types/structures/CollectionArray.d.ts.map index ffa7a22..68dfaae 100644 --- a/dist/types/structures/CollectionArray.d.ts.map +++ b/dist/types/structures/CollectionArray.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CollectionArray.d.ts","sourceRoot":"","sources":["../../../src/structures/CollectionArray.ts"],"names":[],"mappings":"AAGA,qBAAa,eAAe,CAAC,CAAC;IAC5B,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAK;IAElB,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAInB,IAAI,IAAI,CAAC,GAAG,SAAS;IAIrB,IAAI,IAAI,MAAM;IAId,OAAO,IAAI,OAAO;IAIlB,OAAO,IAAI,CAAC,EAAE;IAId,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG,GAAG,MAAM;IAU1C,GAAG,CAAC,CAAC,SAAS,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,EAAE;CASxD;;AAED,wBAAoC"} \ No newline at end of file +{"version":3,"file":"CollectionArray.d.ts","sourceRoot":"","sources":["../../../src/structures/CollectionArray.ts"],"names":[],"mappings":"AAGA,qBAAa,eAAe,CAAC,CAAC;IAC5B,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAK;IAElB,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAInB,IAAI,IAAI,CAAC,GAAG,SAAS;IAIrB,IAAI,IAAI,MAAM;IAId,OAAO,IAAI,OAAO;IAIlB,OAAO,IAAI,CAAC,EAAE;IAId,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,GAAG,MAAM;IAO9C,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE;CAM9E;;AAED,wBAAoC"} \ No newline at end of file diff --git a/dist/types/structures/PriorityQueue.d.ts b/dist/types/structures/PriorityQueue.d.ts new file mode 100644 index 0000000..348e1d5 --- /dev/null +++ b/dist/types/structures/PriorityQueue.d.ts @@ -0,0 +1,17 @@ +export declare class PriorityQueue { + private buckets; + private count; + private maxPriority; + push(item: T, priority?: number): void; + pull(): T | undefined; + peek(): T | undefined; + toArray(): T[]; + size(): number; + isEmpty(): boolean; + reset(): void; + toString(callback?: (i: T) => any): string; + private recalculateMaxPriority; +} +declare const _default: PriorityQueue; +export default _default; +//# sourceMappingURL=PriorityQueue.d.ts.map \ No newline at end of file diff --git a/dist/types/structures/PriorityQueue.d.ts.map b/dist/types/structures/PriorityQueue.d.ts.map new file mode 100644 index 0000000..f34dfb0 --- /dev/null +++ b/dist/types/structures/PriorityQueue.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"PriorityQueue.d.ts","sourceRoot":"","sources":["../../../src/structures/PriorityQueue.ts"],"names":[],"mappings":"AAMA,qBAAa,aAAa,CAAC,CAAC;IAE1B,OAAO,CAAC,OAAO,CAAY;IAE3B,OAAO,CAAC,KAAK,CAAI;IAEjB,OAAO,CAAC,WAAW,CAAK;IAEjB,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,QAAQ,GAAE,MAAyB,GAAG,IAAI;IAiBxD,IAAI,IAAI,CAAC,GAAG,SAAS;IA0BrB,IAAI,IAAI,CAAC,GAAG,SAAS;IAerB,OAAO,IAAI,CAAC,EAAE;IAed,IAAI,IAAI,MAAM;IAId,OAAO,IAAI,OAAO;IAIlB,KAAK,IAAI,IAAI;IAMb,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG,GAAG,MAAM;IAUjD,OAAO,CAAC,sBAAsB;CAU/B;;AAED,wBAAuC"} \ No newline at end of file diff --git a/src/array/intersect.ts b/src/array/intersect.ts index 9f49aa4..4c13de0 100644 --- a/src/array/intersect.ts +++ b/src/array/intersect.ts @@ -6,8 +6,19 @@ * @returns {any[]} */ export default function intersect(array: any[], array2: any[]): any[] { - const set = new Set(array) - return [...new Set(array2.filter(item => set.has(item)))] + // Уникальное пересечение за один проход по меньшему множеству + const aSet = new Set(array) + const bSet = new Set(array2) + const result: any[] = [] + + // Идём по меньшему набору уникальных значений + const [small, big] = aSet.size <= bSet.size ? [aSet, bSet] : [bSet, aSet] + for (const v of small) { + if (big.has(v)) { + result.push(v) + } + } + return result } /** @@ -18,7 +29,7 @@ export default function intersect(array: any[], array2: any[]): any[] { * @returns {*|any[]} */ export function intersectAll(array: any[], ...arrays: any[]) { - return arrays.reduce((previous, next) => { - return intersect(previous, next) - }, array) + // Начинаем с самого короткого массива для уменьшения промежуточных наборов + const all = [array, ...arrays].sort((a, b) => a.length - b.length) + return all.slice(1).reduce((prev, next) => intersect(prev, next), all[0]) } diff --git a/src/array/random.ts b/src/array/random.ts index 25c18b7..9c36602 100644 --- a/src/array/random.ts +++ b/src/array/random.ts @@ -5,5 +5,7 @@ * @returns {unknown} */ export default function random(array: any[]): any { - return array[Math.floor(Math.random() * array.length)] + const { length } = array + if (length === 0) return undefined + return array[Math.floor(Math.random() * length)] } diff --git a/src/core/clone.ts b/src/core/clone.ts index 009cccb..8b83929 100644 --- a/src/core/clone.ts +++ b/src/core/clone.ts @@ -22,8 +22,6 @@ export default function clone>(item: T, cloneDom: boolean = return item.cloneNode(true) } - const type = Object.prototype.toString.call(item) - // Date if (isDate(item)) { // @ts-ignore @@ -44,24 +42,26 @@ export default function clone>(item: T, cloneDom: boolean = return newClone } - // Object - if (type === '[object Object]' && (item).constructor === Object) { - let key: PropertyKey - let newClone: Record = {} + const type = Object.prototype.toString.call(item) + + // Plain Object + if (type === '[object Object]' && (item as Object).constructor === Object) { + const src = item as Record + const newClone: Record = {} - for (key in item) { - newClone[key] = clone((>item)[key], cloneDom) + for (const key in src) { + if (Object.prototype.hasOwnProperty.call(src, key)) { + newClone[key] = clone(src[key], cloneDom) + } } - if (enumerables) { - for (j = enumerables.length; j--; ) { - let k: string = enumerables[j] - if (Object.prototype.hasOwnProperty.call(item, k)) { - newClone[k] = (>item)[k] - } + for (const k of enumerables) { + if (Object.prototype.hasOwnProperty.call(src, k)) { + newClone[k] = (src as Record)[k] } } + // @ts-ignore return newClone } diff --git a/src/date/now.ts b/src/date/now.ts index 8296989..89a36d4 100644 --- a/src/date/now.ts +++ b/src/date/now.ts @@ -1,7 +1,7 @@ const nowFn = Date.now || (() => new Date().getTime()) /** - * This function return Date now + * return Date now */ export default function now() { return nowFn() diff --git a/src/internal/base/baseGetTag.ts b/src/internal/base/baseGetTag.ts index 66a2e34..77bc6e1 100644 --- a/src/internal/base/baseGetTag.ts +++ b/src/internal/base/baseGetTag.ts @@ -31,7 +31,7 @@ type TagTypeNullable = TagType | '[object Null]' | '[object Undefined]' const nullTag = '[object Null]' const undefinedTag = '[object Undefined]' -const symToStringTag = root.Symbol ? root.Symbol.toStringTag : undefined +const symToStringTag = root?.Symbol ? root.Symbol.toStringTag : undefined /** * The base implementation of `getTag` without fallbacks for buggy environments. diff --git a/src/internal/free/freeSelf.ts b/src/internal/free/freeSelf.ts deleted file mode 100644 index 55765c3..0000000 --- a/src/internal/free/freeSelf.ts +++ /dev/null @@ -1,2 +0,0 @@ -/** Detect free variable `self`. */ -export default typeof self === 'object' && self && self.Object === Object && self diff --git a/src/internal/getRawTag.ts b/src/internal/getRawTag.ts index 3f47ca9..71f801b 100644 --- a/src/internal/getRawTag.ts +++ b/src/internal/getRawTag.ts @@ -1,20 +1,15 @@ import root from './root' -/** Built-in value references. */ -const symToStringTag = root.Symbol ? root.Symbol.toStringTag : undefined - -/** Used for built-in method references. */ -const objectProto = Object.prototype - -/** Used to check objects for own properties. */ -const hasOwnProperty = objectProto.hasOwnProperty - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -const nativeObjectToString = objectProto.toString +// Prefer explicit, descriptive names for built-in references. +const TO_STRING_TAG: symbol | undefined = root?.Symbol ? root.Symbol.toStringTag : undefined +const objectPrototype = Object.prototype +const hasOwn = objectPrototype.hasOwnProperty +const objectToString = objectPrototype.toString + +// Small, focused helper improves readability and reuse. +function isObjectLike(value: unknown): value is object { + return value !== null && (typeof value === 'object' || typeof value === 'function') +} /** * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. @@ -23,24 +18,34 @@ const nativeObjectToString = objectProto.toString * @param {*} value The value to query. * @returns {string} Returns the raw `toStringTag`. */ -export default function getRawTag(value: any): string { - const isOwn = hasOwnProperty.call(value, symToStringTag), - tag = value[symToStringTag] +export default function getRawTag(value: unknown): string { + // Fast path: if no Symbol.toStringTag support or non-object, use default toString. + if (!TO_STRING_TAG || !isObjectLike(value)) { + return objectToString.call(value) + } - let unmasked = false + const obj = value as Record + const isOwn = hasOwn.call(obj, TO_STRING_TAG) + const previousTag = obj[TO_STRING_TAG] + let masked = false try { - value[symToStringTag] = undefined - unmasked = true - } catch (error) {} + obj[TO_STRING_TAG] = undefined + masked = true + } catch { + // Swallow errors from non-writable properties; fall through to toString. + } - const result = nativeObjectToString.call(value) - if (unmasked) { + const result = objectToString.call(obj) + + // Restore original state only if we managed to mask it. + if (masked) { if (isOwn) { - value[symToStringTag] = tag + obj[TO_STRING_TAG] = previousTag } else { - delete value[symToStringTag] + delete obj[TO_STRING_TAG] } } + return result } diff --git a/src/internal/root.ts b/src/internal/root.ts index f387467..48fd59d 100644 --- a/src/internal/root.ts +++ b/src/internal/root.ts @@ -1,5 +1,18 @@ -/** Used as a reference to the global object. */ -import freeGlobal from './free/freeGlobal' -import freeSelf from './free/freeSelf' +declare const self: any // безопасно для TS в средах без DOM +declare const window: any // безопасно для TS в средах без window +declare const global: any // безопасно для TS в средах без Node -export default freeGlobal || freeSelf || new Function('return this')() +type Root = typeof globalThis | undefined + +const root: Root = + typeof globalThis === 'object' + ? globalThis + : typeof self === 'object' + ? self + : typeof window === 'object' + ? window + : typeof global === 'object' + ? global + : undefined + +export default root diff --git a/src/is/isBuffer.ts b/src/is/isBuffer.ts index 1b9ec70..c9cac29 100644 --- a/src/is/isBuffer.ts +++ b/src/is/isBuffer.ts @@ -10,7 +10,7 @@ const freeModule = freeExports && typeof module == 'object' && module && !('node const moduleExports = freeModule && freeModule.exports === freeExports /** Built-in value references. */ -const Buffer = moduleExports ? root.Buffer : undefined +const Buffer = moduleExports ? root?.Buffer : undefined /* Built-in method references for those with the same name as other `lodash` methods. */ const nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined diff --git a/src/object/equals.ts b/src/object/equals.ts index b5b897f..8c6f200 100644 --- a/src/object/equals.ts +++ b/src/object/equals.ts @@ -4,32 +4,24 @@ import isObject from '~/is/isObject' export default function equal(origin: Record, ...list: Record[]): boolean { - let i: number, l: number, leftChain: Array, rightChain: Array + let i: number, l: number + let leftVisited: Set, rightVisited: Set if (!isObject(origin) || list.length === 0) { throw new Error('Need two or more arguments to compare') } - function compare2Objects(x: any, y: any) { - let p - - // remember that NaN === NaN returns false - // and isNaN(undefined) returns true - // isNumeric(x,y) - if (isNaN(x) && isNaN(y) && typeof x === 'number' && typeof y === 'number') { + function compare2Objects(x: any, y: any): boolean { + // Быстрая проверка NaN + if (typeof x === 'number' && typeof y === 'number' && Number.isNaN(x) && Number.isNaN(y)) { return true } - // Compare primitives and functions. - // Check if both arguments link to the same object. - // Especially useful on the step where we compare prototypes + // Базовое строгое равенство и кейсы для встроенных типов if (x === y) { return true } - // Works in case when functions are created in constructor. - // Comparing dates is a common scenario. Another built-ins? - // We can even handle functions passed across iframes if ( (typeof x === 'function' && typeof y === 'function') || (x instanceof Date && y instanceof Date) || @@ -40,73 +32,71 @@ export default function equal(origin: Record, ...list: Record< return x.toString() === y.toString() } - // At last checking prototypes as good as we can + // Должны быть объектами дальше if (!(x instanceof Object && y instanceof Object)) { return false } - if (Object.prototype.isPrototypeOf.call(x, y) || Object.prototype.isPrototypeOf.call(y, x)) { + // Прототипы/конструкторы + if (Object.getPrototypeOf(x) !== Object.getPrototypeOf(y)) { return false } - if (x.constructor !== y.constructor) { return false } - if (x.prototype !== y.prototype) { + // Проверка на циклические ссылки + if (leftVisited.has(x) || rightVisited.has(y)) { return false } - // Check for infinitive linking loops - if (leftChain.includes(x) || rightChain.includes(y)) { + // Быстрая проверка количества ключей (собственных) + const xKeys = Object.keys(x) + const yKeys = Object.keys(y) + if (xKeys.length !== yKeys.length) { return false } - // Quick checking of one object being a subset of another. - // todo: cache the structure of arguments[0] for performance - for (p in y) { - if (Object.prototype.isPrototypeOf.call(y, p) !== Object.prototype.isPrototypeOf.call(x, p)) { - return false - } else if (typeof y[p] !== typeof x[p]) { + // Сопоставление ключей по типам значений (дополнительно) + for (let k = 0; k < yKeys.length; k++) { + const p = yKeys[k] + if (!Object.prototype.hasOwnProperty.call(x, p)) { return false } - } - - for (p in x) { - if (Object.prototype.isPrototypeOf.call(y, p) !== Object.prototype.isPrototypeOf.call(x, p)) { - return false - } else if (typeof y[p] !== typeof x[p]) { + if (typeof y[p] !== typeof x[p]) { return false } + } - switch (typeof x[p]) { - case 'object': - case 'function': - leftChain.push(x) - rightChain.push(y) - - if (!compare2Objects(x[p], y[p])) { - return false - } - - leftChain.pop() - rightChain.pop() - break - - default: - if (x[p] !== y[p]) { - return false - } - break + // Глубокое сравнение + leftVisited.add(x) + rightVisited.add(y) + + for (let k = 0; k < xKeys.length; k++) { + const p = xKeys[k] + const xv = x[p] + const yv = y[p] + + const t = typeof xv + if (t === 'object' || t === 'function') { + if (!compare2Objects(xv, yv)) { + return false + } + } else { + if (xv !== yv) { + return false + } } } + leftVisited.delete(x) + rightVisited.delete(y) return true } for (i = 0, l = list.length; i < l; i++) { - leftChain = [] // @Todo: this can be cached - rightChain = [] + leftVisited = new Set() + rightVisited = new Set() if (!compare2Objects(origin, list[i])) { return false diff --git a/src/object/merge.ts b/src/object/merge.ts index 8b3f8e5..90c452f 100644 --- a/src/object/merge.ts +++ b/src/object/merge.ts @@ -1,71 +1,48 @@ import clone from '~/core/clone' import isObject from '~/is/isObject' +type record = Record + +// Узкое определение plain object без опоры на constructor +function isPlainObject(val: any): val is Record { + if (!isObject(val)) return false + const proto = Object.getPrototypeOf(val) + return proto === Object.prototype || proto === null +} + /** * Merge objects recursively - * - * var js = { - * companyName: 'JS', - * products: ['JS', 'GWT', 'Designer'], - * isSuperCool: true, - * office: { - * size: 2000, - * location: 'Palo Alto', - * isFun: true - * } - * }; - * - * var newStuff = { - * companyName: 'Jacksonville', - * products: ['JS', 'GWT', 'Designer', 'Touch', 'Animator'], - * office: { - * size: 40000, - * location: 'Redwood City' - * } - * }; - * - * const result = merge(js, newStuff); - * - * { - * companyName: 'Jacksonville', - * products: ['JS', 'GWT', 'Designer', 'Touch', 'Animator'], - * isSuperCool: true, - * office: { - * size: 40000, - * location: 'Redwood City', - * isFun: true - * } - * } */ -type record = Record - export default function merge>(original: Partial, ...values: Partial[]): T { - const ln = values.length - let i = 0, - object: Partial, - key: PropertyKey, - value: any, - sourceKey: any - - for (; i < ln; i++) { - object = values[i] + for (let i = 0; i < values.length; i++) { + const object = values[i] if (!isObject(object)) { continue } - for (key in object) { - value = object[key] - if (value && value.constructor === Object) { - sourceKey = original[key] - if (sourceKey && sourceKey.constructor === Object) { - merge(sourceKey, value) + + for (const key in object) { + if (!Object.prototype.hasOwnProperty.call(object, key)) continue + + const value = (object as any)[key] + const target = (original as any)[key] + + // Массивы: перезаписываем клоном (предсказуемее, чем неявные стратегии) + if (Array.isArray(value)) { + ;(original as any)[key] = clone(value) + continue + } + + if (isPlainObject(value)) { + if (isPlainObject(target)) { + merge(target, value) } else { - ;(original[key]) = clone(value) + ;(original as any)[key] = clone(value) } } else { - ;(original[key]) = value + ;(original as any)[key] = value } } } - return original + return original as T } diff --git a/src/object/removeEmpty.ts b/src/object/removeEmpty.ts index 4d55fa1..b7d4eec 100644 --- a/src/object/removeEmpty.ts +++ b/src/object/removeEmpty.ts @@ -9,41 +9,41 @@ import isEmpty from '~/is/isEmpty' * @return {{}} */ export default function removeEmpty(object: Record): Record { - let result: Record = {}, - key: PropertyKey + const result: Record = {} - for (key in object) { - if (object.hasOwnProperty(key) && !isEmpty(object[key])) { - if (isObject(object[key])) { - const r = removeEmpty(object[key]) - if (!isEmpty(r)) { - result[key] = r - } - - continue - } + for (const [key, value] of Object.entries(object)) { + if (isEmpty(value)) { + continue + } - if (Array.isArray(object[key])) { - const a: any[] = [] - object[key].forEach((v: any) => { - if (isString(v)) { - a.push(v) - } else { - const r = removeEmpty(v) - if (!isEmpty(r)) { - a.push(r) - } + // Сначала массивы, затем plain-объекты + if (Array.isArray(value)) { + const a: any[] = [] + for (const v of value) { + if (isString(v)) { + a.push(v) + } else { + const r = removeEmpty(v as any) + if (!isEmpty(r)) { + a.push(r) } - }) - if (!isEmpty(a)) { - result[key] = a } - - continue } + if (!isEmpty(a)) { + result[key] = a + } + continue + } - result[key] = object[key] + if (isObject(value)) { + const r = removeEmpty(value) + if (!isEmpty(r)) { + result[key] = r + } + continue } + + result[key] = value } return result diff --git a/src/structures/CollectionArray.ts b/src/structures/CollectionArray.ts index 4346311..4256dd0 100644 --- a/src/structures/CollectionArray.ts +++ b/src/structures/CollectionArray.ts @@ -24,24 +24,18 @@ export class CollectionArray { return [...this.items] } - public toString(callback?: (i: T) => any): string { - const data = this.toArray() - + public toString(callback?: (i: T) => unknown): string { if (callback && isFunction(callback)) { - return data.map(item => callback(item)).toString() + return this.items.map(item => callback(item)).toString() } - - return data.toString() + return this.items.toString() } - public map(callback: (i: T) => any): R[] { - const data = this.toArray() - + public map(callback: (i: T, index: number, array: readonly T[]) => R): R[] { if (!isFunction(callback)) { - throw Error('Invalid map-function: ' + toString(callback)) + throw Error(`Invalid map-function: ${toString(callback)}`) } - - return data.map(item => callback(item)) + return this.items.map((item, index, array) => callback(item, index, array)) } } diff --git a/src/structures/PriorityQueue.js b/src/structures/PriorityQueue.js deleted file mode 100644 index 5e61a63..0000000 --- a/src/structures/PriorityQueue.js +++ /dev/null @@ -1,60 +0,0 @@ -import { Queue } from './Queue' - -const DEFAULT_PRIORITY = 0 - -export class PriorityQueue extends Queue { - constructor() { - super() - //this.data[DEFAULT_PRIORITY] = [] - } - - push(item, priority = DEFAULT_PRIORITY) { - if (this.data[priority] === undefined) { - this.data[priority] = [] - } - this.data[priority].push(item) - } - - pull() { - if (this.isEmpty()) { - return null - } - - const m = Math.max(...this.data.keys()) - - console.log(m) - console.log(this.data) - - const result = this.data[m].shift() - - if (this.data[m].length === 0) { - this.data.splice(m, 1) - } - - return result - } - - peek() { - if (this.isEmpty()) { - return null - } - - const m = Math.max(...this.data.keys()) - - return this.data[m][0] - } - - toArray() { - return this.data.reduceRight((previousGroup, nextGroup) => { - return previousGroup.concat(nextGroup) - }, []) - } - - size() { - return this.data.reduce((previous, nextGroup) => { - return previous + nextGroup.length - }, 0) - } -} - -export default new PriorityQueue() diff --git a/src/structures/PriorityQueue.ts b/src/structures/PriorityQueue.ts new file mode 100644 index 0000000..1459e8e --- /dev/null +++ b/src/structures/PriorityQueue.ts @@ -0,0 +1,124 @@ +import isFunction from '~/is/isFunction' + +const DEFAULT_PRIORITY = 0 + +// Priority queue implemented as an array of buckets (queues) keyed by priority. +// Higher numeric priority is dequeued first. +export class PriorityQueue { + // Buckets indexed by priority: each bucket is a FIFO queue (array) of items. + private buckets: T[][] = [] + // Total number of items across all buckets. + private count = 0 + // Highest priority index that currently has (or last had) items; -1 means empty. + private maxPriority = -1 + + public push(item: T, priority: number = DEFAULT_PRIORITY): void { + if (priority < 0 || !Number.isFinite(priority)) { + throw new TypeError(`priority must be a non-negative finite number, got: ${priority}`) + } + + if (!this.buckets[priority]) { + this.buckets[priority] = [] + } + + this.buckets[priority].push(item) + this.count++ + + if (priority > this.maxPriority) { + this.maxPriority = priority + } + } + + public pull(): T | undefined { + if (this.isEmpty()) { + return undefined + } + + // Scan down from current highest priority to find the next non-empty bucket. + for (let p = this.maxPriority; p >= 0; p--) { + const bucket = this.buckets[p] + if (bucket && bucket.length > 0) { + const result = bucket.shift() as T + this.count-- + + // If the bucket becomes empty and this was the highest, adjust maxPriority. + if (bucket.length === 0 && p === this.maxPriority) { + this.recalculateMaxPriority() + } + + return result + } + } + + // No items found; normalize internal state. + this.maxPriority = -1 + return undefined + } + + public peek(): T | undefined { + if (this.isEmpty()) { + return undefined + } + + for (let p = this.maxPriority; p >= 0; p--) { + const bucket = this.buckets[p] + if (bucket && bucket.length > 0) { + return bucket[0] + } + } + + return undefined + } + + public toArray(): T[] { + // Flatten from high to low priority while preserving FIFO within each bucket. + const result: T[] = [] + for (let p = this.maxPriority; p >= 0; p--) { + const bucket = this.buckets[p] + if (bucket && bucket.length > 0) { + // Maintain order within the same priority. + for (let i = 0; i < bucket.length; i++) { + result.push(bucket[i]) + } + } + } + return result + } + + public size(): number { + return this.count + } + + public isEmpty(): boolean { + return this.count === 0 + } + + public reset(): void { + this.buckets = [] + this.count = 0 + this.maxPriority = -1 + } + + public toString(callback?: (i: T) => any): string { + const data = this.toArray() + + if (callback && isFunction(callback)) { + return data.map(item => callback(item)).toString() + } + + return data.toString() + } + + private recalculateMaxPriority(): void { + // Find the next lower priority that still has items. + while (this.maxPriority >= 0) { + const bucket = this.buckets[this.maxPriority] + if (bucket && bucket.length > 0) { + break + } + this.maxPriority-- + } + } +} + +export default new PriorityQueue() diff --git a/tests/date/elapsed.test.ts b/tests/date/elapsed.test.ts new file mode 100644 index 0000000..fa152bc --- /dev/null +++ b/tests/date/elapsed.test.ts @@ -0,0 +1,20 @@ +import { elapsed } from '~/date/elapsed' + +describe('elapsed function', () => { + it('should return 0 when both dates are the same', () => { + const date = new Date() + expect(elapsed(date, date)).toBe(0) + }) + + it('should return correct milliseconds difference when dateA is after dateB', () => { + const dateB = new Date('2023-08-24T10:00:00Z') + const dateA = new Date('2023-08-24T10:00:01Z') + expect(elapsed(dateA, dateB)).toBe(1000) + }) + + it('should return correct milliseconds difference when dateA is before dateB', () => { + const dateA = new Date('2023-08-24T10:00:00Z') + const dateB = new Date('2023-08-24T10:00:01Z') + expect(elapsed(dateA, dateB)).toBe(1000) + }) +}) diff --git a/tests/structures/CollectionArray.test.ts b/tests/structures/CollectionArray.test.ts new file mode 100644 index 0000000..68790ca --- /dev/null +++ b/tests/structures/CollectionArray.test.ts @@ -0,0 +1,91 @@ +// CollectionArray.test.ts +import { CollectionArray } from '~/structures/CollectionArray' + +describe('CollectionArray', () => { + describe('push', () => { + it('should add an item to the collection', () => { + const collection = new CollectionArray() + collection.push(1) + expect(collection.size()).toBe(1) + expect(collection.toArray()).toEqual([1]) + }) + }) + + describe('pull', () => { + it('should remove and return the last item from the collection', () => { + const collection = new CollectionArray() + collection.push(1) + collection.push(2) + const pulled = collection.pull() + expect(pulled).toBe(2) + expect(collection.size()).toBe(1) + expect(collection.toArray()).toEqual([1]) + }) + + it('should return undefined if the collection is empty', () => { + const collection = new CollectionArray() + const pulled = collection.pull() + expect(pulled).toBeUndefined() + }) + }) + + describe('size', () => { + it('should return the correct size of the collection', () => { + const collection = new CollectionArray() + expect(collection.size()).toBe(0) + collection.push('a') + expect(collection.size()).toBe(1) + collection.push('b') + expect(collection.size()).toBe(2) + }) + }) + + describe('isEmpty', () => { + it('should return true if the collection is empty', () => { + const collection = new CollectionArray() + expect(collection.isEmpty()).toBe(true) + }) + + it('should return false if the collection is not empty', () => { + const collection = new CollectionArray() + collection.push(1) + expect(collection.isEmpty()).toBe(false) + }) + }) + + describe('toArray', () => { + it('should return an array of items in the collection', () => { + const collection = new CollectionArray() + collection.push(1) + collection.push(2) + expect(collection.toArray()).toEqual([1, 2]) + }) + }) + + describe('toString', () => { + it('should return a comma-separated string of items in the collection', () => { + const collection = new CollectionArray() + collection.push(1) + collection.push(2) + expect(collection.toString()).toBe('1,2') + }) + + it('should use the callback function to transform items before converting to string', () => { + const collection = new CollectionArray() + collection.push(1) + collection.push(2) + const result = collection.toString(item => `Item: ${item}`) + expect(result).toBe('Item: 1,Item: 2') + }) + }) + + describe('map', () => { + it('should return a new array with items transformed by the callback function', () => { + const collection = new CollectionArray() + collection.push(1) + collection.push(2) + const mapped = collection.map(item => item * 2) + expect(mapped).toEqual([2, 4]) + }) + }) +}) diff --git a/tests/structures/PriorityQueue.test.ts b/tests/structures/PriorityQueue.test.ts new file mode 100644 index 0000000..99dc91c --- /dev/null +++ b/tests/structures/PriorityQueue.test.ts @@ -0,0 +1,139 @@ +import { PriorityQueue } from '~/structures/PriorityQueue' + +describe('PriorityQueue', () => { + const DEFAULT_PRIORITY = 0 + + describe('push', () => { + it('should add an item with the given priority', () => { + const pq = new PriorityQueue() + pq.push(10, 2) + expect(pq.size()).toBe(1) + expect(pq.toArray()).toEqual([10]) + }) + + it('should add an item with default priority when no priority is specified', () => { + const pq = new PriorityQueue() + pq.push(20) + expect(pq.size()).toBe(1) + expect(pq.toArray()).toEqual([20]) + }) + + it('should throw an error for invalid negative priority', () => { + const pq = new PriorityQueue() + expect(() => pq.push(30, -1)).toThrow(TypeError) + }) + + it('should throw an error for non-finite priority', () => { + const pq = new PriorityQueue() + expect(() => pq.push(40, Infinity)).toThrow(TypeError) + }) + }) + + describe('pull', () => { + it('should remove and return the highest priority item', () => { + const pq = new PriorityQueue() + pq.push(10, 1) + pq.push(20, 2) + pq.push(30, 0) + + expect(pq.pull()).toBe(20) + expect(pq.size()).toBe(2) + expect(pq.toArray()).toEqual([10, 30]) + }) + + it('should return undefined when pulling from an empty queue', () => { + const pq = new PriorityQueue() + expect(pq.pull()).toBeUndefined() + }) + }) + + describe('peek', () => { + it('should return the highest priority item without removing it', () => { + const pq = new PriorityQueue() + pq.push(10, 1) + pq.push(20, 2) + + expect(pq.peek()).toBe(20) + expect(pq.size()).toBe(2) + }) + + it('should return undefined when peeking into an empty queue', () => { + const pq = new PriorityQueue() + expect(pq.peek()).toBeUndefined() + }) + }) + + describe('toArray', () => { + it('should return an array of all items sorted by priority and insertion order', () => { + const pq = new PriorityQueue() + pq.push(10, 1) + pq.push(20, 0) + pq.push(30, 1) + + expect(pq.toArray()).toEqual([10, 30, 20]) + }) + + it('should return an empty array for an empty queue', () => { + const pq = new PriorityQueue() + expect(pq.toArray()).toEqual([]) + }) + }) + + describe('size', () => { + it('should return the number of items in the queue', () => { + const pq = new PriorityQueue() + pq.push(10, 1) + pq.push(20, 2) + + expect(pq.size()).toBe(2) + }) + + it('should return zero for an empty queue', () => { + const pq = new PriorityQueue() + expect(pq.size()).toBe(0) + }) + }) + + describe('isEmpty', () => { + it('should return true if the queue is empty', () => { + const pq = new PriorityQueue() + expect(pq.isEmpty()).toBe(true) + }) + + it('should return false if the queue is not empty', () => { + const pq = new PriorityQueue() + pq.push(10, 1) + expect(pq.isEmpty()).toBe(false) + }) + }) + + describe('reset', () => { + it('should clear all items from the queue', () => { + const pq = new PriorityQueue() + pq.push(10, 1) + pq.push(20, 2) + + pq.reset() + expect(pq.size()).toBe(0) + expect(pq.isEmpty()).toBe(true) + }) + }) + + describe('toString', () => { + it('should return a default string representation of the items', () => { + const pq = new PriorityQueue() + pq.push(10, 1) + pq.push(20, 0) + + expect(pq.toString()).toBe('10,20') + }) + + it('should return a custom string representation based on the callback', () => { + const pq = new PriorityQueue() + pq.push(10, 1) + pq.push(20, 0) + + expect(pq.toString(item => `Item: ${item}`)).toBe('Item: 10,Item: 20') + }) + }) +}) diff --git a/tsconfig.types.json b/tsconfig.types.json index 39fed08..ec39032 100644 --- a/tsconfig.types.json +++ b/tsconfig.types.json @@ -13,6 +13,7 @@ "declarationMap": true, "emitDeclarationOnly": true, + "allowJs": false, "stripInternal": true }, "include": ["src"], From a2ecbb94075c95fd493956d72ef160ed87955eee Mon Sep 17 00:00:00 2001 From: fureev Date: Sun, 24 Aug 2025 22:52:39 +0300 Subject: [PATCH 03/37] Add documentation for `bind` and `isFunction` utilities. --- docs/core/bind.md | 4 ++++ docs/is/isFunction.md | 4 ++++ 2 files changed, 8 insertions(+) create mode 100644 docs/core/bind.md create mode 100644 docs/is/isFunction.md diff --git a/docs/core/bind.md b/docs/core/bind.md new file mode 100644 index 0000000..315de7f --- /dev/null +++ b/docs/core/bind.md @@ -0,0 +1,4 @@ +# bind +Utility to bind a function with a given context and optionally prefilled arguments. + +Usage (TypeScript): diff --git a/docs/is/isFunction.md b/docs/is/isFunction.md new file mode 100644 index 0000000..3eb16ca --- /dev/null +++ b/docs/is/isFunction.md @@ -0,0 +1,4 @@ +# isFunction +Checks if a value is a function. + +Usage (TypeScript): From 7ae22d3281fadfcbc7c342298ad7835ac5ca4fb9 Mon Sep 17 00:00:00 2001 From: fureev Date: Sun, 24 Aug 2025 23:01:42 +0300 Subject: [PATCH 04/37] bump version to 5.0.0-alpha and update references in documentation --- docs/README.md | 2 +- docs/_coverpage.md | 2 +- docs/ru/README.md | 2 +- package.json | 2 +- src/config.ts | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/README.md b/docs/README.md index c48b14f..d7960c4 100644 --- a/docs/README.md +++ b/docs/README.md @@ -9,7 +9,7 @@ Add to `package.json` file the lib as dependency. ```json { "dependencies": { - "@feugene/mu": "^4.7" + "@feugene/mu": "^5.0" } } ``` diff --git a/docs/_coverpage.md b/docs/_coverpage.md index f378f82..e891d3e 100644 --- a/docs/_coverpage.md +++ b/docs/_coverpage.md @@ -1,6 +1,6 @@ ![logo](media/mu.png) -# µ 4.7.1 +# µ 5.0.0 > A modern JavaScript collection of utilities designed for modularity & performance without dependencies. diff --git a/docs/ru/README.md b/docs/ru/README.md index 23d6c28..4071568 100644 --- a/docs/ru/README.md +++ b/docs/ru/README.md @@ -3,7 +3,7 @@ ```json { "dependencies": { - "@feugene/mu": "^4.7.1" + "@feugene/mu": "^5.0.0" } } ``` diff --git a/package.json b/package.json index a9b9a6c..89f481f 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "description": "Helpful TS utilities without dependencies", "homepage": "https://github.com/efureev/mu", "license": "MIT", - "version": "4.7.2", + "version": "5.0.0-alpha", "author": { "name": "Eugene Fureev" }, diff --git a/src/config.ts b/src/config.ts index 3787516..9fc1467 100644 --- a/src/config.ts +++ b/src/config.ts @@ -1 +1 @@ -export const VERSION = '4.7.1' +export const VERSION = '5.0.0' From 62160146b319aeeadb1b8f921fad81916c3a1015 Mon Sep 17 00:00:00 2001 From: fureev Date: Sun, 24 Aug 2025 23:10:56 +0300 Subject: [PATCH 05/37] bump version to 5.0.0-alpha and update references in documentation --- .github/workflows/nodejs.yml | 4 ++-- dist/cjs/config.js | 2 +- dist/esm/config.mjs | 2 +- dist/types/config.d.ts | 2 +- package.json | 3 +-- 5 files changed, 6 insertions(+), 7 deletions(-) diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index f5e2b30..e9a8bbe 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -21,7 +21,7 @@ jobs: name: testing on Node strategy: matrix: - node-version: [ 20.x ] + node-version: [ 22.x ] steps: - uses: actions/checkout@v4 @@ -90,7 +90,7 @@ jobs: # Setup .npmrc file to publish to npm - uses: actions/setup-node@v4 with: - node-version: '20.x' + node-version: '22.x' registry-url: 'https://registry.npmjs.org' - run: npm install # Publish to npm diff --git a/dist/cjs/config.js b/dist/cjs/config.js index 8382ce7..fd8c4e8 100644 --- a/dist/cjs/config.js +++ b/dist/cjs/config.js @@ -1,5 +1,5 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.VERSION = void 0; -exports.VERSION = '4.7.1'; +exports.VERSION = '5.0.0'; //# sourceMappingURL=config.js.map \ No newline at end of file diff --git a/dist/esm/config.mjs b/dist/esm/config.mjs index b4eb90a..182a4a8 100644 --- a/dist/esm/config.mjs +++ b/dist/esm/config.mjs @@ -1,2 +1,2 @@ -export const VERSION = '4.7.1'; +export const VERSION = '5.0.0'; //# sourceMappingURL=config.mjs.map \ No newline at end of file diff --git a/dist/types/config.d.ts b/dist/types/config.d.ts index 215e8d2..4609718 100644 --- a/dist/types/config.d.ts +++ b/dist/types/config.d.ts @@ -1,2 +1,2 @@ -export declare const VERSION = "4.7.1"; +export declare const VERSION = "5.0.0"; //# sourceMappingURL=config.d.ts.map \ No newline at end of file diff --git a/package.json b/package.json index 89f481f..c82c69f 100644 --- a/package.json +++ b/package.json @@ -139,8 +139,7 @@ "lint": "prettier --check \"src/**/*\" \"tests/**/*\"", "lint:fix": "prettier --write \"src/**/*\" \"tests/**/*\"", "test": "jest", - "docsify": "docsify serve ./docs", - "prepack": "yarn build" + "docsify": "docsify serve ./docs" }, "sideEffects": false, "engines": { From 495b8fd0b6012dd613f586141de4e0759606b406 Mon Sep 17 00:00:00 2001 From: fureev Date: Thu, 4 Dec 2025 22:57:58 +0200 Subject: [PATCH 06/37] - Refactor `number` utility to handle edge cases (`NaN`, `Infinity`, `-0`) and improve formatting logic. - Update `numberRus` to use comma as decimal separator. - Adjust test cases to reflect updated formatting behavior. - Update `node` engine requirements in `package.json`. --- package.json | 2 +- src/format/number.ts | 51 +++++++++++++++++++++++------------------- tests/format/number.ts | 4 ++-- 3 files changed, 31 insertions(+), 26 deletions(-) diff --git a/package.json b/package.json index c82c69f..85cb0a2 100644 --- a/package.json +++ b/package.json @@ -143,7 +143,7 @@ }, "sideEffects": false, "engines": { - "node": "^20 || ^22 || ^24" + "node": "^22 || ^24 ||^25 || ^26" }, "typesVersions": { ">=4.2": { diff --git a/src/format/number.ts b/src/format/number.ts index afad963..e487b4f 100644 --- a/src/format/number.ts +++ b/src/format/number.ts @@ -1,4 +1,3 @@ -import isInteger from '~/is/isInteger' import type { TextNumber } from '~/internal/types' /** @@ -17,30 +16,36 @@ export default function number( thousandsSeparator: string = ',', clearDecimals: boolean = false ): string { - decimals = isNaN(decimals) ? 2 : Math.abs(decimals) + // Normalize decimals: integer, non-negative, default 2 on invalid + decimals = Number.isFinite(decimals) ? Math.abs(Math.trunc(decimals)) : 2 + const num = Number(value) - const sign = num < 0 ? '-' : '' - value = Math.abs(+num || 0) - - const intPart = parseInt(num.toFixed(decimals), 10) + '' - // const intPartStr = intPart + '' - const j = intPart.length > 3 ? intPart.length % 3 : 0 - - return ( - sign + - (j ? intPart.slice(0, j) + thousandsSeparator : '') + - intPart.slice(j).replace(/(\d{3})(?=\d)/g, '$1' + thousandsSeparator) + - (decimals - ? clearDecimals && isInteger(num) - ? '' - : decPoint + - Math.abs(num - +intPart) - .toFixed(decimals) - .slice(2) - : '') - ) + + // Edge cases first + if (Number.isNaN(num)) return 'NaN' + if (!Number.isFinite(num)) return String(num) + + const isNegZero = Object.is(num, -0) + const sign = num < 0 || isNegZero ? '-' : '' + const abs = Math.abs(num) + + // Build fixed string once and split into integer/fractional parts + const fixed = abs.toFixed(decimals) + let [intStr, fracStr = ''] = fixed.split('.') + + // Insert thousands separators into integer part + const j = intStr.length > 3 ? intStr.length % 3 : 0 + const intWithSep = + (j ? intStr.slice(0, j) + thousandsSeparator : '') + + intStr.slice(j).replace(/(\d{3})(?=\d)/g, `$1${thousandsSeparator}`) + + // Decide on fractional part rendering + const showFraction = decimals > 0 && !(clearDecimals && Number.isInteger(abs)) + const fraction = showFraction ? decPoint + fracStr : '' + + return sign + intWithSep + fraction } export function numberRus(value: TextNumber, decimals: number = 2): string { - return number(value, decimals, '.', ' ', true) + return number(value, decimals, ',', ' ', true) } diff --git a/tests/format/number.ts b/tests/format/number.ts index 2dba5c2..c3215a2 100644 --- a/tests/format/number.ts +++ b/tests/format/number.ts @@ -46,10 +46,10 @@ describe('numberRus', () => { expect(numberRus(100)).toBe('100') expect(numberRus(1000)).toBe('1 000') expect(numberRus(1001)).toBe('1 001') - expect(numberRus(1001.2)).toBe('1 001.20') + expect(numberRus(1001.2)).toBe('1 001,20') expect(numberRus(1001.0)).toBe('1 001') expect(numberRus('1001.00')).toBe('1 001') expect(numberRus('1001.00', 3)).toBe('1 001') - expect(numberRus('1001.01', 3)).toBe('1 001.010') + expect(numberRus('1001.01', 3)).toBe('1 001,010') }) }) From 2bf26c86c07d835111e8f17c7268c2d4db8cb4ab Mon Sep 17 00:00:00 2001 From: fureev Date: Thu, 4 Dec 2025 23:08:47 +0200 Subject: [PATCH 07/37] Add UTC date formatting and ISO parsing utilities; refine existing date helpers. --- src/date/elapsed.ts | 11 +++------- src/date/index.ts | 5 ++++- src/date/now.ts | 8 +++---- src/date/parseISO.ts | 47 +++++++++++++++++++++++++++++++++++++++++ src/date/toString.ts | 8 +++---- src/date/toStringUTC.ts | 23 ++++++++++++++++++++ 6 files changed, 84 insertions(+), 18 deletions(-) create mode 100644 src/date/parseISO.ts create mode 100644 src/date/toStringUTC.ts diff --git a/src/date/elapsed.ts b/src/date/elapsed.ts index 1e178b0..071790a 100644 --- a/src/date/elapsed.ts +++ b/src/date/elapsed.ts @@ -1,15 +1,10 @@ -import now from './now' - /** * Returns difference in milliseconds between dates * * @param {Date} dateA The first date. - * @param {Date} [dateB=new Date()] (optional) The second date. + * @param {Date} [dateB=new Date()] (optional) The second date. Evaluated in the same time basis as `dateA`. * @return {Number} The difference in milliseconds - * - * @memberof µ.date - * @author efureev */ -export function elapsed(dateA: Date, dateB: Date): number { - return Math.abs(+dateA - (+dateB || now())) +export function elapsed(dateA: Date, dateB: Date = new Date()): number { + return Math.abs(dateA.getTime() - dateB.getTime()) } diff --git a/src/date/index.ts b/src/date/index.ts index 8736fcd..65f156d 100644 --- a/src/date/index.ts +++ b/src/date/index.ts @@ -1,4 +1,7 @@ import now from './now' import dateToString from './toString' +import dateToStringUTC from './toStringUTC' +import parseISO from './parseISO' +export { elapsed } from './elapsed' -export { now, dateToString } +export { now, dateToString, dateToStringUTC, parseISO } diff --git a/src/date/now.ts b/src/date/now.ts index 89a36d4..218cdc0 100644 --- a/src/date/now.ts +++ b/src/date/now.ts @@ -1,8 +1,6 @@ -const nowFn = Date.now || (() => new Date().getTime()) - /** - * return Date now + * Return current time in milliseconds since the UNIX epoch. */ -export default function now() { - return nowFn() +export default function now(): number { + return Date.now() } diff --git a/src/date/parseISO.ts b/src/date/parseISO.ts new file mode 100644 index 0000000..5ecbcb7 --- /dev/null +++ b/src/date/parseISO.ts @@ -0,0 +1,47 @@ +/** + * Parse a date from a strict ISO 8601/RFC 3339 string or epoch milliseconds. + * Returns `Date` on success, otherwise `null`. + * + * Accepted examples: + * - 2025-12-04T22:58:00Z + * - 2025-12-04T22:58:00.123Z + * - 2025-12-04T22:58:00+03:00 + * - 2025-12-04 (treated as midnight UTC implicitly by JS engine) + * - "1733353080000" (epoch ms as string) + * - 1733353080000 (epoch ms as number) — use direct `new Date(ms)` instead of this helper + * + * Notes: + * - Non-ISO human strings like "12/04/2025" are rejected to avoid ambiguous local vs UTC parsing. + * - For strict timezone control, prefer passing/formatting in UTC (`toStringUTC`) or with `Intl`. + */ +export default function parseISO(input: string): Date | null { + if (typeof input !== 'string') { + return null + } + + const trimmed = input.trim() + if (trimmed.length === 0) { + return null + } + + // Epoch milliseconds in string form + if (/^\d{13}$/.test(trimmed)) { + const ms = Number(trimmed) + + return Number.isFinite(ms) ? new Date(ms) : null + } + + // Strict ISO 8601/RFC3339 pattern (date + optional time + timezone) + // yyyy-mm-dd + const isoDate = /^(\d{4})-(\d{2})-(\d{2})$/ + // yyyy-mm-ddThh:mm:ss(.sss)?(Z|[+-]hh:mm) + const isoDateTime = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(\.\d{1,3})?(Z|[+-]\d{2}:\d{2})$/ + + if (isoDate.test(trimmed) || isoDateTime.test(trimmed)) { + const d = new Date(trimmed) + + return Number.isNaN(d.getTime()) ? null : d + } + + return null +} diff --git a/src/date/toString.ts b/src/date/toString.ts index a71c2ca..43ef98a 100644 --- a/src/date/toString.ts +++ b/src/date/toString.ts @@ -1,11 +1,11 @@ import { padDateTime } from '~/format/pad' /** - * Date to string - * @param {Date|null} date - * @returns {string} + * Date to string in LOCAL time (no timezone suffix). + * Example: 2025-12-04T22:58:00 + * Note: this uses local getters and is affected by the environment timezone and DST rules. */ -export default function toString(date: Date = new Date()) { +export default function toString(date: Date = new Date()): string { return ( date.getFullYear() + '-' + diff --git a/src/date/toStringUTC.ts b/src/date/toStringUTC.ts new file mode 100644 index 0000000..dfba058 --- /dev/null +++ b/src/date/toStringUTC.ts @@ -0,0 +1,23 @@ +import { padDateTime } from '~/format/pad' + +/** + * Date to string in UTC time with explicit 'Z' suffix. + * Example: 2025-12-04T22:58:00Z + * This uses UTC getters and is timezone/DST agnostic for output. + */ +export default function toStringUTC(date: Date = new Date()): string { + return ( + date.getUTCFullYear() + + '-' + + padDateTime(date.getUTCMonth() + 1) + + '-' + + padDateTime(date.getUTCDate()) + + 'T' + + padDateTime(date.getUTCHours()) + + ':' + + padDateTime(date.getUTCMinutes()) + + ':' + + padDateTime(date.getUTCSeconds()) + + 'Z' + ) +} From 9a64d912f084f3da58840159665a1230fde7e449 Mon Sep 17 00:00:00 2001 From: fureev Date: Thu, 4 Dec 2025 23:16:01 +0200 Subject: [PATCH 08/37] Add `isBlank` and `isBlanks` utilities; enhance `isNumeric` and `isEven` logic to handle edge cases. Update `is` module exports. --- src/is/index.ts | 3 +++ src/is/isBlank.ts | 14 ++++++++++++++ src/is/isEven.ts | 14 ++++++++++++-- src/is/isNumeric.ts | 24 +++++++++++++++++++----- 4 files changed, 48 insertions(+), 7 deletions(-) create mode 100644 src/is/isBlank.ts diff --git a/src/is/index.ts b/src/is/index.ts index 4210a8c..f9dc229 100644 --- a/src/is/index.ts +++ b/src/is/index.ts @@ -20,6 +20,7 @@ import isString, { isStrings } from './isString' import isSymbol from './isSymbol' import isTypedArray from './isTypedArray' import isUrl from './isUrl' +import isBlank, { isBlanks } from './isBlank' export { isAdvancedType, @@ -32,6 +33,8 @@ export { isBlobs, isBoolean, isBooleans, + isBlank, + isBlanks, isBuffer, isDate, isDates, diff --git a/src/is/isBlank.ts b/src/is/isBlank.ts new file mode 100644 index 0000000..423cb03 --- /dev/null +++ b/src/is/isBlank.ts @@ -0,0 +1,14 @@ +/** + * Checks whether the given string is blank (empty or whitespace-only). + * Non-strings always return false. + */ +export default function isBlank(value: unknown): boolean { + return typeof value === 'string' && value.trim().length === 0 +} + +/** + * Variadic version: returns true if all provided arguments are blank strings. + */ +export function isBlanks(...values: unknown[]): boolean { + return !values.some(v => !isBlank(v)) +} diff --git a/src/is/isEven.ts b/src/is/isEven.ts index 854b10b..d998263 100644 --- a/src/is/isEven.ts +++ b/src/is/isEven.ts @@ -1,9 +1,19 @@ export default function isEven(value: any): boolean { - if (Number.isNaN(parseFloat(value)) || !Number.isFinite(Number(value))) { + // Accept only numbers or numeric strings + let n: number | null = null + if (typeof value === 'number') { + n = value + } else if (typeof value === 'string') { + const s = value.trim() + if (s.length === 0) return false + const parsed = Number(s) + if (!Number.isFinite(parsed)) return false + n = parsed + } else { return false } - return value % 2 === 0 + return n % 2 === 0 } /** diff --git a/src/is/isNumeric.ts b/src/is/isNumeric.ts index a50b144..1ec2b0e 100644 --- a/src/is/isNumeric.ts +++ b/src/is/isNumeric.ts @@ -1,12 +1,26 @@ /** - * This function evaluates if all the parameters are Numeric + * Checks whether the given value is a finite number or a numeric string. + * + * Rules: + * - Numbers: `Number.isFinite(value)` + * - Strings: trimmed, non-empty strings that convert to a finite number via `Number()` + * - Everything else: false */ export default function isNumeric(value: any): boolean { - return !(Array.isArray(value) || isNaN(parseFloat(value)) || !isFinite(value)) + if (typeof value === 'number') return Number.isFinite(value) + if (typeof value === 'string') { + const s = value.trim() + if (s.length === 0) { + return false + } + + const n = Number(s) + return Number.isFinite(n) + } + + return false } export function isNumerics(...parameters: any[]): boolean { - const invalid = parameters.some(parameter => !isNumeric(parameter)) - - return !invalid + return !parameters.some(parameter => !isNumeric(parameter)) } From 5dead297b37410d5e9e11a40f914fc3f2ae40982 Mon Sep 17 00:00:00 2001 From: fureev Date: Thu, 4 Dec 2025 23:21:17 +0200 Subject: [PATCH 09/37] Refactor `merge` utility for immutability, add forbidden key handling, and enhance key iteration with symbol support. --- src/object/merge.ts | 49 +++++++++++++++++++++++++++++++-------------- 1 file changed, 34 insertions(+), 15 deletions(-) diff --git a/src/object/merge.ts b/src/object/merge.ts index 90c452f..4a8a6de 100644 --- a/src/object/merge.ts +++ b/src/object/merge.ts @@ -10,39 +10,58 @@ function isPlainObject(val: any): val is Record { return proto === Object.prototype || proto === null } +const FORBIDDEN_KEYS = new Set(['__proto__', 'prototype', 'constructor']) + +function isForbiddenKey(key: PropertyKey): boolean { + return typeof key === 'string' ? FORBIDDEN_KEYS.has(key) : false +} + +function ownEnumerableKeys(obj: object): PropertyKey[] { + const keys: PropertyKey[] = Object.keys(obj) + const symbols = Object.getOwnPropertySymbols(obj).filter(sym => { + const desc = Object.getOwnPropertyDescriptor(obj, sym) + return !!desc?.enumerable + }) + return keys.concat(symbols) +} + /** * Merge objects recursively */ export default function merge>(original: Partial, ...values: Partial[]): T { + // Иммутабельность: не мутируем входной объект + const result: any = isPlainObject(original) ? { ...(original as any) } : (original as any) + for (let i = 0; i < values.length; i++) { - const object = values[i] - if (!isObject(object)) { - continue - } + const source = values[i] + if (!isObject(source)) continue - for (const key in object) { - if (!Object.prototype.hasOwnProperty.call(object, key)) continue + for (const key of ownEnumerableKeys(source)) { + if (isForbiddenKey(key)) continue - const value = (object as any)[key] - const target = (original as any)[key] + const value = (source as any)[key] + const target = (result as any)[key] - // Массивы: перезаписываем клоном (предсказуемее, чем неявные стратегии) + // Arrays: replace with a cloned array for predictability if (Array.isArray(value)) { - ;(original as any)[key] = clone(value) + ;(result as any)[key] = clone(value) continue } + // Plain objects: deep merge if (isPlainObject(value)) { if (isPlainObject(target)) { - merge(target, value) + ;(result as any)[key] = merge(target, value) } else { - ;(original as any)[key] = clone(value) + ;(result as any)[key] = clone(value) } - } else { - ;(original as any)[key] = value + continue } + + // Primitives and other types: direct assignment + ;(result as any)[key] = value } } - return original as T + return result as T } From ec43efc67f573de42af00b1ac36021fa96e94f26 Mon Sep 17 00:00:00 2001 From: fureev Date: Thu, 4 Dec 2025 23:36:41 +0200 Subject: [PATCH 10/37] Add comprehensive tests for `defaults` utility; refactor for immutability, forbidden key handling, and symbol support. --- src/object/defaults.ts | 100 +++++++++++++++++++--------- tests/object/defaults.extended.ts | 105 ++++++++++++++++++++++++++++++ 2 files changed, 175 insertions(+), 30 deletions(-) create mode 100644 tests/object/defaults.extended.ts diff --git a/src/object/defaults.ts b/src/object/defaults.ts index 2a69afe..f95e3e9 100644 --- a/src/object/defaults.ts +++ b/src/object/defaults.ts @@ -1,6 +1,41 @@ import clone from '~/core/clone' import isObject from '~/is/isObject' +type RecordAny = Record + +// Узкое определение plain object без опоры на constructor +function isPlainObject(val: any): val is RecordAny { + if (!isObject(val)) return false + const proto = Object.getPrototypeOf(val) + return proto === Object.prototype || proto === null +} + +const FORBIDDEN_KEYS = new Set(['__proto__', 'prototype', 'constructor']) + +function isForbiddenKey(key: PropertyKey): boolean { + return typeof key === 'string' ? FORBIDDEN_KEYS.has(key) : false +} + +function ownEnumerableKeys(obj: object): PropertyKey[] { + const keys: PropertyKey[] = Object.keys(obj) + const symbols = Object.getOwnPropertySymbols(obj).filter(sym => { + const desc = Object.getOwnPropertyDescriptor(obj, sym) + return !!desc?.enumerable + }) + return keys.concat(symbols) +} + +function shallowCopyWithSymbols(obj: T): T { + const res: any = { ...obj } + for (const sym of Object.getOwnPropertySymbols(obj)) { + const desc = Object.getOwnPropertyDescriptor(obj, sym) + if (desc?.enumerable) { + res[sym] = (obj as any)[sym] + } + } + return res +} + /** * Assigns own and inherited enumerable string keyed properties of source * objects to the destination object for all destination properties that @@ -15,39 +50,44 @@ import isObject from '~/is/isObject' * // => { 'a': 1, 'b': 2 } */ -export default function defaults( - origin: Record, - ...destinations: Record[] -): Record { - const ln = destinations.length - - let i = 0, - object, - key, - value, - sourceKey - - for (; i < ln; i++) { - object = destinations[i] - if (!isObject(object)) { - continue - } - for (key in object) { - value = object[key] - if (value && value.constructor === Object) { - sourceKey = origin[key] - if (sourceKey && sourceKey.constructor === Object) { - defaults(sourceKey, value) - } else { - origin[key] = clone(value) - } - } else { - if (!Object.prototype.hasOwnProperty.call(origin, key)) { - origin[key] = value +export default function defaults(origin: RecordAny, ...sources: RecordAny[]): RecordAny { + // Иммутабельность: не мутируем origin + const result: RecordAny = isPlainObject(origin) ? shallowCopyWithSymbols(origin) : origin + + for (const source of sources) { + if (!isObject(source)) continue + + for (const key of ownEnumerableKeys(source)) { + if (isForbiddenKey(key)) continue + + const srcVal = (source as any)[key] + const hasOwn = Object.prototype.hasOwnProperty.call(result, key) + const dstVal = hasOwn ? (result as any)[key] : undefined + + // Если ключ уже существует в результате + if (hasOwn) { + // Глубокая установка defaults для plain-objects + if (isPlainObject(dstVal) && isPlainObject(srcVal)) { + ;(result as any)[key] = defaults(dstVal, srcVal) } + // Во всех остальных случаях — ничего не делаем (не переопределяем, даже если undefined) + continue } + + // Ключа нет — можно задать значение по умолчанию из источника + if (isPlainObject(srcVal)) { + ;(result as any)[key] = defaults({}, srcVal) + continue + } + + if (Array.isArray(srcVal)) { + ;(result as any)[key] = clone(srcVal) + continue + } + + ;(result as any)[key] = srcVal } } - return origin + return result } diff --git a/tests/object/defaults.extended.ts b/tests/object/defaults.extended.ts new file mode 100644 index 0000000..9113b59 --- /dev/null +++ b/tests/object/defaults.extended.ts @@ -0,0 +1,105 @@ +import defaults from '~/object/defaults' + +describe('defaults - immutability and security', () => { + it('does not mutate origin or sources (immutability)', () => { + const origin = { a: undefined, nested: { x: 1 } } + const src = { a: 2, nested: { y: 3 } } + + const originSnapshot = JSON.parse(JSON.stringify(origin)) + const srcSnapshot = JSON.parse(JSON.stringify(src)) + + const res = defaults(origin, src) + + // result as expected: existing own key `a` (even if undefined) is not overridden; nested objects deep-default + expect(res).toEqual({ a: undefined, nested: { x: 1, y: 3 } }) + + // origin and src are not mutated + expect(origin).toEqual(originSnapshot) + expect(src).toEqual(srcSnapshot) + + // Ensure result is a new object (not the same reference) + expect(res).not.toBe(origin) + // Nested object should also be a new object + expect(res.nested).not.toBe(origin.nested) + }) + + it('ignores inherited properties from sources', () => { + const proto = { p: 1 } + const src = Object.create(proto) + src.own = 2 + + const res = defaults({ own: undefined, p: undefined }, src) + // `own` exists (undefined), so it must not be overridden by defaults + expect(res).toEqual({ own: undefined, p: undefined }) + }) + + it('ignores non-enumerable string keys from sources', () => { + const src: any = {} + Object.defineProperty(src, 'hidden', { value: 123, enumerable: false }) + src.visible = 456 + + const res = defaults({}, src) + expect(res).toEqual({ visible: 456 }) + // hidden should not be applied + expect(Object.prototype.hasOwnProperty.call(res, 'hidden')).toBe(false) + }) + + it('copies enumerable symbol keys from sources; ignores non-enumerable symbols', () => { + const symEnum = Symbol('enum') + const symHidden = Symbol('hidden') + const src: any = { [symEnum]: 10 } + Object.defineProperty(src, symHidden, { value: 20, enumerable: false }) + + const res = defaults({}, src) + expect(Object.getOwnPropertySymbols(res)).toContain(symEnum) + expect(res[symEnum]).toBe(10) + // Hidden symbol is ignored + expect(Object.getOwnPropertySymbols(res)).not.toContain(symHidden) + }) + + it('preserves origin enumerable symbol keys and does not override defined ones', () => { + const s = Symbol('s') + const origin: any = { a: undefined, [s]: 5 } + const res = defaults(origin, { a: 1, [s]: 7 }) + expect(res.a).toBeUndefined() + // symbol value remains from origin, because destination is defined + expect(res[s]).toBe(5) + }) + + it('arrays from sources are cloned, not referenced', () => { + const arr = [1, 2, 3] + const res = defaults({}, { a: arr }) + expect(res.a).toEqual([1, 2, 3]) + expect(res.a).not.toBe(arr) + }) + + it('nested defaults: only undefined fields are set; null stays intact', () => { + const res = defaults({ a: { x: undefined, y: null } }, { a: { x: 1, y: 2, z: 3 } }) + expect(res).toEqual({ a: { x: undefined, y: null, z: 3 } }) + }) + + it('guards against proto pollution via __proto__', () => { + const payload: any = JSON.parse('{"__proto__": {"polluted": true}}') + const before = ({} as any).polluted + + const res = defaults({}, payload) + + // Result should not have own polluted key and global prototype must be safe + expect((res as any).polluted).toBeUndefined() + expect(({} as any).polluted).toBe(before) + }) + + it('guards against proto pollution via constructor/prototype', () => { + const payload: any = { + constructor: { + prototype: { + hacked: true, + }, + }, + } + + const res = defaults({}, payload) + expect((res as any).hacked).toBeUndefined() + expect(({} as any).hacked).toBeUndefined() + }) +}) From 44c1b6eaa1a2e13930ea3832c45508316e2c0932 Mon Sep 17 00:00:00 2001 From: fureev Date: Thu, 4 Dec 2025 23:41:41 +0200 Subject: [PATCH 11/37] Refactor `clone` utility for improved clarity and modern JavaScript practices; enhance handling of plain objects, symbols, and deep structures. --- src/core/clone.ts | 92 +++++++++++++++++++++++++++-------------------- 1 file changed, 54 insertions(+), 38 deletions(-) diff --git a/src/core/clone.ts b/src/core/clone.ts index 8b83929..4b00212 100644 --- a/src/core/clone.ts +++ b/src/core/clone.ts @@ -1,69 +1,85 @@ import isDate from '~/is/isDate' -const enumerables = ['valueOf', 'toLocaleString', 'toString', 'constructor'] +// Helpers +function isPlainObject(val: any): val is Record { + if (val === null || typeof val !== 'object') return false + const proto = Object.getPrototypeOf(val) + return proto === Object.prototype || proto === null +} + +function ownEnumerableKeys(obj: object): PropertyKey[] { + const keys: PropertyKey[] = Object.keys(obj) + const symbols = Object.getOwnPropertySymbols(obj).filter(sym => { + const desc = Object.getOwnPropertyDescriptor(obj, sym) + return !!desc?.enumerable + }) + return keys.concat(symbols) +} /** - * Clone simple variables including array, {}-like objects, DOM nodes and Date without - * keeping the old reference. A reference for the object itself is returned if it's not - * a direct descendant of Object. + * Deep clone with Node 22 strategy. + * - Plain objects and arrays: recursively clone over own enumerable string and symbol keys only. + * - Date: cloned by value via new Date(time). + * - DOM nodes (when cloneDom=true): uses node.cloneNode(true). + * - Other objects (Map, Set, RegExp, TypedArrays, ArrayBuffer, URL, etc.): + * attempted via structuredClone; on failure, return original reference. + * - Functions/classes/instances with custom prototypes: returned as-is (by reference). * - * @param {Object} item The variable to clone - * @param {Boolean} [cloneDom=true] `true` to clone DOM nodes. - * @return {Object} clone + * Limitations: + * - Accessors/descriptors are not preserved; enumerable data properties only for plain objects. + * - Prototypes for plain objects are normalized to Object.prototype (or null if origin had null-proto). */ export default function clone>(item: T, cloneDom: boolean = true): T { - if (item === null || item === undefined) { - return item + // Nullish or primitive + if (item == null || (typeof item !== 'object' && typeof item !== 'function')) { + return item as T } + // DOM Node clone (duck-typed) // @ts-ignore - if (cloneDom && item.nodeType && item.cloneNode) { + if (cloneDom && (item as any).nodeType && typeof (item as any).cloneNode === 'function') { // @ts-ignore - return item.cloneNode(true) + return (item as any).cloneNode(true) } // Date if (isDate(item)) { // @ts-ignore - return new Date(item.getTime()) + return new Date((item as Date).getTime()) } - let i: number, j: number, k - // Array if (Array.isArray(item)) { - i = item.length - let newClone: Record = [] - - while (i--) { - newClone[i] = clone(item[i], cloneDom) + const src = item as unknown as any[] + const out: any[] = new Array(src.length) + for (let i = 0; i < src.length; i++) { + out[i] = clone(src[i], cloneDom) } - - return newClone + return out as unknown as T } - const type = Object.prototype.toString.call(item) - // Plain Object - if (type === '[object Object]' && (item as Object).constructor === Object) { - const src = item as Record - const newClone: Record = {} - - for (const key in src) { - if (Object.prototype.hasOwnProperty.call(src, key)) { - newClone[key] = clone(src[key], cloneDom) - } + if (isPlainObject(item)) { + const src = item as unknown as Record + const out: Record = Object.create(Object.getPrototypeOf(src)) + for (const key of ownEnumerableKeys(src)) { + out[key] = clone(src[key], cloneDom) } + return out as unknown as T + } - for (const k of enumerables) { - if (Object.prototype.hasOwnProperty.call(src, k)) { - newClone[k] = (src as Record)[k] - } + // For other complex objects (Map, Set, RegExp, TypedArrays, etc.) + // try structuredClone if available; fall back to reference if it throws. + try { + // @ts-ignore Node 22 global + if (typeof structuredClone === 'function') { + // @ts-ignore + return structuredClone(item) } - - // @ts-ignore - return newClone + } catch (_) { + // fallthrough to return original item } + // As-is for functions/classes and unsupported cases return item } From 0df7d6643c1f495add68d92267fd56553f8a682f Mon Sep 17 00:00:00 2001 From: fureev Date: Fri, 5 Dec 2025 00:00:23 +0200 Subject: [PATCH 12/37] Enhance object utilities with forbidden key handling to prevent prototype pollution; update `pick`, `pathToObject`, and `fromQueryString`. --- src/object/fromQueryString.ts | 20 +++++++++++++++++++- src/object/pathToObject.ts | 14 +++++++++++++- src/object/pick.ts | 9 ++++++--- 3 files changed, 38 insertions(+), 5 deletions(-) diff --git a/src/object/fromQueryString.ts b/src/object/fromQueryString.ts index 34d3d56..91109ce 100644 --- a/src/object/fromQueryString.ts +++ b/src/object/fromQueryString.ts @@ -75,6 +75,12 @@ export default function fromQueryString( key: string, nextKey: TextNumber + const FORBIDDEN = new Set(['__proto__', 'prototype', 'constructor']) + + function isForbiddenKey(key: string): boolean { + return FORBIDDEN.has(key) + } + for (i = 0, ln = parts.length; i < ln; i++) { part = parts[i] @@ -101,7 +107,10 @@ export default function fromQueryString( object[name].push(value) } else { - object[name] = value + // Guard against proto-pollution on top-level name + if (!isForbiddenKey(name)) { + object[name] = value + } } } else { matchedKeys = name.match(keyRe) @@ -114,6 +123,10 @@ export default function fromQueryString( // name = matchedName[0] + if (isForbiddenKey(name)) { + // Skip this part entirely if top-level name is forbidden + continue + } keys = [] if (matchedKeys === null) { @@ -134,6 +147,11 @@ export default function fromQueryString( for (j = 0, subLn = keys.length; j < subLn; j++) { key = keys[j] + if (isForbiddenKey(key)) { + // Skip building forbidden segments + break + } + if (j === subLn - 1) { if (Array.isArray(temporary) && key === '') { temporary.push(value) diff --git a/src/object/pathToObject.ts b/src/object/pathToObject.ts index 83d618a..54b9b81 100644 --- a/src/object/pathToObject.ts +++ b/src/object/pathToObject.ts @@ -1,6 +1,12 @@ import isEmpty from '~/is/isEmpty' import isObject from '~/is/isObject' +const FORBIDDEN = new Set(['__proto__', 'prototype', 'constructor']) + +function isForbiddenKey(key: PropertyKey): boolean { + return typeof key === 'string' ? FORBIDDEN.has(key) : false +} + export default function pathToObject( paths: string = '', value: any = null, @@ -20,13 +26,19 @@ export default function pathToObject( for (let i = 0; i < pathsCount; i++) { const k = pathsArray[i] + // Security: skip forbidden keys to avoid prototype pollution + if (isForbiddenKey(k)) { + return object + } + if (isObject(current)) { if (isObject(current[k])) { if (pathsCount - 1 === i) { current[k] = value } } else { - if ((current.hasOwnProperty(k) && replaceOnExist) || !current.hasOwnProperty(k)) { + const hasOwn = Object.prototype.hasOwnProperty.call(current, k) + if ((hasOwn && replaceOnExist) || !hasOwn) { current[k] = pathsCount - 1 === i ? value : {} } } diff --git a/src/object/pick.ts b/src/object/pick.ts index c60e51c..856a02d 100644 --- a/src/object/pick.ts +++ b/src/object/pick.ts @@ -23,14 +23,17 @@ import select from './select' * * pick(object, ['d.1.id', b]); // => { 'd.1.id': 2, b: 2 } */ -export default function pick(object: Record, paths: string[]): Record { +export default function pick(object: Record, paths: string[] | null | undefined): Record { const res: Record = {} - if (isEmpty(object)) { + if (isEmpty(object) || !Array.isArray(paths) || paths.length === 0) { return res } forEach(paths, v => { - res[v] = select(object, v) + const val = select(object, v) + if (val !== undefined) { + res[v] = val + } }) return res From fa76928145245aacff008026801c518d3ec9b9b9 Mon Sep 17 00:00:00 2001 From: fureev Date: Fri, 5 Dec 2025 00:09:18 +0200 Subject: [PATCH 13/37] Refactor object utilities for modern JavaScript practices; replace `Object.prototype.hasOwnProperty` calls with `Object.hasOwn`, simplify `values`, and optimize query string parsing in `fromQueryString` and `toQueryString`. --- src/object/defaults.ts | 2 +- src/object/fromQueryString.ts | 152 ++++++++++++++-------------------- src/object/pathToObject.ts | 2 +- src/object/toQueryObjects.ts | 2 +- src/object/toQueryString.ts | 15 ++-- src/object/values.ts | 37 +-------- 6 files changed, 74 insertions(+), 136 deletions(-) diff --git a/src/object/defaults.ts b/src/object/defaults.ts index f95e3e9..48bce3d 100644 --- a/src/object/defaults.ts +++ b/src/object/defaults.ts @@ -61,7 +61,7 @@ export default function defaults(origin: RecordAny, ...sources: RecordAny[]): Re if (isForbiddenKey(key)) continue const srcVal = (source as any)[key] - const hasOwn = Object.prototype.hasOwnProperty.call(result, key) + const hasOwn = Object.hasOwn(result, key) const dstVal = hasOwn ? (result as any)[key] : undefined // Если ключ уже существует в результате diff --git a/src/object/fromQueryString.ts b/src/object/fromQueryString.ts index 91109ce..a9ea9ff 100644 --- a/src/object/fromQueryString.ts +++ b/src/object/fromQueryString.ts @@ -4,7 +4,7 @@ import type { TextNumber } from '~/internal/types' const queryRe = /^\?/ const plusRe = /\+/g -const keyRe = /(\[):?([^\]]*)\]/g +const keyRe = /(\[):?([^\]]*)]/g const nameRe = /^([^[]+)/ // eslint-disable-line no-useless-escape type FromQueryStringOptions = { @@ -58,22 +58,16 @@ export default function fromQueryString( return {} } - let parts = queryString.replace(queryRe, '').split('&'), - object = Object.create(null), - temporary, - components: string[], - name: string, - value, - i, - ln, - part: string, - j, - subLn, - matchedKeys: RegExpMatchArray | null, - matchedName: RegExpMatchArray | null, - keys: string[], - key: string, - nextKey: TextNumber + const qs = String(queryString).replace(queryRe, '') + const params = new URLSearchParams(qs) + const object = Object.create(null) as Record + + let temporary: any + let matchedKeys: RegExpMatchArray | null + let matchedName: RegExpMatchArray | null + let keys: string[] + let key: string + let nextKey: TextNumber const FORBIDDEN = new Set(['__proto__', 'prototype', 'constructor']) @@ -81,93 +75,71 @@ export default function fromQueryString( return FORBIDDEN.has(key) } - for (i = 0, ln = parts.length; i < ln; i++) { - part = parts[i] - - if (part.length > 0) { - components = part.split('=') - name = components[0] - name = name.replace(plusRe, '%20') - name = options.decodeName ? decodeURIComponent(name) : name - - value = components[1] - - if (value !== undefined) { - value = value.replace(plusRe, '%20') - value = decodeURIComponent(value) - } else { - value = '' - } - - if (!recursive) { - if (Object.prototype.hasOwnProperty.call(object, name)) { - if (!Array.isArray(object[name])) { - object[name] = [object[name]] - } + for (const [rawName, rawValue] of params) { + const name = options.decodeName ? rawName : rawName // already decoded by URLSearchParams + const value = rawValue // already decoded - object[name].push(value) - } else { - // Guard against proto-pollution on top-level name - if (!isForbiddenKey(name)) { - object[name] = value - } + if (!recursive) { + if (Object.hasOwn(object, name)) { + if (!Array.isArray(object[name])) { + object[name] = [object[name]] } + object[name].push(value) } else { - matchedKeys = name.match(keyRe) - matchedName = name.match(nameRe) - - // - if (!matchedName) { - throw new Error('[fromQueryString] Malformed query string given, failed parsing name from "' + part + '"') - } - // - - name = matchedName[0] - if (isForbiddenKey(name)) { - // Skip this part entirely if top-level name is forbidden - continue - } - keys = [] - - if (matchedKeys === null) { + if (!isForbiddenKey(name)) { object[name] = value - continue } + } + continue + } - for (j = 0, subLn = matchedKeys.length; j < subLn; j++) { - key = matchedKeys[j] - key = key.length === 2 ? '' : key.substring(1, key.length - 1) - keys.push(key) - } + matchedKeys = name.match(keyRe) + matchedName = name.match(nameRe) - keys.unshift(name) + if (!matchedName) { + // skip malformed entries instead of throwing to be more forgiving + continue + } + + const top = matchedName[0] + if (isForbiddenKey(top)) { + continue + } + keys = [] - temporary = object + if (matchedKeys === null) { + object[top] = value + continue + } - for (j = 0, subLn = keys.length; j < subLn; j++) { - key = keys[j] + for (let j = 0, subLn = matchedKeys.length; j < subLn; j++) { + key = matchedKeys[j] + key = key.length === 2 ? '' : key.substring(1, key.length - 1) + keys.push(key) + } - if (isForbiddenKey(key)) { - // Skip building forbidden segments - break - } + keys.unshift(top) - if (j === subLn - 1) { - if (Array.isArray(temporary) && key === '') { - temporary.push(value) - } else { - temporary[key] = value - } - } else { - if (temporary[key] === undefined || typeof temporary[key] === 'string') { - nextKey = keys[j + 1] + temporary = object - temporary[key] = isNumeric(nextKey) || nextKey === '' ? [] : {} - } + for (let j = 0, subLn = keys.length; j < subLn; j++) { + key = keys[j] + if (isForbiddenKey(key)) { + break + } - temporary = temporary[key] - } + if (j === subLn - 1) { + if (Array.isArray(temporary) && key === '') { + temporary.push(value) + } else { + temporary[key] = value + } + } else { + if (temporary[key] === undefined || typeof temporary[key] === 'string') { + nextKey = keys[j + 1] + temporary[key] = isNumeric(nextKey) || nextKey === '' ? [] : {} } + temporary = temporary[key] } } } diff --git a/src/object/pathToObject.ts b/src/object/pathToObject.ts index 54b9b81..1f402be 100644 --- a/src/object/pathToObject.ts +++ b/src/object/pathToObject.ts @@ -37,7 +37,7 @@ export default function pathToObject( current[k] = value } } else { - const hasOwn = Object.prototype.hasOwnProperty.call(current, k) + const hasOwn = Object.hasOwn(current, k) if ((hasOwn && replaceOnExist) || !hasOwn) { current[k] = pathsCount - 1 === i ? value : {} } diff --git a/src/object/toQueryObjects.ts b/src/object/toQueryObjects.ts index 809e6b9..b0e8881 100644 --- a/src/object/toQueryObjects.ts +++ b/src/object/toQueryObjects.ts @@ -68,7 +68,7 @@ export default function toQueryObjects( if (isObject(value)) { const valueObject = value as oType for (i in value) { - if (Object.prototype.hasOwnProperty.call(value, i)) { + if (Object.hasOwn(value, i)) { if (recursive) { objects = objects.concat(toQueryObjects(name + '[' + i + ']', valueObject[i], true)) } else { diff --git a/src/object/toQueryString.ts b/src/object/toQueryString.ts index 7c7a14a..2d5442d 100644 --- a/src/object/toQueryString.ts +++ b/src/object/toQueryString.ts @@ -49,19 +49,16 @@ export default function toQueryString( options: ToQueryStringOptions = { encodeName: true } ) { let parameterObjects: Record[] = [] - let i, j, ln, parameterObject, value - for (i in object) { - if (Object.prototype.hasOwnProperty.call(object, i)) { - parameterObjects = parameterObjects.concat(toQueryObjects(i, object[i], recursive)) - } + for (const [k, v] of Object.entries(object)) { + parameterObjects = parameterObjects.concat(toQueryObjects(k, v, recursive)) } - const parameters = [] + const parameters: string[] = [] - for (j = 0, ln = parameterObjects.length; j < ln; j++) { - parameterObject = parameterObjects[j] - value = parameterObject.value + for (let j = 0, ln = parameterObjects.length; j < ln; j++) { + const parameterObject = parameterObjects[j] + let value = parameterObject.value if (isBoolean(value)) { value = booleanToNumber(value) diff --git a/src/object/values.ts b/src/object/values.ts index aabd5e5..384be79 100644 --- a/src/object/values.ts +++ b/src/object/values.ts @@ -1,39 +1,8 @@ -import keys from '~/core/keys' - -/** - * The base implementation of `values` - * - * @private - * @param {Object} object The object to query. - * @param {Array} properties The property names to get values for. - * @returns {Object} Returns the array of property values. - */ -function baseValues(object: Record, properties: string[]) { - return properties.map((key: string) => object[key]) -} - /** * Creates an array of the own enumerable string keyed property values of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * values(new Foo); - * // => [1, 2] (iteration order is not guaranteed) - * - * values('hi'); - * // => ['h', 'i'] + * Falls back to empty array for null/undefined. */ export default function values(object?: any): any[] { - return object == null ? [] : baseValues(object, keys(object)) + if (object == null) return [] + return Object.values(Object(object)) } From dba6289725aad40138d6a230e545f2ac8fab4789 Mon Sep 17 00:00:00 2001 From: fureev Date: Fri, 5 Dec 2025 00:19:19 +0200 Subject: [PATCH 14/37] Refactor for ESM-first exports across utilities, optimize `isObject` for modern environments, and improve `number` formatting with hoisted regex. --- src/array/index.ts | 17 ++++---- src/date/index.ts | 11 +++--- src/format/number.ts | 5 ++- src/is/index.ts | 92 ++++++++++++-------------------------------- src/is/isObject.ts | 23 +++++------ src/object/index.ts | 55 +++++++++----------------- 6 files changed, 69 insertions(+), 134 deletions(-) diff --git a/src/array/index.ts b/src/array/index.ts index a6c55e5..850861c 100644 --- a/src/array/index.ts +++ b/src/array/index.ts @@ -1,9 +1,8 @@ -import clear from './clear' -import arrayEach from './arrayEach' -import difference from './difference' -import arraysEquals from './equals' -import random from './random' -import symmetricalDifference from './symmetricalDifference' -import intersect, { intersectAll } from './intersect' - -export { clear, arrayEach, difference, arraysEquals, random, symmetricalDifference, intersect, intersectAll } +// ESM-first, tree-shaking-friendly direct re-exports +export { default as clear } from './clear' +export { default as arrayEach } from './arrayEach' +export { default as difference } from './difference' +export { default as arraysEquals } from './equals' +export { default as random } from './random' +export { default as symmetricalDifference } from './symmetricalDifference' +export { default as intersect, intersectAll } from './intersect' diff --git a/src/date/index.ts b/src/date/index.ts index 65f156d..2f1494c 100644 --- a/src/date/index.ts +++ b/src/date/index.ts @@ -1,7 +1,6 @@ -import now from './now' -import dateToString from './toString' -import dateToStringUTC from './toStringUTC' -import parseISO from './parseISO' +// ESM-first, tree-shaking-friendly re-exports without intermediate imports +export { default as now } from './now' +export { default as dateToString } from './toString' +export { default as dateToStringUTC } from './toStringUTC' +export { default as parseISO } from './parseISO' export { elapsed } from './elapsed' - -export { now, dateToString, dateToStringUTC, parseISO } diff --git a/src/format/number.ts b/src/format/number.ts index e487b4f..4947ed0 100644 --- a/src/format/number.ts +++ b/src/format/number.ts @@ -1,5 +1,8 @@ import type { TextNumber } from '~/internal/types' +// Hoisted constant regex to avoid re-allocating per call +const GROUPS_RE = /(\d{3})(?=\d)/g + /** * Formatting number * @param {String|Number} value @@ -37,7 +40,7 @@ export default function number( const j = intStr.length > 3 ? intStr.length % 3 : 0 const intWithSep = (j ? intStr.slice(0, j) + thousandsSeparator : '') + - intStr.slice(j).replace(/(\d{3})(?=\d)/g, `$1${thousandsSeparator}`) + intStr.slice(j).replace(GROUPS_RE, `$1${thousandsSeparator}`) // Decide on fractional part rendering const showFraction = decimals > 0 && !(clearDecimals && Number.isInteger(abs)) diff --git a/src/is/index.ts b/src/is/index.ts index f9dc229..92128ab 100644 --- a/src/is/index.ts +++ b/src/is/index.ts @@ -1,68 +1,24 @@ -import isArguments from './isArguments' -import isArray, { isArrays } from './isArray' -import isArrayLike from './isArrayLike' -import isBasicType, { isAdvancedType } from './isBasicType' -import isBlob, { isBlobs } from './isBlob' -import isBoolean, { isBooleans } from './isBoolean' -import isBuffer from './isBuffer' -import isDate, { isDates } from './isDate' -import isEmpty from './isEmpty' -import isEven, { isEvens } from './isEven' -import isFloat, { isFloatCanonical, isFloats } from './isFloat' -import isFunction, { isFunctions } from './isFunction' -import isInteger, { isIntegers } from './isInteger' -import isLength from './isLength' -import isNil, { isNils, isNull, isNulls } from './isNil' -import isNumeric, { isNumerics } from './isNumeric' -import isObject, { isEmptyObject, isObjectLike, isObjects } from './isObject' -import isPrototype from './isPrototype' -import isString, { isStrings } from './isString' -import isSymbol from './isSymbol' -import isTypedArray from './isTypedArray' -import isUrl from './isUrl' -import isBlank, { isBlanks } from './isBlank' - -export { - isAdvancedType, - isArguments, - isArray, - isArrayLike, - isArrays, - isBasicType, - isBlob, - isBlobs, - isBoolean, - isBooleans, - isBlank, - isBlanks, - isBuffer, - isDate, - isDates, - isEmpty, - isEmptyObject, - isEven, - isEvens, - isFloat, - isFloatCanonical, - isFloats, - isFunction, - isFunctions, - isInteger, - isIntegers, - isLength, - isNil, - isNils, - isNull, - isNulls, - isNumeric, - isNumerics, - isObject, - isObjectLike, - isObjects, - isPrototype, - isString, - isStrings, - isSymbol, - isTypedArray, - isUrl, -} +// ESM-first, tree-shaking-friendly direct re-exports +export { default as isArguments } from './isArguments' +export { default as isArray, isArrays } from './isArray' +export { default as isArrayLike } from './isArrayLike' +export { default as isBasicType, isAdvancedType } from './isBasicType' +export { default as isBlob, isBlobs } from './isBlob' +export { default as isBoolean, isBooleans } from './isBoolean' +export { default as isBuffer } from './isBuffer' +export { default as isDate, isDates } from './isDate' +export { default as isEmpty } from './isEmpty' +export { default as isEven, isEvens } from './isEven' +export { default as isFloat, isFloatCanonical, isFloats } from './isFloat' +export { default as isFunction, isFunctions } from './isFunction' +export { default as isInteger, isIntegers } from './isInteger' +export { default as isLength } from './isLength' +export { default as isNil, isNils, isNull, isNulls } from './isNil' +export { default as isNumeric, isNumerics } from './isNumeric' +export { default as isObject, isEmptyObject, isObjectLike, isObjects } from './isObject' +export { default as isPrototype } from './isPrototype' +export { default as isString, isStrings } from './isString' +export { default as isSymbol } from './isSymbol' +export { default as isTypedArray } from './isTypedArray' +export { default as isUrl } from './isUrl' +export { default as isBlank, isBlanks } from './isBlank' diff --git a/src/is/isObject.ts b/src/is/isObject.ts index 866836b..e8ef95d 100644 --- a/src/is/isObject.ts +++ b/src/is/isObject.ts @@ -1,16 +1,13 @@ -const isO = - Object.prototype.toString.call(null) === '[object Object]' - ? function (value: any): boolean { - // check ownerDocument here as well to exclude DOM nodes - return ( - value != null && - Object.prototype.toString.call(value) === '[object Object]' && - value.ownerDocument === undefined - ) - } - : function (value: any): boolean { - return Object.prototype.toString.call(value) === '[object Object]' - } +// Modern, single-path implementation for Node 22+/modern browsers +// Excludes DOM nodes by checking ownerDocument +const isO = function (value: any): boolean { + return ( + value != null && + Object.prototype.toString.call(value) === '[object Object]' && + // ownerDocument exists on DOM nodes; we exclude such objects + (value as any).ownerDocument === undefined + ) +} /** * This function evaluates whether all parameters are objects diff --git a/src/object/index.ts b/src/object/index.ts index e4dd819..cb9a66c 100644 --- a/src/object/index.ts +++ b/src/object/index.ts @@ -1,37 +1,18 @@ -import defaults from './defaults' -import objectsEqual from './equals' -import filter from './filter' -import flip from './flip' -import fromQueryString from './fromQueryString' -import getSize from './getSize' -import logicalAnd from './logicalAnd' -import merge from './merge' -import pathToObject from './pathToObject' -import pick from './pick' -import remove from './remove' -import removeEmpty from './removeEmpty' -import select from './select' -import sum from './sum' -import toQueryObjects from './toQueryObjects' -import toQueryString from './toQueryString' -import values from './values' - -export { - defaults, - objectsEqual, - filter, - flip, - fromQueryString, - getSize, - logicalAnd, - merge, - pathToObject, - pick, - remove, - removeEmpty, - select, - sum, - toQueryObjects, - toQueryString, - values, -} +// ESM-first, tree-shaking-friendly direct re-exports +export { default as defaults } from './defaults' +export { default as objectsEqual } from './equals' +export { default as filter } from './filter' +export { default as flip } from './flip' +export { default as fromQueryString } from './fromQueryString' +export { default as getSize } from './getSize' +export { default as logicalAnd } from './logicalAnd' +export { default as merge } from './merge' +export { default as pathToObject } from './pathToObject' +export { default as pick } from './pick' +export { default as remove } from './remove' +export { default as removeEmpty } from './removeEmpty' +export { default as select } from './select' +export { default as sum } from './sum' +export { default as toQueryObjects } from './toQueryObjects' +export { default as toQueryString } from './toQueryString' +export { default as values } from './values' From 0e0db8dd227dd0966272e909824f4db204d5b881 Mon Sep 17 00:00:00 2001 From: fureev Date: Fri, 5 Dec 2025 00:25:15 +0200 Subject: [PATCH 15/37] Refactor `number` and `pick` utilities for improved type support, DX enhancements, and modern JavaScript practices; update `TextNumber` type documentation. --- src/format/number.ts | 50 ++++++++++++++++++++++++++++++++++++++----- src/internal/types.ts | 4 +++- src/object/pick.ts | 14 ++++++++---- 3 files changed, 58 insertions(+), 10 deletions(-) diff --git a/src/format/number.ts b/src/format/number.ts index 4947ed0..9a28c93 100644 --- a/src/format/number.ts +++ b/src/format/number.ts @@ -1,5 +1,12 @@ import type { TextNumber } from '~/internal/types' +export type NumberFormatOptions = Readonly<{ + decimals?: number + decPoint?: string + thousandsSeparator?: string + clearDecimals?: boolean +}> + // Hoisted constant regex to avoid re-allocating per call const GROUPS_RE = /(\d{3})(?=\d)/g @@ -12,13 +19,46 @@ const GROUPS_RE = /(\d{3})(?=\d)/g * @param {Boolean} clearDecimals * @returns {string} */ +// Overloads support both legacy positional args and an options object for DX +export default function number(value: TextNumber, options?: NumberFormatOptions): string +export default function number( + value: TextNumber, + decimals?: number, + decPoint?: string, + thousandsSeparator?: string, + clearDecimals?: boolean +): string export default function number( value: TextNumber, - decimals: number = 2, - decPoint: string = '.', - thousandsSeparator: string = ',', - clearDecimals: boolean = false + a?: number | NumberFormatOptions, + b?: string, + c?: string, + d?: boolean ): string { + // Normalize inputs into options + const defaults = { + decimals: 2, + decPoint: '.', + thousandsSeparator: ',', + clearDecimals: false, + } as const satisfies Required + + let decimals: number + let decPoint: string + let thousandsSeparator: string + let clearDecimals: boolean + + if (typeof a === 'object' && a != null) { + decimals = a.decimals ?? defaults.decimals + decPoint = a.decPoint ?? defaults.decPoint + thousandsSeparator = a.thousandsSeparator ?? defaults.thousandsSeparator + clearDecimals = a.clearDecimals ?? defaults.clearDecimals + } else { + decimals = a ?? defaults.decimals + decPoint = b ?? defaults.decPoint + thousandsSeparator = c ?? defaults.thousandsSeparator + clearDecimals = d ?? defaults.clearDecimals + } // Normalize decimals: integer, non-negative, default 2 on invalid decimals = Number.isFinite(decimals) ? Math.abs(Math.trunc(decimals)) : 2 @@ -50,5 +90,5 @@ export default function number( } export function numberRus(value: TextNumber, decimals: number = 2): string { - return number(value, decimals, ',', ' ', true) + return number(value, { decimals, decPoint: ',', thousandsSeparator: ' ', clearDecimals: true }) } diff --git a/src/internal/types.ts b/src/internal/types.ts index 836673f..bc1c415 100644 --- a/src/internal/types.ts +++ b/src/internal/types.ts @@ -1,4 +1,6 @@ -export type TextNumber = string | number +// Numeric represented as a JS number or a stringified number +// Accepts ints, floats, signed values, scientific notation, etc. via template literal `${number}` +export type TextNumber = number | `${number}` export type TextNumberNullable = TextNumber | null | undefined export type CollectionType = any[] | Record diff --git a/src/object/pick.ts b/src/object/pick.ts index 856a02d..08ef70d 100644 --- a/src/object/pick.ts +++ b/src/object/pick.ts @@ -2,6 +2,8 @@ import isEmpty from '~/is/isEmpty' import forEach from '~/core/forEach' import select from './select' +export type PickPaths = readonly string[] + /** * * @param {object} object @@ -23,16 +25,20 @@ import select from './select' * * pick(object, ['d.1.id', b]); // => { 'd.1.id': 2, b: 2 } */ -export default function pick(object: Record, paths: string[] | null | undefined): Record { - const res: Record = {} +export default function pick, K extends string = string>( + object: T, + paths: ReadonlyArray | null | undefined +): Partial> { + const res: Partial> = {} if (isEmpty(object) || !Array.isArray(paths) || paths.length === 0) { return res } forEach(paths, v => { - const val = select(object, v) + const val = select(object as any, v as unknown as string) if (val !== undefined) { - res[v] = val + // @ts-expect-error index signature by path string + res[v as K] = val } }) From c4b2ba6657065d2e7a8e7639d45b38afd2aeb9ac Mon Sep 17 00:00:00 2001 From: fureev Date: Fri, 5 Dec 2025 00:42:59 +0200 Subject: [PATCH 16/37] Add comprehensive tests for `number`, `isBlank`, `isNumeric`, `date`, and tree-shaking utilities. --- tests/date/parseISO.ts | 24 +++++++++++++++++++++ tests/date/toStringUTC.ts | 15 +++++++++++++ tests/format/number.edge.ts | 38 +++++++++++++++++++++++++++++++++ tests/is/isBlank.ts | 35 ++++++++++++++++++++++++++++++ tests/is/isNumeric.ts | 37 ++++++++++++++++++++++++++++++++ tests/treeshake/leaf-imports.ts | 24 +++++++++++++++++++++ 6 files changed, 173 insertions(+) create mode 100644 tests/date/parseISO.ts create mode 100644 tests/date/toStringUTC.ts create mode 100644 tests/format/number.edge.ts create mode 100644 tests/is/isBlank.ts create mode 100644 tests/is/isNumeric.ts create mode 100644 tests/treeshake/leaf-imports.ts diff --git a/tests/date/parseISO.ts b/tests/date/parseISO.ts new file mode 100644 index 0000000..e8488d8 --- /dev/null +++ b/tests/date/parseISO.ts @@ -0,0 +1,24 @@ +import parseISO from '~/date/parseISO' + +describe('date/parseISO', () => { + it('parses ISO 8601/RFC3339 variants', () => { + expect(parseISO('2025-12-04T22:58:00Z')?.toISOString()).toBe('2025-12-04T22:58:00.000Z') + expect(parseISO('2025-12-04T22:58:00.123Z')?.toISOString()).toBe('2025-12-04T22:58:00.123Z') + expect(parseISO('2025-12-04T22:58:00+03:00') instanceof Date).toBe(true) + expect(parseISO('2025-12-04') instanceof Date).toBe(true) + }) + + it('parses epoch milliseconds string', () => { + const ms = Date.UTC(2020, 0, 2, 3, 4, 5) + expect(parseISO(String(ms))?.getTime()).toBe(ms) + }) + + it('rejects non-ISO human strings', () => { + expect(parseISO('12/04/2025')).toBeNull() + expect(parseISO('Thu, 01 Jan 1970 00:00:00 GMT')).toBeNull() + // @ts-ignore + expect(parseISO(null)).toBeNull() + expect(parseISO('')).toBeNull() + expect(parseISO(' ')).toBeNull() + }) +}) diff --git a/tests/date/toStringUTC.ts b/tests/date/toStringUTC.ts new file mode 100644 index 0000000..4d0cfcb --- /dev/null +++ b/tests/date/toStringUTC.ts @@ -0,0 +1,15 @@ +import dateToStringUTC from '~/date/toStringUTC' +import dateToString from '~/date/toString' + +describe('date/toStringUTC and date/toString', () => { + it('formats UTC with Z suffix', () => { + const d = new Date(Date.UTC(2020, 0, 2, 3, 4, 5)) + expect(dateToStringUTC(d)).toBe('2020-01-02T03:04:05Z') + }) + + it('local formatter returns YYYY-MM-DDTHH:mm:SS without timezone', () => { + const d = new Date(1609459200000) // 2021-01-01T00:00:00.000Z + const s = dateToString(d) + expect(/^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}$/.test(s)).toBe(true) + }) +}) diff --git a/tests/format/number.edge.ts b/tests/format/number.edge.ts new file mode 100644 index 0000000..07eb884 --- /dev/null +++ b/tests/format/number.edge.ts @@ -0,0 +1,38 @@ +import number, { numberRus } from '~/format/number' + +describe('format/number edge cases', () => { + it('NaN and Infinity handling', () => { + // @ts-ignore + expect(number(NaN)).toBe('NaN') + // @ts-ignore + expect(number(Infinity)).toBe('Infinity') + // @ts-ignore + expect(number(-Infinity)).toBe('-Infinity') + }) + + it('negative zero sign is preserved when decimals=0', () => { + const negZero = -0 + expect(Object.is(negZero, -0)).toBe(true) + expect(number(negZero, 0)).toBe('-0') + }) + + it('clearDecimals hides fraction only for integer values', () => { + expect(number(1000, { decimals: 2, clearDecimals: true })).toBe('1,000') + expect(number(1000.5, { decimals: 2, clearDecimals: true })).toBe('1,000.50') + }) + + it('custom separators via options object', () => { + expect(number(1234567.89, { decimals: 2, decPoint: ',', thousandsSeparator: ' ' })).toBe('1 234 567,89') + }) + + it('positional args equal to options object', () => { + const a = number(1234567.89, 3, '.', ' ', false) + const b = number(1234567.89, { decimals: 3, decPoint: '.', thousandsSeparator: ' ', clearDecimals: false }) + expect(a).toBe(b) + }) + + it('numberRus helpers', () => { + expect(numberRus(1234567)).toBe('1 234 567') + expect(numberRus(1234567.5, 1)).toBe('1 234 567,5') + }) +}) diff --git a/tests/is/isBlank.ts b/tests/is/isBlank.ts new file mode 100644 index 0000000..b7ced68 --- /dev/null +++ b/tests/is/isBlank.ts @@ -0,0 +1,35 @@ +import { isBlank, isBlanks } from '~/is' + +describe('isBlank', () => { + it('returns true for empty or whitespace-only strings (actual whitespace)', () => { + expect(isBlank('')).toBe(true) + expect(isBlank(' ')).toBe(true) + // Literal backslash sequences are not whitespace + expect(isBlank('\\t')).toBe(false) + expect(isBlank('\\n')).toBe(false) + expect(isBlank('\\r')).toBe(false) + + // Actual whitespace characters should be blank + expect(isBlank('\t')).toBe(true) + expect(isBlank('\n')).toBe(true) + expect(isBlank('\r')).toBe(true) + expect(isBlank('\u00A0')).toBe(true) + }) + + it('returns false for non-strings or strings with non-whitespace', () => { + expect(isBlank(' x ')).toBe(false) + // @ts-ignore + expect(isBlank(null)).toBe(false) + // @ts-ignore + expect(isBlank(undefined)).toBe(false) + // @ts-ignore + expect(isBlank(0)).toBe(false) + // @ts-ignore + expect(isBlank({})).toBe(false) + }) + + it('isBlanks: all must be blank', () => { + expect(isBlanks('', ' ')).toBe(true) + expect(isBlanks('', 'x')).toBe(false) + }) +}) diff --git a/tests/is/isNumeric.ts b/tests/is/isNumeric.ts new file mode 100644 index 0000000..ba15c24 --- /dev/null +++ b/tests/is/isNumeric.ts @@ -0,0 +1,37 @@ +import { isNumeric } from '~/is' + +describe('isNumeric', () => { + it('accepts numbers', () => { + expect(isNumeric(0)).toBe(true) + expect(isNumeric(123)).toBe(true) + expect(isNumeric(-123.45)).toBe(true) + // @ts-ignore + expect(isNumeric(NaN)).toBe(false) + // @ts-ignore + expect(isNumeric(Infinity)).toBe(false) + }) + + it('accepts numeric strings', () => { + expect(isNumeric('42')).toBe(true) + expect(isNumeric(' 42 ')).toBe(true) + expect(isNumeric('+3.14')).toBe(true) + expect(isNumeric('-0.001')).toBe(true) + expect(isNumeric('1e3')).toBe(true) + expect(isNumeric('0x11')).toBe(true) // Number('0x11') === 17 + }) + + it('rejects non-numeric strings and others', () => { + expect(isNumeric('')).toBe(false) + expect(isNumeric(' ')).toBe(false) + expect(isNumeric('abc')).toBe(false) + expect(isNumeric('1_000')).toBe(false) + // @ts-ignore + expect(isNumeric(undefined)).toBe(false) + // @ts-ignore + expect(isNumeric(null)).toBe(false) + // @ts-ignore + expect(isNumeric({})).toBe(false) + // @ts-ignore + expect(isNumeric([])).toBe(false) + }) +}) diff --git a/tests/treeshake/leaf-imports.ts b/tests/treeshake/leaf-imports.ts new file mode 100644 index 0000000..28f8e24 --- /dev/null +++ b/tests/treeshake/leaf-imports.ts @@ -0,0 +1,24 @@ +describe('tree-shaking: leaf imports do not pull barrels', () => { + it('importing ~/format/number does not load ~/format/index or root index', () => { + jest.isolateModules(() => { + jest.resetModules() + // snapshot before + const before = new Set(Object.keys(require.cache)) + + // Import leaf module + // Using require to stay within isolateModules context + // eslint-disable-next-line @typescript-eslint/no-var-requires + const mod = require('~/format/number') + expect(typeof mod.default).toBe('function') + + const afterKeys = Object.keys(require.cache).filter(k => !before.has(k)) + + // Ensure that format barrel and root barrel are not auto-loaded + const loadedFormatBarrel = afterKeys.some(k => /\/src\/format\/index\.(ts|js)$/.test(k)) + const loadedRootBarrel = afterKeys.some(k => /\/src\/index\.(ts|js)$/.test(k)) + + expect(loadedFormatBarrel).toBe(false) + expect(loadedRootBarrel).toBe(false) + }) + }) +}) From 56cd302f44c91fb836f98d7631e6f0e0b48d9da6 Mon Sep 17 00:00:00 2001 From: fureev Date: Fri, 5 Dec 2025 00:54:25 +0200 Subject: [PATCH 17/37] Document updates: expand `toQueryString`, `clone`, and `merge` utility details; add usage notes and examples. Introduce `dateToStringUTC`, `parseISO`, and `isBlank` documentation. Standardize examples, formatting, and usage instructions across README files. --- docs/README.md | 101 +++++++++++++++++++++-------------- docs/core/clone.md | 8 +++ docs/date/parseISO.md | 30 +++++++++++ docs/date/toStringUTC.md | 22 ++++++++ docs/en-us/README.md | 101 ++++++++++++++++++++--------------- docs/is/isBlank.md | 28 ++++++++++ docs/object/merge.md | 6 +++ docs/object/toQueryString.md | 5 ++ docs/ru/README.md | 101 ++++++++++++++++++++--------------- 9 files changed, 273 insertions(+), 129 deletions(-) create mode 100644 docs/date/parseISO.md create mode 100644 docs/date/toStringUTC.md create mode 100644 docs/is/isBlank.md diff --git a/docs/README.md b/docs/README.md index d7960c4..db2883c 100644 --- a/docs/README.md +++ b/docs/README.md @@ -28,6 +28,21 @@ npm install @feugene/mu +## Usage (ESM-only, Node 22+) + +```ts +// Import single helper (preferred for tree-shaking) +import { number } from '@feugene/mu/format' + +// Or import multiple named helpers from a submodule +import { dateToStringUTC, parseISO } from '@feugene/mu/date' + +// Root imports also work (may pull more symbols depending on your bundler) +import { merge } from '@feugene/mu' +``` + +The library is ESM-first and works in modern browsers (after bundling) and Node 22+ CLI. + ## Table of Contents - [Core](#core) @@ -55,34 +70,36 @@ npm install @feugene/mu ### Is -| Function | Return | Example | -|:---------------------------|:-------|:--------------------------------------------------| -| isArguments | bool | `isArguments([1,2]]); // false` | -| isArray | bool | `isArray([1,2]]); // true` | -| isArrayLike | bool | `isArrayLike('abc'); // true` | -| isBlob | bool | `isBlob(new Blob([]])); // true` | -| isBoolean | bool | `isBoolean(true, true); // true` | -| isBuffer | bool | `isBuffer(new Buffer(2)); // true` | -| isDate | bool | `isDate(new Date); // true` | -| isEmpty | bool | `isEmpty(null, undefined, ''); // true` | -| isEmptyObject | bool | `isEmptyObject({}}); // true` | -| isEven | bool | `isEven(2, 4, '8'); // true` | -| isFloat | bool | `isFloat('2.0')); // false` | -| isFloatCanonical | bool | `isFloat('2.0')); // true` | -| isFloats | bool | `isFloat('2.2','+2.1')); // true` | -| isFunction | bool | `isFunction(()=>{})); // true` | -| isInteger | bool | `isInteger(12,-21); // true` | -| isLength | bool | `isLength(3); // true` | -| isNil | bool | `isNil(undefined); // true` | -| isNils | bool | `isNulls(null, undefined, void 0); // true` | -| isNull | bool | `isNull(null); // true` | -| isNulls | bool | `isNulls(null, undefined); // false` | -| isNumeric | bool | `isNumeric(12,-2.3); // true` | -| [isObject](is/isObject.md) | bool | `isObject([], '12', 4, new Function()); // false` | -| isObjectLike | bool | `isObjectLike([]); // true` | -| isString | bool | `isString('test'); // true` | -| isSymbol | bool | `isSymbol(Symbol('a')); // true` | -| isTypedArray | bool | `isTypedArray(new Uint8Array); // true` | +| Function | Return | Example | +|:---------------------------|:-------|:-------------------------------------------------------| +| isArguments | bool | `isArguments([1,2]); // false` | +| isArray | bool | `isArray([1,2]); // true` | +| isArrayLike | bool | `isArrayLike('abc'); // true` | +| isBlob | bool | `isBlob(new Blob([])); // true` | +| isBoolean | bool | `isBoolean(true); // true` | +| isBuffer | bool | `isBuffer(Buffer.alloc(2)); // true` | +| isDate | bool | `isDate(new Date()); // true` | +| isEmpty | bool | `isEmpty(null, undefined, ''); // true` | +| isBlank | bool | `isBlank(' '); // true` | +| isEmptyObject | bool | `isEmptyObject({}); // true` | +| isEven | bool | `isEven(2); // true` | +| isEvens | bool | `isEvens(2, 4, '8'); // true` | +| isFloat | bool | `isFloat(2.2); // true` | +| isFloatCanonical | bool | `isFloatCanonical('2.0'); // true` | +| isFloats | bool | `isFloats('2.2','+2.1'); // true` | +| isFunction | bool | `isFunction(() => {}); // true` | +| isInteger | bool | `isInteger(12); // true` | +| isLength | bool | `isLength(3); // true` | +| isNil | bool | `isNil(undefined); // true` | +| isNils | bool | `isNils(null, undefined); // true` | +| isNull | bool | `isNull(null); // true` | +| isNulls | bool | `isNulls(null, undefined); // false` | +| isNumeric | bool | `isNumeric('1e3'); // true` | +| [isObject](is/isObject.md) | bool | `isObject([], '12', 4, Function); // false` | +| isObjectLike | bool | `isObjectLike([]); // true` | +| isString | bool | `isString('test'); // true` | +| isSymbol | bool | `isSymbol(Symbol('a')); // true` | +| isTypedArray | bool | `isTypedArray(new Uint8Array(2)); // true` | ### Array @@ -164,22 +181,24 @@ npm install @feugene/mu ### Date -| Function | Return | Description | Example | -|:---------|:-------|:-------------------------------------------------|:--------| -| elapsed | int | Returns difference in milliseconds between dates | | -| now | date | Now date | | -| toString | string | Date as string | | +| Function | Return | Description | +|:-----------------|:--------|:----------------------------------------------------------------| +| elapsed | number | Difference in milliseconds between dates | +| now | number | Current time in ms since UNIX epoch | +| dateToString | string | Local time `YYYY-MM-DDTHH:mm:SS` (no timezone suffix) | +| dateToStringUTC | string | UTC time `YYYY-MM-DDTHH:mm:SSZ` | +| parseISO | Date\|null | Strict ISO/RFC3339 or epoch ms string → Date; else `null` | ### Format -| Function | Return | Description | Example | -|:------------|:-------|:------------------------------|:------------------------------------| -| fileSize | string | Display number as file size | `fileSize(7900221323) // '7.36 Gb'` | -| intWord | string | | `intWord(21323) // '21.32K'` | -| num | string | Formatting number | `num('10000') // '10,000.00'` | -| numRus | string | Formatting number for Russian | `numRus(1001.20) // '1 001.20'` | -| padDateTime | string | | `padDateTime(1) // '01'` | -| padNumber | string | | `padNumber(2,3) // '002'` | +| Function | Return | Description | Example | +|:------------|:-------|:------------------------------------------|:------------------------------------------------| +| fileSize | string | Display number as file size | `fileSize(7900221323) // '7.36 Gb'` | +| intWord | string | Compact integer with unit suffix | `intWord(21323) // '21.32K'` | +| number | string | Formatting number (options supported) | `number('10000') // '10,000.00'` | +| numberRus | string | RU format: space group, comma as decimal | `numberRus(1001.2) // '1 001,20'` | +| padDateTime | string | Zero-pad date/time part to 2 chars | `padDateTime(1) // '01'` | +| padNumber | string | Left-pad a number with zeros to width N | `padNumber(2,3) // '002'` | ### Utilities diff --git a/docs/core/clone.md b/docs/core/clone.md index 777aac0..3bb21d4 100644 --- a/docs/core/clone.md +++ b/docs/core/clone.md @@ -6,6 +6,14 @@ Clone simple variables including array, {}-like objects, DOM nodes and Date without keeping the old reference. +Notes (v5, Node 22+): +- Plain objects and arrays are deep-cloned over own enumerable string and symbol keys only. +- `Date` is cloned by value: `new Date(src.getTime())`. +- DOM nodes are cloned via `node.cloneNode(true)` when `cloneDom = true` (default). +- Other complex objects (Map, Set, RegExp, TypedArrays, ArrayBuffer, URL, etc.) are cloned via native `structuredClone` when available; if cloning fails, returns the original reference. +- Functions/classes and instances with custom prototypes are returned by reference. +- Accessors/descriptors are not preserved; only enumerable data properties are processed for plain objects. + ## Use ```js diff --git a/docs/date/parseISO.md b/docs/date/parseISO.md new file mode 100644 index 0000000..a559e45 --- /dev/null +++ b/docs/date/parseISO.md @@ -0,0 +1,30 @@ +# parseISO + +> DATE + +## Description + +Parses a strict ISO 8601/RFC 3339 string or an epoch milliseconds string into a `Date`. +Returns `Date` on success, otherwise `null`. + +Notes: +- Ambiguous human strings like `12/04/2025` are rejected to avoid local vs UTC surprises. +- Prefer `dateToStringUTC` when formatting for storage/logging. + +## Use + +```ts +import { parseISO } from '@feugene/mu/date' + +parseISO('2025-12-04T22:58:00Z') +parseISO('2025-12-04T22:58:00+03:00') +parseISO('1733353080000') // epoch ms (string) +``` + +## Examples + +```ts +parseISO('2025-12-04') instanceof Date // true +parseISO('Thu, 01 Jan 1970 00:00:00 GMT') // null (not strict ISO) +parseISO('') // null +``` diff --git a/docs/date/toStringUTC.md b/docs/date/toStringUTC.md new file mode 100644 index 0000000..8f301b4 --- /dev/null +++ b/docs/date/toStringUTC.md @@ -0,0 +1,22 @@ +# dateToStringUTC + +> DATE + +## Description + +Formats a `Date` in UTC as `YYYY-MM-DDTHH:mm:SSZ` using UTC getters. +Timezone/DST agnostic output. + +## Use + +```ts +import { dateToStringUTC } from '@feugene/mu/date' + +dateToStringUTC(new Date(Date.UTC(2020, 0, 2, 3, 4, 5))) +// '2020-01-02T03:04:05Z' +``` + +## See also + +- `dateToString` — local time formatter without timezone suffix. +- `parseISO` — strict ISO/RFC3339 parser. diff --git a/docs/en-us/README.md b/docs/en-us/README.md index 21c92e3..59cc6e3 100644 --- a/docs/en-us/README.md +++ b/docs/en-us/README.md @@ -8,12 +8,21 @@ } ``` -## Test +## Usage (ESM-only, Node 22+) -```bash -jest +```ts +// Import single helper (preferred for tree-shaking) +import { number } from '@feugene/mu/format' + +// Or import multiple named helpers from a submodule +import { dateToStringUTC, parseISO } from '@feugene/mu/date' + +// Root imports also work (may pull more symbols depending on your bundler) +import { merge } from '@feugene/mu' ``` +The library is ESM-first and works in modern browsers (after bundling) and Node 22+ CLI. + ## Table of Contents - [Core](#core) @@ -40,34 +49,36 @@ jest ## Is -| Function | Return | Example | -|:-----------------|:-------|:--------------------------------------------------| -| isArguments | bool | `isArguments([1,2]]); // false` | -| isArray | bool | `isArray([1,2]]); // true` | -| isArrayLike | bool | `isArrayLike('abc'); // true` | -| isBlob | bool | `isBlob(new Blob([]])); // true` | -| isBoolean | bool | `isBoolean(true, true); // true` | -| isBuffer | bool | `isBuffer(new Buffer(2)); // true` | -| isDate | bool | `isDate(new Date); // true` | -| isEmpty | bool | `isEmpty(null, undefined, ''); // true` | -| isEmptyObject | bool | `isEmptyObject({}}); // true` | -| isEven | bool | `isEven(2, 4, '8'); // true` | -| isFloat | bool | `isFloat('2.0')); // false` | -| isFloatCanonical | bool | `isFloat('2.0')); // true` | -| isFloats | bool | `isFloat('2.2','+2.1')); // true` | -| isFunction | bool | `isFunction(()=>{})); // true` | -| isInteger | bool | `isInteger(12,-21); // true` | -| isLength | bool | `isLength(3); // true` | -| isNil | bool | `isNil(undefined); // true` | -| isNils | bool | `isNulls(null, undefined, void 0); // true` | -| isNull | bool | `isNull(null); // true` | -| isNulls | bool | `isNulls(null, undefined); // false` | -| isNumeric | bool | `isNumeric(12,-2.3); // true` | -| isObject | bool | `isObject([], '12', 4, new Function()); // false` | -| isObjectLike | bool | `isObjectLike([]); // true` | -| isString | bool | `isString('test'); // true` | -| isSymbol | bool | `isSymbol(Symbol('a')); // true` | -| isTypedArray | bool | `isTypedArray(new Uint8Array); // true` | +| Function | Return | Example | +|:-----------------|:-------|:-------------------------------------------------------| +| isArguments | bool | `isArguments([1,2]); // false` | +| isArray | bool | `isArray([1,2]); // true` | +| isArrayLike | bool | `isArrayLike('abc'); // true` | +| isBlob | bool | `isBlob(new Blob([])); // true` | +| isBoolean | bool | `isBoolean(true); // true` | +| isBuffer | bool | `isBuffer(Buffer.alloc(2)); // true` | +| isDate | bool | `isDate(new Date()); // true` | +| isEmpty | bool | `isEmpty(null, undefined, ''); // true` | +| isBlank | bool | `isBlank(' '); // true` | +| isEmptyObject | bool | `isEmptyObject({}); // true` | +| isEven | bool | `isEven(2); // true` | +| isEvens | bool | `isEvens(2, 4, '8'); // true` | +| isFloat | bool | `isFloat(2.2); // true` | +| isFloatCanonical | bool | `isFloatCanonical('2.0'); // true` | +| isFloats | bool | `isFloats('2.2','+2.1'); // true` | +| isFunction | bool | `isFunction(() => {}); // true` | +| isInteger | bool | `isInteger(12); // true` | +| isLength | bool | `isLength(3); // true` | +| isNil | bool | `isNil(undefined); // true` | +| isNils | bool | `isNils(null, undefined); // true` | +| isNull | bool | `isNull(null); // true` | +| isNulls | bool | `isNulls(null, undefined); // false` | +| isNumeric | bool | `isNumeric('1e3'); // true` | +| isObject | bool | `isObject([], '12', 4, Function); // false` | +| isObjectLike | bool | `isObjectLike([]); // true` | +| isString | bool | `isString('test'); // true` | +| isSymbol | bool | `isSymbol(Symbol('a')); // true` | +| isTypedArray | bool | `isTypedArray(new Uint8Array(2)); // true` | ## Array @@ -141,22 +152,24 @@ jest ## Date -| Function | Return | Description | Example | -|:---------|:-------|:-------------------------------------------------|:--------| -| elapsed | int | Returns difference in milliseconds between dates | | -| now | date | Now date | | -| toString | string | Date as string | | +| Function | Return | Description | +|:----------------|:-----------|:----------------------------------------------------------------| +| elapsed | number | Difference in milliseconds between dates | +| now | number | Current time in ms since UNIX epoch | +| dateToString | string | Local time `YYYY-MM-DDTHH:mm:SS` (no timezone suffix) | +| dateToStringUTC | string | UTC time `YYYY-MM-DDTHH:mm:SSZ` | +| parseISO | Date\|null | Strict ISO/RFC3339 or epoch ms string → Date; else `null` | ## Format -| Function | Return | Description | Example | -|:------------|:-------|:------------------------------|:------------------------------------| -| fileSize | string | Display number as file size | `fileSize(7900221323) // '7.36 Gb'` | -| intWord | string | | `intWord(21323) // '21.32K'` | -| num | string | Formatting number | `num('10000') // '10,000.00'` | -| numRus | string | Formatting number for Russian | `numRus(1001.20) // '1 001.20'` | -| padDateTime | string | | `padDateTime(1) // '01'` | -| padNumber | string | | `padNumber(2,3) // '002'` | +| Function | Return | Description | Example | +|:------------|:-------|:------------------------------------------|:------------------------------------------------| +| fileSize | string | Display number as file size | `fileSize(7900221323) // '7.36 Gb'` | +| intWord | string | Compact integer with unit suffix | `intWord(21323) // '21.32K'` | +| number | string | Formatting number (options supported) | `number('10000') // '10,000.00'` | +| numberRus | string | RU format: space group, comma as decimal | `numberRus(1001.2) // '1 001,20'` | +| padDateTime | string | Zero-pad date/time part to 2 chars | `padDateTime(1) // '01'` | +| padNumber | string | Left-pad a number with zeros to width N | `padNumber(2,3) // '002'` | ## Utilities diff --git a/docs/is/isBlank.md b/docs/is/isBlank.md new file mode 100644 index 0000000..5540419 --- /dev/null +++ b/docs/is/isBlank.md @@ -0,0 +1,28 @@ +# isBlank + +> IS + +## Description + +Checks whether the given value is a blank string — empty or whitespace-only. +Non-strings always return `false`. + +## Use + +```ts +import { isBlank, isBlanks } from '@feugene/mu/is' + +isBlank('') // true +isBlank(' ') // true +isBlank('\t') // false (literal backslash t) +isBlank('\n') // false (literal backslash n) +isBlank('\r') // false +isBlank('\u00A0')// false +isBlank('\x20') // false + +// Actual whitespace characters are blank: +isBlank('\t'.replace('\\t', '\t')) // true + +isBlanks('', ' ') // true +isBlanks('', 'x') // false +``` diff --git a/docs/object/merge.md b/docs/object/merge.md index 0ca3766..27f6d97 100644 --- a/docs/object/merge.md +++ b/docs/object/merge.md @@ -6,6 +6,12 @@ Merge 2 or more objects recursively. +Notes (v5, ESM-only, Node 22+): +- Immutable: input objects are not mutated; a new object is returned. +- Security: guarded against prototype pollution — keys `"__proto__"`, `"prototype"`, `"constructor"` are ignored. +- Keys: only own enumerable string and symbol keys are considered. +- Depth: deep-merge only plain objects (`Object.prototype` or null-proto). Arrays are replaced with a cloned array. + ## Use ```js diff --git a/docs/object/toQueryString.md b/docs/object/toQueryString.md index 6acc768..4e498e1 100644 --- a/docs/object/toQueryString.md +++ b/docs/object/toQueryString.md @@ -6,6 +6,11 @@ Takes an object and converts it to an encoded query string. +Notes (v5): +- Uses native `URLSearchParams` for encoding. +- Values handling: booleans are converted via `0/1`, dates via local `dateToString`, empty values become empty strings. +- Options: `{ encodeName: boolean }` — when `true` (default), each key name is `encodeURIComponent`'ed. + ## Use ```js diff --git a/docs/ru/README.md b/docs/ru/README.md index 4071568..ae6cf7b 100644 --- a/docs/ru/README.md +++ b/docs/ru/README.md @@ -8,12 +8,21 @@ } ``` -## Тесты +## Использование (только ESM, Node 22+) -```bash -jest +```ts +// Импорт одного хелпера (лучше для tree‑shaking) +import { number } from '@feugene/mu/format' + +// Или несколько именованных хелперов из подпакета +import { dateToStringUTC, parseISO } from '@feugene/mu/date' + +// Корневой импорт тоже работает (возможна подгрузка лишних символов в зависимости от бандлера) +import { merge } from '@feugene/mu' ``` +Библиотека ESM‑first, работает в современных браузерах (после сборки) и в Node 22+ (CLI). + ## Содержание - [Core](#core) @@ -40,34 +49,36 @@ jest ## Is -| Function | Return | Example | -|:-----------------|:-------|:--------------------------------------------------| -| isArguments | bool | `isArguments([1,2]]); // false` | -| isArray | bool | `isArray([1,2]]); // true` | -| isArrayLike | bool | `isArrayLike('abc'); // true` | -| isBlob | bool | `isBlob(new Blob([]])); // true` | -| isBoolean | bool | `isBoolean(true, true); // true` | -| isBuffer | bool | `isBuffer(new Buffer(2)); // true` | -| isDate | bool | `isDate(new Date); // true` | -| isEmpty | bool | `isEmpty(null, undefined, ''); // true` | -| isEmptyObject | bool | `isEmptyObject({}}); // true` | -| isEven | bool | `isEven(2, 4, '8'); // true` | -| isFloat | bool | `isFloat('2.0')); // false` | -| isFloatCanonical | bool | `isFloat('2.0')); // true` | -| isFloats | bool | `isFloat('2.2','+2.1')); // true` | -| isFunction | bool | `isFunction(()=>{})); // true` | -| isInteger | bool | `isInteger(12,-21); // true` | -| isLength | bool | `isLength(3); // true` | -| isNil | bool | `isNil(undefined); // true` | -| isNils | bool | `isNulls(null, undefined, void 0); // true` | -| isNull | bool | `isNull(null); // true` | -| isNulls | bool | `isNulls(null, undefined); // false` | -| isNumeric | bool | `isNumeric(12,-2.3); // true` | -| isObject | bool | `isObject([], '12', 4, new Function()); // false` | -| isObjectLike | bool | `isObjectLike([]); // true` | -| isString | bool | `isString('test'); // true` | -| isSymbol | bool | `isSymbol(Symbol('a')); // true` | -| isTypedArray | bool | `isTypedArray(new Uint8Array); // true` | +| Function | Return | Example | +|:-----------------|:-------|:-----------------------------------------------------| +| isArguments | bool | `isArguments([1,2]); // false` | +| isArray | bool | `isArray([1,2]); // true` | +| isArrayLike | bool | `isArrayLike('abc'); // true` | +| isBlob | bool | `isBlob(new Blob([])); // true` | +| isBoolean | bool | `isBoolean(true); // true` | +| isBuffer | bool | `isBuffer(Buffer.alloc(2)); // true` | +| isDate | bool | `isDate(new Date()); // true` | +| isEmpty | bool | `isEmpty(null, undefined, ''); // true` | +| isBlank | bool | `isBlank(' '); // true` | +| isEmptyObject | bool | `isEmptyObject({}); // true` | +| isEven | bool | `isEven(2); // true` | +| isEvens | bool | `isEvens(2, 4, '8'); // true` | +| isFloat | bool | `isFloat(2.2); // true` | +| isFloatCanonical | bool | `isFloatCanonical('2.0'); // true` | +| isFloats | bool | `isFloats('2.2','+2.1'); // true` | +| isFunction | bool | `isFunction(() => {}); // true` | +| isInteger | bool | `isInteger(12); // true` | +| isLength | bool | `isLength(3); // true` | +| isNil | bool | `isNil(undefined); // true` | +| isNils | bool | `isNils(null, undefined); // true` | +| isNull | bool | `isNull(null); // true` | +| isNulls | bool | `isNulls(null, undefined); // false` | +| isNumeric | bool | `isNumeric('1e3'); // true` | +| isObject | bool | `isObject([], '12', 4, Function); // false` | +| isObjectLike | bool | `isObjectLike([]); // true` | +| isString | bool | `isString('test'); // true` | +| isSymbol | bool | `isSymbol(Symbol('a')); // true` | +| isTypedArray | bool | `isTypedArray(new Uint8Array(2)); // true` | ## Array @@ -143,22 +154,24 @@ jest ## Date -| Function | Return | Description | -|:---------|:-------|:-------------------------------------------| -| elapsed | int | Вернет дельту в милисекундах между дататми | -| now | date | Текущая дата | -| toString | string | Преобразование даты в строку | +| Function | Return | Description | +|:----------------|:--------|:------------------------------------------------------| +| elapsed | number | Дельта в миллисекундах между датами | +| now | number | Текущее время в мс с начала эпохи UNIX | +| dateToString | string | Локальное время `YYYY-MM-DDTHH:mm:SS` (без суффикса) | +| dateToStringUTC | string | UTC `YYYY-MM-DDTHH:mm:SSZ` | +| parseISO | Date\|null | Строгий ISO/RFC3339 или epoch ms строка → Date; иначе `null` | ## Format -| Function | Return | Description | Example | -|:------------|:-------|:--------------------------------------|:------------------------------------| -| fileSize | string | Форматирование числа как размер файла | `fileSize(7900221323) // '7.36 Gb'` | -| intWord | string | - | `intWord(21323) // '21.32K'` | -| num | string | Форматирование числа | `num('10000') // '10,000.00'` | -| numRus | string | Форматирование числа для России | `numRus(1001.20) // '1 001.20'` | -| padDateTime | string | - | `padDateTime(1) // '01'` | -| padNumber | string | - | `padNumber(2,3) // '002'` | +| Function | Return | Description | Example | +|:------------|:-------|:----------------------------------------------|:-------------------------------------| +| fileSize | string | Форматирование числа как размер файла | `fileSize(7900221323) // '7.36 Gb'` | +| intWord | string | Компактная запись целых с суффиксом единиц | `intWord(21323) // '21.32K'` | +| number | string | Форматирование числа (поддерживает options) | `number('10000') // '10,000.00'` | +| numberRus | string | RU: пробелы в группах, запятая в дробной части | `numberRus(1001.2) // '1 001,20'` | +| padDateTime | string | Дополнение даты/времени нулём до 2 символов | `padDateTime(1) // '01'` | +| padNumber | string | Дополнение числа нулями слева до N символов | `padNumber(2,3) // '002'` | ## Utilities From 9eea829eec5f41b3e282887bda5dcb2edcb80e23 Mon Sep 17 00:00:00 2001 From: fureev Date: Fri, 5 Dec 2025 01:03:56 +0200 Subject: [PATCH 18/37] Add `dateToString` utility documentation with usage details and examples. --- docs/date/toString.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 docs/date/toString.md diff --git a/docs/date/toString.md b/docs/date/toString.md new file mode 100644 index 0000000..8c05e39 --- /dev/null +++ b/docs/date/toString.md @@ -0,0 +1,22 @@ +## dateToString + +> DATE + +### Description + +Formats a `Date` in LOCAL time as `YYYY-MM-DDTHH:mm:SS` (no timezone suffix). +Uses local getters and is affected by the environment timezone and DST rules. + +### Use + +```ts +import { dateToString } from '@feugene/mu/date' + +dateToString(new Date(1609459200000)) +// => e.g. '2021-01-01T00:00:00' (depends on your local timezone) +``` + +### See also + +- `dateToStringUTC` — UTC formatter with `Z` suffix. +- `parseISO` — strict ISO/RFC3339 parser. From 9e09ebfe7abc9be474b2578f856e22c7623e0d4a Mon Sep 17 00:00:00 2001 From: fureev Date: Fri, 5 Dec 2025 01:11:31 +0200 Subject: [PATCH 19/37] Expand utility documentation with updated descriptions, usage notes, examples, and security considerations for `number`, `isInteger`, `merge`, `defaults`, `isObject`, `pathToObject`, and `fromQueryString`. --- src/format/number.ts | 23 +++++++++------- src/is/isInteger.ts | 7 ++++- src/is/isObject.ts | 7 ++++- src/object/defaults.ts | 21 +++++++++------ src/object/fromQueryString.ts | 49 ++++++++++++----------------------- src/object/merge.ts | 14 +++++++++- src/object/pathToObject.ts | 12 +++++++++ 7 files changed, 80 insertions(+), 53 deletions(-) diff --git a/src/format/number.ts b/src/format/number.ts index 9a28c93..3d36084 100644 --- a/src/format/number.ts +++ b/src/format/number.ts @@ -11,13 +11,19 @@ export type NumberFormatOptions = Readonly<{ const GROUPS_RE = /(\d{3})(?=\d)/g /** - * Formatting number - * @param {String|Number} value - * @param {Number} decimals - * @param {String} decPoint - * @param {String} thousandsSeparator - * @param {Boolean} clearDecimals - * @returns {string} + * Format a number with thousand separators and a decimal point. + * + * Overloads supported: + * - Positional: `number(value, decimals?, decPoint?, thousandsSeparator?, clearDecimals?)` + * - Options object: `number(value, { decimals, decPoint, thousandsSeparator, clearDecimals })` + * + * Notes: + * - Returns `'NaN'` for `NaN` inputs; `Infinity`/`-Infinity` are stringified as-is. + * - Preserves the sign for negative zero when `decimals = 0` (e.g. `-0`). + * - When `clearDecimals = true`, fractional part is omitted for integer absolute values. + * + * @param value + * @param options */ // Overloads support both legacy positional args and an options object for DX export default function number(value: TextNumber, options?: NumberFormatOptions): string @@ -79,8 +85,7 @@ export default function number( // Insert thousands separators into integer part const j = intStr.length > 3 ? intStr.length % 3 : 0 const intWithSep = - (j ? intStr.slice(0, j) + thousandsSeparator : '') + - intStr.slice(j).replace(GROUPS_RE, `$1${thousandsSeparator}`) + (j ? intStr.slice(0, j) + thousandsSeparator : '') + intStr.slice(j).replace(GROUPS_RE, `$1${thousandsSeparator}`) // Decide on fractional part rendering const showFraction = decimals > 0 && !(clearDecimals && Number.isInteger(abs)) diff --git a/src/is/isInteger.ts b/src/is/isInteger.ts index e2e1154..ab546a7 100644 --- a/src/is/isInteger.ts +++ b/src/is/isInteger.ts @@ -1,10 +1,15 @@ /** - * This function evaluates whether all parameters are integers + * Checks whether a single value is an integer. + * Accepts numbers and numeric strings; other types return `false`. */ export default function isInteger(value: any): boolean { return Number.isInteger(Number.parseFloat(value)) } +/** + * Variadic version: returns `true` if all provided values are integers. + * Throws when called without arguments or if any argument cannot be parsed as a number. + */ export function isIntegers(...parameters: any[]): boolean { if (parameters.length === 0) { throw new Error('Please provide at least one number to evaluate isInteger.') diff --git a/src/is/isObject.ts b/src/is/isObject.ts index e8ef95d..e33f1e5 100644 --- a/src/is/isObject.ts +++ b/src/is/isObject.ts @@ -10,7 +10,9 @@ const isO = function (value: any): boolean { } /** - * This function evaluates whether all parameters are objects + * Checks whether all provided arguments are plain objects (and not DOM nodes). + * A value is considered an object here if it is `Object`-like (`[object Object]`) + * and not a DOM node (duck-typed via `ownerDocument`). */ export function isObjects(...parameters: any[]): boolean { if (parameters.length === 0) { @@ -26,6 +28,9 @@ export default function isObject(value?: any): boolean { return isO(value) } +/** + * Checks that all provided arguments are empty plain objects (no own enumerable keys). + */ export function isEmptyObject(...parameters: any[]): boolean { if (parameters.length === 0) { throw new Error('Please provide at least one number to evaluate isObject.') diff --git a/src/object/defaults.ts b/src/object/defaults.ts index 48bce3d..baac720 100644 --- a/src/object/defaults.ts +++ b/src/object/defaults.ts @@ -37,19 +37,24 @@ function shallowCopyWithSymbols(obj: T): T { } /** - * Assigns own and inherited enumerable string keyed properties of source - * objects to the destination object for all destination properties that - * resolve to `undefined`. Source objects are applied from left to right. - * Once a property is set, additional values of the same property are ignored. + * Apply default values from one or more source objects to an origin object without mutation. * - * **Note:** This method mutates `object`. + * Semantics (v5, ESM-only, Node 22+): + * - Immutability: returns a new object; `origin` and `sources` are not mutated. + * - Keys: only own enumerable string and symbol keys from sources are considered; inherited/non-enumerable are ignored. + * - Guards: forbidden keys `"__proto__"`, `"prototype"`, `"constructor"` are skipped (proto-pollution safe). + * - Deep behavior: if both destination and source values are plain objects, defaults are applied recursively. + * - Arrays: when setting a missing key from a source array, the array is cloned (not referenced). Arrays are not deep-merged. + * - Presence rule: a key is considered present in destination if it exists as an own property, even if its value is `undefined` or `null` — such keys are not overwritten. * * @example + * defaults({ a: { b: 2 } }, { a: { b: 1, c: 3 } }) + * // => { a: { b: 2, c: 3 } } * - * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } + * @param origin The base object to apply defaults onto (not mutated). + * @param sources One or more source objects providing default values (left-to-right). + * @returns A new object with defaults applied. */ - export default function defaults(origin: RecordAny, ...sources: RecordAny[]): RecordAny { // Иммутабельность: не мутируем origin const result: RecordAny = isPlainObject(origin) ? shallowCopyWithSymbols(origin) : origin diff --git a/src/object/fromQueryString.ts b/src/object/fromQueryString.ts index a9ea9ff..e394dd7 100644 --- a/src/object/fromQueryString.ts +++ b/src/object/fromQueryString.ts @@ -3,7 +3,6 @@ import isNumeric from '~/is/isNumeric' import type { TextNumber } from '~/internal/types' const queryRe = /^\?/ -const plusRe = /\+/g const keyRe = /(\[):?([^\]]*)]/g const nameRe = /^([^[]+)/ // eslint-disable-line no-useless-escape @@ -14,40 +13,24 @@ type FromQueryStringOptions = { /** * Converts a query string back into an object. * - * Non-recursive: + * Implementation notes (v5): + * - Uses native `URLSearchParams` for decoding; input may start with leading `?`. + * - When `recursive=false` (default), repeated keys become arrays, otherwise the Rails-style + * bracket syntax is parsed to objects/arrays (e.g., `a[b]=1&a[c]=2`, `arr[0]=x`). + * - Security: forbidden keys (`"__proto__"`, `"prototype"`, `"constructor"`) are ignored at all nesting levels + * to prevent prototype pollution. * - * fromQueryString("foo=1&bar=2"); // returns {foo: '1', bar: '2'} - * fromQueryString("foo=&bar=2"); // returns {foo: '', bar: '2'} - * fromQueryString("some%20price=%24300"); // returns {'some price': '$300'} - * fromQueryString("colors=red&colors=green&colors=blue"); // returns {colors: ['red', 'green', 'blue']} + * @example + * fromQueryString("foo=1&bar=2"); // returns {foo: '1', bar: '2'} + * fromQueryString("foo=&bar=2"); // returns {foo: '', bar: '2'} + * fromQueryString("some%20price=%24300"); // returns {'some price': '$300'} + * fromQueryString("colors=red&colors=green&colors=blue"); // returns {colors: ['red', 'green', 'blue']} * - * Recursive: * - * fromQueryString( - * "username=Jacky&"+ - * "dateOfBirth[day]=1&dateOfBirth[month]=2&dateOfBirth[year]=1911&"+ - * "hobbies[0]=coding&hobbies[1]=eating&hobbies[2]=sleeping&"+ - * "hobbies[3][0]=nested&hobbies[3][1]=stuff", true); - * - * // returns - * { - * username: 'Jacky', - * dateOfBirth: { - * day: '1', - * month: '2', - * year: '1911' - * }, - * hobbies: ['coding', 'eating', 'sleeping', ['nested', 'stuff']] - * } - * - * @param {String|null} queryString The query string to decode - * @param {Boolean} [recursive=false] Whether or not to recursively decode the string. This format is supported by - * @param {Object} options = { - * - decodeName {Boolean} Decode KeyNames in the queryString - * } - * PHP / Ruby on Rails servers and similar. - * @return {Object} - * @todo write tests + * @param queryString The query string to decode. + * @param recursive True to interpret bracket syntax and build nested structures. + * @param options Options bag: `{ decodeName: boolean }` (names are already decoded by URLSearchParams). + * @returns A plain object constructed from the query string. */ export default function fromQueryString( queryString: string, @@ -67,7 +50,7 @@ export default function fromQueryString( let matchedName: RegExpMatchArray | null let keys: string[] let key: string - let nextKey: TextNumber + let nextKey: string const FORBIDDEN = new Set(['__proto__', 'prototype', 'constructor']) diff --git a/src/object/merge.ts b/src/object/merge.ts index 4a8a6de..5b88a76 100644 --- a/src/object/merge.ts +++ b/src/object/merge.ts @@ -26,7 +26,19 @@ function ownEnumerableKeys(obj: object): PropertyKey[] { } /** - * Merge objects recursively + * Merge two or more objects into a new one (immutable deep merge for plain objects). + * + * Semantics (v5, ESM-only, Node 22+): + * - Immutability: returns a new object; inputs are not mutated. + * - Keys: only own enumerable string and symbol keys are processed. + * - Guards: forbidden keys "__proto__", "prototype", "constructor" are ignored (proto-pollution safe). + * - Depth: deep merge only occurs for plain objects (prototype is Object.prototype or null). + * - Arrays: arrays from sources replace destination values with a cloned array (no element-wise merge). + * - Other types (Date, Map, Set, functions, class instances): copied as values; plain-object rules do not apply. + * + * @example + * merge({ a: 1, o: { x: 1 } }, { b: 2, o: { y: 2 } }) + * // => { a: 1, b: 2, o: { x: 1, y: 2 } } */ export default function merge>(original: Partial, ...values: Partial[]): T { // Иммутабельность: не мутируем входной объект diff --git a/src/object/pathToObject.ts b/src/object/pathToObject.ts index 1f402be..5b39a8c 100644 --- a/src/object/pathToObject.ts +++ b/src/object/pathToObject.ts @@ -7,6 +7,18 @@ function isForbiddenKey(key: PropertyKey): boolean { return typeof key === 'string' ? FORBIDDEN.has(key) : false } +/** + * Build or update a nested object structure by a string path. + * + * Security: forbidden keys ("__proto__", "prototype", "constructor") are ignored to prevent prototype pollution. + * + * @param paths Path string, e.g. `"a.b.c"`. If empty, the original object is returned. + * @param value Value to set at the terminal key (default: `null`). + * @param object Target object to modify (mutates this object as per existing API). + * @param divider Path segment divider (default: `'.'`). + * @param replaceOnExist Replace existing keys along the path (default: `true`). + * @returns The same `object` reference with the path set (if valid). + */ export default function pathToObject( paths: string = '', value: any = null, From 2f897598c887bbf9199b9168d6c02a43059fff0d Mon Sep 17 00:00:00 2001 From: fureev Date: Fri, 5 Dec 2025 01:55:43 +0200 Subject: [PATCH 20/37] add docs --- docs/date/elapsed.md | 44 ++++++++++++++++++ docs/date/now.md | 38 ++++++++++++++++ docs/format/fileSize.md | 39 ++++++++++++++++ docs/format/number.md | 52 ++++++++++++++++++++++ docs/format/numberRus.md | 37 +++++++++++++++ docs/format/padDateTime.md | 33 ++++++++++++++ docs/format/padNumber.md | 37 +++++++++++++++ docs/is/isBlank.md | 20 ++++----- docs/string/removeConsecutiveDuplicates.md | 4 +- package.json | 6 +-- 10 files changed, 295 insertions(+), 15 deletions(-) create mode 100644 docs/date/elapsed.md create mode 100644 docs/date/now.md create mode 100644 docs/format/fileSize.md create mode 100644 docs/format/number.md create mode 100644 docs/format/numberRus.md create mode 100644 docs/format/padDateTime.md create mode 100644 docs/format/padNumber.md diff --git a/docs/date/elapsed.md b/docs/date/elapsed.md new file mode 100644 index 0000000..f9b0973 --- /dev/null +++ b/docs/date/elapsed.md @@ -0,0 +1,44 @@ +## elapsed + +> DATE + +### Description + +Returns the difference between two dates in milliseconds: `dateB - dateA`. +Uses `Date#getTime()` under the hood. If `dateB` is not provided, the current time is used. + +### Use + +```ts +import { elapsed } from '@feugene/mu/date' + +const a = new Date('2020-01-01T00:00:00Z') +const b = new Date('2020-01-01T00:00:10Z') +elapsed(a, b) // => 10000 + +// Second argument defaults to now +elapsed(a) // => Date.now() - a.getTime() +``` + +### Examples + +```ts +import { elapsed } from '@feugene/mu/date' + +// Basic +elapsed(new Date(0), new Date(1000)) // 1000 + +// Negative (when dateB < dateA) +elapsed(new Date(1000), new Date(0)) // -1000 + +// With current time +const start = new Date() +// ... do work +const ms = elapsed(start) // time spent in ms +``` + +### See also + +- `now` — current timestamp in ms. +- `dateToString` — local formatting. +- `dateToStringUTC` — UTC formatting with `Z` suffix. diff --git a/docs/date/now.md b/docs/date/now.md new file mode 100644 index 0000000..d93f4bc --- /dev/null +++ b/docs/date/now.md @@ -0,0 +1,38 @@ +## now + +> DATE + +### Description + +Returns the current timestamp in milliseconds since the UNIX epoch. +Thin wrapper over `Date.now()`. + +### Use + +```ts +import { now } from '@feugene/mu/date' + +const ts = now() // e.g. 1733356800000 +``` + +### Examples + +```ts +import { now, elapsed } from '@feugene/mu/date' + +const start = now() +// do some work +const end = now() +const diff = end - start + +// same with elapsed(Date) +const begin = new Date() +// work... +const took = elapsed(begin) // ~= diff +``` + +### See also + +- `elapsed` — difference between dates in ms. +- `dateToString` — local formatting. +- `dateToStringUTC` — UTC formatting with `Z` suffix. diff --git a/docs/format/fileSize.md b/docs/format/fileSize.md new file mode 100644 index 0000000..28f364f --- /dev/null +++ b/docs/format/fileSize.md @@ -0,0 +1,39 @@ +## fileSize + +> FORMAT + +### Description + +Formats a byte size into a human‑readable string using units and thousand separators. +Defaults: base `kilo = 1024`, `decimals = 2`, decimal point `'.'`, thousands separator `','`, and a space before unit. + +### Use + +```ts +import { fileSize } from '@feugene/mu/format' + +fileSize(7900221323) // '7.36 Gb' +``` + +### Examples + +```ts +import { fileSize } from '@feugene/mu/format' + +// Bytes +fileSize(512) // '512 bytes' +fileSize(0) // '0 bytes' +fileSize(-1) // '0 bytes' + +// Kb, Mb, Gb +fileSize(1024) // '1 Kb' +fileSize(1024 * 1024) // '1 Mb' +fileSize(7900221323) // '7.36 Gb' + +// Custom base 1000 and formatting +fileSize(1500, 1000, 1, ',', ' ', '') // '1,5K' +``` + +### See also + +- `intWord` — generic compact integer formatter with units. diff --git a/docs/format/number.md b/docs/format/number.md new file mode 100644 index 0000000..43ce5dd --- /dev/null +++ b/docs/format/number.md @@ -0,0 +1,52 @@ +## number + +> FORMAT + +### Description + +Formats a number with thousands separators and a decimal point. +Supports both positional arguments and an options object. + +Special cases: `NaN` → `'NaN'`; `Infinity`/`-Infinity` → stringified as-is; preserves `-0` sign for `decimals = 0`. + +### Use + +```ts +import { number } from '@feugene/mu/format' + +// positional (legacy) +number(10000, 2, '.', ',') // '10,000.00' + +// options object (recommended) +number(10000, { decimals: 2, decPoint: '.', thousandsSeparator: ',', clearDecimals: false }) +``` + +### Examples + +```ts +import { number } from '@feugene/mu/format' + +// Basic +number('10000') // '10,000.00' (decimals default 2) + +// No fraction +number(1234.56, { decimals: 0 }) // '1,235' + +// Clear decimals when integer (no fractional part if abs(value) is integer) +number(1000, { clearDecimals: true }) // '1,000' +number(1000.5, { clearDecimals: true }) // '1,000.50' + +// Custom separators +number(1234567.89, { decPoint: ',', thousandsSeparator: ' ' }) // '1 234 567,89' + +// Edge cases +number(NaN as any) // 'NaN' +number(Infinity) // 'Infinity' +number(-Infinity) // '-Infinity' +number(-0, { decimals: 0 }) // '-0' +``` + +### See also + +- `numberRus` — preset for RU formatting (space group, comma decimal, clear decimals for integers). +- `padNumber`, `padDateTime` — zero-padding helpers. diff --git a/docs/format/numberRus.md b/docs/format/numberRus.md new file mode 100644 index 0000000..cc17181 --- /dev/null +++ b/docs/format/numberRus.md @@ -0,0 +1,37 @@ +## numberRus + +> FORMAT + +### Description + +RU preset for `number()` with a space as thousands separator and a comma as decimal point. +Also enables `clearDecimals` so integer absolute values are rendered without a fractional part. + +### Use + +```ts +import { numberRus } from '@feugene/mu/format' + +numberRus(1001.2) // '1 001,20' +``` + +### Examples + +```ts +import { numberRus } from '@feugene/mu/format' + +// Defaults: decimals = 2, space group, comma decimal, clearDecimals = true +numberRus(1000) // '1 000' +numberRus('1234567.89') // '1 234 567,89' + +// You can control decimals +numberRus(12.3, 3) // '12,300' + +// Edge values +numberRus(0) // '0' +numberRus(-0, 0) // '-0' +``` + +### See also + +- `number` — base formatter with options. diff --git a/docs/format/padDateTime.md b/docs/format/padDateTime.md new file mode 100644 index 0000000..3a8c46f --- /dev/null +++ b/docs/format/padDateTime.md @@ -0,0 +1,33 @@ +## padDateTime + +> FORMAT + +### Description + +Zero‑pad a date/time numeric part to 2 characters. `null`/`undefined` return `'00'`. + +### Use + +```ts +import { padDateTime } from '@feugene/mu/format' + +padDateTime(3) // '03' +``` + +### Examples + +```ts +import { padDateTime } from '@feugene/mu/format' + +padDateTime(0) // '00' +padDateTime(9) // '09' +padDateTime(12) // '12' + +// Nullish → '00' +padDateTime(undefined) // '00' +padDateTime(null) // '00' +``` + +### See also + +- `padNumber` — variable‑width left‑padding. diff --git a/docs/format/padNumber.md b/docs/format/padNumber.md new file mode 100644 index 0000000..726556e --- /dev/null +++ b/docs/format/padNumber.md @@ -0,0 +1,37 @@ +## padNumber + +> FORMAT + +### Description + +Left‑pad a number (or numeric string) with zeros to a target width. +`null`/`undefined` return `'0'`. + +### Use + +```ts +import { padNumber } from '@feugene/mu/format' + +padNumber(2, 3) // '002' +``` + +### Examples + +```ts +import { padNumber } from '@feugene/mu/format' + +// Basic +padNumber(7, 2) // '07' +padNumber('12', 4) // '0012' + +// Nullish → '0' +padNumber(undefined, 2) // '0' +padNumber(null, 2) // '0' + +// Already wide enough — unchanged as string +padNumber(1234, 2) // '1234' +``` + +### See also + +- `padDateTime` — fixed 2‑char zero padding for date/time parts. diff --git a/docs/is/isBlank.md b/docs/is/isBlank.md index 5540419..12119d5 100644 --- a/docs/is/isBlank.md +++ b/docs/is/isBlank.md @@ -12,16 +12,16 @@ Non-strings always return `false`. ```ts import { isBlank, isBlanks } from '@feugene/mu/is' -isBlank('') // true -isBlank(' ') // true -isBlank('\t') // false (literal backslash t) -isBlank('\n') // false (literal backslash n) -isBlank('\r') // false -isBlank('\u00A0')// false -isBlank('\x20') // false - -// Actual whitespace characters are blank: -isBlank('\t'.replace('\\t', '\t')) // true +isBlank('') // true +isBlank(' ') // true +isBlank('\t') // false (literal backslash + t characters) +isBlank('\n') // false (literal backslash + n) +isBlank('\r') // false + +// Actual whitespace characters are blank +isBlank('\t'.replace('\\t', '\t')) // true (real tab) +isBlank('\n'.replace('\\n', '\n')) // true (real newline) +isBlank('\u00A0'.replace('\\u00A0', '\u00A0')) // true (NBSP) isBlanks('', ' ') // true isBlanks('', 'x') // false diff --git a/docs/string/removeConsecutiveDuplicates.md b/docs/string/removeConsecutiveDuplicates.md index 25172cf..dc7f14b 100644 --- a/docs/string/removeConsecutiveDuplicates.md +++ b/docs/string/removeConsecutiveDuplicates.md @@ -9,9 +9,9 @@ Remove consecutive duplicates ## Use ```js +import { removeConsecutiveDuplicates } from '@feugene/mu/string' +// or import from the root (may include more symbols depending on bundler) import { removeConsecutiveDuplicates } from '@feugene/mu' -// or -import { removeConsecutiveDuplicates } from '@feugene/mu/string/replace' ``` ## Examples diff --git a/package.json b/package.json index 85cb0a2..2ee16eb 100644 --- a/package.json +++ b/package.json @@ -109,12 +109,12 @@ "husky": "^9.1.7", "jest": "^29.7.0", "npm-run-all": "^4.1.5", - "prettier": "^3.6.2", - "rimraf": "^6.0.1", + "prettier": "^3.7.4", + "rimraf": "^6.1.2", "ts-jest": "^29.4.1", "tsc-alias": "^1.8.16", "ts-node": "^10.9.2", - "typescript": "^5.9.2" + "typescript": "^5.9.3" }, "keywords": [ "javascript", From 62bf9946212d0550c71e2c1bd16219915ce40572 Mon Sep 17 00:00:00 2001 From: fureev Date: Fri, 5 Dec 2025 08:57:46 +0200 Subject: [PATCH 21/37] add docs --- docs/format/intWord.md | 43 +++++++++++ docs/object/defaults.md | 54 +++++++++++++ docs/object/equals.md | 68 ++++++++++++++++ docs/object/filter.md | 50 ++++++++++++ docs/object/flip.md | 44 +++++++++++ docs/object/fromQueryString.md | 77 +++++++++++++++++++ docs/object/getSize.md | 44 +++++++++++ docs/object/logicalAnd.md | 41 ++++++++++ docs/object/sum.md | 51 ++++++++++++ docs/object/values.md | 45 +++++++++++ docs/sort/sortDescObjectsInArrayByProperty.md | 47 +++++++++++ docs/to/toArray.md | 57 ++++++++++++++ docs/to/toFinite.md | 44 +++++++++++ docs/to/toInteger.md | 40 ++++++++++ docs/to/toNumber.md | 41 ++++++++++ docs/utils/times.md | 46 +++++++++++ 16 files changed, 792 insertions(+) create mode 100644 docs/format/intWord.md create mode 100644 docs/object/defaults.md create mode 100644 docs/object/equals.md create mode 100644 docs/object/filter.md create mode 100644 docs/object/flip.md create mode 100644 docs/object/fromQueryString.md create mode 100644 docs/object/getSize.md create mode 100644 docs/object/logicalAnd.md create mode 100644 docs/object/sum.md create mode 100644 docs/object/values.md create mode 100644 docs/sort/sortDescObjectsInArrayByProperty.md create mode 100644 docs/to/toArray.md create mode 100644 docs/to/toFinite.md create mode 100644 docs/to/toInteger.md create mode 100644 docs/to/toNumber.md create mode 100644 docs/utils/times.md diff --git a/docs/format/intWord.md b/docs/format/intWord.md new file mode 100644 index 0000000..682b408 --- /dev/null +++ b/docs/format/intWord.md @@ -0,0 +1,43 @@ +## intWord + +> FORMAT + +### Description + +Compact integer formatter: scales a number by a base (`kilo`, default 1000) and appends a unit suffix. +Uses `number()` internally for decimal/thousands formatting. + +Default units: `['', 'K', 'M', 'B', 'T']`. + +### Use + +```ts +import { intWord } from '@feugene/mu/format' + +intWord(21323) // '21.32K' +``` + +### Examples + +```ts +import { intWord } from '@feugene/mu/format' + +// Base usage +intWord(999) // '999.00' +intWord(1000) // '1.00K' +intWord(1532000) // '1.53M' + +// Custom units and formatting +intWord(1532, ['','Kb','Mb','Gb'], 1000, 1, ',', ' ', '') // '1,5Kb' + +// Thousands separator +intWord(1234567, undefined, 1000, 2, '.', ',') // '1,23M' + +// Negative numbers +intWord(-1234) // '-1.23K' +``` + +### See also + +- `fileSize` — human‑readable file sizes. +- `number` — base number formatter with options. diff --git a/docs/object/defaults.md b/docs/object/defaults.md new file mode 100644 index 0000000..ecd96aa --- /dev/null +++ b/docs/object/defaults.md @@ -0,0 +1,54 @@ +## defaults + +> OBJECT + +### Description + +Apply default values from one or more source objects to an origin object without mutation. + +Semantics: +- Immutable: returns a new object; inputs are not mutated. +- Keys: only own enumerable string and symbol keys from sources are considered; inherited/non‑enumerable are ignored. +- Guards: forbidden keys `"__proto__"`, `"prototype"`, `"constructor"` are skipped (proto‑pollution safe). +- Deep behavior: if both destination and source values are plain objects, defaults are applied recursively. +- Arrays: when setting a missing key from a source array, the array is cloned (no element‑wise merge). +- Presence rule: a key is considered present if it exists as an own property on destination, even if `undefined` or `null` — such keys are not overwritten. + +### Use + +```ts +import { defaults } from '@feugene/mu/object' + +defaults({ a: { b: 2 } }, { a: { b: 1, c: 3 } }) +// => { a: { b: 2, c: 3 } } +``` + +### Examples + +```ts +import { defaults } from '@feugene/mu/object' + +// Basic +defaults({ a: 1 }, { b: 2 }, { a: 3 }) // { a: 1, b: 2 } + +// Nested objects merge only when both sides are plain objects +defaults({ o: { x: 1 } }, { o: { y: 2 } }) // { o: { x: 1, y: 2 } } + +// Arrays: cloned if assigned; not merged element‑wise +defaults({}, { list: [1, 2] }) // { list: [1, 2] } (new array) + +// Presence rule +defaults({ a: undefined }, { a: 1 }) // { a: undefined } +defaults({ a: null }, { a: 1 }) // { a: null } + +// Symbols (enumerable) +const S = Symbol('k') +defaults({}, { [S]: 1 }) // { [S]: 1 } + +// Security: forbidden keys ignored +defaults({}, { __proto__: { polluted: true } }) // {} +``` + +### See also + +- `merge` — immutable deep merge for plain objects. diff --git a/docs/object/equals.md b/docs/object/equals.md new file mode 100644 index 0000000..a00c9d0 --- /dev/null +++ b/docs/object/equals.md @@ -0,0 +1,68 @@ +## equals + +> OBJECT + +### Description + +Deeply compares the contents of **two or more objects** using strict equality. + +Supports nested plain objects, arrays, Dates, RegExps and wrapper objects like `new String()` / `new Number()`. +Handles `NaN` specially (two `NaN` numbers are treated as equal). Throws if called with fewer than two arguments. + +### Use + +```ts +import { objectsEqual } from '@feugene/mu/object' + +objectsEqual({ a: 1 }, { a: 1 }) // true +``` + +### Examples + +```ts +import { objectsEqual } from '@feugene/mu/object' + +// Basic equality +objectsEqual({ a: 1, b: 2 }, { a: 1, b: 2 }) // true +objectsEqual({ a: 1 }, { a: 2 }) // false + +// Multiple objects +objectsEqual({ a: 1 }, { a: 1 }, { a: 1 }) // true +objectsEqual({ a: 1 }, { a: 1 }, { a: 2 }) // false + +// Nested structures +objectsEqual( + { user: { id: 1, roles: ['admin'] } }, + { user: { id: 1, roles: ['admin'] } } +) // true + +// Dates and RegExp +objectsEqual( + { created: new Date('2020-01-01T00:00:00Z') }, + { created: new Date('2020-01-01T00:00:00Z') } +) // true + +objectsEqual( + { re: /foo/i }, + { re: /foo/i } +) // true + +// NaN handling +objectsEqual({ value: NaN }, { value: NaN }) // true + +// Prototype / constructor differences +class A { constructor(public x: number) {} } +class B { constructor(public x: number) {} } + +objectsEqual({ v: new A(1) }, { v: new A(1) }) // true +objectsEqual({ v: new A(1) }, { v: new B(1) }) // false + +// Incorrect usage (fewer than two arguments) +// objectsEqual({ a: 1 }) // throws Error('Need two or more arguments to compare') +``` + +### See also + +- `merge` — immutable deep merge for plain objects. +- `defaults` — immutable defaults application. + diff --git a/docs/object/filter.md b/docs/object/filter.md new file mode 100644 index 0000000..63121f8 --- /dev/null +++ b/docs/object/filter.md @@ -0,0 +1,50 @@ +## filter + +> OBJECT + +### Description + +Filters an object's own enumerable key–value pairs using a predicate and returns a **new object** with only the entries +for which the predicate returns `true`. + +Under the hood it uses `Object.entries` and `Object.fromEntries`, so only own enumerable string keys are processed. + +### Use + +```ts +import { filter } from '@feugene/mu/object' + +const scores = { John: 2, Sarah: 3, Janet: 1 } +const high = filter(scores, ([name, score]) => score > 1) +// high === { John: 2, Sarah: 3 } +``` + +### Examples + +```ts +import { filter } from '@feugene/mu/object' + +// Basic numeric filter +const scores = { John: 2, Sarah: 3, Janet: 1 } +filter(scores, ([, score]) => score >= 2) // { John: 2, Sarah: 3 } + +// Filter by key +const settings = { debug: true, featureX: false, featureY: true } +filter(settings, ([key]) => key.startsWith('feature')) +// { featureX: false, featureY: true } + +// Immutability: original is not changed +const original = { a: 1, b: 2 } +const filtered = filter(original, ([, v]) => v > 1) +// filtered === { b: 2 } +// original === { a: 1, b: 2 } + +// Empty object +filter({}, () => true) // {} +``` + +### See also + +- `pick` — pick properties by explicit keys. +- `removeEmpty` — recursively remove empty values. + diff --git a/docs/object/flip.md b/docs/object/flip.md new file mode 100644 index 0000000..9b41441 --- /dev/null +++ b/docs/object/flip.md @@ -0,0 +1,44 @@ +## flip + +> OBJECT + +### Description + +Swaps keys with values in a flat object. + +Creates a new object where each original value becomes a key and each original key becomes the value. If multiple keys +share the same value, the **last one wins**. + +### Use + +```ts +import { flip } from '@feugene/mu/object' + +flip({ A: 1, B: 2, C: 3 }) +// { 1: 'A', 2: 'B', 3: 'C' } +``` + +### Examples + +```ts +import { flip } from '@feugene/mu/object' + +// Basic +flip({ A: 1, B: 2, C: 3 }) // { 1: 'A', 2: 'B', 3: 'C' } + +// Colliding values — last key wins +flip({ a: 'x', b: 'y', c: 'x' }) // { x: 'c', y: 'b' } + +// Non-string values become property keys via default coercion +flip({ a: true, b: false, c: null }) +// { 'true': 'a', 'false': 'b', 'null': 'c' } + +// Empty object +flip({}) // {} +``` + +### See also + +- `values` — get values of an object. +- `getSize` — count own properties. + diff --git a/docs/object/fromQueryString.md b/docs/object/fromQueryString.md new file mode 100644 index 0000000..12d405a --- /dev/null +++ b/docs/object/fromQueryString.md @@ -0,0 +1,77 @@ +## fromQueryString + +> OBJECT + +### Description + +Converts a query string back into a plain object. + +Uses native `URLSearchParams` for decoding and supports two modes: + +- **Non-recursive** (default): each key becomes a property; repeated keys are collected into arrays. +- **Recursive** (`recursive = true`): parses Rails-style bracket syntax into nested objects/arrays + (e.g. `user[name]=Jack&tags[0]=a&tags[1]=b`). + +Security: forbidden keys `"__proto__"`, `"prototype"`, `"constructor"` are ignored at all nesting levels to +prevent prototype pollution. + +### Use + +```ts +import { fromQueryString } from '@feugene/mu/object' + +fromQueryString('foo=1&bar=2') +// { foo: '1', bar: '2' } +``` + +### Examples + +```ts +import { fromQueryString } from '@feugene/mu/object' + +// Basic decoding +fromQueryString('foo=1&bar=2') +// { foo: '1', bar: '2' } + +// Empty and special characters +fromQueryString('foo=&bar=2') +// { foo: '', bar: '2' } + +fromQueryString('some%20price=%24300') +// { 'some price': '$300' } + +// Repeated keys → arrays (non-recursive) +fromQueryString('colors=red&colors=green&colors=blue') +// { colors: ['red', 'green', 'blue'] } + +// Recursive nested structures +const qs = [ + 'user[name]=Jack', + 'user[address][city]=Berlin', + 'tags[0]=coding', + 'tags[1]=music', + 'extra[0][0]=nested', + 'extra[0][1]=stuff', +].join('&') + +fromQueryString(qs, true) +// { +// user: { name: 'Jack', address: { city: 'Berlin' } }, +// tags: ['coding', 'music'], +// extra: [['nested', 'stuff']], +// } + +// Leading question mark is ignored +fromQueryString('?foo=1&bar=2') +// { foo: '1', bar: '2' } + +// Proto-pollution attempts are ignored +fromQueryString('__proto__=polluted') +// {} +``` + +### See also + +- `toQueryString` — encode an object into a query string. +- `toQueryObjects` — lower-level helper producing name/value pairs. + diff --git a/docs/object/getSize.md b/docs/object/getSize.md new file mode 100644 index 0000000..74a930b --- /dev/null +++ b/docs/object/getSize.md @@ -0,0 +1,44 @@ +## getSize + +> OBJECT + +### Description + +Returns the **number of own enumerable properties** of an object. + +Throws an error if the argument is not a plain object. + +### Use + +```ts +import { getSize } from '@feugene/mu/object' + +getSize({ a: 1, b: [], c: {} }) // 3 +``` + +### Examples + +```ts +import { getSize } from '@feugene/mu/object' + +// Basic +getSize({}) // 0 +getSize({ a: 1 }) // 1 +getSize({ a: 1, b: 2, c: 3 }) // 3 + +// Inherited properties are ignored +const base = { a: 1 } +const obj = Object.create(base) +obj.b = 2 +getSize(obj) // 1 (only own key 'b') + +// Non-object throws +// getSize(null as any) // throws Error('Param is not object') +// getSize('test' as any) // throws Error('Param is not object') +``` + +### See also + +- `values` — get array of own enumerable values. +- `flip` — swap keys and values. + diff --git a/docs/object/logicalAnd.md b/docs/object/logicalAnd.md new file mode 100644 index 0000000..02527a0 --- /dev/null +++ b/docs/object/logicalAnd.md @@ -0,0 +1,41 @@ +## logicalAnd + +> OBJECT + +### Description + +Performs a logical **AND** over the values of an object's properties. + +Iterates over keys and returns `false` as soon as it encounters a strict `false` value. If no property is `false`, +returns `true` (including when the object is empty). + +### Use + +```ts +import { logicalAnd } from '@feugene/mu/object' + +logicalAnd({ a: true, b: true }) // true +``` + +### Examples + +```ts +import { logicalAnd } from '@feugene/mu/object' + +// All truthy but not strictly false → true +logicalAnd({ a: true, b: 1, c: 'yes' }) // true + +// Any strict false → false +logicalAnd({ a: true, b: false, c: true }) // false + +// Non-boolean values +logicalAnd({ a: 0, b: '', c: null }) // true (none is === false) + +// Empty object +logicalAnd({}) // true +``` + +### See also + +- `sum` — numeric aggregation over object values. + diff --git a/docs/object/sum.md b/docs/object/sum.md new file mode 100644 index 0000000..5977ccc --- /dev/null +++ b/docs/object/sum.md @@ -0,0 +1,51 @@ +## sum + +> OBJECT + +### Description + +Sums values of an object's properties with special handling for functions, `null`/`undefined`, booleans and +non-numeric values. + +Algorithm (per property): + +- If value is a function → call it and use its return value. +- If value is `null`, `undefined` or strictly `false` → treat as `0`. +- If value is **not** numeric (according to internal `isNumeric`) → treat as `1`. +- Otherwise, coerce to `number` and add to the accumulator. + +### Use + +```ts +import { sum } from '@feugene/mu/object' + +sum({ a: 1, b: 2, c: 3 }) // 6 +``` + +### Examples + +```ts +import { sum } from '@feugene/mu/object' + +// Basic numbers +sum({ a: 1, b: 2, c: 3 }) // 6 + +// Functions are evaluated +sum({ a: () => 2, b: () => 3 }) // 5 + +// Nullish and false → 0 +sum({ a: null, b: undefined, c: false }) // 0 + +// Non-numeric values → 1 each +sum({ a: 'foo', b: {}, c: [] }) // 3 + +// Mixed values +sum({ a: 1, b: '2', c: 'foo', d: () => 4 }) +// a:1, b:2, c:1 (non-numeric), d:4 → total 8 +``` + +### See also + +- `logicalAnd` — boolean aggregation over object values. +- `getSize` — count properties. + diff --git a/docs/object/values.md b/docs/object/values.md new file mode 100644 index 0000000..99e67c3 --- /dev/null +++ b/docs/object/values.md @@ -0,0 +1,45 @@ +## values + +> OBJECT + +### Description + +Creates an array of the object's **own enumerable property values**. + +For `null` and `undefined` it returns an empty array. + +### Use + +```ts +import { values } from '@feugene/mu/object' + +values({ a: 1, b: 2 }) // [1, 2] +``` + +### Examples + +```ts +import { values } from '@feugene/mu/object' + +// Basic +values({ a: 1, b: 2, c: 3 }) // [1, 2, 3] + +// String object +values('hi' as any) // ['h', 'i'] (depends on JS coercion) + +// Symbols: only enumerable symbol properties are included +const S = Symbol('k') +const obj: any = { a: 1 } +Object.defineProperty(obj, S, { value: 2, enumerable: true }) +values(obj) // [1, 2] + +// Null / undefined +values(null as any) // [] +values(undefined as any) // [] +``` + +### See also + +- `getSize` — count own properties. +- `flip` — swap keys and values. + diff --git a/docs/sort/sortDescObjectsInArrayByProperty.md b/docs/sort/sortDescObjectsInArrayByProperty.md new file mode 100644 index 0000000..0230bf3 --- /dev/null +++ b/docs/sort/sortDescObjectsInArrayByProperty.md @@ -0,0 +1,47 @@ +## sortDescObjectsInArrayByProperty + +> SORT + +### Description + +Sorts an array of objects **in descending order** by a given property path. + +The property path can be nested using dot notation (e.g. `'user.score'`). + +### Use + +```ts +import { sortDescObjectsInArrayByProperty } from '@feugene/mu/sort' + +const items = [ + { id: 1, score: 10 }, + { id: 2, score: 30 }, + { id: 3, score: 20 }, +] + +sortDescObjectsInArrayByProperty(items, 'score') +// [ { id: 2, score: 30 }, { id: 3, score: 20 }, { id: 1, score: 10 } ] +``` + +### Examples + +```ts +import { sortDescObjectsInArrayByProperty } from '@feugene/mu/sort' + +// Nested property +const posts = [ + { id: 1, meta: { views: 10 } }, + { id: 2, meta: { views: 50 } }, + { id: 3, meta: { views: 30 } }, +] + +sortDescObjectsInArrayByProperty(posts, 'meta.views') +// [ { id: 2, meta: { views: 50 } }, { id: 3, meta: { views: 30 } }, { id: 1, meta: { views: 10 } } ] + +// Stable for equal values (order kept for equal keys, depending on implementation) +``` + +### See also + +- `sortObjectsInArrayByProperty` — ascending sort by property. + diff --git a/docs/to/toArray.md b/docs/to/toArray.md new file mode 100644 index 0000000..71e4bc9 --- /dev/null +++ b/docs/to/toArray.md @@ -0,0 +1,57 @@ +## toArray + +> TO + +### Description + +Converts a value to an array. + +Behavior overview: + +- `null`/`undefined` → `[]`. +- Array-like values (arrays, strings, arguments, typed arrays) → copy of elements + (`string` is split into characters). +- Numbers/booleans and numeric/boolean-like values → single-element array `[value]`. +- Iterables (with `Symbol.iterator`) → collected into an array. +- Other objects → their own enumerable values (via `object/values`). + +### Use + +```ts +import { toArray } from '@feugene/mu/to' + +toArray('test') // ['t', 'e', 's', 't'] +``` + +### Examples + +```ts +import { toArray } from '@feugene/mu/to' + +// Objects → values +toArray({ a: 1, b: 2 }) // [1, 2] + +// Strings → characters +toArray('abc') // ['a', 'b', 'c'] + +// Numbers / booleans → single-element arrays +toArray(1) // [1] +toArray(true) // [true] + +// Nullish → [] +toArray(null) // [] +toArray(undefined) // [] + +// Iterables +function* gen() { + yield 1 + yield 2 +} +toArray(gen()) // [1, 2] +``` + +### See also + +- `values` — get values of an object. +- `toNumber` — numeric conversion. + diff --git a/docs/to/toFinite.md b/docs/to/toFinite.md new file mode 100644 index 0000000..d4031fd --- /dev/null +++ b/docs/to/toFinite.md @@ -0,0 +1,44 @@ +## toFinite + +> TO + +### Description + +Converts a value to a **finite number** (integer). Intended to mirror Lodash-style `toFinite` semantics. + +Common behavior (see tests and implementation): + +- Numeric strings are parsed. +- `Infinity` / `-Infinity` are clamped to large finite values. +- `NaN` and non-numeric values become `0`. + +### Use + +```ts +import { toFinite } from '@feugene/mu/to' + +toFinite('-3.2') // 3 +``` + +### Examples + +```ts +import { toFinite } from '@feugene/mu/to' + +// Strings +toFinite('3.2') // 3 +toFinite('-3.2') // 3 + +// Numbers +toFinite(4.9) // 4 + +// Non-numeric → 0 +toFinite('foo') // 0 +toFinite(null as any) // 0 +``` + +### See also + +- `toInteger` — integer conversion. +- `toNumber` — general number conversion. + diff --git a/docs/to/toInteger.md b/docs/to/toInteger.md new file mode 100644 index 0000000..39af414 --- /dev/null +++ b/docs/to/toInteger.md @@ -0,0 +1,40 @@ +## toInteger + +> TO + +### Description + +Converts a value to an integer. + +Numeric strings are parsed; fractional parts are truncated toward zero. + +### Use + +```ts +import { toInteger } from '@feugene/mu/to' + +toInteger('3.2') // 3 +``` + +### Examples + +```ts +import { toInteger } from '@feugene/mu/to' + +// Strings +toInteger('3.2') // 3 +toInteger('-3.9') // -3 + +// Numbers +toInteger(4.9) // 4 +toInteger(-4.1) // -4 + +// Non-numeric → 0 (depending on implementation) +toInteger('foo' as any) // 0 +``` + +### See also + +- `toFinite` — finite integer conversion. +- `toNumber` — general number conversion. + diff --git a/docs/to/toNumber.md b/docs/to/toNumber.md new file mode 100644 index 0000000..3248293 --- /dev/null +++ b/docs/to/toNumber.md @@ -0,0 +1,41 @@ +## toNumber + +> TO + +### Description + +Converts a value to a JavaScript number. + +Numeric strings are parsed, booleans become `1`/`0`, and other values follow standard JS coercion. + +### Use + +```ts +import { toNumber } from '@feugene/mu/to' + +toNumber('3.2') // 3.2 +``` + +### Examples + +```ts +import { toNumber } from '@feugene/mu/to' + +// Strings +toNumber('3.2') // 3.2 +toNumber('-3.2') // -3.2 + +// Booleans +toNumber(true) // 1 +toNumber(false) // 0 + +// Null / undefined +toNumber(null as any) // 0 +toNumber(undefined as any) // NaN (per JS coercion) +``` + +### See also + +- `toInteger` — integer conversion. +- `toFinite` — finite integer conversion. + diff --git a/docs/utils/times.md b/docs/utils/times.md new file mode 100644 index 0000000..fc41269 --- /dev/null +++ b/docs/utils/times.md @@ -0,0 +1,46 @@ +## times + +> UTILITIES + +### Description + +Invokes the iteratee function `n` times, returning an array of the results of each invocation. + +Common patterns: generate ranges, mock data, repeated computations. + +### Use + +```ts +import { times } from '@feugene/mu/utils' + +times(3, i => i) +// [0, 1, 2] +``` + +### Examples + +```ts +import { times } from '@feugene/mu/utils' + +// Basic range +times(5, i => i) // [0, 1, 2, 3, 4] + +// Random numbers +times(3, () => Math.random()) // [0.12..., 0.87..., 0.45...] (example) + +// Objects +times(3, i => ({ id: i + 1 })) +// [ { id: 1 }, { id: 2 }, { id: 3 } ] + +// Side-effects +const result: number[] = [] +times(3, i => { + result.push(i * 2) +}) +// result === [0, 2, 4] +``` + +### See also + +- `toArray` — convert various values to arrays. + From f9273d6fa37afa101f3197b578f2c5033c4fd2f1 Mon Sep 17 00:00:00 2001 From: fureev Date: Fri, 5 Dec 2025 09:03:53 +0200 Subject: [PATCH 22/37] add docs --- docs/is/isArguments.md | 49 +++++++++++++++++++++++++++++++++++++++ docs/is/isArray.md | 47 ++++++++++++++++++++++++++++++++++++++ docs/is/isArrayLike.md | 52 ++++++++++++++++++++++++++++++++++++++++++ docs/is/isBlob.md | 50 ++++++++++++++++++++++++++++++++++++++++ docs/is/isBoolean.md | 45 ++++++++++++++++++++++++++++++++++++ docs/is/isBuffer.md | 41 +++++++++++++++++++++++++++++++++ docs/is/isDate.md | 46 +++++++++++++++++++++++++++++++++++++ 7 files changed, 330 insertions(+) create mode 100644 docs/is/isArguments.md create mode 100644 docs/is/isArray.md create mode 100644 docs/is/isArrayLike.md create mode 100644 docs/is/isBlob.md create mode 100644 docs/is/isBoolean.md create mode 100644 docs/is/isBuffer.md create mode 100644 docs/is/isDate.md diff --git a/docs/is/isArguments.md b/docs/is/isArguments.md new file mode 100644 index 0000000..415f47a --- /dev/null +++ b/docs/is/isArguments.md @@ -0,0 +1,49 @@ +## isArguments + +> IS + +### Description + +Checks if a value is likely an `arguments` object. + +Uses an internal tag check (`[object Arguments]`) when available, with a safe fallback that relies on the presence of +non-enumerable `callee` for older environments. + +### Use + +```ts +import { isArguments } from '@feugene/mu/is' + +isArguments((function () { + return arguments +})()) // true + +isArguments([1, 2, 3]) // false +``` + +### Examples + +```ts +import { isArguments } from '@feugene/mu/is' + +// Direct call on arguments +function demo() { + return isArguments(arguments) +} + +demo(1, 2, 3) // true + +// Arrays and other objects +isArguments([1, 2, 3]) // false +isArguments({ length: 2, 0: 'a', 1: 'b' }) // false + +// Null / undefined +isArguments(null as any) // false +isArguments(undefined as any) // false +``` + +### See also + +- `isArray` — check for real arrays. +- `isArrayLike` — array-like values (length + index properties). + diff --git a/docs/is/isArray.md b/docs/is/isArray.md new file mode 100644 index 0000000..e8f82d7 --- /dev/null +++ b/docs/is/isArray.md @@ -0,0 +1,47 @@ +## isArray / isArrays + +> IS + +### Description + +Array predicates. + +- `isArray(value)` — checks if a single value is an array (`Array.isArray`). +- `isArrays(...values)` — returns `true` if **all** provided values are arrays. + +### Use + +```ts +import { isArray, isArrays } from '@feugene/mu/is' + +isArray([1, 2, 3]) // true +isArray('test') // false + +isArrays([1], [2, 3]) // true +isArrays([1], 'nope') // false +``` + +### Examples + +```ts +import { isArray, isArrays } from '@feugene/mu/is' + +// Basic checks +isArray([]) // true +isArray(new Array(3)) // true +isArray({ length: 2 }) // false + +// Multiple values +isArrays([], [1, 2]) // true +isArrays([], {}, null) // false + +// Edge cases +isArray(null as any) // false +isArray(undefined as any) // false +``` + +### See also + +- `toArray` — convert arbitrary values to arrays. +- `isArrayLike` — array-like values that are not necessarily arrays. + diff --git a/docs/is/isArrayLike.md b/docs/is/isArrayLike.md new file mode 100644 index 0000000..0fab282 --- /dev/null +++ b/docs/is/isArrayLike.md @@ -0,0 +1,52 @@ +## isArrayLike + +> IS + +### Description + +Checks if a value is **array-like**: not a function and has a valid non-negative `length` property within safe bounds. + +Typical array-like values: strings, `arguments`, typed arrays, NodeLists and other DOM collections. + +### Use + +```ts +import { isArrayLike } from '@feugene/mu/is' + +isArrayLike('abc') // true +isArrayLike([1, 2, 3]) // true +isArrayLike({ length: 2 }) // true +isArrayLike(() => {}) // false +``` + +### Examples + +```ts +import { isArrayLike } from '@feugene/mu/is' + +// Strings +isArrayLike('test') // true + +// Real arrays and typed arrays +isArrayLike([1, 2, 3]) // true +isArrayLike(new Uint8Array(2)) // true + +// Arguments +function demo() { + return isArrayLike(arguments) +} +demo(1, 2, 3) // true + +// Plain objects with length +isArrayLike({ length: 2, 0: 'a', 1: 'b' }) // true + +// Not array-like +isArrayLike({}) // false +isArrayLike(() => {}) // false +``` + +### See also + +- `isArray` — strict array check. +- `toArray` — convert array-like/iterable values to arrays. + diff --git a/docs/is/isBlob.md b/docs/is/isBlob.md new file mode 100644 index 0000000..88ecb36 --- /dev/null +++ b/docs/is/isBlob.md @@ -0,0 +1,50 @@ +## isBlob / isBlobs + +> IS + +### Description + +Blob predicates (browser / Web API oriented). + +- `isBlob(value)` — checks if a single value is an instance of `Blob`. +- `isBlobs(...values)` — returns `true` if **all** provided values are `Blob` instances. + +Works in environments where the global `Blob` constructor is available. In Node 22+ this is exposed via the +standard Web APIs. + +### Use + +```ts +import { isBlob, isBlobs } from '@feugene/mu/is' + +const blob = new Blob(['hello'], { type: 'text/plain' }) + +isBlob(blob) // true +isBlob('not a blob') // false + +isBlobs(blob, new Blob()) // true +``` + +### Examples + +```ts +import { isBlob, isBlobs } from '@feugene/mu/is' + +// Single value +isBlob(new Blob()) // true +isBlob({} as any) // false + +// Multiple values +isBlobs(new Blob(), new Blob(['1'])) // true +isBlobs(new Blob(), 'x' as any) // false + +// Null / undefined +isBlob(null as any) // false +isBlob(undefined as any) // false +``` + +### See also + +- `isBuffer` — Node.js Buffer check. +- `isTypedArray` — typed array instances. + diff --git a/docs/is/isBoolean.md b/docs/is/isBoolean.md new file mode 100644 index 0000000..2c90e5b --- /dev/null +++ b/docs/is/isBoolean.md @@ -0,0 +1,45 @@ +## isBoolean / isBooleans + +> IS + +### Description + +Boolean predicates. + +- `isBoolean(value)` — checks if a value is a boolean **primitive or object** (`true`, `false`, `new Boolean(...)`). +- `isBooleans(...values)` — returns `true` if all provided values are booleans. + +### Use + +```ts +import { isBoolean, isBooleans } from '@feugene/mu/is' + +isBoolean(true) // true +isBoolean(false) // true +isBoolean(new Boolean(true)) // true +isBoolean(1) // false + +isBooleans(true, false, new Boolean(false)) // true +``` + +### Examples + +```ts +import { isBoolean, isBooleans } from '@feugene/mu/is' + +// Basic +isBoolean(true) // true +isBoolean(false) // true +isBoolean(0) // false +isBoolean('true') // false + +// Variadic +isBooleans(true, false) // true +isBooleans(true, 1 as any) // false +``` + +### See also + +- `isNumeric` — numeric and numeric-string predicate. +- `toNumber` — convert booleans to numbers. + diff --git a/docs/is/isBuffer.md b/docs/is/isBuffer.md new file mode 100644 index 0000000..d0cde3e --- /dev/null +++ b/docs/is/isBuffer.md @@ -0,0 +1,41 @@ +## isBuffer + +> IS + +### Description + +Checks if a value is a Node.js `Buffer` instance. + +Under the hood it reuses the standard `Buffer.isBuffer` when running in a Node environment, with fallbacks for +bundler/browser shims where `Buffer` is polyfilled. + +### Use + +```ts +import { isBuffer } from '@feugene/mu/is' + +isBuffer(Buffer.alloc(2)) // true +isBuffer(new Uint8Array(2)) // false +``` + +### Examples + +```ts +import { isBuffer } from '@feugene/mu/is' + +// Node.js buffers +isBuffer(Buffer.from('hi')) // true + +// Typed arrays are not buffers +isBuffer(new Uint8Array(2)) // false + +// Other types +isBuffer('not a buffer' as any) // false +isBuffer(null as any) // false +``` + +### See also + +- `isBlob` — browser/Web Blob check. +- `isTypedArray` — typed array instances. + diff --git a/docs/is/isDate.md b/docs/is/isDate.md new file mode 100644 index 0000000..54459a3 --- /dev/null +++ b/docs/is/isDate.md @@ -0,0 +1,46 @@ +## isDate / isDates + +> IS + +### Description + +Date predicates. + +- `isDate(value)` — checks if a value is a `Date` instance. +- `isDates(...values)` — returns `true` if all provided values are `Date` instances. + +This does **not** verify that the date is valid (`!Number.isNaN(date.getTime())`); it only checks the type. + +### Use + +```ts +import { isDate, isDates } from '@feugene/mu/is' + +isDate(new Date()) // true +isDate('2020-01-01') // false + +isDates(new Date(), new Date('2020-01-01')) // true +``` + +### Examples + +```ts +import { isDate, isDates } from '@feugene/mu/is' + +// Basic +isDate(new Date()) // true +isDate(Date.now()) // false + +// Multiple +isDates(new Date(0), new Date(1)) // true +isDates(new Date(), 'not date' as any) // false + +// Invalid Date still counts as Date (type-only check) +const d = new Date('not a real date') +isDate(d) // true +``` + +### See also + +- `parseISO` — strict date parsing helper in `@feugene/mu/date`. +- `dateToString` / `dateToStringUTC` — formatting helpers. From 8502a9bcda05754c5d33e57585afc8e5e5b2dfb7 Mon Sep 17 00:00:00 2001 From: fureev Date: Fri, 5 Dec 2025 09:07:29 +0200 Subject: [PATCH 23/37] add docs --- docs/is/isEmpty.md | 57 +++++++++++++++++++++++++++++++++++++++++++++ docs/is/isEven.md | 58 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 115 insertions(+) create mode 100644 docs/is/isEmpty.md create mode 100644 docs/is/isEven.md diff --git a/docs/is/isEmpty.md b/docs/is/isEmpty.md new file mode 100644 index 0000000..280f917 --- /dev/null +++ b/docs/is/isEmpty.md @@ -0,0 +1,57 @@ +## isEmpty + +> IS + +### Description + +Checks if a value is considered "empty" according to the library rules. + +General behavior (see implementation and tests): + +- `null` and `undefined` are empty. +- Empty string `''` is empty; non-empty strings are not. +- Empty arrays `[]` are empty; arrays with at least one element are not. +- Empty plain objects `{}` are empty; objects with at least one own property are not. +- `true` is treated as empty (historical behavior); `false` is not. + +### Use + +```ts +import { isEmpty } from '@feugene/mu/is' + +isEmpty(null) // true +isEmpty(undefined) // true +isEmpty('') // true +isEmpty([]) // true +isEmpty({}) // true +``` + +### Examples + +```ts +import { isEmpty } from '@feugene/mu/is' + +// scalars +isEmpty(null) // true +isEmpty(undefined) // true +isEmpty('') // true +isEmpty(' ') // false +isEmpty(0) // false + +// booleans (historical semantics) +isEmpty(true) // true +isEmpty(false) // false + +// arrays +isEmpty([]) // true +isEmpty([1]) // false + +// objects +isEmpty({}) // true +isEmpty({ a: 1 }) // false +``` + +### See also + +- `isBlank` — checks for blank (whitespace-only) strings. +- `removeEmpty` — recursively removes empty values from objects. diff --git a/docs/is/isEven.md b/docs/is/isEven.md new file mode 100644 index 0000000..c89b8b2 --- /dev/null +++ b/docs/is/isEven.md @@ -0,0 +1,58 @@ +## isEven / isEvens + +> IS + +### Description + +Even-number predicates. + +- `isEven(value)` — checks if a value is an even finite number or numeric string. +- `isEvens(...values)` — returns `true` if all provided values are even. + +Behavior (current implementation): + +- Accepts numbers and numeric strings (after `Number()` conversion and `Number.isFinite`). +- Rejects `NaN`, `Infinity`, non-numeric strings, arrays, objects, booleans. + +### Use + +```ts +import { isEven, isEvens } from '@feugene/mu/is' + +isEven(2) // true +isEven('4') // true +isEven(3) // false + +isEvens(2, 4, '8') // true +``` + +### Examples + +```ts +import { isEven, isEvens } from '@feugene/mu/is' + +// Numbers +isEven(0) // true +isEven(1) // false +isEven(-2) // true + +// Numeric strings +isEven('2') // true +isEven(' 4 ') // true (trimmed) +isEven('2.0') // true +isEven('2.5') // false + +// Invalid values +isEven('foo' as any) // false +isEven(NaN as any) // false +isEven(Infinity as any) // false + +// Multiple +isEvens(2, 4, '6') // true +isEvens(2, 3) // false +``` + +### See also + +- `isNumeric` — numeric predicate for numbers and numeric strings. +- `isInteger` — integer predicate. From 0ad2d8e03a32f8912e9ffb6c8cf8eee0237a264e Mon Sep 17 00:00:00 2001 From: fureev Date: Fri, 5 Dec 2025 09:20:20 +0200 Subject: [PATCH 24/37] add docs --- docs/array/arrayEach.md | 48 +++++++++++++++++++++++++++++ docs/array/clear.md | 39 +++++++++++++++++++++++ docs/array/difference.md | 44 ++++++++++++++++++++++++++ docs/array/equals.md | 47 ++++++++++++++++++++++++++++ docs/array/intersect.md | 41 ++++++++++++++++++++++++ docs/array/intersectAll.md | 38 +++++++++++++++++++++++ docs/array/random.md | 35 +++++++++++++++++++++ docs/array/symmetricalDifference.md | 40 ++++++++++++++++++++++++ docs/string/clearSpaces.md | 44 ++++++++++++++++++++++++++ docs/string/endsWith.md | 41 ++++++++++++++++++++++++ docs/string/normalizeCustom.md | 40 ++++++++++++++++++++++++ docs/string/padEnd.md | 36 ++++++++++++++++++++++ docs/string/startsWith.md | 38 +++++++++++++++++++++++ docs/string/stringToArray.md | 39 +++++++++++++++++++++++ docs/string/titleCase.md | 38 +++++++++++++++++++++++ docs/string/trim.md | 38 +++++++++++++++++++++++ docs/string/upperFirst.md | 41 ++++++++++++++++++++++++ 17 files changed, 687 insertions(+) create mode 100644 docs/array/arrayEach.md create mode 100644 docs/array/clear.md create mode 100644 docs/array/difference.md create mode 100644 docs/array/equals.md create mode 100644 docs/array/intersect.md create mode 100644 docs/array/intersectAll.md create mode 100644 docs/array/random.md create mode 100644 docs/array/symmetricalDifference.md create mode 100644 docs/string/clearSpaces.md create mode 100644 docs/string/endsWith.md create mode 100644 docs/string/normalizeCustom.md create mode 100644 docs/string/padEnd.md create mode 100644 docs/string/startsWith.md create mode 100644 docs/string/stringToArray.md create mode 100644 docs/string/titleCase.md create mode 100644 docs/string/trim.md create mode 100644 docs/string/upperFirst.md diff --git a/docs/array/arrayEach.md b/docs/array/arrayEach.md new file mode 100644 index 0000000..7004049 --- /dev/null +++ b/docs/array/arrayEach.md @@ -0,0 +1,48 @@ +## arrayEach + +> ARRAY + +### Description + +Specialized `forEach` for arrays. + +Iterates over each element of an array, calling the iteratee with `(value, index, array)` and returning the original +array. Short-circuits are not supported: you should use regular loops if you need early exit. + +### Use + +```ts +import { arrayEach } from '@feugene/mu/array' + +arrayEach([1, 2, 3], (value, index) => { + console.log(index, value) +}) +// logs: 0 1, 1 2, 2 3 +``` + +### Examples + +```ts +import { arrayEach } from '@feugene/mu/array' + +// Basic iteration +const input = [1, '2', {}, []] +const result: any[] = [] + +arrayEach(input, (value, index) => { + result.push([index, value]) +}) + +// result === [ [0, 1], [1, '2'], [2, {}], [3, []] ] +// input is not modified structurally (кроме возможных мутаций самих элементов). + +// Chaining-style usage (returns the same array) +const arr = [1, 2, 3] +const same = arrayEach(arr, v => v) +// same === arr +``` + +### See also + +- `forEach` — generic iterator for arrays/objects. + diff --git a/docs/array/clear.md b/docs/array/clear.md new file mode 100644 index 0000000..4813e44 --- /dev/null +++ b/docs/array/clear.md @@ -0,0 +1,39 @@ +## clear + +> ARRAY + +### Description + +Clears an array **in place**, removing all its elements. The original array is mutated and returned (for chaining). + +### Use + +```ts +import { clear } from '@feugene/mu/array' + +const items = [1, 2, 3] +clear(items) +// items === [] +``` + +### Examples + +```ts +import { clear } from '@feugene/mu/array' + +const numbers = [1, 2, 3, 4] +const ref = clear(numbers) + +// Mutates the original array +numbers // [] +ref === numbers // true + +// Works with any array-like of items +const items: Array = ['a', 'b', 1] +clear(items) // [] +``` + +### See also + +- `arrayEach` — iterate without clearing. + diff --git a/docs/array/difference.md b/docs/array/difference.md new file mode 100644 index 0000000..6c8c50d --- /dev/null +++ b/docs/array/difference.md @@ -0,0 +1,44 @@ +## difference + +> ARRAY + +### Description + +Returns elements from the first array that are **not present** in the second array. + +Uses strict equality (`===`) to compare values. + +### Use + +```ts +import { difference } from '@feugene/mu/array' + +difference([2], [1, 4, 8]) // [2] +``` + +### Examples + +```ts +import { difference } from '@feugene/mu/array' + +// Basic +difference([1, 2, 3], [2, 4]) // [1, 3] + +// No intersection +difference([1, 2], [3, 4]) // [1, 2] + +// All removed +difference([1, 2], [1, 2]) // [] + +// With objects (=== semantics) +const a = { id: 1 } +const b = { id: 1 } + +difference([a, b], [a]) // [b] +``` + +### See also + +- `intersect` — intersection of two arrays. +- `symmetricalDifference` — anti-intersection of two arrays. + diff --git a/docs/array/equals.md b/docs/array/equals.md new file mode 100644 index 0000000..63fc860 --- /dev/null +++ b/docs/array/equals.md @@ -0,0 +1,47 @@ +## equals + +> ARRAY + +### Description + +Deeply compares two arrays using strict equality for elements. + +Arrays are considered equal if they have the same length and each pair of corresponding elements is deeply equal +according to the library's array/object comparison rules (primitives via `===`, nested arrays/objects recursed). + +### Use + +```ts +import { equals } from '@feugene/mu/array' + +equals([1, '2', {}, []], [1, '2', {}, []]) // true +``` + +### Examples + +```ts +import { equals } from '@feugene/mu/array' + +// Primitives +equals([1, 2, 3], [1, 2, 3]) // true +equals([1, 2], [1, 2, 3]) // false + +// Nested arrays/objects +equals([ + 1, + { a: 2 }, + [3, 4], +], [ + 1, + { a: 2 }, + [3, 4], +]) // true + +// Reference differences for objects still matter according to deep-equals rules +``` + +### See also + +- `objectsEqual` — deep equality for objects. +- `intersect` — overlap of two arrays. + diff --git a/docs/array/intersect.md b/docs/array/intersect.md new file mode 100644 index 0000000..4c4e2ea --- /dev/null +++ b/docs/array/intersect.md @@ -0,0 +1,41 @@ +## intersect + +> ARRAY + +### Description + +Returns a new array of values that are present in **both** input arrays. + +Uses strict equality (`===`) to compare values. + +### Use + +```ts +import { intersect } from '@feugene/mu/array' + +intersect([1, 2, 3, 4, 5], [1, 4, 8]) // [1, 4] +``` + +### Examples + +```ts +import { intersect } from '@feugene/mu/array' + +// Simple intersection +intersect([1, 2, 3], [2, 3, 4]) // [2, 3] + +// No intersection +intersect([1, 2], [3, 4]) // [] + +// With objects (=== semantics) +const a = { id: 1 } +const b = { id: 1 } + +intersect([a, b], [b]) // [b] +``` + +### See also + +- `intersectAll` — intersection of multiple arrays. +- `difference` — elements present only in the first array. + diff --git a/docs/array/intersectAll.md b/docs/array/intersectAll.md new file mode 100644 index 0000000..90b2226 --- /dev/null +++ b/docs/array/intersectAll.md @@ -0,0 +1,38 @@ +## intersectAll + +> ARRAY + +### Description + +Returns a new array of values that are common to **all** provided arrays. + +Uses strict equality (`===`) to compare values. + +### Use + +```ts +import { intersectAll } from '@feugene/mu/array' + +intersectAll([1, 2, 3, 4, 5], [1, 4, 8], [1]) // [1] +``` + +### Examples + +```ts +import { intersectAll } from '@feugene/mu/array' + +// Two arrays +intersectAll([1, 2, 3], [2, 3, 4]) // [2, 3] + +// Three arrays +intersectAll([1, 2, 3], [2, 3, 4], [3, 2]) // [2, 3] (order depends on implementation) + +// No common elements +intersectAll([1, 2], [2, 3], [4]) // [] +``` + +### See also + +- `intersect` — intersection of two arrays. +- `symmetricalDifference` — symmetric difference. + diff --git a/docs/array/random.md b/docs/array/random.md new file mode 100644 index 0000000..94b866e --- /dev/null +++ b/docs/array/random.md @@ -0,0 +1,35 @@ +## random + +> ARRAY + +### Description + +Returns a random element from an array. + +If the array is empty, returns `undefined`. + +### Use + +```ts +import { random } from '@feugene/mu/array' + +random([1, 2, 3, 4, 5]) // e.g. 3 +``` + +### Examples + +```ts +import { random } from '@feugene/mu/array' + +const items = ['a', 'b', 'c'] +const value = random(items) +// value is one of 'a', 'b', 'c' + +// Empty array +random([]) // undefined +``` + +### See also + +- `arrayEach` — iterate over all items. + diff --git a/docs/array/symmetricalDifference.md b/docs/array/symmetricalDifference.md new file mode 100644 index 0000000..a531d20 --- /dev/null +++ b/docs/array/symmetricalDifference.md @@ -0,0 +1,40 @@ +## symmetricalDifference + +> ARRAY + +### Description + +Returns the **symmetric difference** of two arrays: values that are present in exactly one of the arrays, but not in +both. + +Uses strict equality (`===`) to compare values. + +### Use + +```ts +import { symmetricalDifference } from '@feugene/mu/array' + +symmetricalDifference([1, 2, 3, 4, 5], [1, 4, 8]) +// [2, 3, 5, 8] +``` + +### Examples + +```ts +import { symmetricalDifference } from '@feugene/mu/array' + +// Basic +symmetricalDifference([1, 2, 3], [3, 4]) // [1, 2, 4] + +// No overlap → concat unique values +symmetricalDifference([1, 2], [3, 4]) // [1, 2, 3, 4] + +// Full overlap → empty +symmetricalDifference([1, 2], [1, 2]) // [] +``` + +### See also + +- `difference` — elements present only in the first array. +- `intersect` — common elements. + diff --git a/docs/string/clearSpaces.md b/docs/string/clearSpaces.md new file mode 100644 index 0000000..1ebdb57 --- /dev/null +++ b/docs/string/clearSpaces.md @@ -0,0 +1,44 @@ +## clearSpaces + +> STRING + +### Description + +Removes extra spaces from a string. + +Collapses consecutive whitespace characters into a single space and trims leading/trailing whitespace. Useful for +normalizing user input. + +### Use + +```ts +import { clearSpaces } from '@feugene/mu/string' + +clearSpaces(' hello world ') +// 'hello world' +``` + +### Examples + +```ts +import { clearSpaces } from '@feugene/mu/string' + +// Leading and trailing spaces +clearSpaces(' foo ') // 'foo' + +// Multiple internal spaces +clearSpaces('foo bar baz') // 'foo bar baz' + +// Tabs and newlines are treated as spaces +clearSpaces('\tfoo\nbar baz') // 'foo bar baz' + +// Empty and already-trimmed strings +clearSpaces('') // '' +clearSpaces('foo') // 'foo' +``` + +### See also + +- `trim` — trim only leading and trailing whitespace. +- `normalizeCustom` — normalize using a custom RegExp. + diff --git a/docs/string/endsWith.md b/docs/string/endsWith.md new file mode 100644 index 0000000..db40b0e --- /dev/null +++ b/docs/string/endsWith.md @@ -0,0 +1,41 @@ +## endsWith + +> STRING + +### Description + +Checks if a string ends with the given target substring. + +Thin wrapper over `String.prototype.endsWith`. + +### Use + +```ts +import { endsWith } from '@feugene/mu/string' + +endsWith('hello world', 'world') // true +endsWith('hello world', 'hello') // false +``` + +### Examples + +```ts +import { endsWith } from '@feugene/mu/string' + +// Basic usage +endsWith('index.ts', '.ts') // true +endsWith('index.ts', '.js') // false + +// Case-sensitive +endsWith('Hello', 'lo') // true +endsWith('Hello', 'Lo') // false + +// Empty target +endsWith('abc', '') // true +``` + +### See also + +- `startsWith` — check beginning of a string. +- `trimSuffix` — remove a suffix when present. + diff --git a/docs/string/normalizeCustom.md b/docs/string/normalizeCustom.md new file mode 100644 index 0000000..11cfd5b --- /dev/null +++ b/docs/string/normalizeCustom.md @@ -0,0 +1,40 @@ +## normalizeCustom + +> STRING + +### Description + +Normalizes a string using a custom regular expression. + +Typically used to replace or remove characters that do not match an allowed pattern. Works similarly to +`string.replace(customRegExp, replacement)` but encapsulated as a helper for common patterns. + +### Use + +```ts +import { normalizeCustom } from '@feugene/mu/string' + +// Remove all non-letter characters +normalizeCustom('user-123_name', /[^a-zA-Z]+/g, '') +// 'username' +``` + +### Examples + +```ts +import { normalizeCustom } from '@feugene/mu/string' + +// Keep only digits +normalizeCustom('tel: +1 (234) 567-89', /[^0-9]+/g, '') +// '123456789' + +// Collapse multiple dashes +normalizeCustom('a---b--c', /-+/g, '-') +// 'a-b-c' +``` + +### See also + +- `normalizeName` — preconfigured normalization for `[0-9a-zA-Z_]`. +- `normalizeKebab` — normalization to kebab-case. + diff --git a/docs/string/padEnd.md b/docs/string/padEnd.md new file mode 100644 index 0000000..2026e95 --- /dev/null +++ b/docs/string/padEnd.md @@ -0,0 +1,36 @@ +## padEnd + +> STRING + +### Description + +Right-pads a string with a given fill character until it reaches a target length. + +Wrapper around `String.prototype.padEnd`, with explicit arguments `(value, targetLength, padChar)`. + +### Use + +```ts +import { padEnd } from '@feugene/mu/string' + +padEnd('1', 3, '0') // '100' +``` + +### Examples + +```ts +import { padEnd } from '@feugene/mu/string' + +// Basic +padEnd('a', 3, '.') // 'a..' +padEnd('abc', 3, '.') // 'abc' (already long enough) + +// Numeric-like strings +padEnd('12', 5, '0') // '12000' +``` + +### See also + +- `padStart` — add leading symbols. +- `padNumber` — zero-pad numbers to fixed width. + diff --git a/docs/string/startsWith.md b/docs/string/startsWith.md new file mode 100644 index 0000000..5cd580b --- /dev/null +++ b/docs/string/startsWith.md @@ -0,0 +1,38 @@ +## startsWith + +> STRING + +### Description + +Checks if a string starts with the given target substring. + +Thin wrapper over `String.prototype.startsWith`. + +### Use + +```ts +import { startsWith } from '@feugene/mu/string' + +startsWith('hello world', 'hello') // true +startsWith('hello world', 'world') // false +``` + +### Examples + +```ts +import { startsWith } from '@feugene/mu/string' + +// Basic +startsWith('index.ts', 'index') // true +startsWith('index.ts', '.ts') // false + +// Case-sensitive +startsWith('Hello', 'He') // true +startsWith('Hello', 'he') // false +``` + +### See also + +- `endsWith` — check ending of a string. +- `trimPrefix` — remove a prefix when present. + diff --git a/docs/string/stringToArray.md b/docs/string/stringToArray.md new file mode 100644 index 0000000..149c2bc --- /dev/null +++ b/docs/string/stringToArray.md @@ -0,0 +1,39 @@ +## stringToArray + +> STRING + +### Description + +Converts a string to an array of characters, taking into account Unicode (surrogate pairs) so that composed symbols are +handled correctly. + +Used internally by `toArray` and other helpers when splitting strings. + +### Use + +```ts +import { stringToArray } from '@feugene/mu/string' + +stringToArray('test') // ['t', 'e', 's', 't'] +``` + +### Examples + +```ts +import { stringToArray } from '@feugene/mu/string' + +// Basic ASCII +stringToArray('abc') // ['a', 'b', 'c'] + +// Unicode emojis (implementation aims to keep glyphs) +stringToArray('👍👍') // ['👍', '👍'] (depending on environment) + +// Empty string +stringToArray('') // [] +``` + +### See also + +- `hasUnicode` — checks if string contains Unicode symbols. +- `toArray` — converts various values to arrays. + diff --git a/docs/string/titleCase.md b/docs/string/titleCase.md new file mode 100644 index 0000000..31eb919 --- /dev/null +++ b/docs/string/titleCase.md @@ -0,0 +1,38 @@ +## titleCase + +> STRING + +### Description + +Converts the first character of **every word** in a string to upper case. + +Words are separated by whitespace and punctuation (см. реализацию). The rest of each word is left as-is. + +### Use + +```ts +import { titleCase } from '@feugene/mu/string' + +titleCase('hello world') // 'Hello World' +``` + +### Examples + +```ts +import { titleCase } from '@feugene/mu/string' + +// Basic +titleCase('lorem ipsum') // 'Lorem Ipsum' + +// Mixed case +titleCase('hELLO wORLD') // 'HELLO WORLD' (overall effect depends on implementation) + +// With punctuation +titleCase('hello-world') // 'Hello-World' +``` + +### See also + +- `upperFirst` — only first character of string. +- `camelCase` / `pascalCase` — word-based casing helpers. + diff --git a/docs/string/trim.md b/docs/string/trim.md new file mode 100644 index 0000000..1f80e7f --- /dev/null +++ b/docs/string/trim.md @@ -0,0 +1,38 @@ +## trim + +> STRING + +### Description + +Trims leading and trailing whitespace from a string. + +Wrapper around `String.prototype.trim`. + +### Use + +```ts +import { trim } from '@feugene/mu/string' + +trim(' hello ') // 'hello' +``` + +### Examples + +```ts +import { trim } from '@feugene/mu/string' + +// Spaces +trim(' foo ') // 'foo' + +// Tabs and newlines +trim('\tfoo\n') // 'foo' + +// Empty string +trim('') // '' +``` + +### See also + +- `clearSpaces` — collapse and normalize internal spaces. +- `trimAny` — trim custom characters. + diff --git a/docs/string/upperFirst.md b/docs/string/upperFirst.md new file mode 100644 index 0000000..037bdd5 --- /dev/null +++ b/docs/string/upperFirst.md @@ -0,0 +1,41 @@ +## upperFirst + +> STRING + +### Description + +Converts the first character of a string to upper case, leaving the rest unchanged. + +If the string is empty, returns an empty string. + +### Use + +```ts +import { upperFirst } from '@feugene/mu/string' + +upperFirst('hello') // 'Hello' +``` + +### Examples + +```ts +import { upperFirst } from '@feugene/mu/string' + +// Basic +upperFirst('hello') // 'Hello' + +// Already capitalized +upperFirst('Hello') // 'Hello' + +// Single character +upperFirst('a') // 'A' + +// Empty string +upperFirst('') // '' +``` + +### See also + +- `titleCase` — capitalize first character of every word. +- `camelCase` / `pascalCase` — casing helpers. + From c26a7755c33b6a47d46b5fe7eab77fc8b08e7c84 Mon Sep 17 00:00:00 2001 From: fureev Date: Fri, 5 Dec 2025 09:57:34 +0200 Subject: [PATCH 25/37] add docs --- docs/README.md | 123 +++++++++++++++++++++++---------------------- docs/is/isFloat.md | 0 docs/ru/README.md | 1 + 3 files changed, 63 insertions(+), 61 deletions(-) create mode 100644 docs/is/isFloat.md diff --git a/docs/README.md b/docs/README.md index db2883c..008a409 100644 --- a/docs/README.md +++ b/docs/README.md @@ -70,71 +70,72 @@ The library is ESM-first and works in modern browsers (after bundling) and Node ### Is -| Function | Return | Example | -|:---------------------------|:-------|:-------------------------------------------------------| -| isArguments | bool | `isArguments([1,2]); // false` | -| isArray | bool | `isArray([1,2]); // true` | -| isArrayLike | bool | `isArrayLike('abc'); // true` | -| isBlob | bool | `isBlob(new Blob([])); // true` | -| isBoolean | bool | `isBoolean(true); // true` | -| isBuffer | bool | `isBuffer(Buffer.alloc(2)); // true` | -| isDate | bool | `isDate(new Date()); // true` | -| isEmpty | bool | `isEmpty(null, undefined, ''); // true` | -| isBlank | bool | `isBlank(' '); // true` | -| isEmptyObject | bool | `isEmptyObject({}); // true` | -| isEven | bool | `isEven(2); // true` | -| isEvens | bool | `isEvens(2, 4, '8'); // true` | -| isFloat | bool | `isFloat(2.2); // true` | -| isFloatCanonical | bool | `isFloatCanonical('2.0'); // true` | -| isFloats | bool | `isFloats('2.2','+2.1'); // true` | -| isFunction | bool | `isFunction(() => {}); // true` | -| isInteger | bool | `isInteger(12); // true` | -| isLength | bool | `isLength(3); // true` | -| isNil | bool | `isNil(undefined); // true` | -| isNils | bool | `isNils(null, undefined); // true` | -| isNull | bool | `isNull(null); // true` | -| isNulls | bool | `isNulls(null, undefined); // false` | -| isNumeric | bool | `isNumeric('1e3'); // true` | -| [isObject](is/isObject.md) | bool | `isObject([], '12', 4, Function); // false` | -| isObjectLike | bool | `isObjectLike([]); // true` | -| isString | bool | `isString('test'); // true` | -| isSymbol | bool | `isSymbol(Symbol('a')); // true` | -| isTypedArray | bool | `isTypedArray(new Uint8Array(2)); // true` | +| Function | Return | Example | +|:-----------------------------------------------|:-------|:-------------------------------------------------------| +| [isArguments](is/isArguments.md) | bool | `isArguments([1,2]); // false` | +| [isArray](is/isArray.md) | bool | `isArray([1,2]); // true` | +| [isArrayLike](is/isArrayLike.md) | bool | `isArrayLike('abc'); // true` | +| [isBlob](is/isBlob.md) | bool | `isBlob(new Blob([])); // true` | +| [isBoolean](is/isBoolean.md) | bool | `isBoolean(true); // true` | +| [isBuffer](is/isBuffer.md) | bool | `isBuffer(Buffer.alloc(2)); // true` | +| [isDate](is/isDate.md) | bool | `isDate(new Date()); // true` | +| [isEmpty](is/isEmpty.md) | bool | `isEmpty(null, undefined, ''); // true` | +| [isBlank](is/isBlank.md) | bool | `isBlank(' '); // true` | +| [isEmptyObject](is/isObject.md) | bool | `isEmptyObject({}); // true` | +| [isEven](is/isEven.md) | bool | `isEven(2); // true` | +| [isEvens](is/isEven.md) | bool | `isEvens(2, 4, '8'); // true` | +| [isFloat](is/isFloat.md) | bool | `isFloat(2.2); // true` | +| [isFloatCanonical](is/isFloat.md) | bool | `isFloatCanonical('2.0'); // true` | +| [isFloats](is/isFloat.md) | bool | `isFloats('2.2','+2.1'); // true` | +| [isFunction](is/isFunction.md) | bool | `isFunction(() => {}); // true` | +| [isInteger](is/isInteger.md) | bool | `isInteger(12); // true` | +| [isLength](is/isLength.md) | bool | `isLength(3); // true` | +| [isNil](is/isNil.md) | bool | `isNil(undefined); // true` | +| [isNils](is/isNil.md) | bool | `isNils(null, undefined); // true` | +| [isNull](is/isNull.md) | bool | `isNull(null); // true` | +| [isNulls](is/isNull.md) | bool | `isNulls(null, undefined); // false` | +| [isNumeric](is/isNumeric.md) | bool | `isNumeric('1e3'); // true` | +| [isObject](is/isObject.md) | bool | `isObject([], '12', 4, Function); // false` | +| [isObjectLike](is/isObjectLike.md) | bool | `isObjectLike([]); // true` | +| [isString](is/isString.md) | bool | `isString('test'); // true` | +| [isSymbol](is/isSymbol.md) | bool | `isSymbol(Symbol('a')); // true` | +| [isTypedArray](is/isTypedArray.md) | bool | `isTypedArray(new Uint8Array(2)); // true` | +| [isUrl](is/isUrl.md) | bool | `isUrl('https://example.com'); // true` | ### Array -| Function | Return | Description | Example | -|:----------------------|:-------|:---------------------------------------------------------------------------------|:---------------------------------------------------------------------| -| arrayEach | array | A specialized version of `forEach` for arrays | `arrayEach([1, '2', {}, []], (el)=>{...})` | -| clear | void | Clear array | | -| difference | array | The difference will output the elements from array A that are not in the array B | `difference([2], [1, 4, 8])); // [2]` | -| equals | bool | Deep comparing the contents of 2 arrays using strict equality | `equals([1, '2', {}, []], [1, '2', {}, []])` | -| intersect | array | Return common items for two arrays | `intersect([1, 2, 3, 4, 5], [1, 4, 8]); // [1,4]` | -| intersectAll | array | Return common items for all arrays | `intersectAll([1, 2, 3, 4, 5], [1, 4, 8],[1])); // [1]` | -| random | array | Random function returns random item from array | `random([1,2,3,4,5]]);` | -| symmetricalDifference | array | will output anti-intersection | `symmetricalDifference([1, 2, 3, 4, 5], [1, 4, 8]); // [2, 3, 5, 8]` | +| Function | Return | Description | Example | +|:-------------------------------------------------------|:-------|:---------------------------------------------------------------------------------|:---------------------------------------------------------------------| +| [arrayEach](array/arrayEach.md) | array | A specialized version of `forEach` for arrays | `arrayEach([1, '2', {}, []], (el)=>{...})` | +| [clear](array/clear.md) | void | Clear array | | +| [difference](array/difference.md) | array | The difference will output the elements from array A that are not in the array B | `difference([2], [1, 4, 8])); // [2]` | +| [equals](array/equals.md) | bool | Deep comparing the contents of 2 arrays using strict equality | `equals([1, '2', {}, []], [1, '2', {}, []])` | +| [intersect](array/intersect.md) | array | Return common items for two arrays | `intersect([1, 2, 3, 4, 5], [1, 4, 8]); // [1,4]` | +| [intersectAll](array/intersectAll.md) | array | Return common items for all arrays | `intersectAll([1, 2, 3, 4, 5], [1, 4, 8],[1])); // [1]` | +| [random](array/random.md) | array | Random function returns random item from array | `random([1,2,3,4,5]]);` | +| [symmetricalDifference](array/symmetricalDifference.md) | array | will output anti-intersection | `symmetricalDifference([1, 2, 3, 4, 5], [1, 4, 8]); // [2, 3, 5, 8]` | ### Object | Function | Return | Description | Example | Result | |:-------------------------------------------|:--------|:------------------------------------------------------------------------------------------|:----------------------------------------------------------------|:-----------------------------| -| defaults | object | Add to source object missing properties from other sources | `defaults({ a: { b:2 }}, { a: { b:1, c:3 }})` | `{a:{ b:2, c:3 }}` | -| equals | bool | Deep comparing the contents of 2 or more object using strict equality | `equals({k: 1, v: [1,2,{}]}, {k: 1, v: [1,2,{}]})` | | -| filter | object | Filter props in Object | `filter({key1:1, key:4}, ([key, value])=>value > 1)` | `{key:4}` | -| flip | object | Swap key with value | `swap({a:1, b:'test', c:3})` | `{1:'a', 'test':'b', 3:'c'}` | -| fromQueryString | object | Converts a query string back into an object | `fromQueryString('foo=1&bar=2')` | | -| getSize | int | Returns count of properties of the object | `getSize({k: 1, v: []})` | | -| logicalAnd | boolean | Logical `AND` by object's values | `logicalAnd({ a: true, b: true, c: false })` | `false` | +| [defaults](object/defaults.md) | object | Add to source object missing properties from other sources | `defaults({ a: { b:2 }}, { a: { b:1, c:3 }})` | `{a:{ b:2, c:3 }}` | +| [objectsEqual](object/equals.md) | bool | Deep comparing the contents of 2 or more object using strict equality | `equals({k: 1, v: [1,2,{}]}, {k: 1, v: [1,2,{}]})` | | +| [filter](object/filter.md) | object | Filter props in Object | `filter({key1:1, key:4}, ([key, value])=>value > 1)` | `{key:4}` | +| [flip](object/flip.md) | object | Swap key with value | `swap({a:1, b:'test', c:3})` | `{1:'a', 'test':'b', 3:'c'}` | +| [fromQueryString](object/fromQueryString.md) | object | Converts a query string back into an object | `fromQueryString('foo=1&bar=2')` | | +| [getSize](object/getSize.md) | int | Returns count of properties of the object | `getSize({k: 1, v: []})` | | +| [logicalAnd](object/logicalAnd.md) | boolean | Logical `AND` by object's values | `logicalAnd({ a: true, b: true, c: false })` | `false` | | [merge](object/merge.md) | object | Merge 2 or more objects recursively | `merge({k: 1}, {v: 'test'}, {k: 2})` | | | [pathToObject](object/pathToObject.md) | object | Return Object from sting path | `pathToObject('key.sub', 1)` | {key:{sub:1}} | | [pick](object/pick.md) | object | Creates an object composed of the picked object properties. | `pick({a:1, b:2, c:3}, ['a', 'b'])` | | | [remove](object/remove.md) | object | Remove value by deep key in object(array) | `remove(obj, 'key.sub.items.1')` | | | [removeEmpty](object/removeEmpty.md) | object | Removes all empty values in an `object` recursively | `removeEmpty({val:'hi', val2:null, val3:{}})` | `{val:'hi'}` | | [select](object/select.md) | mixed | Get value by deep key in object(array) | `select(obj, 'key.sub.items.1')` | | -| sum | Number | Sum of object's values | `sum({ a: 1, b: 2, c: 3 })` | `6` | +| [sum](object/sum.md) | Number | Sum of object's values | `sum({ a: 1, b: 2, c: 3 })` | `6` | | [toQueryObjects](object/toQueryObjects.md) | object | Converts a `name` - `value` pair to an array of objects with support for nested structure | `toQueryObjects('hobbies', ['reading', 'cooking', 'swimming'])` | | | [toQueryString](object/toQueryString.md) | string | Takes an object and converts it to an encoded query string | `toQueryString({colors: ['red', 'green', 'blue']}` | | -| values | array | Creates an array of the own enumerable string keyed property values of `object` | `values('hi')` | `['h','i']` | +| [values](object/values.md) | array | Creates an array of the own enumerable string keyed property values of `object` | `values('hi')` | `['h','i']` | ### To @@ -150,34 +151,34 @@ The library is ESM-first and works in modern browsers (after bundling) and Node | Function | Return | Description | Example | |:---------------------------------------------------------------------|:-------------|:------------------------------------------------------|:--------------------------------------------------------| -| [sortObjectsInArrayByProperty](sort/sortObjectsInArrayByProperty.md) | array-object | Allows to sort an array into an objects by key | `sortObjectsInArrayByProperty(object, 'list.title') | -| sortDescObjectsInArrayByProperty | array-object | Allows to sort (DESC) an array into an objects by key | `sortDescObjectsInArrayByProperty(object, 'list.title') | +| [sortObjectsInArrayByProperty](sort/sortObjectsInArrayByProperty.md) | array-object | Allows to sort an array into an objects by key | `sortObjectsInArrayByProperty(object, 'list.title')` | +| [sortDescObjectsInArrayByProperty](sort/sortDescObjectsInArrayByProperty.md) | array-object | Allows to sort (DESC) an array into an objects by key | `sortDescObjectsInArrayByProperty(object, 'list.title')` | ### String | Function | Return | Description | |:----------------------------------------------------------------------|:-------|:---------------------------------------------------------------------| | [camelCase](string/camelCase.md) | string | Convert a dash/dot/underscore/space separated string to camelCase | -| clearSpaces | string | Remove extra spaces from string | -| endsWith | string | Checks if string ends with the given target string | +| [clearSpaces](string/clearSpaces.md) | string | Remove extra spaces from string | +| [endsWith](string/endsWith.md) | string | Checks if string ends with the given target string | | [hasUnicode](string/hasUnicode.md) | bool | Checks if `string` contains Unicode symbols | -| normalizeCustom | string | Normalize string by custom RegExp | +| [normalizeCustom](string/normalizeCustom.md) | string | Normalize string by custom RegExp | | [normalizeName](string/normalizeName.md) | string | Normalize string by RegExp `[^0-9a-zA-Z_]` | | [normalizeKebab](string/normalizeKebab.md) | string | Normalize string to kebab (by RegExp `[^0-9a-zA-Z\-]`) | | [padStart](string/padStart.md) | string | add leading symbols | -| padEnd | string | add ending symbols | +| [padEnd](string/padEnd.md) | string | add ending symbols | | [pascalCase](string/pascalCase.md) | string | Convert a dash/dot/underscore/space separated string to PascalCase | | [removeConsecutiveDuplicates](string/removeConsecutiveDuplicates.md) | string | Remove consecutive duplicates | | [replaceByTemplate](string/replaceByTemplate.md) | string | Translate characters or replace substrings in string by map | -| startsWith | string | Checks if string starts with the given target string | -| stringToArray | string | Converts `string` to an array | +| [startsWith](string/startsWith.md) | string | Checks if string starts with the given target string | +| [stringToArray](string/stringToArray.md) | string | Converts `string` to an array | | [strtr](string/strtr.md) | string | Translate characters or replace substrings in string | -| titleCase | string | Converts the first character of every word into string to upper case | -| trim | string | | +| [titleCase](string/titleCase.md) | string | Converts the first character of every word into string to upper case | +| [trim](string/trim.md) | string | Trim leading and trailing whitespace | | [trimAny](string/trimAny.md) | string | Trim any characters | | [trimPrefix](string/trimPrefix.md) | string | Remove a prefix from a target string | | [trimSuffix](string/trimSuffix.md) | string | Remove a suffix from a target string | -| upperFirst | string | Converts the first character of string to upper case | +| [upperFirst](string/upperFirst.md) | string | Converts the first character of string to upper case | ### Date @@ -206,7 +207,7 @@ The library is ESM-first and works in modern browsers (after bundling) and Node |:----------------------------------------|:-------|:-------------------------------------------------------------------------------------| | [b64ToUtf8](utils/b64ToUtf8.md) | string | Decode string from base-64 to Unicode | | [b64ToUtf8Safe](utils/b64ToUtf8Safe.md) | string | Decode from safe base-64 to Unicode string | -| times | string | Invokes the iteratee `n` times, returning an array of the results of each invocation | +| [times](utils/times.md) | string | Invokes the iteratee `n` times, returning an array of the results of each invocation | | [utf8ToB64](utils/utf8ToB64.md) | string | Encode string from Unicode to base-64 | | [utf8Tob64Safe](utils/utf8Tob64Safe.md) | string | Encode from Unicode string to safe base-64 | diff --git a/docs/is/isFloat.md b/docs/is/isFloat.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/ru/README.md b/docs/ru/README.md index ae6cf7b..5d68b44 100644 --- a/docs/ru/README.md +++ b/docs/ru/README.md @@ -79,6 +79,7 @@ import { merge } from '@feugene/mu' | isString | bool | `isString('test'); // true` | | isSymbol | bool | `isSymbol(Symbol('a')); // true` | | isTypedArray | bool | `isTypedArray(new Uint8Array(2)); // true` | +| isUrl | bool | `isUrl('https://example.com'); // true` | ## Array From ecd9505dccc4defbf657b6eb1fc877cb54921f79 Mon Sep 17 00:00:00 2001 From: fureev Date: Fri, 5 Dec 2025 11:07:54 +0200 Subject: [PATCH 26/37] add docs --- docs/README.md | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/docs/README.md b/docs/README.md index 008a409..6ccb7d8 100644 --- a/docs/README.md +++ b/docs/README.md @@ -43,6 +43,22 @@ import { merge } from '@feugene/mu' The library is ESM-first and works in modern browsers (after bundling) and Node 22+ CLI. +### Import style + +Prefer importing from submodules for better tree-shaking: + +```ts +// Preferred: submodule imports +import { number } from '@feugene/mu/format' +import { isEmpty } from '@feugene/mu/is' +import { merge } from '@feugene/mu/object' + +// Root import (valid, but may pull more code depending on bundler) +import { numberRus, defaults } from '@feugene/mu' +``` + +All examples in method pages follow this pattern: `import { fn } from '@feugene/mu/
'`. + ## Table of Contents - [Core](#core) @@ -216,6 +232,46 @@ The library is ESM-first and works in modern browsers (after bundling) and Node - Stack - Queue +--- + +## Behavior changes in v5 + +Compared to earlier major versions, v5 introduces clearer, safer semantics: + +- **Object helpers** + - `merge` and `defaults` are now **immutable**: they return new objects instead of mutating inputs. + - Both ignore dangerous keys (`"__proto__"`, `"prototype"`, `"constructor"`) to prevent prototype pollution. + - Deep merge/defaults apply only to plain objects; arrays are cloned but not merged element-wise. + +- **Clone** + - `clone` uses native `structuredClone` where safe (Node 22+/modern browsers) with a predictable fallback for plain + objects/arrays and Dates. + +- **Date** + - `parseISO` is a **strict** parser: accepts only ISO/RFC3339 or epoch-ms strings, returns `null` for ambiguous + formats. + - `dateToString` (local) и `dateToStringUTC` (UTC) теперь явно документируют таймзону и формат. + +- **Format** + - `number` / `numberRus` корректно обрабатывают `NaN`, `Infinity`, `-0`, имеют options-object API и стабильную + локальную семантику (`numberRus`: запятая как десятичный разделитель, пробел — тысячный). + +See individual method pages for more details and examples. + +--- + +## Documentation quality and checks + +To keep documentation in sync with code: + +- All helpers listed in the tables above have dedicated pages in `docs/
/*.md`. +- Tables link only to existing files; new helpers should be added to both the table and their own method page. + +Recommended future automation (not included in the package, но легко добавить в CI): + +- Script that scans `docs/README.md` and `docs/ru/README.md` and verifies that every linked file exists. +- Optional type-level tests (e.g. via `tsd`) that compile `Use`-examples from docs to ensure signatures stay valid. + ## Test ```bash From 1d0a3acc3ca23a0eb704b03937b751c3eb8c99ef Mon Sep 17 00:00:00 2001 From: fureev Date: Fri, 5 Dec 2025 11:36:28 +0200 Subject: [PATCH 27/37] fix --- .github/workflows/nodejs.yml | 2 +- docs/is/isFloat.md | 68 +++++++++++++++++++++++++++++++++ docs/is/isInteger.md | 45 ++++++++++++++++++++++ docs/is/isLength.md | 35 +++++++++++++++++ docs/is/isNil.md | 41 ++++++++++++++++++++ docs/is/isNull.md | 39 +++++++++++++++++++ docs/is/isNumeric.md | 47 +++++++++++++++++++++++ docs/is/isObjectLike.md | 37 ++++++++++++++++++ docs/is/isString.md | 39 +++++++++++++++++++ docs/is/isSymbol.md | 33 ++++++++++++++++ docs/is/isTypedArray.md | 34 +++++++++++++++++ package.json | 8 ++-- scripts/check-doc-links.ts | 47 +++++++++++++++++++++++ {.scripts => scripts}/rename.ts | 0 14 files changed, 471 insertions(+), 4 deletions(-) create mode 100644 docs/is/isInteger.md create mode 100644 docs/is/isLength.md create mode 100644 docs/is/isNil.md create mode 100644 docs/is/isNull.md create mode 100644 docs/is/isNumeric.md create mode 100644 docs/is/isObjectLike.md create mode 100644 docs/is/isString.md create mode 100644 docs/is/isSymbol.md create mode 100644 docs/is/isTypedArray.md create mode 100644 scripts/check-doc-links.ts rename {.scripts => scripts}/rename.ts (100%) diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index e9a8bbe..76f42aa 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -77,7 +77,7 @@ jobs: ${{ runner.os }}-node- - run: yarn install - - run: yarn test + - run: yarn test-all env: CI: true diff --git a/docs/is/isFloat.md b/docs/is/isFloat.md index e69de29..e27d35a 100644 --- a/docs/is/isFloat.md +++ b/docs/is/isFloat.md @@ -0,0 +1,68 @@ +## isFloat / isFloats / isFloatCanonical + +> IS + +### Description + +Float predicates. + +- `isFloat(value)` — checks if a single value is a floating‑point number (non‑integer) after numeric coercion. +- `isFloats(...values)` — variadic version: returns `true` if all provided values are floats; throws if called with no + arguments or if any value is not numeric. +- `isFloatCanonical(value)` — checks via regex that a **string representation** of a number matches the canonical + float pattern (e.g. `'2.0'`, `'-2.0'`, `'3.14'`). + +Under the hood: +- `isFloat` uses `Number.parseFloat` и проверяет, что `n % 1 !== 0` (не целое число). +- `isFloats` сначала пытается привести все параметры к числу, выбрасывая ошибку, если что‑то не парсится в число. +- `isFloatCanonical` использует регулярку `reIsFloat` из `~/core/vars`. + +### Use + +```ts +import { isFloat, isFloats, isFloatCanonical } from '@feugene/mu/is' + +isFloat(2.2) // true +isFloat(2) // false + +isFloats('2.2', '+3.5') // true + +isFloatCanonical('2.0') // true +isFloatCanonical('2') // false +``` + +### Examples + +```ts +import { isFloat, isFloats, isFloatCanonical } from '@feugene/mu/is' + +// Basic floats +isFloat(2.2) // true +isFloat(-2.5) // true +isFloat('3.14') // true + +// Integers are not floats +isFloat(2) // false +isFloat('2') // false + +// Strings that parse to floats +isFloat('2.0') // true +isFloat('-0.5') // true + +// Variadic predicate +isFloats('2.2', '-3.5') // true +// isFloats() // throws: at least one value required +// isFloats('foo') // throws: non-numeric value + +// Canonical representation +isFloatCanonical('2.0') // true +isFloatCanonical('-2.0') // true +isFloatCanonical('3.14') // true +isFloatCanonical('2') // false +isFloatCanonical('2.') // false (depends on regex) +``` + +### See also + +- `isInteger` — integer-only predicate. +- `isNumeric` — any finite number or numeric string. diff --git a/docs/is/isInteger.md b/docs/is/isInteger.md new file mode 100644 index 0000000..9359b69 --- /dev/null +++ b/docs/is/isInteger.md @@ -0,0 +1,45 @@ +## isInteger / isIntegers + +> IS + +### Description + +Integer predicates. + +- `isInteger(value)` — checks whether a single value is an integer (number or numeric string). +- `isIntegers(...values)` — returns `true` if all provided values are integers; throws when called with no values or + when some values cannot be parsed as numbers. + +### Use + +```ts +import { isInteger, isIntegers } from '@feugene/mu/is' + +isInteger(12) // true +isInteger('3.2') // false + +isIntegers(1, '2', 3) // true +``` + +### Examples + +```ts +import { isInteger, isIntegers } from '@feugene/mu/is' + +// Single value +isInteger(0) // true +isInteger(3.5) // false +isInteger('10') // true +isInteger('10.1') // false + +// Multiple values +isIntegers(1, 2, 3) // true +isIntegers('1', '2') // true +isIntegers(1, 'foo' as any) // throws (non-numeric) +``` + +### See also + +- `isFloat` — float-only predicate. +- `isNumeric` — any finite number or numeric string. + diff --git a/docs/is/isLength.md b/docs/is/isLength.md new file mode 100644 index 0000000..d56cfb3 --- /dev/null +++ b/docs/is/isLength.md @@ -0,0 +1,35 @@ +## isLength + +> IS + +### Description + +Checks if a value is a valid array-like length: an integer number `>= 0` and `<= Number.MAX_SAFE_INTEGER`. + +Used internally by `isArrayLike`. + +### Use + +```ts +import { isLength } from '@feugene/mu/is' + +isLength(3) // true +``` + +### Examples + +```ts +import { isLength } from '@feugene/mu/is' + +isLength(0) // true +isLength(10) // true + +isLength(-1) // false +isLength(3.5) // false +isLength('3' as any) // false +``` + +### See also + +- `isArrayLike` — relies on length semantics. + diff --git a/docs/is/isNil.md b/docs/is/isNil.md new file mode 100644 index 0000000..ae48357 --- /dev/null +++ b/docs/is/isNil.md @@ -0,0 +1,41 @@ +## isNil / isNils + +> IS + +### Description + +Nil predicates. + +- `isNil(value)` — `true` for `null` or `undefined`. +- `isNils(...values)` — `true` if all values are `null` or `undefined`. + +### Use + +```ts +import { isNil, isNils } from '@feugene/mu/is' + +isNil(undefined) // true +isNil(null) // true +isNil(0) // false + +isNils(null, undefined) // true +``` + +### Examples + +```ts +import { isNil, isNils } from '@feugene/mu/is' + +isNil(null) // true +isNil(undefined) // true +isNil('' as any) // false + +isNils(null, undefined) // true +isNils(null, 0 as any) // false +``` + +### See also + +- `isNull` — strictly null. +- `isEmpty` — broader notion of emptiness. + diff --git a/docs/is/isNull.md b/docs/is/isNull.md new file mode 100644 index 0000000..5c7e6ac --- /dev/null +++ b/docs/is/isNull.md @@ -0,0 +1,39 @@ +## isNull / isNulls + +> IS + +### Description + +Null predicates. + +- `isNull(value)` — `true` only when value is strictly `null`. +- `isNulls(...values)` — `true` if all values are strictly `null`. + +### Use + +```ts +import { isNull, isNulls } from '@feugene/mu/is' + +isNull(null) // true +isNull(undefined) // false + +isNulls(null, null) // true +``` + +### Examples + +```ts +import { isNull, isNulls } from '@feugene/mu/is' + +isNull(null) // true +isNull(undefined) // false +isNull(0 as any) // false + +isNulls(null, null) // true +isNulls(null, undefined as any) // false +``` + +### See also + +- `isNil` — `null` or `undefined`. + diff --git a/docs/is/isNumeric.md b/docs/is/isNumeric.md new file mode 100644 index 0000000..a57ad5e --- /dev/null +++ b/docs/is/isNumeric.md @@ -0,0 +1,47 @@ +## isNumeric / isNumerics + +> IS + +### Description + +Numeric predicates. + +- `isNumeric(value)` — `true` if value is a finite number or a numeric string. +- `isNumerics(...values)` — `true` if all values are numeric by the same rules. + +### Use + +```ts +import { isNumeric } from '@feugene/mu/is' + +isNumeric('1e3') // true +isNumeric('foo') // false +``` + +### Examples + +```ts +import { isNumeric, isNumerics } from '@feugene/mu/is' + +// Numbers +isNumeric(1) // true +isNumeric(0) // true +isNumeric(NaN) // false +isNumeric(Infinity) // false + +// Strings +isNumeric('42') // true +isNumeric(' 3.14 ') // true +isNumeric('1e3') // true +isNumeric('foo') // false + +// Multiple +isNumerics(1, '2', '3.5') // true +isNumerics(1, 'foo' as any) // false +``` + +### See also + +- `isFloat` — float-only predicate. +- `isInteger` — integer-only predicate. + diff --git a/docs/is/isObjectLike.md b/docs/is/isObjectLike.md new file mode 100644 index 0000000..99b35ff --- /dev/null +++ b/docs/is/isObjectLike.md @@ -0,0 +1,37 @@ +## isObjectLike + +> IS + +### Description + +Checks if a value is object-like: not `null` and `typeof value === 'object'`. + +Arrays, dates, plain objects and typed arrays are object-like; `null` and primitives are not. + +### Use + +```ts +import { isObjectLike } from '@feugene/mu/is' + +isObjectLike([]) // true +isObjectLike({}) // true +isObjectLike(null) // false +``` + +### Examples + +```ts +import { isObjectLike } from '@feugene/mu/is' + +isObjectLike({}) // true +isObjectLike([]) // true +isObjectLike(new Date()) // true + +isObjectLike(null) // false +isObjectLike(1 as any) // false +``` + +### See also + +- `isObject` — plain objects without DOM nodes. + diff --git a/docs/is/isString.md b/docs/is/isString.md new file mode 100644 index 0000000..82c2600 --- /dev/null +++ b/docs/is/isString.md @@ -0,0 +1,39 @@ +## isString / isStrings + +> IS + +### Description + +String predicates. + +- `isString(value)` — `true` for string primitives and `String` objects. +- `isStrings(...values)` — `true` if all values are strings. + +### Use + +```ts +import { isString, isStrings } from '@feugene/mu/is' + +isString('test') // true +isString(new String('x')) // true +isString(1) // false +``` + +### Examples + +```ts +import { isString, isStrings } from '@feugene/mu/is' + +isString('hello') // true +isString('') // true +isString(123 as any) // false + +isStrings('a', 'b', 'c') // true +isStrings('a', 1 as any) // false +``` + +### See also + +- `stringToArray` — convert string to array of characters. +- `clearSpaces` / `trim` — normalize strings. + diff --git a/docs/is/isSymbol.md b/docs/is/isSymbol.md new file mode 100644 index 0000000..08699c4 --- /dev/null +++ b/docs/is/isSymbol.md @@ -0,0 +1,33 @@ +## isSymbol + +> IS + +### Description + +Checks if a value is a `Symbol` (primitive or `Symbol` object). + +### Use + +```ts +import { isSymbol } from '@feugene/mu/is' + +isSymbol(Symbol('a')) // true +isSymbol('a') // false +``` + +### Examples + +```ts +import { isSymbol } from '@feugene/mu/is' + +isSymbol(Symbol.iterator) // true +isSymbol(Object(Symbol('x'))) // true + +isSymbol('Symbol') // false +isSymbol(1 as any) // false +``` + +### See also + +- `isString` — string values. + diff --git a/docs/is/isTypedArray.md b/docs/is/isTypedArray.md new file mode 100644 index 0000000..a373057 --- /dev/null +++ b/docs/is/isTypedArray.md @@ -0,0 +1,34 @@ +## isTypedArray + +> IS + +### Description + +Checks if a value is a typed array (`Int8Array`, `Uint8Array`, `Float32Array`, etc.). + +### Use + +```ts +import { isTypedArray } from '@feugene/mu/is' + +isTypedArray(new Uint8Array(2)) // true +isTypedArray([1, 2]) // false +``` + +### Examples + +```ts +import { isTypedArray } from '@feugene/mu/is' + +isTypedArray(new Uint8Array(2)) // true +isTypedArray(new Float32Array(4)) // true + +isTypedArray([] as any) // false +isTypedArray(Buffer.alloc(2) as any) // false +``` + +### See also + +- `isArray` — regular arrays. +- `isBuffer` — Node.js Buffer. + diff --git a/package.json b/package.json index 2ee16eb..30c24e2 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "description": "Helpful TS utilities without dependencies", "homepage": "https://github.com/efureev/mu", "license": "MIT", - "version": "5.0.0-alpha", + "version": "5.0.0-rc1", "author": { "name": "Eugene Fureev" }, @@ -133,13 +133,15 @@ "build:cjs": "tsc -p tsconfig.cjs.json", "build": "npm-run-all -l clean -p build:esm build:cjs declarations", "postbuild": "tsc-alias -v --dir dist/cjs -p tsconfig.cjs.json && tsc-alias -v --dir dist/esm -p tsconfig.esm.json && tsc-alias -v --dir dist/types -p tsconfig.types.json", - "rename": "ts-node ./.scripts/rename.ts", + "rename": "ts-node scripts/rename.ts", "coverage": "jest --coverage", "prepare": "husky install", "lint": "prettier --check \"src/**/*\" \"tests/**/*\"", "lint:fix": "prettier --write \"src/**/*\" \"tests/**/*\"", "test": "jest", - "docsify": "docsify serve ./docs" + "test-all": "jest && ts-node scripts/check-doc-links.ts", + "docsify": "docsify serve ./docs", + "check:docs:links": "ts-node scripts/check-doc-links.ts" }, "sideEffects": false, "engines": { diff --git a/scripts/check-doc-links.ts b/scripts/check-doc-links.ts new file mode 100644 index 0000000..d71ce2e --- /dev/null +++ b/scripts/check-doc-links.ts @@ -0,0 +1,47 @@ +#!/usr/bin/env node +import { readFileSync, existsSync } from 'node:fs' +import { resolve, join, dirname } from 'node:path' +import { fileURLToPath } from 'node:url' + +// ESM-safe __dirname +const __filename = fileURLToPath(import.meta.url) +const __dirname = dirname(__filename) + +const ROOT = resolve(__dirname, '..') +const DOCS_ROOT = join(ROOT, 'docs') + +const README_FILES = [join(DOCS_ROOT, 'README.md'), join(DOCS_ROOT, 'ru', 'README.md')] + +const LINK_RE = /\]\(([^)]+\.md)\)/g + +let hasErrors = false + +for (const file of README_FILES) { + const rel = file.replace(ROOT + '/', '') + const content = readFileSync(file, 'utf8') + + const seen = new Set() + + for (const match of content.matchAll(LINK_RE)) { + const link = match[1] // e.g. "is/isBlank.md" or "object/merge.md" + + // Skip external links just in case + if (link.startsWith('http://') || link.startsWith('https://')) continue + + if (seen.has(link)) continue + seen.add(link) + + const target = join(DOCS_ROOT, link) + + if (!existsSync(target)) { + hasErrors = true + console.error(`[docs] Missing target for link in ${rel}: ${link} -> ${target}`) + } + } +} + +if (hasErrors) { + process.exit(1) +} else { + console.log('[docs] All README links are valid.') +} diff --git a/.scripts/rename.ts b/scripts/rename.ts similarity index 100% rename from .scripts/rename.ts rename to scripts/rename.ts From a4eb121276b8292b40e7f53d4db57279602d5478 Mon Sep 17 00:00:00 2001 From: fureev Date: Fri, 5 Dec 2025 11:55:54 +0200 Subject: [PATCH 28/37] fix --- jest.config.js | 2 +- tsconfig.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/jest.config.js b/jest.config.js index 9544b69..ac19e17 100644 --- a/jest.config.js +++ b/jest.config.js @@ -6,7 +6,7 @@ module.exports = { testPathIgnorePatterns: ['/node_modules/', '/tests/utils.ts'], transform: { - '^.+\\.ts$': ['ts-jest', { tsconfig: 'tsconfig.json', isolatedModules: true }], + '^.+\.ts$': ['ts-jest', { tsconfig: 'tsconfig.json' }], }, collectCoverageFrom: [ diff --git a/tsconfig.json b/tsconfig.json index 555801b..77e4074 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -82,7 +82,7 @@ // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ /* Interop Constraints */ - // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ From 36a09088b757c202d78b7845f543834a47a46297 Mon Sep 17 00:00:00 2001 From: fureev Date: Fri, 5 Dec 2025 12:02:12 +0200 Subject: [PATCH 29/37] fix --- tests/integration/importMu.ts | 66 +++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 tests/integration/importMu.ts diff --git a/tests/integration/importMu.ts b/tests/integration/importMu.ts new file mode 100644 index 0000000..c60238d --- /dev/null +++ b/tests/integration/importMu.ts @@ -0,0 +1,66 @@ +import { number, numberRus } from '@feugene/mu/format' +import { merge, defaults } from '@feugene/mu/object' +import { isEmpty, isNumeric, isInteger } from '@feugene/mu/is' +import { toArray, toNumber } from '@feugene/mu/to' + +type User = { + id: number + name: string + age?: number | null +} + +describe('package import and typing (@feugene/mu)', () => { + it('allows importing helpers from submodules with correct typings', () => { + const u1: User = { id: 1, name: 'Alice' } + const u2: User = { id: 1, name: 'Alice', age: 30 } + + const merged = merge(u1, u2) + + // Type-level check: merged is still User-compatible + const id: number = merged.id + const name: string = merged.name + const age: number | null | undefined = merged.age + + expect(id).toBe(1) + expect(name).toBe('Alice') + expect(age).toBe(30) + }) + + it('keeps number() typings and overloads usable from consumer code', () => { + const s1 = number(1000) + const s2 = number(1000, { decimals: 0 }) + const s3 = numberRus(1000) + + // compile-time: all are strings + const arr: string[] = [s1, s2, s3] + + expect(arr[0]).toMatch(/1,000/) + expect(arr[2]).toMatch(/1 000/) + }) + + it('provides correct predicate typings for is* helpers', () => { + const value: unknown = '42' + + if (isNumeric(value)) { + // inside branch value is still unknown at TS level, but can be safely converted + const n = toNumber(value) + expect(n).toBe(42) + } + + expect(isInteger(10)).toBe(true) + expect(isInteger('10')).toBe(true) + expect(isInteger('10.1')).toBe(false) + + expect(isEmpty(null)).toBe(true) + expect(isEmpty([])).toBe(true) + }) + + it('works with root import for compatibility', () => { + // Root import is less tree-shakable but should still typecheck and run. + // eslint-disable-next-line import/no-named-as-default-member,@typescript-eslint/no-var-requires + const pkg = require('@feugene/mu') as typeof import('@feugene/mu') + + const items = pkg.toArray('mu') + expect(items).toEqual(['m', 'u']) + }) +}) From 9b4407b1f7dfb292daf15bb51ea4c50896cf58d6 Mon Sep 17 00:00:00 2001 From: fureev Date: Fri, 5 Dec 2025 12:06:43 +0200 Subject: [PATCH 30/37] docs: update changelog --- .github/workflows/nodejs.yml | 2 +- CHANGELOG.md | 31 +++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index 76f42aa..eeca54d 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -54,7 +54,7 @@ jobs: needs: [ lint-changelog, lint-code ] strategy: matrix: - node-version: [ 20.x,22.x,24.x ] + node-version: [ 22.x,24.x,26.x ] steps: - uses: actions/checkout@v4 diff --git a/CHANGELOG.md b/CHANGELOG.md index 57d2aef..10654dc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,37 @@ and this project adheres to [Semantic Versioning][semver]. ## [unreleased] +## [5.0.0] - 2025-12-05 + +### Added + +- [format] New options-object API for `number`, adds `NumberFormatOptions` and `numberRus` preset. +- [date] New helpers: `dateToStringUTC`, `parseISO` (strict ISO/RFC3339 parser). +- [is] New predicates: `isBlank`, `isUrl` docs extended; added/clarified predicates for floats, integers, numerics. +- [object] New/extended docs and tests for `defaults`, `merge`, `fromQueryString`, `pathToObject`, `values`, `sum`, `logicalAnd`, `getSize`, `toQueryObjects`, `toQueryString`. +- [core] New clone strategy based on `structuredClone` with fallback for plain objects/arrays. +- [tests] Integration test for imports/typings (`tests/integration/importMu.ts`); extended tests for format/date/is/object. +- [docs] Full per-helper documentation in `docs/**` for all functions listed in `docs/README.md` (EN) and `docs/ru/README.md` (RU overview). + +### Changed + +- [core] Drop CJS usage in src; ESM-first package layout, Node >= 22 as minimum runtime. +- [object] `merge` and `defaults` made **immutable**, use only own enumerable keys, deep-merge only plain objects; arrays now cloned instead of merged; added proto-pollution guards. +- [core] `clone` behavior modernized for Node 22 (uses `structuredClone` where safe; clearer handling of Dates, complex types). +- [date] `elapsed` and `now` simplified; `dateToString` explicitly local, `dateToStringUTC` explicitly UTC. +- [format] `number`/`numberRus` now корректно обрабатывают `NaN`, `Infinity`, `-0`; RU‑локаль: запятая как десятичный разделитель, пробел — тысячный. +- [is] Ужесточена логика `isNumeric`, `isEven`, других числовых предикатов (используются `Number.isFinite`, явное приведение). +- [object] Использование современных нативных API (`Object.hasOwn`, `Object.values`, `URLSearchParams`) вместо самописных утилит. +- [core/object/date/format/is] Масштабное обновление JSDoc и пользовательской документации для отражения новой семантики. +- [tests] Jest/ts-jest сконфигурирован на `isolatedModules: true` через `tsconfig.json`. + +### Fixed + +- [format] Исправлена русская локаль в `numberRus` (запятая как десятичный разделитель, пробел как разделитель тысяч). +- [object] Исправлены возможные пути proto-pollution в `fromQueryString`, `pathToObject` и связанных хелперах. +- [is] Устранены неточные проверки чисел (отказ от глобального `isNaN`/`isFinite` в пользу `Number.isNaN`/`Number.isFinite`). +- [docs] Устранены расхождения между документацией и кодом, добавлены отсутствующие страницы, обновлены README EN/RU. + ## [4.7.0] - 2023-11-28 ### Added From 47df5e7d86fc23a436f335c375141a5e1f26a0a0 Mon Sep 17 00:00:00 2001 From: fureev Date: Fri, 5 Dec 2025 12:32:55 +0200 Subject: [PATCH 31/37] fix --- .github/workflows/{nodejs.yml => main.yml} | 30 +++------------------- .npmignore | 21 +++++++++++++++ LICENSE | 2 +- package.json | 25 +++--------------- tsconfig.cjs.json | 20 --------------- 5 files changed, 30 insertions(+), 68 deletions(-) rename .github/workflows/{nodejs.yml => main.yml} (76%) create mode 100644 .npmignore delete mode 100644 tsconfig.cjs.json diff --git a/.github/workflows/nodejs.yml b/.github/workflows/main.yml similarity index 76% rename from .github/workflows/nodejs.yml rename to .github/workflows/main.yml index eeca54d..c40a327 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/main.yml @@ -30,18 +30,7 @@ jobs: uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} - - - name: Get npm cache directory - id: npm-cache - run: | - echo "dir=$(npm config get cache)" >> $GITHUB_OUTPUT - - - uses: actions/cache@v4 - with: - path: ${{ steps.npm-cache.outputs.dir }} - key: ${{ runner.os }}-node-${{ hashFiles('**/package.json') }} - restore-keys: | - ${{ runner.os }}-node- + cache: 'yarn' - run: yarn install - run: yarn lint @@ -54,7 +43,7 @@ jobs: needs: [ lint-changelog, lint-code ] strategy: matrix: - node-version: [ 22.x,24.x,26.x ] + node-version: [ 22.x,24.x,25.x ] steps: - uses: actions/checkout@v4 @@ -63,18 +52,7 @@ jobs: uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} - - - name: Get npm cache directory - id: npm-cache - run: | - echo "dir=$(npm config get cache)" >> $GITHUB_OUTPUT - - - uses: actions/cache@v4 - with: - path: ${{ steps.npm-cache.outputs.dir }} - key: ${{ runner.os }}-node-${{ hashFiles('**/package.json') }} - restore-keys: | - ${{ runner.os }}-node- + cache: 'yarn' - run: yarn install - run: yarn test-all @@ -92,7 +70,7 @@ jobs: with: node-version: '22.x' registry-url: 'https://registry.npmjs.org' - - run: npm install + - run: yarn install # Publish to npm - run: npm publish --access public env: diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000..1d6fc84 --- /dev/null +++ b/.npmignore @@ -0,0 +1,21 @@ +# Folders not needed in the published package +node_modules +coverage +docs +tests +scripts +.github +.husky + +# Local/output artifacts +*.log +.output.txt +.DS_Store + +# TypeScript project files (config is whitelisted via package.json "files") +tsconfig.esm.json +tsconfig.types.json + +# Editor/IDE +.idea +.vscode diff --git a/LICENSE b/LICENSE index 6c8aaf3..42d9baf 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2022 Fureev Eugene +Copyright (c) 2025 Fureev Eugene Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/package.json b/package.json index 30c24e2..374b4ab 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,6 @@ "url": "https://github.com/efureev/mu/issues" }, "files": [ - "src", "dist", "tsconfig.json", "package.json" @@ -26,78 +25,63 @@ ".": { "types": "./dist/types/index.d.ts", "import": "./dist/esm/index.mjs", - "require": "./dist/cjs/index.js", "default": "./dist/esm/index.mjs" }, "./*": { "types": "./dist/types/*.d.ts", "import": "./dist/esm/*.mjs", - "require": "./dist/cjs/*.js", "default": "./dist/esm/*.mjs" }, "./array": { "types": "./dist/types/array/index.d.ts", - "import": "./dist/esm/array/index.mjs", - "require": "./dist/cjs/array/index.js" + "import": "./dist/esm/array/index.mjs" }, "./date": { "types": "./dist/types/date/index.d.ts", - "import": "./dist/esm/date/index.mjs", - "require": "./dist/cjs/date/index.js" + "import": "./dist/esm/date/index.mjs" }, "./core": { "types": "./dist/types/core/index.d.ts", - "require": "./dist/cjs/core/index.js", "import": "./dist/esm/core/index.mjs" }, "./format": { "types": "./dist/types/format/index.d.ts", - "require": "./dist/cjs/format/index.js", "import": "./dist/esm/format/index.mjs" }, "./i18": { "types": "./dist/types/i18/index.d.ts", - "require": "./dist/cjs/i18/index.js", "import": "./dist/esm/i18/index.mjs" }, "./is": { "types": "./dist/types/is/index.d.ts", - "require": "./dist/cjs/is/index.js", "import": "./dist/esm/is/index.mjs" }, "./object": { "types": "./dist/types/object/index.d.ts", - "require": "./dist/cjs/object/index.js", "import": "./dist/esm/object/index.mjs" }, "./sort": { "types": "./dist/types/sort/index.d.ts", - "require": "./dist/cjs/sort/index.js", "import": "./dist/esm/sort/index.mjs" }, "./string": { "types": "./dist/types/string/index.d.ts", - "require": "./dist/cjs/string/index.js", "import": "./dist/esm/string/index.mjs" }, "./structures": { "types": "./dist/types/structures/index.d.ts", - "require": "./dist/cjs/structures/index.js", "import": "./dist/esm/structures/index.mjs" }, "./to": { "types": "./dist/types/to/index.d.ts", - "require": "./dist/cjs/to/index.js", "import": "./dist/esm/to/index.mjs" }, "./utils": { "types": "./dist/types/utils/index.d.ts", - "require": "./dist/cjs/utils/index.js", "import": "./dist/esm/utils/index.mjs" }, "./internal/*": { "types": "./dist/types/internal/*.d.ts", - "require": "./dist/cjs/internal/*.js", "import": "./dist/esm/internal/*.mjs", "default": "./dist/esm/internal/*.mjs" } @@ -130,9 +114,8 @@ "clean": "rimraf dist", "declarations": "tsc -p tsconfig.types.json", "build:esm": "tsc -p tsconfig.esm.json && yarn rename", - "build:cjs": "tsc -p tsconfig.cjs.json", - "build": "npm-run-all -l clean -p build:esm build:cjs declarations", - "postbuild": "tsc-alias -v --dir dist/cjs -p tsconfig.cjs.json && tsc-alias -v --dir dist/esm -p tsconfig.esm.json && tsc-alias -v --dir dist/types -p tsconfig.types.json", + "build": "npm-run-all -l clean -p build:esm declarations", + "postbuild": "tsc-alias -v --dir dist/esm -p tsconfig.esm.json && tsc-alias -v --dir dist/types -p tsconfig.types.json", "rename": "ts-node scripts/rename.ts", "coverage": "jest --coverage", "prepare": "husky install", diff --git a/tsconfig.cjs.json b/tsconfig.cjs.json deleted file mode 100644 index fb69ac2..0000000 --- a/tsconfig.cjs.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "noEmit": false, - - "module": "CommonJS", - "target": "ES2022", - - "rootDir": "./src", - "outDir": "./dist/cjs", - - "sourceMap": true, - - "declaration": false, - "emitDeclarationOnly": false - }, - "include": ["src"], - "exclude": ["dist", "node_modules", "tests"] - -} From 0e298b96e72cd85ac7ba7bb8096efefa2a4586ec Mon Sep 17 00:00:00 2001 From: fureev Date: Fri, 5 Dec 2025 12:39:53 +0200 Subject: [PATCH 32/37] fix --- tsconfig.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tsconfig.json b/tsconfig.json index 77e4074..ce1d1a8 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -38,6 +38,12 @@ "paths": { "~/*": [ "./src/*" + ], + "@feugene/mu": [ + "./src/index.ts" + ], + "@feugene/mu/*": [ + "./src/*" ] }, /* Specify a set of entries that re-map imports to additional lookup locations. */ From 906beda6ab93ed89c4711b389f7759add24e0780 Mon Sep 17 00:00:00 2001 From: fureev Date: Fri, 5 Dec 2025 12:41:13 +0200 Subject: [PATCH 33/37] fix --- CHANGELOG.md | 49 +++++++++++++++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 10654dc..a08de4b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,32 +11,41 @@ and this project adheres to [Semantic Versioning][semver]. ### Added -- [format] New options-object API for `number`, adds `NumberFormatOptions` and `numberRus` preset. -- [date] New helpers: `dateToStringUTC`, `parseISO` (strict ISO/RFC3339 parser). -- [is] New predicates: `isBlank`, `isUrl` docs extended; added/clarified predicates for floats, integers, numerics. -- [object] New/extended docs and tests for `defaults`, `merge`, `fromQueryString`, `pathToObject`, `values`, `sum`, `logicalAnd`, `getSize`, `toQueryObjects`, `toQueryString`. -- [core] New clone strategy based on `structuredClone` with fallback for plain objects/arrays. -- [tests] Integration test for imports/typings (`tests/integration/importMu.ts`); extended tests for format/date/is/object. -- [docs] Full per-helper documentation in `docs/**` for all functions listed in `docs/README.md` (EN) and `docs/ru/README.md` (RU overview). +- [format] New options-object API for `number`, adds `NumberFormatOptions` and `numberRus` preset +- [date] New helpers: `dateToStringUTC`, `parseISO` (strict ISO/RFC3339 parser) +- [is] New predicates: `isBlank`, `isUrl` docs extended; added/clarified predicates for floats, integers, numerics +- [object] New/extended docs and tests for `defaults`, `merge`, `fromQueryString`, `pathToObject`, `values`, `sum`, + `logicalAnd`, `getSize`, `toQueryObjects`, `toQueryString` +- [core] New clone strategy based on `structuredClone` with fallback for plain objects/arrays +- [tests] Integration test for imports/typings (`tests/integration/importMu.ts`); extended tests for + format/date/is/object +- [docs] Full per-helper documentation in `docs/**` for all functions listed in `docs/README.md` (EN) and + `docs/ru/README.md` (RU overview) ### Changed -- [core] Drop CJS usage in src; ESM-first package layout, Node >= 22 as minimum runtime. -- [object] `merge` and `defaults` made **immutable**, use only own enumerable keys, deep-merge only plain objects; arrays now cloned instead of merged; added proto-pollution guards. -- [core] `clone` behavior modernized for Node 22 (uses `structuredClone` where safe; clearer handling of Dates, complex types). -- [date] `elapsed` and `now` simplified; `dateToString` explicitly local, `dateToStringUTC` explicitly UTC. -- [format] `number`/`numberRus` now корректно обрабатывают `NaN`, `Infinity`, `-0`; RU‑локаль: запятая как десятичный разделитель, пробел — тысячный. -- [is] Ужесточена логика `isNumeric`, `isEven`, других числовых предикатов (используются `Number.isFinite`, явное приведение). -- [object] Использование современных нативных API (`Object.hasOwn`, `Object.values`, `URLSearchParams`) вместо самописных утилит. -- [core/object/date/format/is] Масштабное обновление JSDoc и пользовательской документации для отражения новой семантики. -- [tests] Jest/ts-jest сконфигурирован на `isolatedModules: true` через `tsconfig.json`. +- [core] Drop CJS usage in src; ESM-first package layout, Node >= 22 as minimum runtime +- [object] `merge` and `defaults` made **immutable**, use only own enumerable keys, deep-merge only plain objects; + arrays now cloned instead of merged; added proto-pollution guards +- [core] `clone` behavior modernized for Node 22 (uses `structuredClone` where safe; clearer handling of Dates, complex + types) +- [date] `elapsed` and `now` simplified; `dateToString` explicitly local, `dateToStringUTC` explicitly UTC +- [format] `number`/`numberRus` now корректно обрабатывают `NaN`, `Infinity`, `-0`; RU‑локаль: запятая как десятичный + разделитель, пробел — тысячный +- [is] Ужесточена логика `isNumeric`, `isEven`, других числовых предикатов (используются `Number.isFinite`, явное + приведение) +- [object] Использование современных нативных API (`Object.hasOwn`, `Object.values`, `URLSearchParams`) вместо + самописных утилит +- [core/object/date/format/is] Масштабное обновление JSDoc и пользовательской документации для отражения новой семантики +- [tests] Jest/ts-jest сконфигурирован на `isolatedModules: true` через `tsconfig.json` ### Fixed -- [format] Исправлена русская локаль в `numberRus` (запятая как десятичный разделитель, пробел как разделитель тысяч). -- [object] Исправлены возможные пути proto-pollution в `fromQueryString`, `pathToObject` и связанных хелперах. -- [is] Устранены неточные проверки чисел (отказ от глобального `isNaN`/`isFinite` в пользу `Number.isNaN`/`Number.isFinite`). -- [docs] Устранены расхождения между документацией и кодом, добавлены отсутствующие страницы, обновлены README EN/RU. +- [format] Исправлена русская локаль в `numberRus` (запятая как десятичный разделитель, пробел как разделитель тысяч) +- [object] Исправлены возможные пути proto-pollution в `fromQueryString`, `pathToObject` и связанных хелперах +- [is] Устранены неточные проверки чисел (отказ от глобального `isNaN`/`isFinite` в пользу `Number.isNaN`/ + `Number.isFinite`) +- [docs] Устранены расхождения между документацией и кодом, добавлены отсутствующие страницы, обновлены README EN/RU ## [4.7.0] - 2023-11-28 From 6bd8b0724632c22c99284918f8c034a501aab5ef Mon Sep 17 00:00:00 2001 From: fureev Date: Fri, 5 Dec 2025 12:46:00 +0200 Subject: [PATCH 34/37] fix --- .github/workflows/main.yml | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index c40a327..0063167 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -8,7 +8,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out code - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Lint changelog file uses: avto-dev/markdown-lint@v1 with: @@ -24,13 +24,12 @@ jobs: node-version: [ 22.x ] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: ${{ matrix.node-version }} - cache: 'yarn' - run: yarn install - run: yarn lint @@ -46,13 +45,12 @@ jobs: node-version: [ 22.x,24.x,25.x ] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: ${{ matrix.node-version }} - cache: 'yarn' - run: yarn install - run: yarn test-all From 6c0b3c40123c4ab0a39480a2f9dbd0dc1390864e Mon Sep 17 00:00:00 2001 From: fureev Date: Fri, 5 Dec 2025 12:46:38 +0200 Subject: [PATCH 35/37] fix --- .github/workflows/main.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 0063167..293e0ad 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -62,9 +62,9 @@ jobs: needs: [ lint-changelog, testing-on-node ] if: ${{ startsWith(github.ref, 'refs/tags/v') }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 # Setup .npmrc file to publish to npm - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v6 with: node-version: '22.x' registry-url: 'https://registry.npmjs.org' From 933fb5a0bfb5c8e3818563a31146c34232c0a79c Mon Sep 17 00:00:00 2001 From: fureev Date: Fri, 5 Dec 2025 12:50:18 +0200 Subject: [PATCH 36/37] fix --- CHANGELOG.md | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a08de4b..9d53272 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,28 +14,21 @@ and this project adheres to [Semantic Versioning][semver]. - [format] New options-object API for `number`, adds `NumberFormatOptions` and `numberRus` preset - [date] New helpers: `dateToStringUTC`, `parseISO` (strict ISO/RFC3339 parser) - [is] New predicates: `isBlank`, `isUrl` docs extended; added/clarified predicates for floats, integers, numerics -- [object] New/extended docs and tests for `defaults`, `merge`, `fromQueryString`, `pathToObject`, `values`, `sum`, - `logicalAnd`, `getSize`, `toQueryObjects`, `toQueryString` +- [object] New/extended docs and tests for `defaults`, `merge`, `fromQueryString`, `pathToObject`, `values`, `sum`, `logicalAnd`, `getSize`, `toQueryObjects`, `toQueryString` - [core] New clone strategy based on `structuredClone` with fallback for plain objects/arrays -- [tests] Integration test for imports/typings (`tests/integration/importMu.ts`); extended tests for - format/date/is/object +- [tests] Integration test for imports/typings (`tests/integration/importMu.ts`); extended tests for format/date/is/object - [docs] Full per-helper documentation in `docs/**` for all functions listed in `docs/README.md` (EN) and `docs/ru/README.md` (RU overview) ### Changed - [core] Drop CJS usage in src; ESM-first package layout, Node >= 22 as minimum runtime -- [object] `merge` and `defaults` made **immutable**, use only own enumerable keys, deep-merge only plain objects; - arrays now cloned instead of merged; added proto-pollution guards -- [core] `clone` behavior modernized for Node 22 (uses `structuredClone` where safe; clearer handling of Dates, complex - types) +- [object] `merge` and `defaults` made **immutable**, use only own enumerable keys, deep-merge only plain objects; arrays now cloned instead of merged; added proto-pollution guards +- [core] `clone` behavior modernized for Node 22 (uses `structuredClone` where safe; clearer handling of Dates, complex types) - [date] `elapsed` and `now` simplified; `dateToString` explicitly local, `dateToStringUTC` explicitly UTC -- [format] `number`/`numberRus` now корректно обрабатывают `NaN`, `Infinity`, `-0`; RU‑локаль: запятая как десятичный - разделитель, пробел — тысячный -- [is] Ужесточена логика `isNumeric`, `isEven`, других числовых предикатов (используются `Number.isFinite`, явное - приведение) -- [object] Использование современных нативных API (`Object.hasOwn`, `Object.values`, `URLSearchParams`) вместо - самописных утилит +- [format] `number`/`numberRus` now корректно обрабатывают `NaN`, `Infinity`, `-0`; RU‑локаль: запятая как десятичный разделитель, пробел — тысячный +- [is] Ужесточена логика `isNumeric`, `isEven`, других числовых предикатов (используются `Number.isFinite`, явное приведение) +- [object] Использование современных нативных API (`Object.hasOwn`, `Object.values`, `URLSearchParams`) вместо самописных утилит - [core/object/date/format/is] Масштабное обновление JSDoc и пользовательской документации для отражения новой семантики - [tests] Jest/ts-jest сконфигурирован на `isolatedModules: true` через `tsconfig.json` @@ -43,8 +36,7 @@ and this project adheres to [Semantic Versioning][semver]. - [format] Исправлена русская локаль в `numberRus` (запятая как десятичный разделитель, пробел как разделитель тысяч) - [object] Исправлены возможные пути proto-pollution в `fromQueryString`, `pathToObject` и связанных хелперах -- [is] Устранены неточные проверки чисел (отказ от глобального `isNaN`/`isFinite` в пользу `Number.isNaN`/ - `Number.isFinite`) +- [is] Устранены неточные проверки чисел (отказ от глобального `isNaN`/`isFinite` в пользу `Number.isNaN`/`Number.isFinite`) - [docs] Устранены расхождения между документацией и кодом, добавлены отсутствующие страницы, обновлены README EN/RU ## [4.7.0] - 2023-11-28 From 4d9eeae097f5f1f838a04a07ccaed3ac770f820f Mon Sep 17 00:00:00 2001 From: fureev Date: Fri, 5 Dec 2025 13:09:32 +0200 Subject: [PATCH 37/37] fix --- .github/workflows/main.yml | 2 +- jest.config.js | 12 +++++++++--- tests/integration/importMu.ts | 11 +++-------- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 293e0ad..fe1c9b3 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -42,7 +42,7 @@ jobs: needs: [ lint-changelog, lint-code ] strategy: matrix: - node-version: [ 22.x,24.x,25.x ] + node-version: [ 22.x,24.x ] steps: - uses: actions/checkout@v6 diff --git a/jest.config.js b/jest.config.js index ac19e17..c5b021e 100644 --- a/jest.config.js +++ b/jest.config.js @@ -9,6 +9,15 @@ module.exports = { '^.+\.ts$': ['ts-jest', { tsconfig: 'tsconfig.json' }], }, + moduleNameMapper: { + '^@feugene/mu$': '/src/index.ts', + '^@feugene/mu/format$': '/src/format/index.ts', + '^@feugene/mu/object$': '/src/object/index.ts', + '^@feugene/mu/is$': '/src/is/index.ts', + '^@feugene/mu/to$': '/src/to/index.ts', + '^~/(.*)$': '/src/$1', + }, + collectCoverageFrom: [ '**/src/**/*.{js,ts}', '!**/node_modules/**', @@ -20,9 +29,6 @@ module.exports = { '!**/src/internal/root.ts', '!**/src/internal/types.ts', ], - moduleNameMapper: { - '^~/(.*)$': '/src/$1', - }, coverageProvider: 'v8', moduleFileExtensions: ['ts', 'js', 'json'], } diff --git a/tests/integration/importMu.ts b/tests/integration/importMu.ts index c60238d..ea6aa01 100644 --- a/tests/integration/importMu.ts +++ b/tests/integration/importMu.ts @@ -55,12 +55,7 @@ describe('package import and typing (@feugene/mu)', () => { expect(isEmpty([])).toBe(true) }) - it('works with root import for compatibility', () => { - // Root import is less tree-shakable but should still typecheck and run. - // eslint-disable-next-line import/no-named-as-default-member,@typescript-eslint/no-var-requires - const pkg = require('@feugene/mu') as typeof import('@feugene/mu') - - const items = pkg.toArray('mu') - expect(items).toEqual(['m', 'u']) - }) + // Root import is intentionally not tested here because Jest runs in CJS mode + // and our published package is ESM-only. Submodule imports cover typing and + // resolution for consumer code. })