From 71da738c73fe4fb1d73f4197a3fd13d11a9066ba Mon Sep 17 00:00:00 2001 From: Johan Girod Date: Thu, 25 Jan 2024 17:46:31 +0100 Subject: [PATCH] chore: use @publicodes/tools/compilation for compiling rules --- package.json | 1 + scripts/build-rules.js | 49 ++++++------------------------------------ yarn.lock | 36 +++++++++++++++++++++++++++++++ 3 files changed, 44 insertions(+), 42 deletions(-) diff --git a/package.json b/package.json index e150ac601..affcb05f6 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,7 @@ "@actions/github": "^5.1.1", "@ianvs/prettier-plugin-sort-imports": "^4.1.0", "@publicodes/codemod": "^1.1.0", + "@publicodes/tools": "^0.4.6", "@types/got": "^9.6.12", "@typescript-eslint/eslint-plugin": "^6.7.2", "@typescript-eslint/parser": "^6.7.2", diff --git a/scripts/build-rules.js b/scripts/build-rules.js index 6a0363113..3501a8f15 100644 --- a/scripts/build-rules.js +++ b/scripts/build-rules.js @@ -1,55 +1,20 @@ -/* eslint-env node */ -import fs from 'fs' +import { writeFileSync } from 'fs' import path from 'path' -import yaml from 'js-yaml' +import { getModelFromSource } from '@publicodes/tools/compilation' import Engine from 'publicodes' -const publicodesDir = './règles' const outDir = './dist' - -if (!fs.existsSync(outDir)) { - fs.mkdirSync(outDir) -} - -function recursiveFindYamlFile(dirPath = publicodesDir) { - return fs - .readdirSync(dirPath) - .flatMap((filename) => { - const fullpath = path.join(dirPath, filename) - if (fs.statSync(fullpath).isDirectory()) { - return recursiveFindYamlFile(fullpath) - } else { - return filename.endsWith('.yaml') ? fullpath : false - } - }) - .filter(Boolean) -} - -function readRules() { - return recursiveFindYamlFile().reduce((rules, filePath) => { - const newRules = yaml.load(fs.readFileSync(filePath, 'utf-8'), { - filename: filePath, - }) - const duplicatedRule = Object.keys(newRules).find( - (ruleName) => ruleName in rules - ) - if (duplicatedRule) { - throw new Error( - `La règle ${duplicatedRule} a été redéfinie dans dans le fichier ${filePath}, alors qu'elle avait déjà été définie auparavant dans un autre fichier` - ) - } - return Object.assign(rules, newRules) - }, {}) -} +const rules = getModelFromSource(path.resolve('./règles/**/*.yaml'), { + verbose: true, +}) export default function writeJSFile() { - const rules = readRules() const json = JSON.stringify(JSON.stringify(rules)) const names = Object.keys(new Engine(rules).getParsedRules()) const jsString = `export const json = /*@__PURE__*/ ${json};\nexport default /*@__PURE__*/ JSON.parse(json);` - fs.writeFileSync(path.resolve(outDir, 'index.js'), jsString) - fs.writeFileSync( + writeFileSync(path.resolve(outDir, 'index.js'), jsString) + writeFileSync( path.resolve(outDir, 'names.ts'), `\nexport type Names = ${names.map((name) => `"${name}"`).join('\n | ')}\n` ) diff --git a/yarn.lock b/yarn.lock index 5065cbd29..088e27673 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7608,6 +7608,16 @@ __metadata: languageName: node linkType: hard +"@publicodes/tools@npm:^0.4.6": + version: 0.4.6 + resolution: "@publicodes/tools@npm:0.4.6" + dependencies: + "@types/node": ^18.11.18 + publicodes: ^1.0.0-beta.77 + checksum: cb131f4fe8b18550538c7f395763f547118f9a3d9e13b71f86f1940db8c1921312777c3dbbc432f12f1fa8e1ac9999df845ffc195a6b849d043c0130be3dfcd0 + languageName: node + linkType: hard + "@radix-ui/number@npm:1.0.1": version: 1.0.1 resolution: "@radix-ui/number@npm:1.0.1" @@ -12570,6 +12580,15 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:^18.11.18": + version: 18.19.9 + resolution: "@types/node@npm:18.19.9" + dependencies: + undici-types: ~5.26.4 + checksum: 8ffd4043ada193cf32d4c13eb850e8c510d4c96504c62fdc5326b3bb2c7ddc2c81892c351b2c0c403c29df3ab13c864a370f0282daf6d3380ba3c2001728a643 + languageName: node + linkType: hard + "@types/node@npm:^20.6.3": version: 20.6.3 resolution: "@types/node@npm:20.6.3" @@ -26633,6 +26652,15 @@ __metadata: languageName: node linkType: hard +"publicodes@npm:^1.0.0-beta.77": + version: 1.0.0-rfc.2 + resolution: "publicodes@npm:1.0.0-rfc.2" + peerDependencies: + "@types/mocha": ^9.0.0 + checksum: 67c677154b1942257cb329294ca52e94a0cb961bcc64ab4aa5c9530e14687cae066cab8a612c05b758a6d29f603aba7846094c01d12d520f87106ccc3e843fc4 + languageName: node + linkType: hard + "pump@npm:3.0.0, pump@npm:^3.0.0": version: 3.0.0 resolution: "pump@npm:3.0.0" @@ -28312,6 +28340,7 @@ __metadata: "@actions/github": ^5.1.1 "@ianvs/prettier-plugin-sort-imports": ^4.1.0 "@publicodes/codemod": ^1.1.0 + "@publicodes/tools": ^0.4.6 "@types/got": ^9.6.12 "@typescript-eslint/eslint-plugin": ^6.7.2 "@typescript-eslint/parser": ^6.7.2 @@ -30945,6 +30974,13 @@ __metadata: languageName: node linkType: hard +"undici-types@npm:~5.26.4": + version: 5.26.5 + resolution: "undici-types@npm:5.26.5" + checksum: 3192ef6f3fd5df652f2dc1cd782b49d6ff14dc98e5dced492aa8a8c65425227da5da6aafe22523c67f035a272c599bb89cfe803c1db6311e44bed3042fc25487 + languageName: node + linkType: hard + "unenv@npm:^1.7.4": version: 1.8.0 resolution: "unenv@npm:1.8.0"