@@ -14,14 +14,14 @@ import {
1414} from './package-manager.js'
1515import { DEFAULT_TOOLCHAIN , SUPPORTED_TOOLCHAINS } from './toolchain.js'
1616import { CODE_ROUTER , DEFAULT_FRAMEWORK , FILE_ROUTER } from './constants.js'
17- import { finalizeAddOns , getAllAddOns } from './add-ons.js'
17+ import { finalizeAddOns , getAllAddOns , loadRemoteAddOn } from './add-ons.js'
1818
19- import type { AddOn , CliOptions , Options , Variable } from './types.js'
19+ import type { AddOn , CliOptions , Options , Overlay , Variable } from './types.js'
2020
2121// If all CLI options are provided, use them directly
2222export async function normalizeOptions (
2323 cliOptions : CliOptions ,
24- ) : Promise < Required < Options > | undefined > {
24+ ) : Promise < Options | undefined > {
2525 // in some cases, if you use windows/powershell, the argument for addons
2626 // if sepparated by comma is not really passed as an array, but as a string
2727 // with spaces, We need to normalize this edge case.
@@ -42,14 +42,32 @@ export async function normalizeOptions(
4242 tailwind = true
4343 }
4444
45+ let mode : typeof FILE_ROUTER | typeof CODE_ROUTER =
46+ cliOptions . template === 'file-router' ? FILE_ROUTER : CODE_ROUTER
47+
48+ const overlay = cliOptions . overlay
49+ ? ( ( await loadRemoteAddOn ( cliOptions . overlay ) ) as Overlay )
50+ : undefined
51+
52+ if ( overlay ) {
53+ tailwind = overlay . tailwind
54+ typescript = overlay . typescript
55+ cliOptions . framework = overlay . framework
56+ mode = overlay . mode
57+ }
58+
4559 let addOns = false
4660 let chosenAddOns : Array < AddOn > = [ ]
47- if ( Array . isArray ( cliOptions . addOns ) ) {
61+ if ( Array . isArray ( cliOptions . addOns ) || overlay ?. dependsOn ) {
4862 addOns = true
63+ let finalAddOns = [ ...( overlay ?. dependsOn || [ ] ) ]
64+ if ( cliOptions . addOns && Array . isArray ( cliOptions . addOns ) ) {
65+ finalAddOns = [ ...finalAddOns , ...cliOptions . addOns ]
66+ }
4967 chosenAddOns = await finalizeAddOns (
5068 cliOptions . framework || DEFAULT_FRAMEWORK ,
5169 cliOptions . template === 'file-router' ? FILE_ROUTER : CODE_ROUTER ,
52- cliOptions . addOns ,
70+ finalAddOns ,
5371 )
5472 tailwind = true
5573 typescript = true
@@ -65,11 +83,12 @@ export async function normalizeOptions(
6583 getPackageManager ( ) ||
6684 DEFAULT_PACKAGE_MANAGER ,
6785 toolchain : cliOptions . toolchain || DEFAULT_TOOLCHAIN ,
68- mode : cliOptions . template === 'file-router' ? FILE_ROUTER : CODE_ROUTER ,
86+ mode,
6987 git : ! ! cliOptions . git ,
7088 addOns,
7189 chosenAddOns,
7290 variableValues : { } ,
91+ overlay,
7392 }
7493 }
7594}
0 commit comments