@robby-rabbitman/nx-plus-web-dev-server
Version:
Web Dev Server plugin for Nx workspaces.
85 lines • 3.36 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.DEFAULT_WEB_DEV_SERVER_TARGET_NAME = exports.createNodesV2 = void 0;
const devkit_1 = require("@nx/devkit");
const fs_1 = require("fs");
const path_1 = require("path");
/**
* The glob pattern to match `Web Dev Server` configuration files.
*
* https://modern-web.dev/docs/dev-server/cli-and-configuration/#configuration-file
*/
const WEB_DEV_SERVER_CONFIG_FILE_NAME_GLOB = '**/@(web-dev-server|wds).config.@(js|cjs|mjs)';
const WEB_DEV_SERVER_COMMAND = 'web-dev-server';
exports.createNodesV2 = [
WEB_DEV_SERVER_CONFIG_FILE_NAME_GLOB,
(webDevServerConfigPaths, options, context) => {
return (0, devkit_1.createNodesFromFiles)(createWebDevServerTarget, webDevServerConfigPaths, options, context);
},
];
exports.DEFAULT_WEB_DEV_SERVER_TARGET_NAME = 'serve';
const createWebDevServerTarget = (webDevServerConfigPath, userOptions, context) => {
const options = normalizeWebDevServerOptions(userOptions);
const { serveTargetName, serveTargetConfig } = options;
const webDevServerInformation = extractWebDevServerInformation(webDevServerConfigPath, context.workspaceRoot);
if (!webDevServerInformation.isProject) {
return {};
}
/**
* TODO: '@web/dev-server' does not export the `DevServerCliArgs` type - add
* it when its exported from their public api.
*
* https://github.com/modernweb-dev/web/blob/17cfc0d70f46b321912e4506b2cccae1b16b1534/packages/dev-server/src/config/readCliArgs.ts#L6-L20
*/
const webDevServerDefaultCliArgs = {
config: webDevServerInformation.configFileName,
watch: true,
};
const webDevServerTargetConfiguration = {
command: WEB_DEV_SERVER_COMMAND,
...serveTargetConfig,
options: {
cwd: webDevServerInformation.configDir,
...webDevServerDefaultCliArgs,
...serveTargetConfig.options,
},
};
return {
projects: {
[webDevServerInformation.configDir]: {
targets: {
[serveTargetName]: webDevServerTargetConfiguration,
},
},
},
};
};
function normalizeWebDevServerOptions(userOptions) {
const normalizedOptions = {
serveTargetName: exports.DEFAULT_WEB_DEV_SERVER_TARGET_NAME,
serveTargetConfig: {},
...userOptions,
};
/** Make sure `serveTargetName` is not an empty string */
if (normalizedOptions.serveTargetName === '') {
normalizedOptions.serveTargetName = exports.DEFAULT_WEB_DEV_SERVER_TARGET_NAME;
}
return normalizedOptions;
}
function extractWebDevServerInformation(webDevServerConfigPath, workspaceRoot) {
const configDir = (0, path_1.dirname)(webDevServerConfigPath);
return {
configFileName: (0, path_1.basename)(webDevServerConfigPath),
configDir,
isProject: isProject(configDir, workspaceRoot),
};
}
/**
* Returns true if the directory contains a `project.json` or `package.json`
* file.
*/
function isProject(directory, workspaceRoot) {
return ((0, fs_1.existsSync)((0, path_1.join)(workspaceRoot, directory, 'project.json')) ||
(0, fs_1.existsSync)((0, path_1.join)(workspaceRoot, directory, 'package.json')));
}
//# sourceMappingURL=web-dev-server.plugin.js.map
;