From 06ebce5e3e13a007708693a703a535dad5e8c5e7 Mon Sep 17 00:00:00 2001 From: Maxwell Brown Date: Tue, 10 Sep 2024 13:58:06 -0400 Subject: [PATCH] finish cleanup of basic template --- packages/create-effect-app/package.json | 3 +- packages/create-effect-app/src/Cli.ts | 55 ++++++++++++------------ packages/create-effect-app/src/Domain.ts | 1 - packages/create-effect-app/src/GitHub.ts | 5 +-- pnpm-lock.yaml | 3 ++ templates/basic/.madgerc | 7 --- templates/basic/package.json | 1 - 7 files changed, 33 insertions(+), 42 deletions(-) delete mode 100644 templates/basic/.madgerc diff --git a/packages/create-effect-app/package.json b/packages/create-effect-app/package.json index 7d02cf3..8d6176d 100644 --- a/packages/create-effect-app/package.json +++ b/packages/create-effect-app/package.json @@ -35,6 +35,7 @@ "@effect/printer-ansi": "^0.35.2", "effect": "^3.7.2", "tar": "^7.4.3", - "tsup": "^8.2.4" + "tsup": "^8.2.4", + "yaml": "^2.5.1" } } \ No newline at end of file diff --git a/packages/create-effect-app/src/Cli.ts b/packages/create-effect-app/src/Cli.ts index bc39373..92160bf 100644 --- a/packages/create-effect-app/src/Cli.ts +++ b/packages/create-effect-app/src/Cli.ts @@ -10,6 +10,7 @@ import * as Array from "effect/Array" import * as Effect from "effect/Effect" import * as Match from "effect/Match" import * as Option from "effect/Option" +import * as Yaml from "yaml" import { ProjectType } from "./Domain.js" import { GitHub } from "./GitHub.js" import type { Example } from "./internal/examples.js" @@ -51,10 +52,6 @@ const withNixFlake = Options.boolean("flake").pipe( Options.withDescription("Initialize project with a Nix flake") ) -const withMadge = Options.boolean("madge").pipe( - Options.withDescription("Initialize project with Madge") -) - const withPrettier = Options.boolean("prettier").pipe( Options.withDescription("Initialize project with Prettier") ) @@ -76,7 +73,6 @@ const projectType: Options.Options> = Options.all({ template: templateType, withChangesets, withNixFlake, - withMadge, withPrettier, withESLint, withWorkflows @@ -215,7 +211,7 @@ function createTemplate(config: TemplateConfig) { // Handle user preferences for changesets if (!config.projectType.withChangesets) { // Remove the .changesets directory - yield* fs.remove(path.join(config.projectName, ".changesets"), { + yield* fs.remove(path.join(config.projectName, ".changeset"), { recursive: true }) // Remove patches for changesets @@ -228,7 +224,7 @@ function createTemplate(config: TemplateConfig) { Object.keys(packageJson["pnpm"]["patchedDependencies"]), (key) => key.includes("changeset") ) - for (const patch in depsToRemove) { + for (const patch of depsToRemove) { delete packageJson["pnpm"]["patchedDependencies"][patch] } // Remove scripts for changesets @@ -249,6 +245,7 @@ function createTemplate(config: TemplateConfig) { } // If git workflows are enabled, remove changesets related workflows if (config.projectType.withWorkflows) { + yield* fs.remove(path.join(config.projectName, ".github", "workflows", "release.yml")) } } @@ -260,26 +257,11 @@ function createTemplate(config: TemplateConfig) { ) } - // Handle user preferences for Madge - if (!config.projectType.withMadge) { - // Remove the madge configuration file - yield* fs.remove(path.join(config.projectName, ".madgerc")) - // Remove the madge dependency - delete packageJson["devDependencies"]["madge"] - // Remove circular script if monorepo - if (config.projectType.template === "monorepo") { - yield* fs.remove(path.join(config.projectName, "scripts", "circular.js")) - } - if (config.projectType.withWorkflows) { - // If git workflows are enabled, remove madge check workflows - } - } - // Handle user preferences for Prettier if (!config.projectType.withPrettier) { // Remove prettier configuration files yield* Effect.forEach( - [".prettierignore", ".prettierc.json"], + [".prettierignore", ".prettierrc.json"], (file) => fs.remove(path.join(config.projectName, file)) ) // Remove prettier from dependencies @@ -306,6 +288,11 @@ function createTemplate(config: TemplateConfig) { } // If git workflows are enabled, remove lint workflows if (config.projectType.withWorkflows) { + const checkWorkflowPath = path.join(config.projectName, ".github", "workflows", "check.yml") + const checkWorkflow = yield* fs.readFileString(checkWorkflowPath) + const checkYaml = Yaml.parse(checkWorkflow) + delete checkYaml["jobs"]["lint"] + yield* fs.writeFileString(checkWorkflowPath, Yaml.stringify(checkYaml, undefined, 2)) } } @@ -315,10 +302,27 @@ function createTemplate(config: TemplateConfig) { yield* fs.remove(path.join(config.projectName, ".github")) } + // Write out the updated package.json + yield* fs.writeFileString( + path.join(config.projectName, "package.json"), + JSON.stringify(packageJson, undefined, 2) + ) + yield* Effect.logInfo(AnsiDoc.hsep([ AnsiDoc.text("Success!").pipe(AnsiDoc.annotate(Ansi.green)), AnsiDoc.text(`Effect template project was initialized in ${config.projectName}`) ])) + + if (config.projectType.withChangesets) { + yield* Effect.logInfo(AnsiDoc.hsep([ + AnsiDoc.text("Make sure to update the Changesets configuration file"), + AnsiDoc.text("with your target GitHub repository for Changesets changelogs"), + AnsiDoc.hardLine, + AnsiDoc.text(path.join(config.projectName, ".changeset", "config.json")).pipe( + AnsiDoc.annotate(Ansi.magenta) + ) + ])) + } }) } @@ -382,11 +386,6 @@ const getUserInput = Prompt.select<"example" | "template">({ message: "Initialize project with a Nix flake?", initial: true }), - withMadge: Prompt.toggle({ - message: "Initialize project with Madge?", - initial: true - }), - withPrettier: Prompt.toggle({ message: "Initialize project with Prettier?", initial: true diff --git a/packages/create-effect-app/src/Domain.ts b/packages/create-effect-app/src/Domain.ts index 5197fc8..7e13f76 100644 --- a/packages/create-effect-app/src/Domain.ts +++ b/packages/create-effect-app/src/Domain.ts @@ -10,7 +10,6 @@ export type ProjectType = Data.TaggedEnum<{ readonly template: Template readonly withChangesets: boolean readonly withNixFlake: boolean - readonly withMadge: boolean readonly withPrettier: boolean readonly withESLint: boolean readonly withWorkflows: boolean diff --git a/packages/create-effect-app/src/GitHub.ts b/packages/create-effect-app/src/GitHub.ts index f6f1a23..3973acf 100644 --- a/packages/create-effect-app/src/GitHub.ts +++ b/packages/create-effect-app/src/GitHub.ts @@ -44,10 +44,7 @@ export const make = Effect.gen(function*() { Tar.extract({ cwd: config.projectName, strip: 2 + config.projectType.template.split("/").length, - filter: (path) => { - console.log(path) - return path.includes(`examples-chore-enhance-templates/templates/${config.projectType.template}`) - } + filter: (path) => path.includes(`examples-chore-enhance-templates/templates/${config.projectType.template}`) }), (cause) => new TarExtractionError({ cause, directory: config.projectName }))) ) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3ea49e2..15f3259 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -118,6 +118,9 @@ importers: tsup: specifier: ^8.2.4 version: 8.2.4(postcss@8.4.45)(tsx@4.19.0)(typescript@5.5.4)(yaml@2.5.1) + yaml: + specifier: ^2.5.1 + version: 2.5.1 publishDirectory: dist packages: diff --git a/templates/basic/.madgerc b/templates/basic/.madgerc deleted file mode 100644 index b407c6b..0000000 --- a/templates/basic/.madgerc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "detectiveOptions": { - "ts": { - "skipTypeImports": true - } - } -} diff --git a/templates/basic/package.json b/templates/basic/package.json index 84d221f..d908d04 100644 --- a/templates/basic/package.json +++ b/templates/basic/package.json @@ -61,7 +61,6 @@ "eslint-plugin-sort-destructure-keys": "^2.0.0", "fast-check": "^3.21.0", "glob": "^11.0.0", - "madge": "^8.0.0", "playwright": "^1.46.0", "prettier": "^3.3.3", "rimraf": "^6.0.1",