summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Michael Stramel <stramel@users.noreply.github.com> 2021-08-11 16:49:06 -0500
committerGravatar Fred K. Schott <fkschott@gmail.com> 2021-08-11 14:57:05 -0700
commit939b9d01a4c5ea8fcdc95be75c789b3eeee8f06f (patch)
treee7180ebfb0815a0f9af5564b4fccc963bb995791
parentfcc56a8672c6d80266424de53fc6cf51d46f35e4 (diff)
downloadastro-939b9d01a4c5ea8fcdc95be75c789b3eeee8f06f.tar.gz
astro-939b9d01a4c5ea8fcdc95be75c789b3eeee8f06f.tar.zst
astro-939b9d01a4c5ea8fcdc95be75c789b3eeee8f06f.zip
Add PORT env var to be used (#952)
* Add PORT env var to be used * Format * Create few-carpets-sing.md * Update few-carpets-sing.md
-rw-r--r--.changeset/few-carpets-sing.md5
-rw-r--r--packages/astro/src/cli.ts44
2 files changed, 42 insertions, 7 deletions
diff --git a/.changeset/few-carpets-sing.md b/.changeset/few-carpets-sing.md
new file mode 100644
index 000000000..3b938a3b2
--- /dev/null
+++ b/.changeset/few-carpets-sing.md
@@ -0,0 +1,5 @@
+---
+"astro": patch
+---
+
+Allow dev server port to be set by `PORT` environment variable
diff --git a/packages/astro/src/cli.ts b/packages/astro/src/cli.ts
index accdb7978..74d1e4302 100644
--- a/packages/astro/src/cli.ts
+++ b/packages/astro/src/cli.ts
@@ -35,14 +35,44 @@ interface CLIState {
};
}
+type TypeOf = 'string' | 'boolean' | 'number';
+// Validates property types of object
+const validateOptions = (opts: Record<string, any>, specs: Record<string, TypeOf | [(v: any) => unknown, TypeOf]>) =>
+ Object.entries(specs).reduce<Record<string, any>>((options, [k, spec]) => {
+ const v = opts[k];
+
+ if (typeof spec === 'string' && typeof v === spec) {
+ options[k] = v;
+ } else if (Array.isArray(spec)) {
+ const [coercion, test] = spec;
+ const result = coercion(v);
+ if (typeof result === test) {
+ options[k] = result;
+ }
+ }
+
+ return options;
+ }, {});
+
/** Determine which action the user requested */
function resolveArgs(flags: Arguments): CLIState {
- const options: CLIState['options'] = {
- projectRoot: typeof flags.projectRoot === 'string' ? flags.projectRoot : undefined,
- site: typeof flags.site === 'string' ? flags.site : undefined,
- sitemap: typeof flags.sitemap === 'boolean' ? flags.sitemap : undefined,
- port: typeof flags.port === 'number' ? flags.port : undefined,
- config: typeof flags.config === 'string' ? flags.config : undefined,
+ const { PORT } = process.env;
+
+ // Merge options (Flags take priority)
+ const options = {
+ ...validateOptions(
+ { port: PORT },
+ {
+ port: [parseInt, 'number'],
+ }
+ ),
+ ...validateOptions(flags, {
+ projectRoot: 'string',
+ site: 'string',
+ sitemap: 'boolean',
+ port: 'number',
+ config: 'string',
+ }),
};
if (flags.version) {
@@ -101,7 +131,7 @@ function mergeCLIFlags(astroConfig: AstroConfig, flags: CLIState['options']) {
}
/** Handle `astro run` command */
-async function runCommand(rawRoot: string, cmd: (a: AstroConfig, options: any) => Promise<void>, options: CLIState['options']) {
+async function runCommand(rawRoot: string, cmd: (a: AstroConfig, opts: any) => Promise<void>, options: CLIState['options']) {
try {
const projectRoot = options.projectRoot || rawRoot;
const astroConfig = await loadConfig(projectRoot, options.config);