From 403e10d8ffc98a6d07ae55cdb723fb54790a60dc Mon Sep 17 00:00:00 2001 From: Julian Grinblat Date: Tue, 14 Jul 2026 00:39:47 +0900 Subject: [PATCH] chore: add prettier --- eslint.config.js | 8 ++- index.js | 90 +++++++++++++----------- package-lock.json | 170 +++++++++++++++++++++++++++++++++++++++++++++- package.json | 5 +- test/index.js | 65 +++++++++++------- 5 files changed, 270 insertions(+), 68 deletions(-) diff --git a/eslint.config.js b/eslint.config.js index 0eddd73..c15f3bf 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -3,16 +3,18 @@ import node from "eslint-plugin-n"; import mocha from "eslint-plugin-mocha"; import imprt from "eslint-plugin-import"; import unicorn from "eslint-plugin-unicorn"; -import comments from "@eslint-community/eslint-plugin-eslint-comments/configs"; +import comments from "@eslint-community/eslint-plugin-eslint-comments/configs"; +import prettier from "eslint-plugin-prettier/recommended"; const testFiles = ["test/{,**/}*.js"]; export default [ js.configs.recommended, node.configs["flat/recommended-script"], - comments.recommended, + comments.recommended, unicorn.configs.recommended, imprt.flatConfigs.recommended, + prettier, { languageOptions: { sourceType: "module", @@ -23,7 +25,7 @@ export default [ "unicorn/import-style": 0, "unicorn/no-anonymous-default-export": 0, "unicorn/prevent-abbreviations": 0, - "@eslint-community/eslint-comments/no-unused-disable": "error" + "@eslint-community/eslint-comments/no-unused-disable": "error", }, }, { diff --git a/index.js b/index.js index 770e2d6..ea0982d 100644 --- a/index.js +++ b/index.js @@ -1,85 +1,97 @@ -import { generate } from 'astring'; +import { generate } from "astring"; -const getParamFromLua = (param) => (lua) => lua.match(String.raw`--\s*${param}\s+([^\s$]+)`)?.[1] ?? null; -const getName = getParamFromLua('name'); +const getParamFromLua = (param) => (lua) => + lua.match(String.raw`--\s*${param}\s+([^\s$]+)`)?.[1] ?? null; +const getName = getParamFromLua("name"); const getNumberOfKeys = (lua) => { try { - return Number.parseInt(getParamFromLua('nkeys')(lua), 10); + return Number.parseInt(getParamFromLua("nkeys")(lua), 10); } catch { return null; } }; const getCjsExportExpression = (name, value) => ({ - type: 'ExpressionStatement', + type: "ExpressionStatement", expression: { - type: 'AssignmentExpression', - operator: '=', + type: "AssignmentExpression", + operator: "=", left: { - type: 'MemberExpression', + type: "MemberExpression", object: { - type: 'MemberExpression', + type: "MemberExpression", object: { - type: 'Identifier', - name: 'module', + type: "Identifier", + name: "module", }, property: { - type: 'Identifier', - name: 'exports', + type: "Identifier", + name: "exports", }, }, property: { - type: 'Identifier', + type: "Identifier", name, }, }, right: { - type: 'Literal', + type: "Literal", value, }, }, }); const getEsmExportExpression = (name, value) => ({ - type: 'ExpressionStatement', + type: "ExpressionStatement", expression: { - type: 'ExportNamedDeclaration', + type: "ExportNamedDeclaration", declaration: { - type: 'VariableDeclaration', + type: "VariableDeclaration", declarations: [ { - type: 'VariableDeclarator', + type: "VariableDeclarator", id: { - type: 'Identifier', + type: "Identifier", name, }, init: { - type: 'Literal', + type: "Literal", value, }, }, ], - kind: 'const', + kind: "const", }, specifiers: [], source: null, }, }); -export default (lua, { - name = getName(lua), - numberOfKeys = getNumberOfKeys(lua), - type = 'commonjs', -} = {}) => generate({ - type: 'Program', - body: type === 'commonjs' ? [ - getCjsExportExpression('lua', lua), - getCjsExportExpression('name', name), - getCjsExportExpression('numberOfKeys', numberOfKeys), - ] : (type === 'module' ? [ - getEsmExportExpression('lua', lua), - getEsmExportExpression('name', name), - getEsmExportExpression('numberOfKeys', numberOfKeys), - ] : (() => { throw new Error('type must be commonjs | module'); })()), - ...(type === 'module' && { sourceType: 'module' }), -}); +export default ( + lua, + { + name = getName(lua), + numberOfKeys = getNumberOfKeys(lua), + type = "commonjs", + } = {}, +) => + generate({ + type: "Program", + body: + type === "commonjs" + ? [ + getCjsExportExpression("lua", lua), + getCjsExportExpression("name", name), + getCjsExportExpression("numberOfKeys", numberOfKeys), + ] + : type === "module" + ? [ + getEsmExportExpression("lua", lua), + getEsmExportExpression("name", name), + getEsmExportExpression("numberOfKeys", numberOfKeys), + ] + : (() => { + throw new Error("type must be commonjs | module"); + })(), + ...(type === "module" && { sourceType: "module" }), + }); diff --git a/package-lock.json b/package-lock.json index b64ff28..03bd17c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,12 +18,15 @@ "chai": "^6.2.2", "dirname-filename-esm": "^1.1.2", "eslint": "^9.39.5", + "eslint-config-prettier": "^10.1.8", "eslint-plugin-import": "^2.32.0", "eslint-plugin-mocha": "^11.3.0", "eslint-plugin-n": "^18.2.2", + "eslint-plugin-prettier": "^5.5.6", "eslint-plugin-unicorn": "^65.0.1", "mocha": "^11.7.6", - "module-from-string": "^3.3.1" + "module-from-string": "^3.3.1", + "prettier": "3.9.5" }, "engines": { "node": ">=20.0" @@ -800,6 +803,19 @@ "node": ">=14" } }, + "node_modules/@pkgr/core": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.3.6.tgz", + "integrity": "sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" + } + }, "node_modules/@rtsao/scc": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", @@ -1938,6 +1954,22 @@ "node": ">=10" } }, + "node_modules/eslint-config-prettier": { + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", + "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "funding": { + "url": "https://opencollective.com/eslint-config-prettier" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, "node_modules/eslint-import-resolver-node": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", @@ -2146,6 +2178,37 @@ "node": ">=10" } }, + "node_modules/eslint-plugin-prettier": { + "version": "5.5.6", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.6.tgz", + "integrity": "sha512-ifetmTcxWfz+4qRW3pH/ujdTq2jQIj59AxJMIN26K5avYgU8dxycUETQonWiW+wPrYXA0j3Try0l1CnwVQtDqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.1", + "synckit": "^0.11.13" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, "node_modules/eslint-plugin-unicorn": { "version": "65.0.1", "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-65.0.1.tgz", @@ -2410,6 +2473,13 @@ "dev": true, "license": "MIT" }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -3938,6 +4008,35 @@ "node": ">= 0.8.0" } }, + "node_modules/prettier": { + "version": "3.9.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.5.tgz", + "integrity": "sha512-/FVl766LpUfB5vXgCYOYa0MeV/441Ia99AeICQIQFTY/Nw0roZwULcXpku5i1/m5kt/baz+s4Zogspd839HSMg==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.1.tgz", + "integrity": "sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -4486,6 +4585,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/synckit": { + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.13.tgz", + "integrity": "sha512-eNRKgb3z66Yp3D2CixVujOUvXLFUTij/zVnV8KRyvFdQwpz7I5DS8UfRkTeLzb64u+dkzDSdelE24izu+zSSUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.3.6" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/synckit" + } + }, "node_modules/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -5378,6 +5493,12 @@ "dev": true, "optional": true }, + "@pkgr/core": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.3.6.tgz", + "integrity": "sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA==", + "dev": true + }, "@rtsao/scc": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", @@ -6215,6 +6336,13 @@ } } }, + "eslint-config-prettier": { + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", + "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", + "dev": true, + "requires": {} + }, "eslint-import-resolver-node": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", @@ -6363,6 +6491,16 @@ } } }, + "eslint-plugin-prettier": { + "version": "5.5.6", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.6.tgz", + "integrity": "sha512-ifetmTcxWfz+4qRW3pH/ujdTq2jQIj59AxJMIN26K5avYgU8dxycUETQonWiW+wPrYXA0j3Try0l1CnwVQtDqQ==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.1", + "synckit": "^0.11.13" + } + }, "eslint-plugin-unicorn": { "version": "65.0.1", "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-65.0.1.tgz", @@ -6471,6 +6609,12 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -7488,6 +7632,21 @@ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, + "prettier": { + "version": "3.9.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.5.tgz", + "integrity": "sha512-/FVl766LpUfB5vXgCYOYa0MeV/441Ia99AeICQIQFTY/Nw0roZwULcXpku5i1/m5kt/baz+s4Zogspd839HSMg==", + "dev": true + }, + "prettier-linter-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.1.tgz", + "integrity": "sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, "punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -7852,6 +8011,15 @@ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true }, + "synckit": { + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.13.tgz", + "integrity": "sha512-eNRKgb3z66Yp3D2CixVujOUvXLFUTij/zVnV8KRyvFdQwpz7I5DS8UfRkTeLzb64u+dkzDSdelE24izu+zSSUg==", + "dev": true, + "requires": { + "@pkgr/core": "^0.3.6" + } + }, "tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", diff --git a/package.json b/package.json index e04a04c..4d4c28d 100644 --- a/package.json +++ b/package.json @@ -39,12 +39,15 @@ "chai": "^6.2.2", "dirname-filename-esm": "^1.1.2", "eslint": "^9.39.5", + "eslint-config-prettier": "^10.1.8", "eslint-plugin-import": "^2.32.0", "eslint-plugin-mocha": "^11.3.0", "eslint-plugin-n": "^18.2.2", + "eslint-plugin-prettier": "^5.5.6", "eslint-plugin-unicorn": "^65.0.1", "mocha": "^11.7.6", - "module-from-string": "^3.3.1" + "module-from-string": "^3.3.1", + "prettier": "3.9.5" }, "dependencies": { "astring": "^1.9.0", diff --git a/test/index.js b/test/index.js index 7df3f0a..fa3750f 100644 --- a/test/index.js +++ b/test/index.js @@ -1,26 +1,32 @@ -import { join } from 'node:path'; -import { readFileSync } from 'node:fs'; -import { expect } from 'chai'; -import { requireFromString, importFromStringSync } from 'module-from-string'; -import { dirname } from 'dirname-filename-esm'; +import { join } from "node:path"; +import { readFileSync } from "node:fs"; +import { expect } from "chai"; +import { requireFromString, importFromStringSync } from "module-from-string"; +import { dirname } from "dirname-filename-esm"; // https://github.com/import-js/eslint-plugin-import/issues/1649 // eslint-disable-next-line import/no-unresolved -import lua2js from 'redis-lua2js'; +import lua2js from "redis-lua2js"; -describe('redis-lua2js', () => { - it('should export name and numberOfKeys from lua', () => { - const lua = readFileSync(join(dirname(import.meta), 'test_both.lua'), 'utf8'); +describe("redis-lua2js", () => { + it("should export name and numberOfKeys from lua", () => { + const lua = readFileSync( + join(dirname(import.meta), "test_both.lua"), + "utf8", + ); expect(requireFromString(lua2js(lua))).to.deep.equal({ - name: 'pdel', + name: "pdel", numberOfKeys: 1, lua, }); }); - it('should return null name and numeberOfKeys', () => { - const lua = readFileSync(join(dirname(import.meta), 'test_none.lua'), 'utf8'); + it("should return null name and numeberOfKeys", () => { + const lua = readFileSync( + join(dirname(import.meta), "test_none.lua"), + "utf8", + ); expect(requireFromString(lua2js(lua))).to.deep.equal({ name: null, @@ -29,18 +35,24 @@ describe('redis-lua2js', () => { }); }); - it('should export name from lua and null numberOfKeys', () => { - const lua = readFileSync(join(dirname(import.meta), 'test_name.lua'), 'utf8'); + it("should export name from lua and null numberOfKeys", () => { + const lua = readFileSync( + join(dirname(import.meta), "test_name.lua"), + "utf8", + ); expect(requireFromString(lua2js(lua))).to.deep.equal({ - name: 'pdel', + name: "pdel", numberOfKeys: null, lua, }); }); - it('should export null name and numberOfKeys from lua', () => { - const lua = readFileSync(join(dirname(import.meta), 'test_nkeys.lua'), 'utf8'); + it("should export null name and numberOfKeys from lua", () => { + const lua = readFileSync( + join(dirname(import.meta), "test_nkeys.lua"), + "utf8", + ); expect(requireFromString(lua2js(lua))).to.deep.equal({ name: null, @@ -49,13 +61,18 @@ describe('redis-lua2js', () => { }); }); - it('should generate esm module', () => { - const lua = readFileSync(join(dirname(import.meta), 'test_both.lua'), 'utf8'); + it("should generate esm module", () => { + const lua = readFileSync( + join(dirname(import.meta), "test_both.lua"), + "utf8", + ); - expect(importFromStringSync(lua2js(lua, { type: 'module' }))).to.deep.equal({ - name: 'pdel', - numberOfKeys: 1, - lua, - }); + expect(importFromStringSync(lua2js(lua, { type: "module" }))).to.deep.equal( + { + name: "pdel", + numberOfKeys: 1, + lua, + }, + ); }); });