From a591d3f349f9cd8697608e0351f5793bc9317d0b Mon Sep 17 00:00:00 2001 From: David First Date: Fri, 8 Mar 2024 21:14:30 -0500 Subject: [PATCH] refactor, extract sort-object into a new component --- .bitmap | 8 ++++++++ .../policy/workspace-policy/workspace-policy.ts | 6 +++--- scopes/toolbox/object/sorter/index.ts | 1 + .../toolbox/object/sorter}/sort.ts | 2 +- src/consumer/bit-map/bit-map.ts | 7 ++++--- src/consumer/config/extension-data.ts | 4 ++-- src/consumer/consumer.ts | 17 +++++++++-------- src/utils/index.ts | 2 -- 8 files changed, 28 insertions(+), 19 deletions(-) create mode 100644 scopes/toolbox/object/sorter/index.ts rename {src/utils/object => scopes/toolbox/object/sorter}/sort.ts (72%) diff --git a/.bitmap b/.bitmap index f17eec7ddf89..7d3ffb7066f1 100644 --- a/.bitmap +++ b/.bitmap @@ -1046,6 +1046,14 @@ "mainFile": "index.ts", "rootDir": "scopes/ui-foundation/notifications/aspect" }, + "object/sorter": { + "name": "object/sorter", + "scope": "", + "version": "", + "defaultScope": "teambit.toolbox", + "mainFile": "index.ts", + "rootDir": "scopes/toolbox/object/sorter" + }, "overview/api-reference-table-of-contents": { "name": "overview/api-reference-table-of-contents", "scope": "teambit.api-reference", diff --git a/scopes/dependencies/dependency-resolver/policy/workspace-policy/workspace-policy.ts b/scopes/dependencies/dependency-resolver/policy/workspace-policy/workspace-policy.ts index 0c45e0df00fc..943dceabdd96 100644 --- a/scopes/dependencies/dependency-resolver/policy/workspace-policy/workspace-policy.ts +++ b/scopes/dependencies/dependency-resolver/policy/workspace-policy/workspace-policy.ts @@ -1,5 +1,5 @@ import { uniqWith } from 'lodash'; -import { sortObject } from '@teambit/legacy/dist/utils'; +import { sortObjectByKeys } from '@teambit/toolbox.object.sorter'; import { snapToSemver } from '@teambit/component-package-version'; import { Policy, SemverVersion, GitUrlVersion, FileSystemPath, PolicyConfigKeys } from '../policy'; import { KEY_NAME_BY_LIFECYCLE_TYPE, WorkspaceDependencyLifecycleType } from '../../dependencies'; @@ -132,10 +132,10 @@ export class WorkspacePolicy implements Policy { return acc; }, res); if (res.dependencies) { - res.dependencies = sortObject(res.dependencies); + res.dependencies = sortObjectByKeys(res.dependencies); } if (res.peerDependencies) { - res.peerDependencies = sortObject(res.peerDependencies); + res.peerDependencies = sortObjectByKeys(res.peerDependencies); } return res; } diff --git a/scopes/toolbox/object/sorter/index.ts b/scopes/toolbox/object/sorter/index.ts new file mode 100644 index 000000000000..c6b917d7cc0c --- /dev/null +++ b/scopes/toolbox/object/sorter/index.ts @@ -0,0 +1 @@ +export { sortObjectByKeys } from './sort'; diff --git a/src/utils/object/sort.ts b/scopes/toolbox/object/sorter/sort.ts similarity index 72% rename from src/utils/object/sort.ts rename to scopes/toolbox/object/sorter/sort.ts index f98b610a46de..c4f4c9372c5b 100644 --- a/src/utils/object/sort.ts +++ b/scopes/toolbox/object/sorter/sort.ts @@ -1,7 +1,7 @@ /** * Sort an object. */ -export default function sortObject(obj: Record) { +export function sortObjectByKeys(obj: Record) { return Object.keys(obj) .sort() .reduce(function (result, key) { diff --git a/src/consumer/bit-map/bit-map.ts b/src/consumer/bit-map/bit-map.ts index 24cc5a8b30be..01418b902271 100644 --- a/src/consumer/bit-map/bit-map.ts +++ b/src/consumer/bit-map/bit-map.ts @@ -8,6 +8,7 @@ import { LaneId } from '@teambit/lane-id'; import { BitError } from '@teambit/bit-error'; import { ComponentID, ComponentIdList } from '@teambit/component-id'; import { BitId, BitIdStr } from '@teambit/legacy-bit-id'; +import { sortObjectByKeys } from '@teambit/toolbox.object.sorter'; import type { Consumer } from '..'; import { AUTO_GENERATED_MSG, @@ -18,7 +19,7 @@ import { BITMAP_PREFIX_MESSAGE, } from '../../constants'; import logger from '../../logger/logger'; -import { pathJoinLinux, pathNormalizeToLinux, sortObject } from '../../utils'; +import { pathJoinLinux, pathNormalizeToLinux } from '../../utils'; import { PathLinux, PathLinuxRelative, PathOsBased, PathOsBasedAbsolute, PathOsBasedRelative } from '../../utils/path'; import ComponentMap, { ComponentMapFile, @@ -148,7 +149,7 @@ export default class BitMap { ); } } - const sorted = sortObject(merged); + const sorted = sortObjectByKeys(merged); // Delete and re-add it to make sure it will be at the end delete sorted[SCHEMA_FIELD]; sorted[SCHEMA_FIELD] = parsed[SCHEMA_FIELD]; @@ -949,7 +950,7 @@ export default class BitMap { components[key] = componentMapCloned.toPlainObject(); }); - return sortObject(components); + return sortObjectByKeys(components); } /** diff --git a/src/consumer/config/extension-data.ts b/src/consumer/config/extension-data.ts index c3e9d4e43eb7..89773554a5cd 100644 --- a/src/consumer/config/extension-data.ts +++ b/src/consumer/config/extension-data.ts @@ -1,8 +1,8 @@ /* eslint-disable max-classes-per-file */ import R from 'ramda'; import { ComponentID, ComponentIdList } from '@teambit/component-id'; +import { sortObjectByKeys } from '@teambit/toolbox.object.sorter'; import { compact, isEmpty, cloneDeep } from 'lodash'; -import { sortObject } from '../../utils'; import { convertBuildArtifactsFromModelObject, convertBuildArtifactsToModelObject, @@ -226,7 +226,7 @@ export class ExtensionDataList extends Array { const arr = R.sortBy(R.prop('stringId'), this); // Also sort the config arr.forEach((entry) => { - entry.config = sortObject(entry.config); + entry.config = sortObjectByKeys(entry.config); }); return ExtensionDataList.fromArray(arr); } diff --git a/src/consumer/consumer.ts b/src/consumer/consumer.ts index 9046af1a73aa..7fa69662c4ad 100644 --- a/src/consumer/consumer.ts +++ b/src/consumer/consumer.ts @@ -19,7 +19,8 @@ import { Scope } from '../scope'; import { getAutoTagPending } from '../scope/component-ops/auto-tag'; import { ComponentNotFound } from '../scope/exceptions'; import { Lane, ModelComponent, Version } from '../scope/models'; -import { generateRandomStr, sortObject } from '../utils'; +import { generateRandomStr } from '../utils'; +import { sortObjectByKeys } from '@teambit/toolbox.object.sorter'; import { composeComponentPath } from '../utils/bit/compose-component-path'; import { PathAbsolute, @@ -356,21 +357,21 @@ export default class Consumer { componentFromModel.files = R.sortBy(R.prop('relativePath'), componentFromModel.files); version.dependencies.sort(); version.devDependencies.sort(); - version.packageDependencies = sortObject(version.packageDependencies); - version.devPackageDependencies = sortObject(version.devPackageDependencies); - version.peerPackageDependencies = sortObject(version.peerPackageDependencies); + version.packageDependencies = sortObjectByKeys(version.packageDependencies); + version.devPackageDependencies = sortObjectByKeys(version.devPackageDependencies); + version.peerPackageDependencies = sortObjectByKeys(version.peerPackageDependencies); sortOverrides(version.overrides); componentFromModel.dependencies.sort(); componentFromModel.devDependencies.sort(); - componentFromModel.packageDependencies = sortObject(componentFromModel.packageDependencies); - componentFromModel.devPackageDependencies = sortObject(componentFromModel.devPackageDependencies); - componentFromModel.peerPackageDependencies = sortObject(componentFromModel.peerPackageDependencies); + componentFromModel.packageDependencies = sortObjectByKeys(componentFromModel.packageDependencies); + componentFromModel.devPackageDependencies = sortObjectByKeys(componentFromModel.devPackageDependencies); + componentFromModel.peerPackageDependencies = sortObjectByKeys(componentFromModel.peerPackageDependencies); sortOverrides(componentFromModel.overrides); } function sortOverrides(overrides) { if (!overrides) return; DEPENDENCIES_FIELDS.forEach((field) => { - if (overrides[field]) overrides[field] = sortObject(overrides[field]); + if (overrides[field]) overrides[field] = sortObjectByKeys(overrides[field]); }); } } diff --git a/src/utils/index.ts b/src/utils/index.ts index 6bc208b8f635..4121f54e0ab5 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -20,7 +20,6 @@ import mapToObject from './map/to-object'; import isNumeric from './number/is-numeric'; import cleanObject from './object-clean'; import objectToStringifiedTupleArray from './object-to-stringified-tuple-array'; -import sortObject from './object/sort'; import resolveGroupId from './os-resolve-group-id'; import resolveHomePath from './os-resolve-home-path'; import { pathJoinLinux, pathNormalizeToLinux, pathRelativeLinux, pathResolveToLinux } from './path'; @@ -44,7 +43,6 @@ export { objectToStringifiedTupleArray, resolveGroupId, mapToObject, - sortObject, removeChalkCharacters, getStringifyArgs, isNumeric,