From 243077d99c97dc28700efec84a2fdc77a8ba6399 Mon Sep 17 00:00:00 2001 From: Maxwell Brown Date: Wed, 11 Sep 2024 14:15:12 -0400 Subject: [PATCH] Improve templates and error logging (#33) --- packages/create-effect-app/src/Cli.ts | 20 --------------- packages/create-effect-app/src/Domain.ts | 1 - packages/create-effect-app/src/GitHub.ts | 25 +++++++++---------- packages/create-effect-app/src/bin.ts | 8 +----- templates/basic/.prettierignore | 3 --- templates/basic/.prettierrc.json | 4 --- templates/basic/package.json | 5 ++-- ...gesets__assemble-release-plan@6.0.4.patch} | 8 +++--- templates/cli/.prettierignore | 3 --- templates/cli/.prettierrc.json | 4 --- templates/cli/package.json | 5 ++-- ...gesets__assemble-release-plan@6.0.4.patch} | 8 +++--- ...bel-plugin-annotate-pure-calls@0.4.0.patch | 13 ++++++++++ templates/monorepo/.prettierignore | 3 --- templates/monorepo/.prettierrc.json | 4 --- templates/monorepo/package.json | 5 ++-- ...gesets__assemble-release-plan@6.0.4.patch} | 8 +++--- 17 files changed, 44 insertions(+), 83 deletions(-) delete mode 100644 templates/basic/.prettierignore delete mode 100644 templates/basic/.prettierrc.json rename templates/{cli/patches/@changesets__assemble-release-plan@6.0.3.patch => basic/patches/@changesets__assemble-release-plan@6.0.4.patch} (84%) delete mode 100644 templates/cli/.prettierignore delete mode 100644 templates/cli/.prettierrc.json rename templates/{monorepo/patches/@changesets__assemble-release-plan@6.0.3.patch => cli/patches/@changesets__assemble-release-plan@6.0.4.patch} (84%) create mode 100644 templates/cli/patches/babel-plugin-annotate-pure-calls@0.4.0.patch delete mode 100644 templates/monorepo/.prettierignore delete mode 100644 templates/monorepo/.prettierrc.json rename templates/{basic/patches/@changesets__assemble-release-plan@6.0.3.patch => monorepo/patches/@changesets__assemble-release-plan@6.0.4.patch} (84%) diff --git a/packages/create-effect-app/src/Cli.ts b/packages/create-effect-app/src/Cli.ts index 60e2883..f4d04d4 100644 --- a/packages/create-effect-app/src/Cli.ts +++ b/packages/create-effect-app/src/Cli.ts @@ -52,10 +52,6 @@ const withNixFlake = Options.boolean("flake").pipe( Options.withDescription("Initialize project with a Nix flake") ) -const withPrettier = Options.boolean("prettier").pipe( - Options.withDescription("Initialize project with Prettier") -) - const withESLint = Options.boolean("eslint").pipe( Options.withDescription("Initialize project with ESLint") ) @@ -73,7 +69,6 @@ const projectType: Options.Options> = Options.all({ template: templateType, withChangesets, withNixFlake, - withPrettier, withESLint, withWorkflows }).pipe(Options.map(ProjectType.Template)) @@ -257,17 +252,6 @@ function createTemplate(config: TemplateConfig) { ) } - // Handle user preferences for Prettier - if (!config.projectType.withPrettier) { - // Remove prettier configuration files - yield* Effect.forEach( - [".prettierignore", ".prettierrc.json"], - (file) => fs.remove(path.join(config.projectName, file)) - ) - // Remove prettier from dependencies - delete packageJson["devDependencies"]["prettier"] - } - // Handle user preferences for ESLint if (!config.projectType.withESLint) { // Remove eslint.config.mjs @@ -393,10 +377,6 @@ const getUserInput = Prompt.select<"example" | "template">({ message: "Initialize project with a Nix flake?", initial: true }), - withPrettier: Prompt.toggle({ - message: "Initialize project with Prettier?", - initial: true - }), withESLint: Prompt.toggle({ message: "Initialize project with ESLint?", initial: true diff --git a/packages/create-effect-app/src/Domain.ts b/packages/create-effect-app/src/Domain.ts index 7e13f76..7f24cc1 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 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 5ae66ad..345f239 100644 --- a/packages/create-effect-app/src/GitHub.ts +++ b/packages/create-effect-app/src/GitHub.ts @@ -1,19 +1,15 @@ +import * as HelpDoc from "@effect/cli/HelpDoc" +import * as ValidationError from "@effect/cli/ValidationError" import * as NodeSink from "@effect/platform-node/NodeSink" import * as HttpClient from "@effect/platform/HttpClient" import * as HttpClientRequest from "@effect/platform/HttpClientRequest" import * as HttpClientResponse from "@effect/platform/HttpClientResponse" -import * as Data from "effect/Data" import * as Effect from "effect/Effect" import * as Layer from "effect/Layer" import * as Stream from "effect/Stream" import * as Tar from "tar" import type { ExampleConfig, TemplateConfig } from "./Cli.js" -export class TarExtractionError extends Data.TaggedError("TarExtractionError")<{ - readonly cause: unknown - readonly directory: string -}> {} - export const make = Effect.gen(function*() { const client = yield* HttpClient.HttpClient @@ -33,19 +29,22 @@ export const make = Effect.gen(function*() { cwd: config.projectName, strip: 2 + config.projectType.example.split("/").length, filter: (path) => path.includes(`examples-main/examples/${config.projectType.example}`) - }), (cause) => new TarExtractionError({ cause, directory: config.projectName }))) + }), () => ValidationError.invalidValue(HelpDoc.p(`Failed to download example ${config.projectType.example}`)))) ) const downloadTemplate = (config: TemplateConfig) => HttpClientRequest.get("/Effect-TS/examples/tar.gz/main").pipe( codeloadClient, HttpClientResponse.stream, - Stream.run(NodeSink.fromWritable(() => - Tar.extract({ - cwd: config.projectName, - strip: 2 + config.projectType.template.split("/").length, - filter: (path) => path.includes(`examples-main/templates/${config.projectType.template}`) - }), (cause) => new TarExtractionError({ cause, directory: config.projectName }))) + Stream.run(NodeSink.fromWritable( + () => + Tar.extract({ + cwd: config.projectName, + strip: 2 + config.projectType.template.split("/").length, + filter: (path) => path.includes(`examples-main/templates/${config.projectType.template}`) + }), + () => ValidationError.invalidValue(HelpDoc.p(`Failed to download template ${config.projectType.template}`)) + )) ) return { diff --git a/packages/create-effect-app/src/bin.ts b/packages/create-effect-app/src/bin.ts index 4e6af14..6892e95 100644 --- a/packages/create-effect-app/src/bin.ts +++ b/packages/create-effect-app/src/bin.ts @@ -30,13 +30,7 @@ cli(process.argv).pipe( Effect.logError(AnsiDoc.cat( AnsiDoc.hardLine, AnsiDoc.text("Exiting...").pipe(AnsiDoc.annotate(Ansi.red)) - )), - TarExtractionError: (error) => - Effect.logError( - AnsiDoc.text( - `Error extracting the TAR archive to ${error.directory}` - ).pipe(AnsiDoc.annotate(Ansi.red)) - ) + )) }), Effect.orDie, Effect.provide(MainLive), diff --git a/templates/basic/.prettierignore b/templates/basic/.prettierignore deleted file mode 100644 index e727c7d..0000000 --- a/templates/basic/.prettierignore +++ /dev/null @@ -1,3 +0,0 @@ -*.js -*.ts -*.cjs diff --git a/templates/basic/.prettierrc.json b/templates/basic/.prettierrc.json deleted file mode 100644 index 27b720e..0000000 --- a/templates/basic/.prettierrc.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "semi": false, - "trailingComma": "none" -} diff --git a/templates/basic/package.json b/templates/basic/package.json index 88c368b..f89d9d0 100644 --- a/templates/basic/package.json +++ b/templates/basic/package.json @@ -43,7 +43,7 @@ "@babel/plugin-transform-export-namespace-from": "^7.24.7", "@babel/plugin-transform-modules-commonjs": "^7.24.8", "@changesets/changelog-github": "^0.5.0", - "@changesets/cli": "2.27.7", + "@changesets/cli": "^2.27.8", "@edge-runtime/vm": "^4.0.0", "@effect/build-utils": "^0.7.7", "@effect/docgen": "^0.4.4", @@ -71,7 +71,6 @@ "fast-check": "^3.21.0", "glob": "^11.0.0", "playwright": "^1.46.0", - "prettier": "^3.3.3", "rimraf": "^6.0.1", "tsx": "^4.17.0", "typescript": "^5.6.2", @@ -96,7 +95,7 @@ }, "patchedDependencies": { "@changesets/get-github-info@0.6.0": "patches/@changesets__get-github-info@0.6.0.patch", - "@changesets/assemble-release-plan@6.0.3": "patches/@changesets__assemble-release-plan@6.0.3.patch", + "@changesets/assemble-release-plan@6.0.4": "patches/@changesets__assemble-release-plan@6.0.4.patch", "babel-plugin-annotate-pure-calls@0.4.0": "patches/babel-plugin-annotate-pure-calls@0.4.0.patch" } } diff --git a/templates/cli/patches/@changesets__assemble-release-plan@6.0.3.patch b/templates/basic/patches/@changesets__assemble-release-plan@6.0.4.patch similarity index 84% rename from templates/cli/patches/@changesets__assemble-release-plan@6.0.3.patch rename to templates/basic/patches/@changesets__assemble-release-plan@6.0.4.patch index bc02b65..ca98526 100644 --- a/templates/cli/patches/@changesets__assemble-release-plan@6.0.3.patch +++ b/templates/basic/patches/@changesets__assemble-release-plan@6.0.4.patch @@ -1,8 +1,8 @@ diff --git a/dist/changesets-assemble-release-plan.cjs.js b/dist/changesets-assemble-release-plan.cjs.js -index 60427457c887f2d72168fecec83d79088c68e3a4..b48899c83ca2bc5bfa0cbb65e0c098d5bb65fe3d 100644 +index 4f7b5e5b37bb05874a5c1d8e583e29d4a9593ecf..980ead81554a8d925b6366e1644f3be03765398e 100644 --- a/dist/changesets-assemble-release-plan.cjs.js +++ b/dist/changesets-assemble-release-plan.cjs.js -@@ -189,7 +189,7 @@ function determineDependents({ +@@ -237,7 +237,7 @@ function determineDependents({ preInfo, onlyUpdatePeerDependentsWhenOutOfRange: config.___experimentalUnsafeOptions_WILL_CHANGE_IN_PATCH.onlyUpdatePeerDependentsWhenOutOfRange })) { @@ -12,10 +12,10 @@ index 60427457c887f2d72168fecec83d79088c68e3a4..b48899c83ca2bc5bfa0cbb65e0c098d5 switch (depType) { case "dependencies": diff --git a/dist/changesets-assemble-release-plan.esm.js b/dist/changesets-assemble-release-plan.esm.js -index f6583cf3f639e1fe4df764a015689dea74127236..2b9dca9f460793596394484457a94a34bcc1d99a 100644 +index a327d9e4c709a6698f505d60d8bbf0046d4bde74..eb00fec7262280fb4876165c942212abc6b25efb 100644 --- a/dist/changesets-assemble-release-plan.esm.js +++ b/dist/changesets-assemble-release-plan.esm.js -@@ -178,7 +178,7 @@ function determineDependents({ +@@ -226,7 +226,7 @@ function determineDependents({ preInfo, onlyUpdatePeerDependentsWhenOutOfRange: config.___experimentalUnsafeOptions_WILL_CHANGE_IN_PATCH.onlyUpdatePeerDependentsWhenOutOfRange })) { diff --git a/templates/cli/.prettierignore b/templates/cli/.prettierignore deleted file mode 100644 index e727c7d..0000000 --- a/templates/cli/.prettierignore +++ /dev/null @@ -1,3 +0,0 @@ -*.js -*.ts -*.cjs diff --git a/templates/cli/.prettierrc.json b/templates/cli/.prettierrc.json deleted file mode 100644 index 27b720e..0000000 --- a/templates/cli/.prettierrc.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "semi": false, - "trailingComma": "none" -} diff --git a/templates/cli/package.json b/templates/cli/package.json index f63f436..2e43e1c 100644 --- a/templates/cli/package.json +++ b/templates/cli/package.json @@ -22,7 +22,7 @@ }, "devDependencies": { "@changesets/changelog-github": "^0.5.0", - "@changesets/cli": "2.27.7", + "@changesets/cli": "^2.27.8", "@effect/cli": "latest", "@effect/eslint-plugin": "^0.2.0", "@effect/language-service": "^0.1.0", @@ -49,7 +49,6 @@ "fast-check": "^3.21.0", "glob": "^11.0.0", "playwright": "^1.46.0", - "prettier": "^3.3.3", "rimraf": "^6.0.1", "tsup": "^8.2.4", "typescript": "^5.6.2", @@ -62,7 +61,7 @@ }, "patchedDependencies": { "@changesets/get-github-info@0.6.0": "patches/@changesets__get-github-info@0.6.0.patch", - "@changesets/assemble-release-plan@6.0.3": "patches/@changesets__assemble-release-plan@6.0.3.patch" + "@changesets/assemble-release-plan@6.0.4": "patches/@changesets__assemble-release-plan@6.0.4.patch" } } } diff --git a/templates/monorepo/patches/@changesets__assemble-release-plan@6.0.3.patch b/templates/cli/patches/@changesets__assemble-release-plan@6.0.4.patch similarity index 84% rename from templates/monorepo/patches/@changesets__assemble-release-plan@6.0.3.patch rename to templates/cli/patches/@changesets__assemble-release-plan@6.0.4.patch index bc02b65..ca98526 100644 --- a/templates/monorepo/patches/@changesets__assemble-release-plan@6.0.3.patch +++ b/templates/cli/patches/@changesets__assemble-release-plan@6.0.4.patch @@ -1,8 +1,8 @@ diff --git a/dist/changesets-assemble-release-plan.cjs.js b/dist/changesets-assemble-release-plan.cjs.js -index 60427457c887f2d72168fecec83d79088c68e3a4..b48899c83ca2bc5bfa0cbb65e0c098d5bb65fe3d 100644 +index 4f7b5e5b37bb05874a5c1d8e583e29d4a9593ecf..980ead81554a8d925b6366e1644f3be03765398e 100644 --- a/dist/changesets-assemble-release-plan.cjs.js +++ b/dist/changesets-assemble-release-plan.cjs.js -@@ -189,7 +189,7 @@ function determineDependents({ +@@ -237,7 +237,7 @@ function determineDependents({ preInfo, onlyUpdatePeerDependentsWhenOutOfRange: config.___experimentalUnsafeOptions_WILL_CHANGE_IN_PATCH.onlyUpdatePeerDependentsWhenOutOfRange })) { @@ -12,10 +12,10 @@ index 60427457c887f2d72168fecec83d79088c68e3a4..b48899c83ca2bc5bfa0cbb65e0c098d5 switch (depType) { case "dependencies": diff --git a/dist/changesets-assemble-release-plan.esm.js b/dist/changesets-assemble-release-plan.esm.js -index f6583cf3f639e1fe4df764a015689dea74127236..2b9dca9f460793596394484457a94a34bcc1d99a 100644 +index a327d9e4c709a6698f505d60d8bbf0046d4bde74..eb00fec7262280fb4876165c942212abc6b25efb 100644 --- a/dist/changesets-assemble-release-plan.esm.js +++ b/dist/changesets-assemble-release-plan.esm.js -@@ -178,7 +178,7 @@ function determineDependents({ +@@ -226,7 +226,7 @@ function determineDependents({ preInfo, onlyUpdatePeerDependentsWhenOutOfRange: config.___experimentalUnsafeOptions_WILL_CHANGE_IN_PATCH.onlyUpdatePeerDependentsWhenOutOfRange })) { diff --git a/templates/cli/patches/babel-plugin-annotate-pure-calls@0.4.0.patch b/templates/cli/patches/babel-plugin-annotate-pure-calls@0.4.0.patch new file mode 100644 index 0000000..6659c82 --- /dev/null +++ b/templates/cli/patches/babel-plugin-annotate-pure-calls@0.4.0.patch @@ -0,0 +1,13 @@ +diff --git a/lib/index.js b/lib/index.js +index 2182884e21874ebb37261e2375eec08ad956fc9a..ef5630199121c2830756e00c7cc48cf1078c8207 100644 +--- a/lib/index.js ++++ b/lib/index.js +@@ -78,7 +78,7 @@ const isInAssignmentContext = path => { + + parentPath = _ref.parentPath; + +- if (parentPath.isVariableDeclaration() || parentPath.isAssignmentExpression()) { ++ if (parentPath.isVariableDeclaration() || parentPath.isAssignmentExpression() || parentPath.isClassDeclaration()) { + return true; + } + } while (parentPath !== statement); diff --git a/templates/monorepo/.prettierignore b/templates/monorepo/.prettierignore deleted file mode 100644 index e727c7d..0000000 --- a/templates/monorepo/.prettierignore +++ /dev/null @@ -1,3 +0,0 @@ -*.js -*.ts -*.cjs diff --git a/templates/monorepo/.prettierrc.json b/templates/monorepo/.prettierrc.json deleted file mode 100644 index 27b720e..0000000 --- a/templates/monorepo/.prettierrc.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "semi": false, - "trailingComma": "none" -} diff --git a/templates/monorepo/package.json b/templates/monorepo/package.json index 9968f93..5962c86 100644 --- a/templates/monorepo/package.json +++ b/templates/monorepo/package.json @@ -37,7 +37,7 @@ "@babel/plugin-transform-export-namespace-from": "^7.24.7", "@babel/plugin-transform-modules-commonjs": "^7.24.8", "@changesets/changelog-github": "^0.5.0", - "@changesets/cli": "2.27.7", + "@changesets/cli": "^2.27.8", "@edge-runtime/vm": "^4.0.0", "@effect/build-utils": "^0.7.7", "@effect/eslint-plugin": "^0.2.0", @@ -63,7 +63,6 @@ "fast-check": "^3.21.0", "glob": "^11.0.0", "playwright": "^1.46.0", - "prettier": "^3.3.3", "rimraf": "^6.0.1", "tsx": "^4.17.0", "typescript": "^5.6.2", @@ -76,7 +75,7 @@ }, "patchedDependencies": { "@changesets/get-github-info@0.6.0": "patches/@changesets__get-github-info@0.6.0.patch", - "@changesets/assemble-release-plan@6.0.3": "patches/@changesets__assemble-release-plan@6.0.3.patch", + "@changesets/assemble-release-plan@6.0.4": "patches/@changesets__assemble-release-plan@6.0.4.patch", "babel-plugin-annotate-pure-calls@0.4.0": "patches/babel-plugin-annotate-pure-calls@0.4.0.patch" } } diff --git a/templates/basic/patches/@changesets__assemble-release-plan@6.0.3.patch b/templates/monorepo/patches/@changesets__assemble-release-plan@6.0.4.patch similarity index 84% rename from templates/basic/patches/@changesets__assemble-release-plan@6.0.3.patch rename to templates/monorepo/patches/@changesets__assemble-release-plan@6.0.4.patch index bc02b65..ca98526 100644 --- a/templates/basic/patches/@changesets__assemble-release-plan@6.0.3.patch +++ b/templates/monorepo/patches/@changesets__assemble-release-plan@6.0.4.patch @@ -1,8 +1,8 @@ diff --git a/dist/changesets-assemble-release-plan.cjs.js b/dist/changesets-assemble-release-plan.cjs.js -index 60427457c887f2d72168fecec83d79088c68e3a4..b48899c83ca2bc5bfa0cbb65e0c098d5bb65fe3d 100644 +index 4f7b5e5b37bb05874a5c1d8e583e29d4a9593ecf..980ead81554a8d925b6366e1644f3be03765398e 100644 --- a/dist/changesets-assemble-release-plan.cjs.js +++ b/dist/changesets-assemble-release-plan.cjs.js -@@ -189,7 +189,7 @@ function determineDependents({ +@@ -237,7 +237,7 @@ function determineDependents({ preInfo, onlyUpdatePeerDependentsWhenOutOfRange: config.___experimentalUnsafeOptions_WILL_CHANGE_IN_PATCH.onlyUpdatePeerDependentsWhenOutOfRange })) { @@ -12,10 +12,10 @@ index 60427457c887f2d72168fecec83d79088c68e3a4..b48899c83ca2bc5bfa0cbb65e0c098d5 switch (depType) { case "dependencies": diff --git a/dist/changesets-assemble-release-plan.esm.js b/dist/changesets-assemble-release-plan.esm.js -index f6583cf3f639e1fe4df764a015689dea74127236..2b9dca9f460793596394484457a94a34bcc1d99a 100644 +index a327d9e4c709a6698f505d60d8bbf0046d4bde74..eb00fec7262280fb4876165c942212abc6b25efb 100644 --- a/dist/changesets-assemble-release-plan.esm.js +++ b/dist/changesets-assemble-release-plan.esm.js -@@ -178,7 +178,7 @@ function determineDependents({ +@@ -226,7 +226,7 @@ function determineDependents({ preInfo, onlyUpdatePeerDependentsWhenOutOfRange: config.___experimentalUnsafeOptions_WILL_CHANGE_IN_PATCH.onlyUpdatePeerDependentsWhenOutOfRange })) {