import fs from "fs"; import { join } from "path"; import rushLib from "@microsoft/rush-lib"; const rushConfiguration = rushLib.RushConfiguration.loadFromDefaultLocation({ startingFolder: process.cwd(), }); const purpurLibProject = rushConfiguration.findProjectByShorthandName("@purpurds/purpur"); purpurLibProject?.packageJsonEditor.addOrUpdateDependency( "@purpurds/tokens", "workspace:*", rushLib.DependencyType.Regular ); const components = rushConfiguration.projects.filter( (project) => project.projectRelativeFolder.startsWith("components/") && project.packageName !== "@purpurds/icon" && project.packageName !== "@purpurds/illustrative-icon" && project.packageName !== "@purpurds/logo" && project.packageName !== "@purpurds/password-field" ); const getComponentName = (packageName: string) => packageName.replace("@purpurds/", ""); const getFileContent = (lines: string[]) => { return [ "/**", " * ⚠️ WARNING ⚠️", " * This file is automatically generated, do not edit it manually", " */", "", ] .concat(lines) .join("\n"); }; const getIndexFileLines = async () => { const projectFileLines = await Promise.all( components.map(async (project) => { const { packageName } = project; purpurLibProject?.packageJsonEditor.addOrUpdateDependency( packageName, "workspace:*", rushLib.DependencyType.Regular ); const packageJson = await import( join(process.cwd(), "../../", project.projectRelativeFolder, "package.json") ); const hasStyles = !!packageJson.exports["./styles"]; const lines = (hasStyles ? [`import "${packageName}/styles";`] : []) .concat(`export * from "${packageName}";`) .concat(""); fs.writeFileSync( join(process.cwd(), "src", `${getComponentName(packageName)}.ts`), getFileContent(lines) ); return lines; }) ); return projectFileLines; }; const indexFileLines = await getIndexFileLines(); fs.writeFileSync( join(process.cwd(), "src", "purpur.ts"), getFileContent( [ `import "./purpur.css"`, "", `import "@purpurds/icon/styles";`, "", `import "@purpurds/illustrative-icon/styles";`, "", `import "@purpurds/logo/styles";`, "", `import "@purpurds/password-field/styles";`, "", ].concat(indexFileLines.flat()) ) ); fs.writeFileSync( join(process.cwd(), "src", "entries.js"), getFileContent([ `export const entries = [${components .map(({ packageName }) => `"${getComponentName(packageName)}"`) .join(",")}];`, ]) ); purpurLibProject?.packageJsonEditor.saveIfModified();