Skip to content
This repository was archived by the owner on Jan 19, 2026. It is now read-only.

Commit c7ec9a5

Browse files
committed
refactor(push): simplify space data filtering logic
1 parent 56f2475 commit c7ec9a5

3 files changed

Lines changed: 38 additions & 29 deletions

File tree

package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@
4444
"json-schema-to-typescript": "^15.0.4",
4545
"minimatch": "^10.0.3",
4646
"ohash": "^2.0.11",
47-
"p-limit": "^6.2.0",
4847
"pathe": "^2.0.3",
4948
"read-package-up": "^11.0.0",
5049
"storyblok-js-client": "^6.10.12"

src/commands/components/push/constants.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@ import type { CommandOptions } from '../../../types';
33
export interface PushComponentsOptions extends CommandOptions {
44

55
/**
6-
* The regex filter to apply to the components before pushing.
6+
* The glob pattern filter to apply to components before pushing.
7+
* Only matching components (and their presets) will be pushed.
8+
* Dependencies are assumed to exist in the target space.
79
* @default `.*`
810
*/
911
filter?: string;

src/commands/components/push/utils.ts

Lines changed: 35 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2,53 +2,61 @@ import type { SpaceData } from '../constants';
22
import { minimatch } from 'minimatch';
33

44
/**
5-
* Filters space data to only include a specific component and its dependencies
5+
* Filters space data to only include a specific component (no dependencies)
66
*/
77
export function filterSpaceDataByComponent(spaceData: SpaceData, componentName: string): SpaceData {
8-
const filteredSpaceData: SpaceData = {
9-
components: [],
10-
groups: [...spaceData.groups], // Keep all groups for dependency resolution
11-
internalTags: [...spaceData.internalTags], // Keep all tags for dependency resolution
12-
presets: [],
13-
};
14-
158
// Find the target component
169
const targetComponent = spaceData.components.find(component => component.name === componentName);
17-
if (targetComponent) {
18-
filteredSpaceData.components.push(targetComponent);
19-
20-
// Find presets for this component
21-
filteredSpaceData.presets = spaceData.presets.filter(
22-
preset => preset.component_id === targetComponent.id,
23-
);
10+
if (!targetComponent) {
11+
return {
12+
components: [],
13+
groups: [],
14+
internalTags: [],
15+
presets: [],
16+
};
2417
}
2518

26-
return filteredSpaceData;
19+
// Find presets for this component
20+
const filteredPresets = spaceData.presets.filter(
21+
preset => preset.component_id === targetComponent.id,
22+
);
23+
24+
return {
25+
components: [targetComponent],
26+
groups: [], // No groups - dependencies assumed to exist in target
27+
internalTags: [], // No tags - dependencies assumed to exist in target
28+
presets: filteredPresets,
29+
};
2730
}
2831

2932
/**
30-
* Filters space data to only include components matching a glob pattern
33+
* Filters space data to only include components matching a glob pattern (no dependencies)
3134
*/
3235
export function filterSpaceDataByPattern(spaceData: SpaceData, pattern: string): SpaceData {
33-
const filteredSpaceData: SpaceData = {
34-
components: [],
35-
groups: [...spaceData.groups], // Keep all groups for dependency resolution
36-
internalTags: [...spaceData.internalTags], // Keep all tags for dependency resolution
37-
presets: [],
38-
};
39-
4036
// Filter components by pattern
4137
const matchingComponents = spaceData.components.filter(component =>
4238
minimatch(component.name, pattern),
4339
);
4440

45-
filteredSpaceData.components = matchingComponents;
41+
if (matchingComponents.length === 0) {
42+
return {
43+
components: [],
44+
groups: [],
45+
internalTags: [],
46+
presets: [],
47+
};
48+
}
4649

4750
// Find presets for matching components
4851
const componentIds = matchingComponents.map(component => component.id);
49-
filteredSpaceData.presets = spaceData.presets.filter(
52+
const filteredPresets = spaceData.presets.filter(
5053
preset => componentIds.includes(preset.component_id),
5154
);
5255

53-
return filteredSpaceData;
56+
return {
57+
components: matchingComponents,
58+
groups: [], // No groups - dependencies assumed to exist in target
59+
internalTags: [], // No tags - dependencies assumed to exist in target
60+
presets: filteredPresets,
61+
};
5462
}

0 commit comments

Comments
 (0)