Skip to content

Commit a070a07

Browse files
Make build optional in the schema
1 parent 5a9ae13 commit a070a07

File tree

4 files changed

+40
-15
lines changed

4 files changed

+40
-15
lines changed

packages/app/src/cli/models/extensions/extension-instance.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@ export class ExtensionInstance<TConfiguration extends BaseConfigType = BaseConfi
303303
get watchBuildPaths() {
304304
if (this.isFunctionExtension) {
305305
const config = this.configuration as unknown as FunctionConfigType
306-
const configuredPaths = config.build.watch ? [config.build.watch].flat() : []
306+
const configuredPaths = config.build?.watch ? [config.build.watch].flat() : []
307307

308308
if (!this.isJavaScript && configuredPaths.length === 0) {
309309
return null

packages/app/src/cli/models/extensions/specifications/function.test.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,4 +305,27 @@ describe('functionConfiguration', () => {
305305
expect(got.ui?.ui_extension_handle).toBeUndefined()
306306
})
307307
})
308+
309+
test('accepts configuration without build section', async () => {
310+
// Given
311+
const configWithoutBuild = {
312+
name: 'function',
313+
type: 'function',
314+
metafields: [],
315+
description: 'my function',
316+
// build section is omitted
317+
configuration_ui: false,
318+
api_version: '2022-07',
319+
}
320+
321+
// When
322+
const extension = await testFunctionExtension({
323+
dir: '/function',
324+
config: configWithoutBuild as FunctionConfigType,
325+
})
326+
327+
// Then
328+
expect(extension.configuration.build).toBeUndefined()
329+
expect(extension.outputPath).toBe(joinPath('/function', 'dist', 'index.wasm'))
330+
})
308331
})

packages/app/src/cli/models/extensions/specifications/function.ts

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,17 @@ interface UI {
1818

1919
export type FunctionConfigType = zod.infer<typeof FunctionExtensionSchema>
2020
const FunctionExtensionSchema = BaseSchema.extend({
21-
build: zod.object({
22-
command: zod
23-
.string()
24-
.transform((value) => (value.trim() === '' ? undefined : value))
25-
.optional(),
26-
path: zod.string().optional(),
27-
watch: zod.union([zod.string(), zod.string().array()]).optional(),
28-
wasm_opt: zod.boolean().optional().default(true),
29-
}),
21+
build: zod
22+
.object({
23+
command: zod
24+
.string()
25+
.transform((value) => (value.trim() === '' ? undefined : value))
26+
.optional(),
27+
path: zod.string().optional(),
28+
watch: zod.union([zod.string(), zod.string().array()]).optional(),
29+
wasm_opt: zod.boolean().optional().default(true),
30+
})
31+
.optional(),
3032
name: zod.string(),
3133
type: zod.string(),
3234
configuration_ui: zod.boolean().optional().default(true),

packages/app/src/cli/services/build/extension.test.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ describe('buildFunctionExtension', () => {
4848

4949
test('delegates the build to system when the build command is present', async () => {
5050
// Given
51-
extension.configuration.build.command = './scripts/build.sh argument'
51+
extension.configuration.build!.command = './scripts/build.sh argument'
5252

5353
// When
5454
await expect(
@@ -73,7 +73,7 @@ describe('buildFunctionExtension', () => {
7373

7474
test('fails when is not a JS function and build command is not present', async () => {
7575
// Given
76-
extension.configuration.build.command = undefined
76+
extension.configuration.build!.command = undefined
7777

7878
// Then
7979
await expect(
@@ -91,7 +91,7 @@ describe('buildFunctionExtension', () => {
9191
test('succeeds when is a JS function and build command is not present', async () => {
9292
// Given
9393
extension = await testFunctionExtension({config: defaultConfig, entryPath: 'src/index.js'})
94-
extension.configuration.build.command = undefined
94+
extension.configuration.build!.command = undefined
9595

9696
// When
9797
await expect(
@@ -118,7 +118,7 @@ describe('buildFunctionExtension', () => {
118118
test('succeeds when is a JS function and build command is present', async () => {
119119
// Given
120120
extension = await testFunctionExtension({config: defaultConfig, entryPath: 'src/index.js'})
121-
extension.configuration.build.command = './scripts/build.sh argument'
121+
extension.configuration.build!.command = './scripts/build.sh argument'
122122

123123
// When
124124
await expect(
@@ -182,7 +182,7 @@ describe('buildFunctionExtension', () => {
182182
test('skips wasm-opt execution when the disable-wasm-opt is true', async () => {
183183
// Given
184184
vi.mocked(fileExistsSync).mockResolvedValue(true)
185-
extension.configuration.build.wasm_opt = false
185+
extension.configuration.build!.wasm_opt = false
186186

187187
// When
188188
await expect(

0 commit comments

Comments
 (0)