From 6033d9c6130f08ff5667ffa712a63b74244a4b48 Mon Sep 17 00:00:00 2001 From: Yosuke Ota Date: Tue, 9 May 2023 10:25:57 +0900 Subject: [PATCH] feat: export meta object (#238) * feat: export meta object * Create loud-elephants-attend.md * fix --- .changeset/loud-elephants-attend.md | 5 ++++ package.json | 3 ++- src/index.ts | 2 ++ src/meta.ts | 5 ++++ tests/src/meta.ts | 23 +++++++++++++++++ tools/lib/changesets-util.ts | 20 ++------------- tools/update-meta.ts | 38 +++++++++++++++++++++++++++++ tools/update-rules.ts | 6 ++++- tools/update-rulesets.ts | 6 ++++- tools/update.ts | 1 + tsconfig.json | 1 + 11 files changed, 89 insertions(+), 21 deletions(-) create mode 100644 .changeset/loud-elephants-attend.md create mode 100644 src/meta.ts create mode 100644 tests/src/meta.ts create mode 100644 tools/update-meta.ts diff --git a/.changeset/loud-elephants-attend.md b/.changeset/loud-elephants-attend.md new file mode 100644 index 00000000..c3e5ca11 --- /dev/null +++ b/.changeset/loud-elephants-attend.md @@ -0,0 +1,5 @@ +--- +"eslint-plugin-yml": minor +--- + +feat: export meta object diff --git a/package.json b/package.json index aac65ce9..d85952a3 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,8 @@ }, "scripts": { "prebuild": "npm run -s clean", - "build": "npm run build:ts", + "build": "npm run build:meta && npm run build:ts", + "build:meta": "npm run ts -- ./tools/update-meta.ts", "build:ts": "tsc --project ./tsconfig.build.json", "clean": "rimraf .nyc_output dist coverage", "lint": "eslint . --ext .js,.vue,.ts,.json,.md,.yml,.yaml", diff --git a/src/index.ts b/src/index.ts index c53cbe9d..31a92134 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,6 +4,7 @@ import base from "./configs/base"; import recommended from "./configs/recommended"; import standard from "./configs/standard"; import prettier from "./configs/prettier"; +import * as meta from "./meta"; const configs = { base, @@ -18,6 +19,7 @@ const rules = ruleList.reduce((obj, r) => { }, {} as { [key: string]: RuleModule }); export = { + meta, configs, rules, }; diff --git a/src/meta.ts b/src/meta.ts new file mode 100644 index 00000000..73d403ba --- /dev/null +++ b/src/meta.ts @@ -0,0 +1,5 @@ +// IMPORTANT! +// This file has been automatically generated, +// in order to update its content execute "yarn build:meta" +export const name = "eslint-plugin-yml" as const; +export const version = "1.6.0" as const; diff --git a/tests/src/meta.ts b/tests/src/meta.ts new file mode 100644 index 00000000..484188cd --- /dev/null +++ b/tests/src/meta.ts @@ -0,0 +1,23 @@ +import assert from "assert"; +import plugin from "../../src"; +import { version } from "../../package.json"; +const expectedMeta = { + name: "eslint-plugin-yml", + version, +}; + +describe("Test for meta object", () => { + it("A plugin should have a meta object.", () => { + assert.deepStrictEqual(plugin.meta, expectedMeta); + }); + + for (const [name, processor] of Object.entries( + // @ts-expect-error -- missing processors + plugin.processors || {} + )) { + it(`"${name}" processor should have a meta object.`, () => { + // @ts-expect-error -- missing type + assert.deepStrictEqual(processor.meta, expectedMeta); + }); + } +}); diff --git a/tools/lib/changesets-util.ts b/tools/lib/changesets-util.ts index f3177a3f..1731b5b0 100644 --- a/tools/lib/changesets-util.ts +++ b/tools/lib/changesets-util.ts @@ -1,25 +1,9 @@ -import assembleReleasePlan from "@changesets/assemble-release-plan"; -import readChangesets from "@changesets/read"; -import { read } from "@changesets/config"; -import { getPackages } from "@manypkg/get-packages"; -import { readPreState } from "@changesets/pre"; +import getReleasePlan from "@changesets/get-release-plan"; import path from "path"; -const root = path.resolve(__dirname, "../.."); - /** Get new version string from changesets */ export async function getNewVersion(): Promise { - const packages = await getPackages(root); - const preState = await readPreState(root); - const config = await read(root, packages); - const changesets = await readChangesets(root); - - const releasePlan = assembleReleasePlan( - changesets, - packages, - config, - preState - ); + const releasePlan = await getReleasePlan(path.resolve(__dirname, "../..")); return releasePlan.releases.find(({ name }) => name === "eslint-plugin-yml")! .newVersion; diff --git a/tools/update-meta.ts b/tools/update-meta.ts new file mode 100644 index 00000000..7fafbf2e --- /dev/null +++ b/tools/update-meta.ts @@ -0,0 +1,38 @@ +import fs from "fs"; +import path from "path"; +import { ESLint } from "eslint"; +import { name, version } from "../package.json"; +import { getNewVersion } from "./lib/changesets-util"; + +const META_PATH = path.join(__dirname, "../src/meta.ts"); + +void main(); + +/** main */ +async function main() { + if (!fs.existsSync(META_PATH)) { + fs.writeFileSync(META_PATH, "", "utf8"); + } + const eslint = new ESLint({ fix: true }); + const [result] = await eslint.lintText( + `/* + * IMPORTANT! + * This file has been automatically generated, + * in order to update its content execute "npm run update" + */ +export const name = ${JSON.stringify(name)} as const; +export const version = ${JSON.stringify(await getVersion())} as const; +`, + { filePath: META_PATH } + ); + fs.writeFileSync(META_PATH, result.output!); +} + +/** Get version */ +function getVersion() { + // eslint-disable-next-line no-process-env -- ignore + if (process.env.IN_VERSION_CI_SCRIPT) { + return getNewVersion(); + } + return version; +} diff --git a/tools/update-rules.ts b/tools/update-rules.ts index 7ff0d1e8..d9ada1bd 100644 --- a/tools/update-rules.ts +++ b/tools/update-rules.ts @@ -12,7 +12,11 @@ function camelCase(str: string) { return str.replace(/[-/_](\w)/gu, (_, c) => (c ? c.toUpperCase() : "")); } -let content = ` +let content = `/* + * IMPORTANT! + * This file has been automatically generated, + * in order to update its content execute "npm run update" + */ import type { RuleModule } from "../types" ${rules .map( diff --git a/tools/update-rulesets.ts b/tools/update-rulesets.ts index 7ca72ec5..920580f0 100644 --- a/tools/update-rulesets.ts +++ b/tools/update-rulesets.ts @@ -45,7 +45,11 @@ const CONFIGS = { }; for (const rec of ["recommended", "standard", "prettier"] as const) { - let content = ` + let content = `/* + * IMPORTANT! + * This file has been automatically generated, + * in order to update its content execute "npm run update" + */ import path from "path" const base = require.resolve("./base") const baseExtend = diff --git a/tools/update.ts b/tools/update.ts index 02c0b210..9421aa41 100644 --- a/tools/update.ts +++ b/tools/update.ts @@ -3,3 +3,4 @@ import "./update-rulesets"; import "./update-docs"; import "./update-readme"; import "./update-docs-rules-index"; +import "./update-meta"; diff --git a/tsconfig.json b/tsconfig.json index 6185a51d..f0a8793f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -19,6 +19,7 @@ // }, "esModuleInterop": true, "outDir": "lib", + "resolveJsonModule": true, "skipLibCheck": true },