Skip to content

Commit 55c6e45

Browse files
committed
Fix extension_directories wildcards to always be recursive
1 parent 255f7ea commit 55c6e45

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

packages/app/src/cli/models/app/app.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ const CORRECT_CURRENT_APP_SCHEMA: CurrentAppConfiguration = {
3030
path: '',
3131
name: 'app 1',
3232
client_id: '12345',
33+
extension_directories: ['extensions/*'],
3334
webhooks: {
3435
api_version: '2023-04',
3536
privacy_compliance: {

packages/app/src/cli/models/app/app.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,12 @@ import {getArrayRejectingUndefined} from '@shopify/cli-kit/common/array'
2323

2424
// Schemas for loading app configuration
2525

26+
const ExtensionDirectoriesSchema = zod
27+
.array(zod.string())
28+
.optional()
29+
.transform(removeTrailingPathSeparator)
30+
.transform(fixSingleWildcards)
31+
2632
/**
2733
* Schema for a freshly minted app template.
2834
*/
@@ -34,7 +40,7 @@ export const LegacyAppSchema = zod
3440
.string()
3541
.transform((scopes) => normalizeDelimitedString(scopes) ?? '')
3642
.default(''),
37-
extension_directories: zod.array(zod.string()).optional().transform(removeTrailingPathSeparator),
43+
extension_directories: ExtensionDirectoriesSchema,
3844
web_directories: zod.array(zod.string()).optional(),
3945
webhooks: zod
4046
.object({
@@ -49,6 +55,13 @@ function removeTrailingPathSeparator(value: string[] | undefined) {
4955
// eslint-disable-next-line no-useless-escape
5056
return value?.map((dir) => dir.replace(/[\/\\]+$/, ''))
5157
}
58+
59+
// If a path ends with a single asterisk, modify it to end with a double asterisk.
60+
// This is to support the glob pattern used by chokidar and watch for changes in subfolders.
61+
function fixSingleWildcards(value: string[] | undefined) {
62+
return value?.map((dir) => dir.replace(/\*$/, '**'))
63+
}
64+
5265
/**
5366
* Schema for a normal, linked app. Properties from modules are not validated.
5467
*/
@@ -62,7 +75,7 @@ export const AppSchema = zod.object({
6275
include_config_on_deploy: zod.boolean().optional(),
6376
})
6477
.optional(),
65-
extension_directories: zod.array(zod.string()).optional().transform(removeTrailingPathSeparator),
78+
extension_directories: ExtensionDirectoriesSchema,
6679
web_directories: zod.array(zod.string()).optional(),
6780
})
6881

0 commit comments

Comments
 (0)