7
7
Plan ,
8
8
SsrSiteArgs ,
9
9
createBucket ,
10
+ createDevServer ,
10
11
createServersAndDistribution ,
11
12
prepare ,
12
13
useCloudFrontFunctionHostHeaderInjection ,
@@ -319,9 +320,9 @@ const BUILD_META_FILE_NAME: BuildMetaFileName = "sst.buildMeta.json";
319
320
* ```
320
321
*/
321
322
export class Astro extends Component implements Link . Linkable {
322
- private cdn : Output < Cdn > ;
323
- private assets : Bucket ;
324
- private server : Output < Function > ;
323
+ private cdn ? : Output < Cdn > ;
324
+ private assets ? : Bucket ;
325
+ private server ? : Output < Function > ;
325
326
326
327
constructor (
327
328
name : string ,
@@ -331,10 +332,22 @@ export class Astro extends Component implements Link.Linkable {
331
332
super ( __pulumiType , name , args , opts ) ;
332
333
333
334
const parent = this ;
334
- const { sitePath, partition, region } = prepare ( args , opts ) ;
335
+ const { sitePath, partition } = prepare ( args , opts ) ;
336
+
337
+ if ( $dev ) {
338
+ this . registerOutputs ( {
339
+ _metadata : {
340
+ mode : "placeholder" ,
341
+ path : sitePath ,
342
+ server : createDevServer ( parent , name , args ) . arn ,
343
+ } ,
344
+ } ) ;
345
+ return ;
346
+ }
347
+
335
348
const { access, bucket } = createBucket ( parent , name , partition , args ) ;
336
349
const outputPath = buildApp ( name , args , sitePath ) ;
337
- const { buildMeta } = loadBuildOutput ( ) ;
350
+ const buildMeta = loadBuildMetadata ( ) ;
338
351
const plan = buildPlan ( ) ;
339
352
const { distribution, ssrFunctions, edgeFunctions } =
340
353
createServersAndDistribution (
@@ -352,37 +365,18 @@ export class Astro extends Component implements Link.Linkable {
352
365
this . cdn = distribution ;
353
366
this . server = serverFunction ;
354
367
this . registerOutputs ( {
355
- _hint : $dev
356
- ? undefined
357
- : all ( [ this . cdn . domainUrl , this . cdn . url ] ) . apply (
358
- ( [ domainUrl , url ] ) => domainUrl ?? url ,
359
- ) ,
368
+ _hint : all ( [ this . cdn . domainUrl , this . cdn . url ] ) . apply (
369
+ ( [ domainUrl , url ] ) => domainUrl ?? url ,
370
+ ) ,
360
371
_metadata : {
361
- mode : $dev ? "placeholder" : "deployed" ,
372
+ mode : "deployed" ,
362
373
path : sitePath ,
363
374
url : distribution . apply ( ( d ) => d . domainUrl ?? d . url ) ,
364
375
edge : plan . edge ,
365
376
server : serverFunction . arn ,
366
377
} ,
367
378
} ) ;
368
379
369
- function loadBuildOutput ( ) {
370
- const cache = new Cache (
371
- `${ name } BuildOutput` ,
372
- {
373
- data : $dev ? loadBuildMetadataPlaceholder ( ) : loadBuildMetadata ( ) ,
374
- } ,
375
- {
376
- parent,
377
- ignoreChanges : $dev ? [ "*" ] : undefined ,
378
- } ,
379
- ) ;
380
-
381
- return {
382
- buildMeta : cache . data as ReturnType < typeof loadBuildMetadata > ,
383
- } ;
384
- }
385
-
386
380
function loadBuildMetadata ( ) {
387
381
return outputPath . apply ( ( outputPath ) => {
388
382
const filePath = path . join ( outputPath , "dist" , BUILD_META_FILE_NAME ) ;
@@ -397,34 +391,6 @@ export class Astro extends Component implements Link.Linkable {
397
391
} ) ;
398
392
}
399
393
400
- function loadBuildMetadataPlaceholder ( ) {
401
- return {
402
- deploymentStrategy : "regional" ,
403
- responseMode : "buffer" ,
404
- outputMode : "server" ,
405
- pageResolution : "directory" ,
406
- trailingSlash : "ignore" ,
407
- serverBuildOutputFile : "dist/server/entry.mjs" ,
408
- clientBuildOutputDir : "dist/client" ,
409
- clientBuildVersionedSubDir : "_astro" ,
410
- routes : [
411
- {
412
- route : "/_image" ,
413
- type : "endpoint" ,
414
- pattern : "/^\\/_image$/" ,
415
- prerender : false ,
416
- } ,
417
- {
418
- route : "/" ,
419
- type : "page" ,
420
- pattern : "/^\\/$/" ,
421
- prerender : false ,
422
- } ,
423
- ] ,
424
- serverRoutes : [ ] ,
425
- } ;
426
- }
427
-
428
394
function buildPlan ( ) {
429
395
return all ( [ outputPath , buildMeta ] ) . apply ( ( [ outputPath , buildMeta ] ) => {
430
396
const isStatic = buildMeta . outputMode === "static" ;
@@ -603,7 +569,7 @@ export class Astro extends Component implements Link.Linkable {
603
569
* Otherwise, it's the autogenerated CloudFront URL.
604
570
*/
605
571
public get url ( ) {
606
- return all ( [ this . cdn . domainUrl , this . cdn . url ] ) . apply (
572
+ return all ( [ this . cdn ? .domainUrl , this . cdn ? .url ] ) . apply (
607
573
( [ domainUrl , url ] ) => domainUrl ?? url ,
608
574
) ;
609
575
}
0 commit comments