Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update ui_extension to support Unified config #2349

Merged
merged 31 commits into from
Jul 17, 2023
Merged
Changes from 6 commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
ee7fb52
New ui extension union schema
isaacroldan Jul 5, 2023
137c32b
Extract settings schema
isaacroldan Jul 5, 2023
f5fa23f
Improve transform
isaacroldan Jul 5, 2023
4731b47
Remove handle
isaacroldan Jul 5, 2023
c8871a8
Update schema to override global configs
isaacroldan Jul 5, 2023
884bc52
Update schema
isaacroldan Jul 6, 2023
9671be2
Merge branch 'main' into new-ui-extension-schema
isaacroldan Jul 11, 2023
25548b6
Merge branch 'main' into new-ui-extension-schema
isaacroldan Jul 12, 2023
f236c79
Simplify types in ui_extension
isaacroldan Jul 12, 2023
c9ac3ec
Remove targeting from BaseSchema
isaacroldan Jul 12, 2023
51e46e1
Simplified ui_extension schema
isaacroldan Jul 12, 2023
e7d59af
Updated ui_extension template
isaacroldan Jul 12, 2023
3b86b0f
Merge branch 'main' into new-ui-extension-schema
isaacroldan Jul 12, 2023
f62639d
Fix handle in template
isaacroldan Jul 12, 2023
a82f4b2
Clean up
isaacroldan Jul 12, 2023
3cf2679
Add test for targeting schema
isaacroldan Jul 12, 2023
6f05a27
Add new test to validate targeting presence
isaacroldan Jul 12, 2023
032c62b
Rever unnecessary changes
isaacroldan Jul 12, 2023
e0133a1
remvoe required from template
isaacroldan Jul 12, 2023
a32e7ef
Move handle to extension config
isaacroldan Jul 12, 2023
64e52d8
Merge branch 'main' into new-ui-extension-schema
isaacroldan Jul 13, 2023
5dd591b
Make handle mandatory for ui_extensions
isaacroldan Jul 13, 2023
c862b4b
Unified schema only parses specific fields
isaacroldan Jul 13, 2023
06f4510
Simplify unifiedSchema
isaacroldan Jul 13, 2023
ccc028e
Make handle optional for legacy ui_extensions
isaacroldan Jul 14, 2023
5f1acc9
Use BaseSchema for ui_extensions
isaacroldan Jul 14, 2023
85358ca
Merge branch 'main' into new-ui-extension-schema
isaacroldan Jul 14, 2023
abe8994
Merge branch 'main' into new-ui-extension-schema
isaacroldan Jul 14, 2023
8eaf31d
Show error if type is missing
isaacroldan Jul 14, 2023
917a941
Fix id-matching tests
isaacroldan Jul 14, 2023
cadea7a
Update tests with the new localIdentifier
isaacroldan Jul 17, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
import {ExtensionFeature, createExtensionSpecification} from '../specification.js'
import {NewExtensionPointSchemaType, NewExtensionPointsSchema, BaseSchema} from '../schemas.js'
import {
NewExtensionPointSchemaType,
NewExtensionPointsSchema,
BaseSchema,
CapabilitiesSchema,
MetafieldSchema,
} from '../schemas.js'
import {loadLocalesConfig} from '../../../utilities/extensions/locales-configuration.js'
import {configurationFileNames} from '../../../constants.js'
import {getExtensionPointTargetSurface} from '../../../services/dev/extension/utilities.js'
Expand All @@ -8,10 +14,11 @@ import {err, ok, Result} from '@shopify/cli-kit/node/result'
import {fileExists} from '@shopify/cli-kit/node/fs'
import {joinPath} from '@shopify/cli-kit/node/path'
import {outputContent, outputToken} from '@shopify/cli-kit/node/output'
import {getArrayRejectingUndefined} from '@shopify/cli-kit/common/array'

const dependency = '@shopify/checkout-ui-extensions'

const UIExtensionSchema = BaseSchema.extend({
const UIExtensionLegacySchema = BaseSchema.extend({
settings: zod
.object({
fields: zod.any().optional(),
Expand All @@ -20,13 +27,73 @@ const UIExtensionSchema = BaseSchema.extend({
extension_points: NewExtensionPointsSchema,
})

type UIExtensionLegacySchemaType = zod.infer<typeof UIExtensionLegacySchema>

const UnifiedSettingsSchema = zod
.object({
fields: zod
.array(
zod.object({
key: zod.string().optional(),
name: zod.string().optional(),
description: zod.string().optional(),
required: zod.boolean().optional(),
type: zod.string(),
}),
)
.optional(),
})
.optional()

const UIExtensionSchema = BaseSchema.extend({
type: zod.literal('ui_extension'),
name: zod.string().optional(),
description: zod.string().optional(),
api_version: zod.string().optional(),
capabilities: CapabilitiesSchema.optional(),
settings: UnifiedSettingsSchema,
targeting: zod.array(
zod.object({
target: zod.string(),
module: zod.string(),
metafields: zod.array(MetafieldSchema).optional().default([]),
}),
),
})

const UIExtensionUnifiedSchema = BaseSchema.extend({
settings: UnifiedSettingsSchema,
extensions: zod.array(UIExtensionSchema).min(1).max(1),
}).transform((config) => {
const extensionPoints = config.extensions[0]?.targeting.map((targeting) => {
return {
target: targeting.target,
module: targeting.module,
metafields: targeting.metafields ?? config.extensions[0]?.metafields ?? [],
}
})
const newConfig: UIExtensionLegacySchemaType = {
name: config.extensions[0]?.name ?? config.name,
type: config.extensions[0]?.type ?? config.type,
description: config.extensions[0]?.description ?? config.description,
api_version: config.extensions[0]?.api_version ?? config.api_version,
extension_points: extensionPoints ?? [],
capabilities: config.extensions[0]?.capabilities,
metafields: config.extensions[0]?.metafields ?? [],
settings: config.extensions[0]?.settings,
}
return newConfig
})

const UnionSchema = zod.union([UIExtensionUnifiedSchema, UIExtensionLegacySchema])

const spec = createExtensionSpecification({
identifier: 'ui_extension',
surface: 'all',
dependency,
partnersWebIdentifier: 'ui_extension',
singleEntryPath: false,
schema: UIExtensionSchema,
schema: UnionSchema,
appModuleFeatures: (config) => {
const basic: ExtensionFeature[] = ['ui_preview', 'bundling', 'esbuild']
const needsCart =
Expand Down