Repository navigation
Add typed JSON output to theme metafields pull - #8924
gonzaloriestra wants to merge 7 commits into
Conversation
ac845ab to
fcea2d5
Compare
fcea2d5 to
256736a
Compare
27b71ee to
b2158d7
Compare
isaacroldan
left a comment
There was a problem hiding this comment.
The new JSON contract needs to expose the fetch limit.
🤖 Generated by the review-pr skill
a5458d7 to
4e4249e
Compare
4e4249e to
91cb45c
Compare
| path: resolvePath(result.path), | ||
| definitions: Object.entries(result.definitions).flatMap(([handle, definitions]) => | ||
| definitions.map((definition) => ({ | ||
| ownerType: handleToOwnerType[handle as keyof typeof handleToOwnerType], |
There was a problem hiding this comment.
this could be just a string, to not hardcode a list of values that might change in the future.
There was a problem hiding this comment.
The public ownerType schema is already a string, so it accepts future upstream values. This map translates the artifact’s keys to API owner types, including variant → PRODUCTVARIANT, and also drives the fetch loop. Replacing it with the raw handle would change the output values. We only fetch the owner types listed here today.
44684f0 to
bd48699
Compare
bd48699 to
c786ae6
Compare
c786ae6 to
0d2b9d0
Compare
|
| Changeset | Package |
|---|---|
theme-check-json-contract.md |
'@shopify/cli': major |
theme-preview-json-contract.md |
'@shopify/cli': major |
theme-profile-environments.md |
'@shopify/cli': major |
Differences in type declarationsWe detected differences in the type declarations generated by Typescript for this branch compared to the baseline ('main' branch). Please, review them to ensure they are backward-compatible. Here are some important things to keep in mind:
New type declarationsWe found no new type declarations in this PR Existing type declarationspackages/cli-kit/dist/public/node/base-command.d.ts@@ -21,6 +21,7 @@ declare abstract class BaseCommand extends Command {
static descriptionWithoutMarkdown(): string | undefined;
static analyticsNameOverride(): string | undefined;
static analyticsStopCommand(): string | undefined;
+ private jsonOutputFromFlags;
catch(error: Error & {
skipOclifErrorHandling: boolean;
}): Promise<void>;
@@ -36,6 +37,7 @@ declare abstract class BaseCommand extends Command {
}, TGlobalFlags extends FlagOutput, TArgs extends ArgOutput>(options?: Input<TFlags, TGlobalFlags, TArgs>, argv?: string[]): Promise<ParserOutput<TFlags, TGlobalFlags, TArgs> & {
argv: string[];
}>;
+ protected runWithParsedOutput<T>(flags: FlagOutput, execute: () => T): T;
protected environmentsFilename(): string | undefined;
protected parseEnvironmentFlags<TFlags extends FlagOutput, TGlobalFlags extends FlagOutput, TArgs extends ArgOutput>(environment: JsonMap, options: Input<TFlags, TGlobalFlags, TArgs>, explicitFlags: FlagOutput): Promise<FlagOutput>;
protected validateNonTTYFlags(flags: FlagOutput): void;
packages/cli-kit/dist/cli/api/graphql/admin/generated/metafield_definitions_by_owner_type.d.ts@@ -2,9 +2,14 @@ import * as Types from './types.js';
import { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/core';
export type MetafieldDefinitionsByOwnerTypeQueryVariables = Types.Exact<{
ownerType: Types.MetafieldOwnerType;
+ after?: Types.InputMaybe<Types.Scalars['String']['input']>;
}>;
export type MetafieldDefinitionsByOwnerTypeQuery = {
metafieldDefinitions: {
+ pageInfo: {
+ hasNextPage: boolean;
+ endCursor?: string | null;
+ };
nodes: {
key: string;
name: string;
|
Original PR and review history: #8682.
WHY are these changes introduced?
Fixes https://github.com/shop/issues-develop/issues/23694
Metafield downloads need structured outcomes and discoverable JSON support.
WHAT is this pull request doing?
Return strict flattened definitions, absolute artifact paths and explicit success/partial/skipped/cancelled outcomes. Preserve the native owner-keyed metafields.json file, successful downloads and owner-type failures; include a minor changeset for newly added theme JSON flags.
The public output follows
docs/cli/json-output.md; explicitly named environments use one{environments: [...]}object.How to manually test your changes?
Checklist
patchfor bug fixes ·minorfor new features ·majorfor breaking changes) and added a changeset withpnpm changeset add