Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
1 change: 1 addition & 0 deletions packages/theme/src/cli/services/package.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ describe('packageTheme', () => {
await mkdir(inputDirectory)
const themeRelativePaths = [
'AGENTS.md',
'DESIGN.md',
'assets/base.css',
'layout/theme.liquid',
'config/settings_schema.json',
Expand Down
1 change: 1 addition & 0 deletions packages/theme/src/cli/services/package.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import {parseJSON} from '@shopify/theme-check-node'

const themeFilesPattern = [
'AGENTS.md',
'DESIGN.md',
'assets/**',
'blocks/**',
'config/**',
Expand Down
3 changes: 3 additions & 0 deletions packages/theme/src/cli/utilities/fixtures/theme/DESIGN.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Theme design

Use the existing visual language.
16 changes: 11 additions & 5 deletions packages/theme/src/cli/utilities/theme-fs.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -66,13 +66,14 @@ describe('theme-fs', () => {

// Then
expect(themeFileSystem.root).toBe(root)
expect(themeFileSystem.files.size).toBe(12)
expect(themeFileSystem.files.size).toBe(13)
expect(themeFileSystem.unsyncedFileKeys).toEqual(new Set())
expect(themeFileSystem.uploadErrors).toEqual(new Map())

// Check that all expected files are present with correct checksums
const expectedFiles = [
{checksum: '6e3520cc5a5c4cdb1267f36406c732a1', key: 'AGENTS.md'},
{checksum: 'f5e9ce97aef578fc4e2e369a3c271234', key: 'DESIGN.md'},
{checksum: 'b7fbe0ecff2a6c1d6e697a13096e2b17', key: 'assets/base.css'},
{checksum: '7adcd48a3cc215a81fabd9dafb919507', key: 'assets/sparkle.gif'},
{checksum: '22e69af13b7953914563c60035a831bc', key: 'config/settings_data.json'},
Expand Down Expand Up @@ -520,6 +521,7 @@ describe('theme-fs', () => {
{key: 'templates/404.liquid', checksum: '13'},
{key: 'blocks/block.liquid', checksum: '14'},
{key: 'AGENTS.md', checksum: '17'},
{key: 'DESIGN.md', checksum: '18'},
]
// When
const {
Expand All @@ -534,7 +536,7 @@ describe('theme-fs', () => {
contextualizedJsonFiles,
blockLiquidFiles,
layoutFiles,
agentInstructionFiles,
documentationFiles,
} = partitionThemeFiles(files)

// Then
Expand All @@ -560,7 +562,10 @@ describe('theme-fs', () => {
{key: 'layout/theme.liquid', checksum: '5'},
{key: 'layout/custom.liquid', checksum: '15'},
])
expect(agentInstructionFiles).toEqual([{key: 'AGENTS.md', checksum: '17'}])
expect(documentationFiles).toEqual([
{key: 'AGENTS.md', checksum: '17'},
{key: 'DESIGN.md', checksum: '18'},
])
})

test('should handle empty file array', () => {
Expand All @@ -577,7 +582,7 @@ describe('theme-fs', () => {
configDataFile,
configStylesheetFiles,
staticAssetFiles,
agentInstructionFiles,
documentationFiles,
} = partitionThemeFiles(files)

// Then
Expand All @@ -589,7 +594,7 @@ describe('theme-fs', () => {
expect(configDataFile).toEqual([])
expect(configStylesheetFiles).toEqual([])
expect(staticAssetFiles).toEqual([])
expect(agentInstructionFiles).toEqual([])
expect(documentationFiles).toEqual([])
})
})

Expand All @@ -603,6 +608,7 @@ describe('theme-fs', () => {
expect(isTextFile('sections/template.liquid')).toBeTruthy()
expect(isTextFile('templates/cart.json')).toBeTruthy()
expect(isTextFile('AGENTS.md')).toBeTruthy()
expect(isTextFile('DESIGN.md')).toBeTruthy()
})

test(`returns false when it's not a text file`, async () => {
Expand Down
11 changes: 6 additions & 5 deletions packages/theme/src/cli/utilities/theme-fs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ const FILE_EVENT_DEBOUNCE_TIME_IN_MS = 250

const THEME_DIRECTORY_PATTERNS = [
'AGENTS.md',
'DESIGN.md',
'assets/**/*.*',
'config/**/*.json',
'config/styles.css',
Expand All @@ -43,7 +44,7 @@ const THEME_DIRECTORY_PATTERNS = [
]

const THEME_PARTITION_REGEX = {
agentInstructionsRegex: /^AGENTS\.md$/,
documentationFilesRegex: /^(AGENTS|DESIGN)\.md$/,
layoutLiquidRegex: /^layout\/.+\.liquid$/,
sectionLiquidRegex: /^sections\/.+\.liquid$/,
blockLiquidRegex: /^blocks\/.+\.liquid$/,
Expand Down Expand Up @@ -476,12 +477,12 @@ export function partitionThemeFiles<T extends {key: string}>(files: T[]) {
const staticAssetFiles: T[] = []
const blockLiquidFiles: T[] = []
const layoutFiles: T[] = []
const agentInstructionFiles: T[] = []
const documentationFiles: T[] = []

files.forEach((file) => {
const fileKey = file.key
if (THEME_PARTITION_REGEX.agentInstructionsRegex.test(fileKey)) {
agentInstructionFiles.push(file)
if (THEME_PARTITION_REGEX.documentationFilesRegex.test(fileKey)) {
documentationFiles.push(file)
} else if (fileKey.endsWith('.liquid')) {
if (THEME_PARTITION_REGEX.sectionLiquidRegex.test(fileKey)) {
sectionLiquidFiles.push(file)
Expand Down Expand Up @@ -526,7 +527,7 @@ export function partitionThemeFiles<T extends {key: string}>(files: T[]) {
staticAssetFiles,
blockLiquidFiles,
layoutFiles,
agentInstructionFiles,
documentationFiles,
}
}

Expand Down
7 changes: 7 additions & 0 deletions packages/theme/src/cli/utilities/theme-uploader.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -257,6 +257,7 @@ describe('theme-uploader', () => {
{key: 'config/settings_data.json', checksum: '6'},
{key: 'config/styles.css', checksum: '9'},
{key: 'AGENTS.md', checksum: '10'},
{key: 'DESIGN.md', checksum: '11'},
{key: 'assets/image.png', checksum: '7'},
{key: 'layout/custom.liquid', checksum: '8'},
]
Expand Down Expand Up @@ -286,6 +287,7 @@ describe('theme-uploader', () => {
'config/settings_data.json',
'config/styles.css',
'AGENTS.md',
'DESIGN.md',
'assets/image.png',
],
adminSession,
Expand All @@ -311,6 +313,7 @@ describe('theme-uploader', () => {
['layout/theme.liquid', {key: 'layout/theme.liquid', checksum: '10'}],
['config/styles.css', {key: 'config/styles.css', checksum: '11', value: ':root { --color-primary: #000; }'}],
['AGENTS.md', {key: 'AGENTS.md', checksum: '12', value: '# Theme instructions'}],
['DESIGN.md', {key: 'DESIGN.md', checksum: '13', value: '# Theme design'}],
]),
)

Expand Down Expand Up @@ -359,6 +362,10 @@ describe('theme-uploader', () => {
key: 'AGENTS.md',
value: '# Theme instructions',
},
{
key: 'DESIGN.md',
value: '# Theme design',
},
],
adminSession,
)
Expand Down
6 changes: 3 additions & 3 deletions packages/theme/src/cli/utilities/theme-uploader.ts
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,7 @@ function orderFilesToBeDeleted(files: Checksum[]): Checksum[] {
...fileSets.otherLiquidFiles,
...fileSets.configDataFile,
...fileSets.configStylesheetFiles,
...fileSets.agentInstructionFiles,
...fileSets.documentationFiles,
...fileSets.configSchemaFile,
...fileSets.staticAssetFiles,
]
Expand Down Expand Up @@ -337,7 +337,7 @@ function selectUploadableFiles(themeFileSystem: ThemeFileSystem, remoteChecksums
* - The other JSON files (for example, locales)
* - The static assets
* - Config stylesheets
* - Agent instructions
* - Root documentation files
*
*/
function orderFilesToBeUploaded(files: ChecksumWithSize[]): {
Expand All @@ -353,7 +353,7 @@ function orderFilesToBeUploaded(files: ChecksumWithSize[]): {
fileSets.otherJsonFiles,
fileSets.staticAssetFiles,
fileSets.configStylesheetFiles,
fileSets.agentInstructionFiles,
fileSets.documentationFiles,
],
// Follow order of dependencies:
dependentFiles: [
Expand Down
Loading