UNPKG

projen-vscode-workspaces

Version:

Helpers for Projen projects that use VSCode workspaces.

66 lines 12.4 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.VsCodeWorkspaces = void 0; const path_1 = __importDefault(require("path")); const projen_1 = require("projen"); const javascript_1 = require("projen/lib/javascript"); const DEFAULT_WORKSPACES_MONOREPO_EXTENSION_RECOMMENDATIONS = [ // https://marketplace.visualstudio.com/items?itemName=q.typescript-mono-repo-import-helper "q.typescript-mono-repo-import-helper", ]; const DEFAULT_PATH = ".vscode"; class VsCodeWorkspaces extends projen_1.Component { constructor(rootProject, options) { super(rootProject); if (rootProject instanceof projen_1.Project) { const workspacesFilePath = options?.path ?? DEFAULT_PATH; const projectNamer = options?.projectNamer ?? ((project) => project.name); const workspacesJson = { ...(options?.additionalWorkspacesJsonSettings ?? {}), extensions: { ...(options?.additionalWorkspacesJsonSettings?.extensions ?? {}), recommendations: [ ...(options?.disableMonoRepoExtensionRecommendations ? [] : DEFAULT_WORKSPACES_MONOREPO_EXTENSION_RECOMMENDATIONS), ...(options?.additionalWorkspacesJsonSettings ?.extensions?.recommendations ?? []), ], }, folders: [ { name: projectNamer(rootProject, rootProject), path: path_1.default.relative(path_1.default.join(rootProject.outdir, workspacesFilePath), rootProject.outdir), }, ...(rootProject.subprojects?.map((subProject) => ({ name: projectNamer(subProject, rootProject), path: path_1.default.relative(path_1.default.join(rootProject.outdir, workspacesFilePath), subProject.outdir), })) ?? []), ], settings: { ["eslint.workingDirectories"]: rootProject.subprojects?.map((subProject) => `./${path_1.default.relative(rootProject.outdir, subProject.outdir)}`) ?? [], ["jest.disabledWorkspaceFolders"]: [ rootProject.jest ? rootProject.name : null, ...(rootProject.subprojects ?.filter((subProject) => subProject instanceof javascript_1.NodeProject && !subProject.jest) ?.map((subProject) => subProject.name) ?? []), ].filter(Boolean), ...(options?.additionalWorkspacesJsonSettings?.settings ?? {}), }, }; new projen_1.JsonFile(rootProject, `${workspacesFilePath}/${options.filename}`, { obj: workspacesJson, }); } } } exports.VsCodeWorkspaces = VsCodeWorkspaces; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsZ0RBQXdCO0FBR3hCLG1DQUFzRDtBQUN0RCxzREFBb0Q7QUF3Q3BELE1BQU0scURBQXFELEdBQUc7SUFDMUQsMkZBQTJGO0lBQzNGLHNDQUFzQztDQUN6QyxDQUFDO0FBRUYsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDO0FBRS9CLE1BQWEsZ0JBQWlCLFNBQVEsa0JBQVM7SUFDM0MsWUFBWSxXQUFzQixFQUFFLE9BQWdDO1FBQ2hFLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVuQixJQUFJLFdBQVcsWUFBWSxnQkFBTyxFQUFFLENBQUM7WUFDakMsTUFBTSxrQkFBa0IsR0FBRyxPQUFPLEVBQUUsSUFBSSxJQUFJLFlBQVksQ0FBQztZQUN6RCxNQUFNLFlBQVksR0FDZCxPQUFPLEVBQUUsWUFBWSxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUV6RCxNQUFNLGNBQWMsR0FBeUI7Z0JBQ3pDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsZ0NBQWdDLElBQUksRUFBRSxDQUFDO2dCQUNwRCxVQUFVLEVBQUU7b0JBQ1IsR0FBRyxDQUFDLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxVQUFVO3dCQUNyRCxFQUFFLENBQUM7b0JBQ1AsZUFBZSxFQUFFO3dCQUNiLEdBQUcsQ0FBQyxPQUFPLEVBQUUsdUNBQXVDOzRCQUNoRCxDQUFDLENBQUMsRUFBRTs0QkFDSixDQUFDLENBQUMscURBQXFELENBQUM7d0JBQzVELEdBQUcsQ0FBQyxPQUFPLEVBQUUsZ0NBQWdDOzRCQUN6QyxFQUFFLFVBQVUsRUFBRSxlQUFlLElBQUksRUFBRSxDQUFDO3FCQUMzQztpQkFDSjtnQkFDRCxPQUFPLEVBQUU7b0JBQ0w7d0JBQ0ksSUFBSSxFQUFFLFlBQVksQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDO3dCQUM1QyxJQUFJLEVBQUUsY0FBSSxDQUFDLFFBQVEsQ0FDZixjQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLENBQUMsRUFDakQsV0FBVyxDQUFDLE1BQU0sQ0FDckI7cUJBQ0o7b0JBQ0QsR0FBRyxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO3dCQUM5QyxJQUFJLEVBQUUsWUFBWSxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUM7d0JBQzNDLElBQUksRUFBRSxjQUFJLENBQUMsUUFBUSxDQUNmLGNBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxFQUNqRCxVQUFVLENBQUMsTUFBTSxDQUNwQjtxQkFDSixDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7aUJBQ2I7Z0JBQ0QsUUFBUSxFQUFFO29CQUNOLENBQUMsMkJBQTJCLENBQUMsRUFDekIsV0FBVyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQ3hCLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FDWCxLQUFLLGNBQUksQ0FBQyxRQUFRLENBQ2QsV0FBVyxDQUFDLE1BQU0sRUFDbEIsVUFBVSxDQUFDLE1BQU0sQ0FDcEIsRUFBRSxDQUNWLElBQUksRUFBRTtvQkFDWCxDQUFDLCtCQUErQixDQUFDLEVBQUU7d0JBQzlCLFdBQTJCLENBQUMsSUFBSTs0QkFDN0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJOzRCQUNsQixDQUFDLENBQUMsSUFBSTt3QkFDVixHQUFHLENBQUMsV0FBVyxDQUFDLFdBQVc7NEJBQ3ZCLEVBQUUsTUFBTSxDQUNKLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FDWCxVQUFVLFlBQVksd0JBQVc7NEJBQ2pDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FDdkI7NEJBQ0QsRUFBRSxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7cUJBQ3BELENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztvQkFFakIsR0FBRyxDQUFDLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxRQUFRO3dCQUNuRCxFQUFFLENBQUM7aUJBQ1Y7YUFDSixDQUFDO1lBRUYsSUFBSSxpQkFBUSxDQUNSLFdBQVcsRUFDWCxHQUFHLGtCQUFrQixJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFDM0M7Z0JBQ0ksR0FBRyxFQUFFLGNBQWM7YUFDdEIsQ0FDSixDQUFDO1FBQ04sQ0FBQztJQUNMLENBQUM7Q0FDSjtBQTFFRCw0Q0EwRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBKc29uRmlsZSwgUHJvamVjdCB9IGZyb20gXCJwcm9qZW5cIjtcbmltcG9ydCB7IE5vZGVQcm9qZWN0IH0gZnJvbSBcInByb2plbi9saWIvamF2YXNjcmlwdFwiO1xuXG5leHBvcnQgdHlwZSBWc0NvZGVXb3Jrc3BhY2VzSnNvbiA9IHtcbiAgICBleHRlbnNpb25zPzoge1xuICAgICAgICByZWNvbW1lbmRhdGlvbnM/OiBzdHJpbmdbXTtcbiAgICB9O1xuICAgIGZvbGRlcnM6IHtcbiAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICBwYXRoOiBzdHJpbmc7XG4gICAgfVtdO1xuICAgIHNldHRpbmdzPzogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH07XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFZzQ29kZVdvcmtzcGFjZXNPcHRpb25zIHtcbiAgICAvKipcbiAgICAgKiBAZGVmYXVsdCBub25lXG4gICAgICovXG4gICAgYWRkaXRpb25hbFdvcmtzcGFjZXNKc29uU2V0dGluZ3M/OiBPbWl0PFZzQ29kZVdvcmtzcGFjZXNKc29uLCBcImZvbGRlcnNcIj47XG4gICAgLyoqXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBkaXNhYmxlTW9ub1JlcG9FeHRlbnNpb25SZWNvbW1lbmRhdGlvbnM/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFNob3VsZCBlbmQgd2l0aCBcIi5jb2RlLXdvcmtzcGFjZVwiXG4gICAgICovXG4gICAgZmlsZW5hbWU6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBAZGVmYXVsdCAocHJvamVjdCkgPT4gcHJvamVjdC5uYW1lXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcm9vdFByb2plY3QgVGhlIHJvb3QgcHJvamVjdCBkZWZpbml0aW9uIHRvIHVzZSBmb3IgbmFtaW5nXG4gICAgICogQHBhcmFtIHByb2plY3QgVGhlIHByb2plY3QgZGVmaW5pdGlvbiB0byB1c2UgZm9yIG5hbWluZ1xuICAgICAqIEByZXR1cm5zIFRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IGluIHRoZSBjb250ZXh0IG9mIFZTQ29kZSBXb3Jrc3BhY2VzXG4gICAgICovXG4gICAgcHJvamVjdE5hbWVyPzogKHByb2plY3Q6IFByb2plY3QsIHJvb3RQcm9qZWN0OiBQcm9qZWN0KSA9PiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQGRlZmF1bHQgXCIudnNjb2RlXCJcbiAgICAgKi9cbiAgICBwYXRoPzogc3RyaW5nO1xufVxuXG5jb25zdCBERUZBVUxUX1dPUktTUEFDRVNfTU9OT1JFUE9fRVhURU5TSU9OX1JFQ09NTUVOREFUSU9OUyA9IFtcbiAgICAvLyBodHRwczovL21hcmtldHBsYWNlLnZpc3VhbHN0dWRpby5jb20vaXRlbXM/aXRlbU5hbWU9cS50eXBlc2NyaXB0LW1vbm8tcmVwby1pbXBvcnQtaGVscGVyXG4gICAgXCJxLnR5cGVzY3JpcHQtbW9uby1yZXBvLWltcG9ydC1oZWxwZXJcIixcbl07XG5cbmNvbnN0IERFRkFVTFRfUEFUSCA9IFwiLnZzY29kZVwiO1xuXG5leHBvcnQgY2xhc3MgVnNDb2RlV29ya3NwYWNlcyBleHRlbmRzIENvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3Iocm9vdFByb2plY3Q6IENvbnN0cnVjdCwgb3B0aW9uczogVnNDb2RlV29ya3NwYWNlc09wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIocm9vdFByb2plY3QpO1xuXG4gICAgICAgIGlmIChyb290UHJvamVjdCBpbnN0YW5jZW9mIFByb2plY3QpIHtcbiAgICAgICAgICAgIGNvbnN0IHdvcmtzcGFjZXNGaWxlUGF0aCA9IG9wdGlvbnM/LnBhdGggPz8gREVGQVVMVF9QQVRIO1xuICAgICAgICAgICAgY29uc3QgcHJvamVjdE5hbWVyID1cbiAgICAgICAgICAgICAgICBvcHRpb25zPy5wcm9qZWN0TmFtZXIgPz8gKChwcm9qZWN0KSA9PiBwcm9qZWN0Lm5hbWUpO1xuXG4gICAgICAgICAgICBjb25zdCB3b3Jrc3BhY2VzSnNvbjogVnNDb2RlV29ya3NwYWNlc0pzb24gPSB7XG4gICAgICAgICAgICAgICAgLi4uKG9wdGlvbnM/LmFkZGl0aW9uYWxXb3Jrc3BhY2VzSnNvblNldHRpbmdzID8/IHt9KSxcbiAgICAgICAgICAgICAgICBleHRlbnNpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLihvcHRpb25zPy5hZGRpdGlvbmFsV29ya3NwYWNlc0pzb25TZXR0aW5ncz8uZXh0ZW5zaW9ucyA/P1xuICAgICAgICAgICAgICAgICAgICAgICAge30pLFxuICAgICAgICAgICAgICAgICAgICByZWNvbW1lbmRhdGlvbnM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLihvcHRpb25zPy5kaXNhYmxlTW9ub1JlcG9FeHRlbnNpb25SZWNvbW1lbmRhdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFtdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBERUZBVUxUX1dPUktTUEFDRVNfTU9OT1JFUE9fRVhURU5TSU9OX1JFQ09NTUVOREFUSU9OUyksXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi4ob3B0aW9ucz8uYWRkaXRpb25hbFdvcmtzcGFjZXNKc29uU2V0dGluZ3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/LmV4dGVuc2lvbnM/LnJlY29tbWVuZGF0aW9ucyA/PyBbXSksXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBmb2xkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHByb2plY3ROYW1lcihyb290UHJvamVjdCwgcm9vdFByb2plY3QpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogcGF0aC5yZWxhdGl2ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4ocm9vdFByb2plY3Qub3V0ZGlyLCB3b3Jrc3BhY2VzRmlsZVBhdGgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RQcm9qZWN0Lm91dGRpcixcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIC4uLihyb290UHJvamVjdC5zdWJwcm9qZWN0cz8ubWFwKChzdWJQcm9qZWN0KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogcHJvamVjdE5hbWVyKHN1YlByb2plY3QsIHJvb3RQcm9qZWN0KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IHBhdGgucmVsYXRpdmUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC5qb2luKHJvb3RQcm9qZWN0Lm91dGRpciwgd29ya3NwYWNlc0ZpbGVQYXRoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJQcm9qZWN0Lm91dGRpcixcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIH0pKSA/PyBbXSksXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZXR0aW5nczoge1xuICAgICAgICAgICAgICAgICAgICBbXCJlc2xpbnQud29ya2luZ0RpcmVjdG9yaWVzXCJdOlxuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdFByb2plY3Quc3VicHJvamVjdHM/Lm1hcChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3ViUHJvamVjdCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYC4vJHtwYXRoLnJlbGF0aXZlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdFByb2plY3Qub3V0ZGlyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViUHJvamVjdC5vdXRkaXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICkgPz8gW10sXG4gICAgICAgICAgICAgICAgICAgIFtcImplc3QuZGlzYWJsZWRXb3Jrc3BhY2VGb2xkZXJzXCJdOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAocm9vdFByb2plY3QgYXMgTm9kZVByb2plY3QpLmplc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHJvb3RQcm9qZWN0Lm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi4ocm9vdFByb2plY3Quc3VicHJvamVjdHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/LmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN1YlByb2plY3QpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJQcm9qZWN0IGluc3RhbmNlb2YgTm9kZVByb2plY3QgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFzdWJQcm9qZWN0Lmplc3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8ubWFwKChzdWJQcm9qZWN0KSA9PiBzdWJQcm9qZWN0Lm5hbWUpID8/IFtdKSxcbiAgICAgICAgICAgICAgICAgICAgXS5maWx0ZXIoQm9vbGVhbiksXG5cbiAgICAgICAgICAgICAgICAgICAgLi4uKG9wdGlvbnM/LmFkZGl0aW9uYWxXb3Jrc3BhY2VzSnNvblNldHRpbmdzPy5zZXR0aW5ncyA/P1xuICAgICAgICAgICAgICAgICAgICAgICAge30pLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBuZXcgSnNvbkZpbGUoXG4gICAgICAgICAgICAgICAgcm9vdFByb2plY3QsXG4gICAgICAgICAgICAgICAgYCR7d29ya3NwYWNlc0ZpbGVQYXRofS8ke29wdGlvbnMuZmlsZW5hbWV9YCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG9iajogd29ya3NwYWNlc0pzb24sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=