diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..e62788be5 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +dist/** linguist-generated=true diff --git a/.github/workflows/update-readme.yml b/.github/workflows/format.yml similarity index 75% rename from .github/workflows/update-readme.yml rename to .github/workflows/format.yml index bc2d810c2..8eaad9820 100644 --- a/.github/workflows/update-readme.yml +++ b/.github/workflows/format.yml @@ -1,5 +1,5 @@ --- -name: update-readme +name: format on: pull_request: types: @@ -14,7 +14,7 @@ permissions: contents: write pull-requests: write jobs: - update-readme: + format: runs-on: ubuntu-latest steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 @@ -38,20 +38,26 @@ jobs: github-token: ${{secrets.GITHUB_TOKEN}} result-encoding: string script: | - const script = require('./scripts/update_readme/update_readme/get_inputs_markdown.js') + const {tsImport} = require('tsx/esm/api') + const {script} = await tsImport( + './scripts/format/format/get_inputs_markdown.ts', + process.env.GITHUB_WORKSPACE + '/' + ) return script() - env: INPUTS: ${{steps.get_inputs_markdown.outputs.result}} if: github.event_name != 'pull_request' || github.event.action != 'closed' - run: bash "${GITHUB_WORKSPACE}/scripts/update_readme/update_readme/update_readme.sh" + run: bash "${GITHUB_WORKSPACE}/scripts/format/format/update_readme.sh" - run: npx prettier --write . if: github.event_name != 'pull_request' || github.event.action != 'closed' + - run: tsc + if: github.event_name != 'pull_request' || github.event.action != 'closed' - uses: ./ with: github-token: ${{secrets.GITHUB_TOKEN}} - branch-name-prefix: fix-readme - pr-title-prefix: README修正 - pr-description-prefix: READMEを修正しました。 + branch-name-prefix: fix-format + pr-title-prefix: format修正 + pr-description-prefix: formatを修正しました。 concurrency: group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }} cancel-in-progress: true diff --git a/.github/workflows/super-linter.yml b/.github/workflows/super-linter.yml index b49274142..1f2a3e3d5 100644 --- a/.github/workflows/super-linter.yml +++ b/.github/workflows/super-linter.yml @@ -58,8 +58,8 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} DEFAULT_BRANCH: main LINTER_RULES_PATH: . - JAVASCRIPT_DEFAULT_STYLE: prettier - VALIDATE_JAVASCRIPT_STANDARD: false + TYPESCRIPT_DEFAULT_STYLE: prettier + VALIDATE_TYPESCRIPT_STANDARD: false concurrency: group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }} cancel-in-progress: true diff --git a/.jscpd.json b/.jscpd.json new file mode 100644 index 000000000..5cea67a82 --- /dev/null +++ b/.jscpd.json @@ -0,0 +1,6 @@ +{ + "threshold": 0, + "reporters": ["consoleFull"], + "ignore": ["**/__snapshots__/**", "**/node_modules/**", "**/dist/**"], + "absolute": true +} diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 000000000..849ddff3b --- /dev/null +++ b/.prettierignore @@ -0,0 +1 @@ +dist/ diff --git a/action.yml b/action.yml index 9990902c4..e31eda581 100644 --- a/action.yml +++ b/action.yml @@ -38,7 +38,7 @@ runs: shell: bash if: github.event_name != 'pull_request' || github.event.action != 'closed' working-directory: ${{inputs.working-directory}} - run: ${{ github.action_path }}/scripts/action/show_diff.sh + run: ${{ github.action_path }}/src/show_diff.sh - name: Set env id: set-env shell: bash @@ -60,7 +60,7 @@ runs: NO_VERIFY: ${{inputs.no-verify}} if: steps.diff.outputs.result != '' && ((github.event_name == 'pull_request' && github.event.action != 'closed') || github.event_name == 'push' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || github.event_name == 'repository_dispatch') working-directory: ${{inputs.working-directory}} - run: ${{ github.action_path }}/scripts/action/push.sh + run: ${{ github.action_path }}/src/push.sh shell: bash - name: Get a number of PullRequests uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 @@ -69,8 +69,8 @@ runs: with: github-token: ${{inputs.github-token}} script: | - const script = require('${{ github.action_path }}/scripts/action/get_number_of_pull_requests.js') - return await script({github, context}) + const {script} = require('${{ github.action_path }}/dist/get_number_of_pull_requests.js') + return await script(github, context) # pushしたブランチで修正PRを作る - name: Create PullRequest uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 @@ -79,8 +79,8 @@ runs: with: github-token: ${{inputs.github-token}} script: | - const script = require('${{ github.action_path }}/scripts/action/create_pull_request.js') - return await script({github, context}) + const {script} = require('${{ github.action_path }}/dist/create_pull_request.js') + return await script(github, context) # 元のPRを出したユーザーを修正PRにアサインする - name: Assign a user uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 @@ -90,8 +90,8 @@ runs: with: github-token: ${{inputs.github-token}} script: | - const script = require('${{ github.action_path }}/scripts/action/assign_a_user.js') - await script({github, context}) + const {script} = require('${{ github.action_path }}/dist/assign_a_user.js') + await script(github, context) # 修正PRのタイトルやDescriptionを更新する - name: Update PullRequest uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 @@ -100,8 +100,8 @@ runs: with: github-token: ${{inputs.github-token}} script: | - const script = require('${{ github.action_path }}/scripts/action/update_pull_request.js') - return await script({github, context}) + const {script} = require('${{ github.action_path }}/dist/update_pull_request.js') + return await script(github, context) # 既に修正PRがある状態で、手動でformatを修正した場合、修正PRを閉じる - name: Close PullRequest uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 @@ -109,8 +109,8 @@ runs: with: github-token: ${{inputs.github-token}} script: | - const script = require('${{ github.action_path }}/scripts/action/close_pull_request.js') - await script({github, context}) + const {script} = require('${{ github.action_path }}/dist/close_pull_request.js') + await script(github, context) # exit-failureがtrueで差分がある場合は異常終了する - name: Exit if: (github.event_name != 'pull_request' || github.event.action != 'closed') && steps.diff.outputs.result != '' && inputs.exit-failure == 'true' diff --git a/dist/assign_a_user.js b/dist/assign_a_user.js new file mode 100644 index 000000000..447c19795 --- /dev/null +++ b/dist/assign_a_user.js @@ -0,0 +1,15 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.script = void 0; +async function script(github, context) { + const issuesAddAssigneesParams = { + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: Number(process.env.PR_NUMBER), + assignees: [context.actor], + }; + console.log("call issues.addAssignees:"); + console.log(issuesAddAssigneesParams); + await github.rest.issues.addAssignees(issuesAddAssigneesParams); +} +exports.script = script; diff --git a/dist/close_pull_request.js b/dist/close_pull_request.js new file mode 100644 index 000000000..60581585b --- /dev/null +++ b/dist/close_pull_request.js @@ -0,0 +1,42 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.script = void 0; +const get_pull_requests_1 = require("./get_pull_requests"); +function script(github, context) { + return __awaiter(this, void 0, void 0, function* () { + const HEAD_REF = process.env.HEAD_REF; + let headName = process.env.BRANCH_NAME_PREFIX; + if (HEAD_REF !== "") { + headName += "-" + HEAD_REF; + } + for (const pull of yield (0, get_pull_requests_1.getPullRequests)(github, context)) { + // 修正PRをcloseする (修正PRのstateをclosedに更新する) + const pullsUpdateParams = { + owner: context.repo.owner, + repo: context.repo.repo, + pull_number: pull.number, + state: "closed", + }; + console.log("call pulls.update:", pullsUpdateParams); + yield github.rest.pulls.update(pullsUpdateParams); + // 修正PRのブランチを削除する + const gitDeleteRefParams = { + owner: context.repo.owner, + repo: context.repo.repo, + ref: "heads/" + headName, + }; + console.log("call git.deleteRef:", gitDeleteRefParams); + yield github.rest.git.deleteRef(gitDeleteRefParams); + } + }); +} +exports.script = script; diff --git a/dist/create_pull_request.js b/dist/create_pull_request.js new file mode 100644 index 000000000..5726d507e --- /dev/null +++ b/dist/create_pull_request.js @@ -0,0 +1,36 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.script = void 0; +const generate_title_description_1 = require("./generate_title_description"); +function script(github, context) { + return __awaiter(this, void 0, void 0, function* () { + const HEAD_REF = process.env.HEAD_REF || ""; + let head = process.env.BRANCH_NAME_PREFIX; + if (HEAD_REF !== "") { + head += "-" + HEAD_REF; + } + const headWithRepo = context.repo.owner + ":" + head; + const { title, body } = (0, generate_title_description_1.generateTitleDescription)(); + const pullsCreateParams = { + owner: context.repo.owner, + repo: context.repo.repo, + head: headWithRepo, + base: HEAD_REF, + title, + body, + }; + console.log("call pulls.create:", pullsCreateParams); + const createPullRes = yield github.rest.pulls.create(pullsCreateParams); + return createPullRes.data.number; + }); +} +exports.script = script; diff --git a/dist/generate_title_description.js b/dist/generate_title_description.js new file mode 100644 index 000000000..d16d42eda --- /dev/null +++ b/dist/generate_title_description.js @@ -0,0 +1,51 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.generateTitleDescription = void 0; +function generateTitleDescription() { + const HEAD_REF = process.env.HEAD_REF || ""; + const escapedHeadRef = HEAD_REF.replace(/#/g, ""); + const PR_NUMBER = process.env.PR_NUMBER; + const PR_TITLE_PREFIX = process.env.PR_TITLE_PREFIX || ""; + let head = process.env.BRANCH_NAME_PREFIX || ""; + if (HEAD_REF !== "") { + head += "-" + HEAD_REF; + } + const escapedHead = head.replace(/#/g, ""); + let title = PR_TITLE_PREFIX; + let body = process.env.PR_DESCRIPTION_PREFIX || ""; + body += `本PR ( \`${escapedHead}\` ) をマージすると差分が次のPRに反映されます。\n`; + body += "* "; + if (PR_NUMBER !== "") { + body += `#${PR_NUMBER} ( `; + } + body += `\`${escapedHeadRef}\``; + if (PR_NUMBER !== "") { + body += " )"; + } + body += "\n\n"; + body += `CIが再度実行されると本PR ( \`${escapedHead}\` ) にforce pushされます。\n`; + body += "```mermaid\n"; + body += `%%{init: {'gitGraph': {'mainBranchName': '${escapedHeadRef}'}}}%%\n`; + body += "gitGraph\n"; + for (let i = 0; i < 2; i++) { + body += " commit\n"; + } + body += ` branch ${escapedHead}\n`; + body += ` checkout ${escapedHead}\n`; + let commit = PR_TITLE_PREFIX; + if (commit.length > 6) { + commit = commit.substring(0, 6) + "......"; + } + body += ` commit id: "${commit}"\n`; + body += ` checkout ${escapedHeadRef}\n`; + body += ` merge ${escapedHead}\n`; + body += "```"; + if (PR_NUMBER !== "") { + title += " #" + PR_NUMBER; + } + return { + title, + body, + }; +} +exports.generateTitleDescription = generateTitleDescription; diff --git a/dist/get_number_of_pull_requests.js b/dist/get_number_of_pull_requests.js new file mode 100644 index 000000000..27bde214c --- /dev/null +++ b/dist/get_number_of_pull_requests.js @@ -0,0 +1,21 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.script = void 0; +const get_pull_requests_1 = require("./get_pull_requests"); +function script(github, context) { + return __awaiter(this, void 0, void 0, function* () { + const HEAD_REF = process.env.HEAD_REF; + const pulls = yield (0, get_pull_requests_1.getPullRequests)(github, context, HEAD_REF); + return pulls.length; + }); +} +exports.script = script; diff --git a/dist/get_pull_requests.js b/dist/get_pull_requests.js new file mode 100644 index 000000000..7faa002f1 --- /dev/null +++ b/dist/get_pull_requests.js @@ -0,0 +1,20 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.getPullRequests = void 0; +async function getPullRequests(github, context, base) { + const HEAD_REF = process.env.HEAD_REF; + let head = context.repo.owner + ":" + process.env.BRANCH_NAME_PREFIX; + if (HEAD_REF !== "") { + head += "-" + HEAD_REF; + } + const pullsListParams = { + owner: context.repo.owner, + repo: context.repo.repo, + head, + state: "open", + base, + }; + console.log("call pulls.list:", pullsListParams); + return await github.paginate(github.rest.pulls.list, pullsListParams); +} +exports.getPullRequests = getPullRequests; diff --git a/dist/update_pull_request.js b/dist/update_pull_request.js new file mode 100644 index 000000000..149b6b0fe --- /dev/null +++ b/dist/update_pull_request.js @@ -0,0 +1,35 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.script = void 0; +const generate_title_description_1 = require("./generate_title_description"); +const get_pull_requests_1 = require("./get_pull_requests"); +function script(github, context) { + return __awaiter(this, void 0, void 0, function* () { + const { title, body } = (0, generate_title_description_1.generateTitleDescription)(); + for (const pull of yield (0, get_pull_requests_1.getPullRequests)(github, context)) { + if (pull.title === title && pull.body === body) { + continue; + } + // PRのタイトルやDescriptionを更新する + const pullsUpdateParams = { + owner: context.repo.owner, + repo: context.repo.repo, + pull_number: pull.number, + title, + body, + }; + console.log("call pulls.update:", pullsUpdateParams); + yield github.rest.pulls.update(pullsUpdateParams); + } + }); +} +exports.script = script; diff --git a/package-lock.json b/package-lock.json index 36edfd2e0..3ca60ce19 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,8 +5,12 @@ "packages": { "": { "devDependencies": { + "@actions/github": "^6.0.0", + "@octokit/plugin-paginate-rest": "^11.3.5", + "@octokit/plugin-rest-endpoint-methods": "^13.2.6", "@proofdict/textlint-rule-proofdict": "3.1.2", "@textlint-ja/textlint-rule-no-insert-dropping-sa": "2.0.1", + "@types/js-yaml": "^4.0.9", "js-yaml": "4.1.0", "prettier": "3.3.3", "textlint": "14.3.0", @@ -22,12 +26,201 @@ "textlint-rule-prefer-tari-tari": "1.0.3", "textlint-rule-preset-ja-spacing": "2.4.3", "textlint-rule-preset-ja-technical-writing": "10.0.1", - "textlint-rule-terminology": "5.2.12" + "textlint-rule-terminology": "5.2.12", + "tsc": "^2.0.4", + "tsx": "^4.19.1", + "typescript": "^5.4.5" }, "engines": { "node": "^22.8.0" } }, + "node_modules/@actions/github": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@actions/github/-/github-6.0.0.tgz", + "integrity": "sha512-alScpSVnYmjNEXboZjarjukQEzgCRmjMv6Xj47fsdnqGS73bjJNDpiiXmp8jr0UZLdUB6d9jW63IcmddUP+l0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@actions/http-client": "^2.2.0", + "@octokit/core": "^5.0.1", + "@octokit/plugin-paginate-rest": "^9.0.0", + "@octokit/plugin-rest-endpoint-methods": "^10.0.0" + } + }, + "node_modules/@actions/github/node_modules/@octokit/auth-token": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", + "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@actions/github/node_modules/@octokit/core": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.0.tgz", + "integrity": "sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/auth-token": "^4.0.0", + "@octokit/graphql": "^7.1.0", + "@octokit/request": "^8.3.1", + "@octokit/request-error": "^5.1.0", + "@octokit/types": "^13.0.0", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@actions/github/node_modules/@octokit/endpoint": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.5.tgz", + "integrity": "sha512-ekqR4/+PCLkEBF6qgj8WqJfvDq65RH85OAgrtnVp1mSxaXF03u2xW/hUdweGS5654IlC0wkNYC18Z50tSYTAFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^13.1.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@actions/github/node_modules/@octokit/graphql": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.1.0.tgz", + "integrity": "sha512-r+oZUH7aMFui1ypZnAvZmn0KSqAUgE1/tUXIWaqUCa1758ts/Jio84GZuzsvUkme98kv0WFY8//n0J1Z+vsIsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/request": "^8.3.0", + "@octokit/types": "^13.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@actions/github/node_modules/@octokit/openapi-types": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", + "integrity": "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@actions/github/node_modules/@octokit/plugin-paginate-rest": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.2.1.tgz", + "integrity": "sha512-wfGhE/TAkXZRLjksFXuDZdmGnJQHvtU/joFQdweXUgzo1XwvBCD4o4+75NtFfjfLK5IwLf9vHTfSiU3sLRYpRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^12.6.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": "5" + } + }, + "node_modules/@actions/github/node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/types": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.6.0.tgz", + "integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^20.0.0" + } + }, + "node_modules/@actions/github/node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-10.4.1.tgz", + "integrity": "sha512-xV1b+ceKV9KytQe3zCVqjg+8GTGfDYwaT1ATU5isiUyVtlVAO3HNdzpS4sr4GBx4hxQ46s7ITtZrAsxG22+rVg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^12.6.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": "5" + } + }, + "node_modules/@actions/github/node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.6.0.tgz", + "integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^20.0.0" + } + }, + "node_modules/@actions/github/node_modules/@octokit/request": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.4.0.tgz", + "integrity": "sha512-9Bb014e+m2TgBeEJGEbdplMVWwPmL1FPtggHQRkV+WVsMggPtEkLKPlcVYm/o8xKLkpJ7B+6N8WfQMtDLX2Dpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/endpoint": "^9.0.1", + "@octokit/request-error": "^5.1.0", + "@octokit/types": "^13.1.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@actions/github/node_modules/@octokit/request-error": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.1.0.tgz", + "integrity": "sha512-GETXfE05J0+7H2STzekpKObFe765O5dlAKUTLNGeH+x47z7JjXHfsHKo5z21D/o/IOZTUEI6nyWyR+bZVP/n5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^13.1.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@actions/github/node_modules/before-after-hook": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", + "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@actions/github/node_modules/universal-user-agent": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", + "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@actions/http-client": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.2.3.tgz", + "integrity": "sha512-mx8hyJi/hjFvbPokCg4uRd4ZX78t+YyRPtnKWwIl+RzNaVuFpQHfmlGVfsKEJN8LwTCvL+DfVgAM04XaHkm6bA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tunnel": "^0.0.6", + "undici": "^5.25.4" + } + }, "node_modules/@azu/format-text": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@azu/format-text/-/format-text-1.0.2.tgz", @@ -95,6 +288,424 @@ "node": ">=6.9.0" } }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz", + "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz", + "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz", + "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz", + "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz", + "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz", + "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz", + "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz", + "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz", + "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz", + "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz", + "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz", + "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz", + "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz", + "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz", + "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz", + "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz", + "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz", + "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz", + "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz", + "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz", + "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz", + "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz", + "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz", + "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@fastify/busboy": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", + "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -256,6 +867,148 @@ "node": ">= 8" } }, + "node_modules/@octokit/auth-token": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-5.1.1.tgz", + "integrity": "sha512-rh3G3wDO8J9wSjfI436JUKzHIxq8NaiL0tVeB2aXmG6p/9859aUOAjA9pmSPNGGZxfwmaJ9ozOJImuNVJdpvbA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/core": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-6.1.2.tgz", + "integrity": "sha512-hEb7Ma4cGJGEUNOAVmyfdB/3WirWMg5hDuNFVejGEDFqupeOysLc2sG6HJxY2etBp5YQu5Wtxwi020jS9xlUwg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@octokit/auth-token": "^5.0.0", + "@octokit/graphql": "^8.0.0", + "@octokit/request": "^9.0.0", + "@octokit/request-error": "^6.0.1", + "@octokit/types": "^13.0.0", + "before-after-hook": "^3.0.2", + "universal-user-agent": "^7.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/endpoint": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-10.1.1.tgz", + "integrity": "sha512-JYjh5rMOwXMJyUpj028cu0Gbp7qe/ihxfJMLc8VZBMMqSwLgOxDI1911gV4Enl1QSavAQNJcwmwBF9M0VvLh6Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@octokit/types": "^13.0.0", + "universal-user-agent": "^7.0.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/graphql": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-8.1.1.tgz", + "integrity": "sha512-ukiRmuHTi6ebQx/HFRCXKbDlOh/7xEV6QUXaE7MJEKGNAncGI/STSbOkl12qVXZrfZdpXctx5O9X1AIaebiDBg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@octokit/request": "^9.0.0", + "@octokit/types": "^13.0.0", + "universal-user-agent": "^7.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@octokit/plugin-paginate-rest": { + "version": "11.3.5", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.3.5.tgz", + "integrity": "sha512-cgwIRtKrpwhLoBi0CUNuY83DPGRMaWVjqVI/bGKsLJ4PzyWZNaEmhHroI2xlrVXkk6nFv0IsZpOp+ZWSWUS2AQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^13.6.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": ">=6" + } + }, + "node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "13.2.6", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.2.6.tgz", + "integrity": "sha512-wMsdyHMjSfKjGINkdGKki06VEkgdEldIGstIEyGX0wbYHGByOwN/KiM+hAAlUwAtPkP3gvXtVQA9L3ITdV2tVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^13.6.1" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": ">=6" + } + }, + "node_modules/@octokit/request": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-9.1.3.tgz", + "integrity": "sha512-V+TFhu5fdF3K58rs1pGUJIDH5RZLbZm5BI+MNF+6o/ssFNT4vWlCh/tVpF3NxGtP15HUxTTMUbsG5llAuU2CZA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@octokit/endpoint": "^10.0.0", + "@octokit/request-error": "^6.0.1", + "@octokit/types": "^13.1.0", + "universal-user-agent": "^7.0.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/request-error": { + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-6.1.5.tgz", + "integrity": "sha512-IlBTfGX8Yn/oFPMwSfvugfncK2EwRLjzbrpifNaMY8o/HTEAFqCA1FZxjD9cWvSKBHgrIhc4CSBIzMxiLsbzFQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@octokit/types": "^13.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/types": { + "version": "13.6.1", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.6.1.tgz", + "integrity": "sha512-PHZE9Z+kWXb23Ndik8MKPirBPziOc0D2/3KH1P+6jK5nGWe96kadZuE4jev2/Jq7FvIfTlT2Ltg8Fv2x1v0a5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^22.2.0" + } + }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -777,6 +1530,13 @@ "@types/node": "*" } }, + "node_modules/@types/js-yaml": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz", + "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/mdast": { "version": "3.0.15", "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", @@ -1005,6 +1765,14 @@ "dev": true, "license": "MIT" }, + "node_modules/before-after-hook": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-3.0.2.tgz", + "integrity": "sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==", + "dev": true, + "license": "Apache-2.0", + "peer": true + }, "node_modules/boundary": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/boundary/-/boundary-1.0.1.tgz", @@ -1377,6 +2145,13 @@ "node": ">=0.10.0" } }, + "node_modules/deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", + "dev": true, + "license": "ISC" + }, "node_modules/diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", @@ -1561,6 +2336,46 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/esbuild": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz", + "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.23.1", + "@esbuild/android-arm": "0.23.1", + "@esbuild/android-arm64": "0.23.1", + "@esbuild/android-x64": "0.23.1", + "@esbuild/darwin-arm64": "0.23.1", + "@esbuild/darwin-x64": "0.23.1", + "@esbuild/freebsd-arm64": "0.23.1", + "@esbuild/freebsd-x64": "0.23.1", + "@esbuild/linux-arm": "0.23.1", + "@esbuild/linux-arm64": "0.23.1", + "@esbuild/linux-ia32": "0.23.1", + "@esbuild/linux-loong64": "0.23.1", + "@esbuild/linux-mips64el": "0.23.1", + "@esbuild/linux-ppc64": "0.23.1", + "@esbuild/linux-riscv64": "0.23.1", + "@esbuild/linux-s390x": "0.23.1", + "@esbuild/linux-x64": "0.23.1", + "@esbuild/netbsd-x64": "0.23.1", + "@esbuild/openbsd-arm64": "0.23.1", + "@esbuild/openbsd-x64": "0.23.1", + "@esbuild/sunos-x64": "0.23.1", + "@esbuild/win32-arm64": "0.23.1", + "@esbuild/win32-ia32": "0.23.1", + "@esbuild/win32-x64": "0.23.1" + } + }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -1834,6 +2649,21 @@ "dev": true, "license": "ISC" }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -1921,6 +2751,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-tsconfig": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz", + "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, "node_modules/get-url-origin": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-url-origin/-/get-url-origin-1.0.1.tgz", @@ -4325,6 +5168,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, "node_modules/ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", @@ -6711,6 +7564,54 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/try-resolve": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/try-resolve/-/try-resolve-1.0.1.tgz", + "integrity": "sha512-yHeaPjCBzVaXwWl5IMUapTaTC2rn/eBYg2fsG2L+CvJd+ttFbk0ylDnpTO3wVhosmE1tQEvcebbBeKLCwScQSQ==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT" + }, + "node_modules/tsc": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/tsc/-/tsc-2.0.4.tgz", + "integrity": "sha512-fzoSieZI5KKJVBYGvwbVZs/J5za84f2lSTLPYf6AGiIf43tZ3GNrI1QzTLcjtyDDP4aLxd46RTZq1nQxe7+k5Q==", + "dev": true, + "license": "MIT", + "bin": { + "tsc": "bin/tsc" + } + }, + "node_modules/tsx": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.1.tgz", + "integrity": "sha512-0flMz1lh74BR4wOvBjuh9olbnwqCPc35OOlfyzHba0Dc+QNUeWX/Gq2YTbnwcWPO3BMd8fkzRVrHcsR+a7z7rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "~0.23.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -6822,6 +7723,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/typescript": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", @@ -6838,6 +7753,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/undici": { + "version": "5.28.4", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", + "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@fastify/busboy": "^2.0.0" + }, + "engines": { + "node": ">=14.0" + } + }, "node_modules/undici-types": { "version": "6.19.8", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", @@ -6958,6 +7886,14 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/universal-user-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.2.tgz", + "integrity": "sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q==", + "dev": true, + "license": "ISC", + "peer": true + }, "node_modules/universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", diff --git a/package.json b/package.json index 51397b427..ccf8d8c78 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,11 @@ { "devDependencies": { + "@actions/github": "^6.0.0", + "@octokit/plugin-paginate-rest": "^11.3.5", + "@octokit/plugin-rest-endpoint-methods": "^13.2.6", "@proofdict/textlint-rule-proofdict": "3.1.2", "@textlint-ja/textlint-rule-no-insert-dropping-sa": "2.0.1", + "@types/js-yaml": "^4.0.9", "js-yaml": "4.1.0", "prettier": "3.3.3", "textlint": "14.3.0", @@ -17,9 +21,17 @@ "textlint-rule-prefer-tari-tari": "1.0.3", "textlint-rule-preset-ja-spacing": "2.4.3", "textlint-rule-preset-ja-technical-writing": "10.0.1", - "textlint-rule-terminology": "5.2.12" + "textlint-rule-terminology": "5.2.12", + "tsc": "^2.0.4", + "tsx": "^4.19.1", + "typescript": "^5.4.5" }, "engines": { "node": "^22.8.0" + }, + "standard": { + "ignore": [ + "dist/" + ] } } diff --git a/scripts/update_readme/update_readme/get_inputs_markdown.js b/scripts/format/format/get_inputs_markdown.ts similarity index 62% rename from scripts/update_readme/update_readme/get_inputs_markdown.js rename to scripts/format/format/get_inputs_markdown.ts index f1f91ece7..972f197fe 100644 --- a/scripts/update_readme/update_readme/get_inputs_markdown.js +++ b/scripts/format/format/get_inputs_markdown.ts @@ -1,8 +1,16 @@ -const fs = require("fs"); -const yaml = require("js-yaml"); +import {readFileSync} from "fs"; +import * as yaml from "js-yaml"; -module.exports = () => { - const ymlFile = yaml.load(fs.readFileSync("action.yml", "utf8")); +export function script(): string { + const ymlFile = yaml.load(readFileSync("action.yml", "utf8")) as { + inputs: { + [p: string]: { + description: string + default: string + required: "true" | "false" + } + } + }; const inputs = ymlFile.inputs; const rows = [ "| 引数名 | 説明 | 必須 | デフォルト値 |", @@ -27,4 +35,4 @@ module.exports = () => { } return rows.join("\n"); -}; +} diff --git a/scripts/update_readme/update_readme/update_readme.sh b/scripts/format/format/update_readme.sh similarity index 100% rename from scripts/update_readme/update_readme/update_readme.sh rename to scripts/format/format/update_readme.sh diff --git a/src/assign_a_user.ts b/src/assign_a_user.ts index 754a77a5b..7bc7d4b9b 100644 --- a/src/assign_a_user.ts +++ b/src/assign_a_user.ts @@ -1,11 +1,18 @@ -module.exports = async ({ github, context }) => { - const issuesAddAssigneesParams = { +import type { Context } from "@actions/github/lib/context"; +import type { GitHub } from "@actions/github/lib/utils"; +import type {RestEndpointMethodTypes} from "@octokit/plugin-rest-endpoint-methods"; + +export async function script( + github: InstanceType, + context: Context, +) { + const issuesAddAssigneesParams:RestEndpointMethodTypes["issues"]["addAssignees"]["parameters"] = { owner: context.repo.owner, repo: context.repo.repo, - issue_number: process.env.PR_NUMBER, + issue_number: Number(process.env.PR_NUMBER), assignees: [context.actor], }; console.log("call issues.addAssignees:"); console.log(issuesAddAssigneesParams); await github.rest.issues.addAssignees(issuesAddAssigneesParams); -}; +} diff --git a/src/close_pull_request.ts b/src/close_pull_request.ts index a0840caf2..032d1c0f2 100644 --- a/src/close_pull_request.ts +++ b/src/close_pull_request.ts @@ -1,6 +1,12 @@ -const getPullRequests = require("./get_pull_requests"); +import type { Context } from "@actions/github/lib/context"; +import type { GitHub } from "@actions/github/lib/utils"; +import type {RestEndpointMethodTypes} from "@octokit/plugin-rest-endpoint-methods"; +import {getPullRequests} from "./get_pull_requests"; -module.exports = async ({ github, context }) => { +export async function script( + github: InstanceType, + context: Context, +) { const HEAD_REF = process.env.HEAD_REF; let headName = process.env.BRANCH_NAME_PREFIX; @@ -8,27 +14,24 @@ module.exports = async ({ github, context }) => { headName += "-" + HEAD_REF; } - const commonParams = { - owner: context.repo.owner, - repo: context.repo.repo, - }; - - for (const pull of await getPullRequests({ github, context })) { + for (const pull of await getPullRequests(github, context)) { // 修正PRをcloseする (修正PRのstateをclosedに更新する) - const pullsUpdateParams = { + const pullsUpdateParams:RestEndpointMethodTypes["pulls"]["update"]["parameters"] = { + owner: context.repo.owner, + repo: context.repo.repo, pull_number: pull.number, state: "closed", - ...commonParams, }; console.log("call pulls.update:", pullsUpdateParams); await github.rest.pulls.update(pullsUpdateParams); // 修正PRのブランチを削除する - const gitDeleteRefParams = { + const gitDeleteRefParams:RestEndpointMethodTypes["git"]["deleteRef"]["parameters"] = { + owner: context.repo.owner, + repo: context.repo.repo, ref: "heads/" + headName, - ...commonParams, }; console.log("call git.deleteRef:", gitDeleteRefParams); await github.rest.git.deleteRef(gitDeleteRefParams); } -}; +} diff --git a/src/create_pull_request.ts b/src/create_pull_request.ts index 6f6d228a6..c2ca72eda 100644 --- a/src/create_pull_request.ts +++ b/src/create_pull_request.ts @@ -1,7 +1,13 @@ -const generateTitleDescription = require("../scripts/action/generate_title_description.js"); +import type { Context } from "@actions/github/lib/context"; +import type { GitHub } from "@actions/github/lib/utils"; +import type {RestEndpointMethodTypes} from "@octokit/plugin-rest-endpoint-methods"; +import {generateTitleDescription} from "./generate_title_description"; -module.exports = async ({ github, context }) => { - const HEAD_REF = process.env.HEAD_REF; +export async function script( + github: InstanceType, + context: Context, +): Promise { + const HEAD_REF = process.env.HEAD_REF || ""; let head = process.env.BRANCH_NAME_PREFIX; if (HEAD_REF !== "") { @@ -10,7 +16,7 @@ module.exports = async ({ github, context }) => { const headWithRepo = context.repo.owner + ":" + head; const { title, body } = generateTitleDescription(); - const pullsCreateParams = { + const pullsCreateParams:RestEndpointMethodTypes["pulls"]["create"]["parameters"] = { owner: context.repo.owner, repo: context.repo.repo, head: headWithRepo, @@ -21,4 +27,4 @@ module.exports = async ({ github, context }) => { console.log("call pulls.create:", pullsCreateParams); const createPullRes = await github.rest.pulls.create(pullsCreateParams); return createPullRes.data.number; -}; +} diff --git a/scripts/action/generate_title_description.js b/src/generate_title_description.ts similarity index 74% rename from scripts/action/generate_title_description.js rename to src/generate_title_description.ts index da7d73126..1b0261f16 100644 --- a/scripts/action/generate_title_description.js +++ b/src/generate_title_description.ts @@ -1,17 +1,20 @@ -module.exports = () => { - const HEAD_REF = process.env.HEAD_REF; - const escapedHeadRef = HEAD_REF.replaceAll("#", ""); +export function generateTitleDescription():{ + title:string + body:string +} { + const HEAD_REF = process.env.HEAD_REF || ""; + const escapedHeadRef = HEAD_REF.replace(/#/g, ""); const PR_NUMBER = process.env.PR_NUMBER; - const PR_TITLE_PREFIX = process.env.PR_TITLE_PREFIX; - let head = process.env.BRANCH_NAME_PREFIX; + const PR_TITLE_PREFIX = process.env.PR_TITLE_PREFIX||""; + let head = process.env.BRANCH_NAME_PREFIX||""; if (HEAD_REF !== "") { head += "-" + HEAD_REF; } - const escapedHead = head.replaceAll("#", ""); + const escapedHead = head.replace(/#/g, ""); let title = PR_TITLE_PREFIX; - let body = process.env.PR_DESCRIPTION_PREFIX; + let body = process.env.PR_DESCRIPTION_PREFIX||""; body += `本PR ( \`${escapedHead}\` ) をマージすると差分が次のPRに反映されます。\n`; body += "* "; @@ -57,4 +60,4 @@ module.exports = () => { title, body, }; -}; +} diff --git a/src/get_number_of_pull_requests.ts b/src/get_number_of_pull_requests.ts index 9a1b58bca..dda0bc7c1 100644 --- a/src/get_number_of_pull_requests.ts +++ b/src/get_number_of_pull_requests.ts @@ -1,11 +1,16 @@ -const getPullRequests = require("./get_pull_requests"); +import type { Context } from "@actions/github/lib/context"; +import type { GitHub } from "@actions/github/lib/utils"; +import {getPullRequests} from "./get_pull_requests"; -module.exports = async ({ github, context }) => { +export async function script( + github: InstanceType, + context: Context, +):Promise { const HEAD_REF = process.env.HEAD_REF; - const pulls = await getPullRequests({ + const pulls = await getPullRequests( github, context, - additionalParams: { base: HEAD_REF }, - }); + HEAD_REF, + ); return pulls.length; -}; +} diff --git a/src/get_pull_requests.ts b/src/get_pull_requests.ts index ed35fe57d..e790390b6 100644 --- a/src/get_pull_requests.ts +++ b/src/get_pull_requests.ts @@ -1,4 +1,13 @@ -module.exports = async ({ github, context, additionalParams }) => { +import type {GitHub} from "@actions/github/lib/utils"; +import type {Context} from "@actions/github/lib/context"; +import type { PaginatingEndpoints } from "@octokit/plugin-paginate-rest"; +import type {RestEndpointMethodTypes} from "@octokit/plugin-rest-endpoint-methods"; + +export async function getPullRequests( + github: InstanceType, + context: Context, + base?: string +):Promise{ const HEAD_REF = process.env.HEAD_REF; let head = context.repo.owner + ":" + process.env.BRANCH_NAME_PREFIX; @@ -6,13 +15,13 @@ module.exports = async ({ github, context, additionalParams }) => { head += "-" + HEAD_REF; } - const pullsListParams = { + const pullsListParams:RestEndpointMethodTypes["pulls"]["list"]["parameters"] = { owner: context.repo.owner, repo: context.repo.repo, head, state: "open", - ...additionalParams, + base, }; console.log("call pulls.list:", pullsListParams); return await github.paginate(github.rest.pulls.list, pullsListParams); -}; +} diff --git a/scripts/action/push.sh b/src/push.sh similarity index 100% rename from scripts/action/push.sh rename to src/push.sh diff --git a/scripts/action/show_diff.sh b/src/show_diff.sh similarity index 100% rename from scripts/action/show_diff.sh rename to src/show_diff.sh diff --git a/src/update_pull_request.ts b/src/update_pull_request.ts index 77bbe5549..0d8058118 100644 --- a/src/update_pull_request.ts +++ b/src/update_pull_request.ts @@ -1,16 +1,22 @@ -const generateTitleDescription = require("../scripts/action/generate_title_description.js"); -const getPullRequests = require("./get_pull_requests"); +import type { Context } from "@actions/github/lib/context"; +import type { GitHub } from "@actions/github/lib/utils"; +import type {RestEndpointMethodTypes} from "@octokit/plugin-rest-endpoint-methods"; +import {generateTitleDescription} from "./generate_title_description"; +import {getPullRequests} from "./get_pull_requests"; -module.exports = async ({ github, context }) => { +export async function script( + github: InstanceType, + context: Context, +) { const { title, body } = generateTitleDescription(); - for (const pull of await getPullRequests({ github, context })) { + for (const pull of await getPullRequests(github, context)) { if (pull.title === title && pull.body === body) { continue; } // PRのタイトルやDescriptionを更新する - const pullsUpdateParams = { + const pullsUpdateParams:RestEndpointMethodTypes["pulls"]["update"]["parameters"] = { owner: context.repo.owner, repo: context.repo.repo, pull_number: pull.number, @@ -20,4 +26,4 @@ module.exports = async ({ github, context }) => { console.log("call pulls.update:", pullsUpdateParams); await github.rest.pulls.update(pullsUpdateParams); } -}; +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 000000000..8b41fd6cd --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "target": "es2018", + "module": "commonjs", + "outDir": "./dist/", + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "skipLibCheck": true, + "moduleResolution": "node" + }, + "include": ["src/*.ts"] +}