Skip to content
Merged
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
23 changes: 19 additions & 4 deletions src/commands/start.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
import { Argv } from 'yargs';
import inquirer from 'inquirer';
import { Argv } from 'yargs';
import checkNodejsVersion from '../checks/nodejs-version';
import checkProjectStructure from '../checks/project-structure';
import { getConfigFromCli, StartCliFlags } from '../config/start';
import { printRouteInfo } from '../printers/start';
import { createServer } from '../runtime/server';
import { startInspector } from '../runtime/utils/inspector';
import { getDebugFunction, setLogLevelByName } from '../utils/logger';
import { getDebugFunction, logger, setLogLevelByName } from '../utils/logger';
import { ExternalCliOptions, sharedCliOptions } from './shared';
import { CliInfo } from './types';
import { getFullCommand } from './utils';
import { logger } from '../utils/logger';

const debug = getDebugFunction('twilio-run:start');

Expand Down Expand Up @@ -46,7 +45,15 @@ export async function handler(
const config = await getConfigFromCli(argv, cliInfo, externalCliOptions);

const command = getFullCommand(argv);
await checkProjectStructure(config.baseDir, command);
const directories = {
assetsDirectories: config.assetsFolderName
? [config.assetsFolderName]
: undefined,
functionsDirectories: config.functionsFolderName
? [config.functionsFolderName]
: undefined,
};
await checkProjectStructure(config.baseDir, command, false, directories);

debug('Determined configuration: %p', config);
process.title = config.appName;
Expand Down Expand Up @@ -163,6 +170,14 @@ export const cliInfo: CliInfo = {
describe:
'Enables legacy mode, it will prefix your asset paths with /assets',
},
'assets-folder': {
type: 'string',
describe: 'Specific folder name to be used for static assets',
},
'functions-folder': {
type: 'string',
describe: 'Specific folder name to be used for static functions',
},
},
};

Expand Down
6 changes: 6 additions & 0 deletions src/config/start.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ export type StartCliConfig = {
logs: boolean;
legacyMode: boolean;
appName: string;
assetsFolderName?: string;
functionsFolderName?: string;
};

export type StartCliFlags = Arguments<
Expand All @@ -50,6 +52,8 @@ export type StartCliFlags = Arguments<
inspect?: string;
inspectBrk?: string;
legacyMode: boolean;
assetsFolder?: string;
functionsFolder?: string;
}
>;

Expand Down Expand Up @@ -168,6 +172,8 @@ export async function getConfigFromCli(
config.logs = cli.logs;
config.legacyMode = cli.legacyMode;
config.appName = 'twilio-run';
config.assetsFolderName = cli.assetsFolder;
config.functionsFolderName = cli.functionsFolder;

return config;
}
15 changes: 14 additions & 1 deletion src/printers/start.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { ServerlessResourceConfig } from '@twilio-labs/serverless-api';
import { SearchConfig } from '@twilio-labs/serverless-api/dist/utils';
import boxen from 'boxen';
import chalk from 'chalk';
import logSymbols from 'log-symbols';
Expand Down Expand Up @@ -146,7 +147,19 @@ function printPrettyRouteInfo(
}

export async function printRouteInfo(config: StartCliConfig): Promise<void> {
const { functions, assets } = await getFunctionsAndAssets(config.baseDir);
const searchConfig: SearchConfig = {
functionsFolderNames: config.functionsFolderName
? [config.functionsFolderName]
: undefined,
assetsFolderNames: config.assetsFolderName
? [config.assetsFolderName]
: undefined,
};

const { functions, assets } = await getFunctionsAndAssets(
config.baseDir,
searchConfig
);

let output;
if (shouldPrettyPrint) {
Expand Down
7 changes: 5 additions & 2 deletions src/runtime/internal/runtime-paths.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,20 @@ import {
fsHelpers,
ServerlessResourceConfigWithFilePath,
} from '@twilio-labs/serverless-api';
import { SearchConfig } from '@twilio-labs/serverless-api/dist/utils';

export type RouteInfo = {
functions: ServerlessResourceConfigWithFilePath[];
assets: ServerlessResourceConfigWithFilePath[];
};

export async function getFunctionsAndAssets(
baseDir: string
baseDir: string,
config?: SearchConfig
): Promise<RouteInfo> {
let { functions, assets } = await fsHelpers.getListOfFunctionsAndAssets(
baseDir
baseDir,
config
);
return { functions, assets };
}
24 changes: 18 additions & 6 deletions src/runtime/server.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,19 @@
import { SearchConfig } from '@twilio-labs/serverless-api/dist/utils';
import { ServerlessFunctionSignature } from '@twilio-labs/serverless-runtime-types/types';
import bodyParser from 'body-parser';
import chokidar from 'chokidar';
import express, {
Express,
NextFunction,
Request as ExpressRequest,
Response as ExpressResponse,
} from 'express';
import userAgentMiddleware from 'express-useragent';
import nocache from 'nocache';
import { printRouteInfo } from '../printers/start';
import chokidar from 'chokidar';
import debounce from 'lodash.debounce';
import nocache from 'nocache';
import path from 'path';
import { StartCliConfig } from '../config/start';
import { printRouteInfo } from '../printers/start';
import { wrapErrorInHtml } from '../utils/error-html';
import { getDebugFunction } from '../utils/logger';
import { createLogger } from './internal/request-logger';
Expand Down Expand Up @@ -85,7 +86,18 @@ export async function createServer(
});
}

let routes = await getFunctionsAndAssets(config.baseDir);
const searchConfig: SearchConfig = {};

if (config.functionsFolderName) {
searchConfig.functionsFolderNames = [config.functionsFolderName];
console.log(searchConfig);
}

if (config.assetsFolderName) {
searchConfig.assetsFolderNames = [config.assetsFolderName];
}

let routes = await getFunctionsAndAssets(config.baseDir, searchConfig);
let routeMap = setRoutes(routes);

if (config.live) {
Expand All @@ -95,12 +107,12 @@ export async function createServer(
path.join(config.baseDir, '/(assets|static)/**/*'),
],
{
ignoreInitial: true
ignoreInitial: true,
}
);

const reloadRoutes = async () => {
routes = await getFunctionsAndAssets(config.baseDir);
routes = await getFunctionsAndAssets(config.baseDir, searchConfig);
routeMap = setRoutes(routes);

await printRouteInfo(config);
Expand Down