From 15f5bfbe020d4b0ea691b7a20eab9e84d7073140 Mon Sep 17 00:00:00 2001 From: Dustin Brickwood Date: Fri, 15 Mar 2024 14:21:09 -0500 Subject: [PATCH] chore: setups up repository (#3) Changes introduced in this PR: - Adds templates and codeowners - Inits bun project - Sets up initial "checks". @itsacoyote I just defaulted to these, we can change accordingly to our preference as the project evolves. --- .github/CODEOWNERS | 10 ++ .github/ISSUE_TEMPLATE/bug_report.md | 44 +++++ .github/ISSUE_TEMPLATE/config.yml | 5 + .github/ISSUE_TEMPLATE/feature_report.md | 26 +++ .github/pull_request_template.md | 17 ++ .github/workflows/checks.yaml | 41 +++++ .github/workflows/secrets_scanner.yaml | 2 +- .gitignore | 176 ++++++++++++++++++++ .prettierignore | 4 + LICENSE-APACHE | 201 +++++++++++++++++++++++ LICENSE-MIT | 21 +++ README.md | 1 + bun.lockb | Bin 0 -> 60566 bytes checks-config/.markdownlint.json | 26 +++ checks-config/cspell-zksync.txt | 3 + checks-config/cspell.json | 44 +++++ index.ts | 1 + package.json | 26 +++ tsconfig.json | 22 +++ 19 files changed, 669 insertions(+), 1 deletion(-) create mode 100644 .github/CODEOWNERS create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 .github/ISSUE_TEMPLATE/feature_report.md create mode 100644 .github/pull_request_template.md create mode 100644 .github/workflows/checks.yaml create mode 100644 .gitignore create mode 100644 .prettierignore create mode 100644 LICENSE-APACHE create mode 100644 LICENSE-MIT create mode 100755 bun.lockb create mode 100644 checks-config/.markdownlint.json create mode 100644 checks-config/cspell-zksync.txt create mode 100644 checks-config/cspell.json create mode 100644 index.ts create mode 100644 package.json create mode 100644 tsconfig.json diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 00000000..d150257f --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,10 @@ +# This CODEOWNERS file sets the individuals responsible for code in the era-test-node repository. + +# These users are the default owners for everything in the repo. +# They will be requested for review when someone opens a pull request. +* @matter-labs/devxp + +# You can also specify code owners for specific directories or files. +# For example: +# /src/ @developer1 @developer2 +# /docs/ @documenter diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 00000000..d9c0f6da --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,44 @@ +--- +name: Bug report +about: Use this template for reporting issues +title: "" +labels: bug +assignees: '' + +--- + +### ๐Ÿ› Bug Report for zkSync Docs + +#### ๐Ÿ“ Description + +Provide a clear and concise description of the bug. + +#### ๐Ÿ”„ Reproduction Steps + +1. Step 1 +2. Step 2 +3. ... + +#### ๐Ÿค” Expected Behavior + +Describe what you expected to happen. + +#### ๐Ÿ˜ฏ Current Behavior + +Describe what actually happened. + +#### ๐Ÿ–ฅ๏ธ Environment + +- **Node version**: [e.g., v18.17.0] +- **Operating System & Version**: [e.g., Ubuntu 20.04] +- **Other relevant environment details**: + +#### ๐Ÿ“‹ Additional Context + +Add any other context about the problem here. If applicable, add screenshots to help explain. + +#### ๐Ÿ“Ž Log Output + +``` +Paste any relevant log output here. +``` \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 00000000..61fd4b71 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,5 @@ +blank_issues_enabled: true +contact_links: + - name: zksync-developers Discussion + url: https://github.com/zkSync-Community-Hub/zkync-developers/discussions + about: Please provide feedback, and ask questions here. diff --git a/.github/ISSUE_TEMPLATE/feature_report.md b/.github/ISSUE_TEMPLATE/feature_report.md new file mode 100644 index 00000000..4e30b239 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_report.md @@ -0,0 +1,26 @@ +--- +name: Feature request +about: Use this template for requesting features +title: "" +labels: feat +assignees: '' + +--- + +### ๐ŸŒŸ Feature Request + +#### ๐Ÿ“ Description + +Provide a clear and concise description of the feature you'd like to see. + +#### ๐Ÿค” Rationale + +Explain why this feature is important and how it benefits the project. + +#### ๐Ÿ–ผ๏ธ Mockups/Examples + +If applicable, provide mockups or examples of how the feature would work. + +#### ๐Ÿ“‹ Additional Context + +Add any other context or information about the feature request here. \ No newline at end of file diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 00000000..9edb5bc9 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,17 @@ +# What :computer: +* First thing updated with this PR +* Second thing updated with this PR +* Third thing updated with this PR + +# Why :hand: +* Reason why first thing was added to PR +* Reason why second thing was added to PR +* Reason why third thing was added to PR + +# Evidence :camera: +Include screenshots, screen recordings, or `console` output here demonstrating that your changes work as intended + + + + diff --git a/.github/workflows/checks.yaml b/.github/workflows/checks.yaml new file mode 100644 index 00000000..4fd0fe56 --- /dev/null +++ b/.github/workflows/checks.yaml @@ -0,0 +1,41 @@ +name: clean ๐Ÿงน + +on: + pull_request: + branches: [main, staging] + + workflow_dispatch: + +jobs: + format: + name: format + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: oven-sh/setup-bun@v1 + - name: Runs prettier formatter + run: | + bun install + bun run lint:fmt + + spelling: + name: spelling + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: oven-sh/setup-bun@v1 + - name: Runs cspell spell checker + run: | + bun install + bun run lint:spell + + lint: + name: lint + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: oven-sh/setup-bun@v1 + - name: Runs mdl markdown linter + run: | + bun install + bun run lint:mdl \ No newline at end of file diff --git a/.github/workflows/secrets_scanner.yaml b/.github/workflows/secrets_scanner.yaml index f68823d1..28b1140f 100644 --- a/.github/workflows/secrets_scanner.yaml +++ b/.github/workflows/secrets_scanner.yaml @@ -1,4 +1,4 @@ -name: Leaked Secrets Scan +name: secret scan ๐Ÿ”Ž on: pull_request: merge_group: diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..ab5afb29 --- /dev/null +++ b/.gitignore @@ -0,0 +1,176 @@ +# Based on https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore + +# Logs + +logs +_.log +npm-debug.log_ +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) + +report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json + +# Runtime data + +pids +_.pid +_.seed +\*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover + +lib-cov + +# Coverage directory used by tools like istanbul + +coverage +\*.lcov + +# nyc test coverage + +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) + +.grunt + +# Bower dependency directory (https://bower.io/) + +bower_components + +# node-waf configuration + +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) + +build/Release + +# Dependency directories + +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) + +web_modules/ + +# TypeScript cache + +\*.tsbuildinfo + +# Optional npm cache directory + +.npm + +# Optional eslint cache + +.eslintcache + +# Optional stylelint cache + +.stylelintcache + +# Microbundle cache + +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history + +.node_repl_history + +# Output of 'npm pack' + +\*.tgz + +# Yarn Integrity file + +.yarn-integrity + +# dotenv environment variable files + +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) + +.cache +.parcel-cache + +# Next.js build output + +.next +out + +# Nuxt.js build / generate output + +.nuxt +dist + +# Gatsby files + +.cache/ + +# Comment in the public line in if your project uses Gatsby and not Next.js + +# https://nextjs.org/blog/next-9-1#public-directory-support + +# public + +# vuepress build output + +.vuepress/dist + +# vuepress v2.x temp and cache directory + +.temp +.cache + +# Docusaurus cache and generated files + +.docusaurus + +# Serverless directories + +.serverless/ + +# FuseBox cache + +.fusebox/ + +# DynamoDB Local files + +.dynamodb/ + +# TernJS port file + +.tern-port + +# Stores VSCode versions used for testing VSCode extensions + +.vscode-test + +# yarn v2 + +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.\* + +# IntelliJ based IDEs +.idea + +# Finder (MacOS) folder config +.DS_Store + diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000..e8aab8ec --- /dev/null +++ b/.prettierignore @@ -0,0 +1,4 @@ +node_modules +.github +.idea +public \ No newline at end of file diff --git a/LICENSE-APACHE b/LICENSE-APACHE new file mode 100644 index 00000000..f49a4e16 --- /dev/null +++ b/LICENSE-APACHE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/LICENSE-MIT b/LICENSE-MIT new file mode 100644 index 00000000..2739ea6e --- /dev/null +++ b/LICENSE-MIT @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 Matter Labs + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index 14d82d9a..173b0335 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,3 @@ # zksync-docs + Docs for zkSync diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..d100895bee06963d6886430692cf9e3f15d362ef GIT binary patch literal 60566 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 literal 0 HcmV?d00001 diff --git a/checks-config/.markdownlint.json b/checks-config/.markdownlint.json new file mode 100644 index 00000000..ec292f9a --- /dev/null +++ b/checks-config/.markdownlint.json @@ -0,0 +1,26 @@ +{ + "default": true, + "fenced-code-language": false, + "no-duplicate-header": false, + "first-header-h1": false, + "first-line-h1": false, + "no-inline-html": false, + "ol-prefix": false, + "MD026": { + "punctuation": ".,;:!ใ€‚๏ผŒ๏ผ›๏ผš๏ผ:" + }, + "MD013": false, + "MD001": false, + "MD051": false, + "MD025": false, + "MD036": false, + "MD003": false, + "MD007": { + "indent": 2, + "code_blocks": false, + "headings": false, + "tables": false + }, + "no-hard-tabs": false, + "whitespace": false +} diff --git a/checks-config/cspell-zksync.txt b/checks-config/cspell-zksync.txt new file mode 100644 index 00000000..74b0e0fc --- /dev/null +++ b/checks-config/cspell-zksync.txt @@ -0,0 +1,3 @@ +// zkSync-related words +matterlabs +zksync \ No newline at end of file diff --git a/checks-config/cspell.json b/checks-config/cspell.json new file mode 100644 index 00000000..6b75610a --- /dev/null +++ b/checks-config/cspell.json @@ -0,0 +1,44 @@ +{ +"language": "en", +"ignorePaths": [ + "node_modules/**", + ".github/**", + ".firebase/**", + ".yarn/**", + "dist/**" +], +"dictionaries": [ + "typescript", + "cpp", + "npm", + "filetypes", + "cpp", + "en_GB", + "en_US", + "node", + "bash", + "fonts", + "npm", + "cryptocurrencies", + "companies", + "rust", + "html", + "css", + "entities", + "softwareTerms", + "misc", + "fullstack", + "softwareTerms", + "zksync", + "nuxt", + "viem" +], +"dictionaryDefinitions": [ + { + "name": "zksync", + "addWords": true, + "path": "./cspell-zksync.txt" + } +], +"allowCompoundWords": true +} diff --git a/index.ts b/index.ts new file mode 100644 index 00000000..f67b2c64 --- /dev/null +++ b/index.ts @@ -0,0 +1 @@ +console.log("Hello via Bun!"); \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 00000000..0f0b3183 --- /dev/null +++ b/package.json @@ -0,0 +1,26 @@ +{ + "name": "zksync-docs", + "module": "index.ts", + "description": "zkSync Docs V3", + "license": "MIT", + "author": "Matter Labs", + "homepage": "https://zksync.io", + "devDependencies": { + "bun-types": "latest", + "cspell": "^8.6.0", + "markdownlint": "^0.33.0", + "markdownlint-cli2": "^0.12.1", + "prettier": "^3.2.5" + }, + "peerDependencies": { + "typescript": "^5.0.0" + }, + "scripts": { + "start": "bun run index.ts", + "lint:fmt": "prettier --check **/*.md", + "lint:fix": "prettier --write **/*.md", + "lint:spell": "cspell **/*.md --config=./checks-config/cspell.json", + "lint:mdl": "markdownlint-cli2 -c .markdownlint.json \"**/*.md\" \"#node_modules\" \"#.github\"" + }, + "type": "module" +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 00000000..7556e1d4 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "lib": ["ESNext"], + "module": "esnext", + "target": "esnext", + "moduleResolution": "bundler", + "moduleDetection": "force", + "allowImportingTsExtensions": true, + "noEmit": true, + "composite": true, + "strict": true, + "downlevelIteration": true, + "skipLibCheck": true, + "jsx": "react-jsx", + "allowSyntheticDefaultImports": true, + "forceConsistentCasingInFileNames": true, + "allowJs": true, + "types": [ + "bun-types" // add Bun global + ] + } +}