From 2f937f9e8f761c0e8220274581df97a97dbb14fd Mon Sep 17 00:00:00 2001 From: Chris Manson Date: Fri, 24 May 2024 21:33:36 +0100 Subject: [PATCH 1/3] add prettier --- .prettierrc.cjs | 5 +++ eslint.config.mjs | 13 ++++---- files/babel.config.cjs | 4 +-- files/vite.config.mjs | 28 ++++++++--------- index.js | 14 ++++----- package.json | 3 ++ pnpm-lock.yaml | 70 +++++++++++++++++++++++++++++++++++++++++- 7 files changed, 107 insertions(+), 30 deletions(-) create mode 100644 .prettierrc.cjs diff --git a/.prettierrc.cjs b/.prettierrc.cjs new file mode 100644 index 0000000..534e6d3 --- /dev/null +++ b/.prettierrc.cjs @@ -0,0 +1,5 @@ +'use strict'; + +module.exports = { + singleQuote: true, +}; diff --git a/eslint.config.mjs b/eslint.config.mjs index a75b2a6..96072c8 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -1,9 +1,10 @@ -import globals from "globals"; -import pluginJs from "@eslint/js"; - +import globals from 'globals'; +import pluginJs from '@eslint/js'; +import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended'; export default [ - {files: ["**/*.js"], languageOptions: {sourceType: "commonjs"}}, - {languageOptions: { globals: globals.node }}, + { files: ['**/*.js'], languageOptions: { sourceType: 'commonjs' } }, + { languageOptions: { globals: globals.node } }, pluginJs.configs.recommended, -]; \ No newline at end of file + eslintPluginPrettierRecommended, +]; diff --git a/files/babel.config.cjs b/files/babel.config.cjs index 07bc8d3..22317a3 100644 --- a/files/babel.config.cjs +++ b/files/babel.config.cjs @@ -7,11 +7,11 @@ let config; // function that wraps your whole babel config if ( process.env.EMBROIDER_PREBUILD || - process.env.EMBROIDER_TEST_SETUP_FORCE === "classic" + process.env.EMBROIDER_TEST_SETUP_FORCE === 'classic' ) { config = {}; } else { - config = require("./node_modules/.embroider/_babel_config_"); + config = require('./node_modules/.embroider/_babel_config_'); } module.exports = config; diff --git a/files/vite.config.mjs b/files/vite.config.mjs index 3b71bfa..3a62241 100644 --- a/files/vite.config.mjs +++ b/files/vite.config.mjs @@ -1,4 +1,4 @@ -import { defineConfig } from "vite"; +import { defineConfig } from 'vite'; import { resolver, hbs, @@ -8,18 +8,18 @@ import { compatPrebuild, assets, contentFor, -} from "@embroider/vite"; -import { resolve } from "path"; -import { babel } from "@rollup/plugin-babel"; +} from '@embroider/vite'; +import { resolve } from 'path'; +import { babel } from '@rollup/plugin-babel'; -const root = "node_modules/.embroider/rewritten-app"; +const root = 'node_modules/.embroider/rewritten-app'; export default defineConfig(({ mode }) => { return { root, // esbuild in vite does not support decorators esbuild: false, - cacheDir: resolve("node_modules", ".vite"), + cacheDir: resolve('node_modules', '.vite'), plugins: [ hbs(), templateTag(), @@ -30,30 +30,30 @@ export default defineConfig(({ mode }) => { contentFor(), babel({ - babelHelpers: "runtime", + babelHelpers: 'runtime', // this needs .hbs because our hbs() plugin above converts them to // javascript but the javascript still also needs babel, but we don't want // to rename them because vite isn't great about knowing how to hot-reload // them if we resolve them to made-up names. - extensions: [".gjs", ".js", ".hbs", ".ts", ".gts"], + extensions: ['.gjs', '.js', '.hbs', '.ts', '.gts'], }), ], optimizeDeps: optimizeDeps(), - publicDir: resolve(process.cwd(), "public"), + publicDir: resolve(process.cwd(), 'public'), server: { port: 4200, watch: { - ignored: ["!**/node_modules/.embroider/rewritten-app/**"], + ignored: ['!**/node_modules/.embroider/rewritten-app/**'], }, }, build: { - outDir: resolve(process.cwd(), "dist"), + outDir: resolve(process.cwd(), 'dist'), rollupOptions: { input: { - main: resolve(root, "index.html"), + main: resolve(root, 'index.html'), ...(shouldBuildTests(mode) - ? { tests: resolve(root, "tests/index.html") } + ? { tests: resolve(root, 'tests/index.html') } : undefined), }, }, @@ -62,5 +62,5 @@ export default defineConfig(({ mode }) => { }); function shouldBuildTests(mode) { - return mode !== "production" || process.env.FORCE_BUILD_TESTS; + return mode !== 'production' || process.env.FORCE_BUILD_TESTS; } diff --git a/index.js b/index.js index 457a6d0..cf1704d 100644 --- a/index.js +++ b/index.js @@ -20,7 +20,7 @@ module.exports = { }, async afterInstall(options) { - // there doesn't seem to be a way to tell ember-cli to not prompt to override files that were added in the beforeInstall + // there doesn't seem to be a way to tell ember-cli to not prompt to override files that were added in the beforeInstall // so I'm just copying a few over at this stage await fs.copy(join(__dirname, 'files-override'), options.target, { overwrite: true, @@ -32,12 +32,12 @@ module.exports = { 'save-dev': true, verbose: false, packages: [ - '@embroider/core@unstable', + '@embroider/core@unstable', '@embroider/vite@unstable', '@embroider/compat@unstable', '@embroider/test-setup@unstable', 'vite', - '@rollup/plugin-babel' + '@rollup/plugin-babel', ], packageManager: options.packageManager, }); @@ -55,11 +55,11 @@ module.exports = { json.scripts = { ...json.scripts, - "build": "vite build", - "start": "vite", - "test:ember": "vite build --mode test && ember test --path dist" + build: 'vite build', + start: 'vite', + 'test:ember': 'vite build --mode test && ember test --path dist', }; await fs.writeFile(packageJson, JSON.stringify(json, null, 2)); }, -} \ No newline at end of file +}; diff --git a/package.json b/package.json index 6501842..b0cebdd 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,10 @@ "devDependencies": { "@eslint/js": "^9.3.0", "eslint": "9.x", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-prettier": "^5.1.3", "globals": "^15.3.0", + "prettier": "^3.2.5", "release-plan": "^0.9.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 88bd110..11f5a71 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -19,9 +19,18 @@ devDependencies: eslint: specifier: 9.x version: 9.3.0 + eslint-config-prettier: + specifier: ^9.1.0 + version: 9.1.0(eslint@9.3.0) + eslint-plugin-prettier: + specifier: ^5.1.3 + version: 5.1.3(eslint-config-prettier@9.1.0)(eslint@9.3.0)(prettier@3.2.5) globals: specifier: ^15.3.0 version: 15.3.0 + prettier: + specifier: ^3.2.5 + version: 3.2.5 release-plan: specifier: ^0.9.0 version: 0.9.0 @@ -687,6 +696,11 @@ packages: dev: true optional: true + /@pkgr/core@0.1.1: + resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + dev: true + /@pnpm/constants@7.1.1: resolution: {integrity: sha512-31pZqMtjwV+Vaq7MaPrT1EoDFSYwye3dp6BiHIGRJmVThCQwySRKM7hCvqqI94epNkqFAAYoWrNynWoRYosGdw==} engines: {node: '>=16.14'} @@ -2674,6 +2688,36 @@ packages: engines: {node: '>=10'} dev: true + /eslint-config-prettier@9.1.0(eslint@9.3.0): + resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + dependencies: + eslint: 9.3.0 + dev: true + + /eslint-plugin-prettier@5.1.3(eslint-config-prettier@9.1.0)(eslint@9.3.0)(prettier@3.2.5): + resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + '@types/eslint': '>=8.0.0' + eslint: '>=8.0.0' + eslint-config-prettier: '*' + prettier: '>=3.0.0' + peerDependenciesMeta: + '@types/eslint': + optional: true + eslint-config-prettier: + optional: true + dependencies: + eslint: 9.3.0 + eslint-config-prettier: 9.1.0(eslint@9.3.0) + prettier: 3.2.5 + prettier-linter-helpers: 1.0.0 + synckit: 0.8.8 + dev: true + /eslint-scope@8.0.1: resolution: {integrity: sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2957,6 +3001,10 @@ packages: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true + /fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + dev: true + /fast-glob@3.3.2: resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} @@ -5305,12 +5353,25 @@ packages: engines: {node: '>=4'} dev: true + /prettier-linter-helpers@1.0.0: + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} + dependencies: + fast-diff: 1.3.0 + dev: true + /prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} hasBin: true dev: false + /prettier@3.2.5: + resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} + engines: {node: '>=14'} + hasBin: true + dev: true + /printf@0.6.1: resolution: {integrity: sha512-is0ctgGdPJ5951KulgfzvHGwJtZ5ck8l042vRkV6jrkpBzTmb/lueTqguWHy2JfVA+RY6gFVlaZgUS0j7S/dsw==} engines: {node: '>= 0.9.0'} @@ -6248,6 +6309,14 @@ packages: - supports-color dev: false + /synckit@0.8.8: + resolution: {integrity: sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==} + engines: {node: ^14.18.0 || >=16.0.0} + dependencies: + '@pkgr/core': 0.1.1 + tslib: 2.6.2 + dev: true + /tap-parser@7.0.0: resolution: {integrity: sha512-05G8/LrzqOOFvZhhAk32wsGiPZ1lfUrl+iV7+OkKgfofZxiceZWMHkKmow71YsyVQ8IvGBP2EjcIjE5gL4l5lA==} hasBin: true @@ -6522,7 +6591,6 @@ packages: /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - dev: false /type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} From 17e5699e8be6a4a89da6a822ff4a1ddcabae7325 Mon Sep 17 00:00:00 2001 From: Chris Manson Date: Fri, 24 May 2024 21:36:55 +0100 Subject: [PATCH 2/3] add an editor config --- .editorconfig | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..4918ed1 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,19 @@ +# EditorConfig helps developers define and maintain consistent +# coding styles between different editors and IDEs +# editorconfig.org + +root = true + +[*] +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true +indent_style = space +indent_size = 2 + +[*.hbs] +insert_final_newline = false + +[*.{diff,md}] +trim_trailing_whitespace = false \ No newline at end of file From 7f08d92fd0f823cdb63bdf27b4d1a24e542a2c6c Mon Sep 17 00:00:00 2001 From: Chris Manson Date: Fri, 24 May 2024 21:37:05 +0100 Subject: [PATCH 3/3] add CI to run lint --- .github/workflows/ci.yml | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..341fd92 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,24 @@ +name: CI + +on: + workflow_dispatch: + pull_request: + push: + branches: + - main + +jobs: + lint: + name: Lint + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: pnpm/action-setup@v3 + with: + version: 8 + - uses: actions/setup-node@v4 + with: + node-version: 18 + cache: pnpm + - run: pnpm install --frozen-lockfile + - run: pnpm lint