├── .editorconfig ├── .github ├── DISCUSSION_TEMPLATE │ └── q-a.yml ├── ISSUE_TEMPLATE │ ├── bug-report.yml │ └── config.yml ├── logo-dark.svg ├── logo-light.svg ├── logo-mini.svg └── workflows │ ├── lock-threads.yml │ ├── release.yml │ └── test.yml ├── .gitignore ├── .nvmrc ├── .vscode └── settings.json ├── CONTRIBUTING.md ├── FUNDING.json ├── LICENSE ├── README.md ├── docs ├── .vitepress │ ├── config.ts │ └── theme │ │ ├── components │ │ ├── AsideSponsors.vue │ │ ├── ContactForm.vue │ │ ├── ImageLink.vue │ │ └── Marquee.vue │ │ ├── index.ts │ │ └── styles.css ├── compilation.md ├── contact.md ├── dev-api │ ├── entry-point.md │ ├── index.md │ ├── node-cli.md │ ├── register-cjs.md │ ├── register-esm.md │ ├── ts-import.md │ └── tsx-require.md ├── faq.md ├── getting-started.md ├── index.md ├── learn.md ├── node-enhancement.md ├── package.json ├── pnpm-lock.yaml ├── postcss.config.js ├── public │ ├── logo-dark.svg │ ├── logo-light.svg │ ├── logo-mini.svg │ ├── logos │ │ ├── 11ty.svg │ │ ├── alibaba.svg │ │ ├── arktype.svg │ │ ├── astro.svg │ │ ├── aws.svg │ │ ├── cheerio.svg │ │ ├── cloudflare.svg │ │ ├── codecov.svg │ │ ├── date-fns.svg │ │ ├── electron.svg │ │ ├── figma.svg │ │ ├── github.svg │ │ ├── google.svg │ │ ├── ibm.svg │ │ ├── knip.svg │ │ ├── mermaid.svg │ │ ├── meta.svg │ │ ├── microsoft.svg │ │ ├── mozilla.svg │ │ ├── nodejs.svg │ │ ├── openai.svg │ │ ├── prisma.svg │ │ ├── salesforce.svg │ │ ├── sentry.svg │ │ ├── sevalla-full.svg │ │ ├── square.svg │ │ ├── supabase.svg │ │ ├── vercel.svg │ │ ├── vite.svg │ │ ├── vitest.svg │ │ ├── vue.svg │ │ ├── webdriverio.svg │ │ └── zod.svg │ └── social.png ├── shell-scripts.md ├── tailwind.config.js ├── typescript.md ├── vercel.json ├── vscode.md └── watch-mode.md ├── package.json ├── pnpm-lock.yaml ├── pnpm-workspace.yaml ├── release.config.cjs ├── renovate.json ├── src ├── @types │ ├── es-module-lexer.d.ts │ └── module.d.ts ├── cjs │ ├── api │ │ ├── index.ts │ │ ├── module-extensions.ts │ │ ├── module-resolve-filename │ │ │ ├── index.ts │ │ │ ├── interop-cjs-exports.ts │ │ │ ├── is-from-cjs-lexer.ts │ │ │ ├── preserve-query.ts │ │ │ ├── resolve-implicit-extensions.ts │ │ │ └── resolve-ts-extensions.ts │ │ ├── register.ts │ │ ├── require.ts │ │ └── types.ts │ └── index.ts ├── cli.ts ├── esm │ ├── api │ │ ├── index.ts │ │ ├── register.ts │ │ ├── scoped-import.ts │ │ └── ts-import.ts │ ├── hook │ │ ├── index.ts │ │ ├── initialize.ts │ │ ├── load.ts │ │ ├── package-json.ts │ │ ├── resolve.ts │ │ └── utils.ts │ ├── index.ts │ └── types.ts ├── loader.ts ├── patch-repl.ts ├── preflight.cts ├── remove-argv-flags.ts ├── repl.ts ├── run.ts ├── source-map.ts ├── suppress-warnings.cts ├── types.ts ├── utils │ ├── debug.ts │ ├── es-module-lexer.ts │ ├── ipc │ │ ├── client.ts │ │ ├── get-pipe-path.ts │ │ └── server.ts │ ├── is-windows.ts │ ├── map-ts-extensions.ts │ ├── node-features.ts │ ├── path-utils.ts │ ├── read-json-file.ts │ ├── sha1.ts │ ├── temporary-directory.ts │ ├── transform │ │ ├── apply-transformers.ts │ │ ├── cache.ts │ │ ├── get-esbuild-options.ts │ │ ├── index.ts │ │ └── transform-dynamic-import.ts │ ├── tsconfig.ts │ └── url-search-params-stringify.ts └── watch │ ├── index.ts │ └── utils.ts ├── tests ├── fixtures.ts ├── fixtures │ └── test.wasm ├── index.ts ├── specs │ ├── api.ts │ ├── cli.ts │ ├── loaders.ts │ ├── repl.ts │ ├── smoke.ts │ ├── transform.ts │ ├── tsconfig.ts │ └── watch.ts └── utils │ ├── coverage-sources-content.ts │ ├── expect-match-in-order.ts │ ├── get-node.ts │ ├── is-process-alive.ts │ ├── is-windows.ts │ ├── node-versions.ts │ ├── package-types.ts │ ├── process-interact.ts │ ├── pty-shell │ ├── index.ts │ └── node-pty.mjs │ └── tsx.ts └── tsconfig.json /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = tab 5 | end_of_line = lf 6 | charset = utf-8 7 | trim_trailing_whitespace = true 8 | insert_final_newline = true 9 | 10 | [*.yml] 11 | indent_style = space 12 | indent_size = 2 13 | -------------------------------------------------------------------------------- /.github/DISCUSSION_TEMPLATE/q-a.yml: -------------------------------------------------------------------------------- 1 | body: 2 | - type: markdown 3 | attributes: 4 | value: | 5 | ## 💬 What's your question? 6 | 7 |
8 | Need some pointers on crafting your question? 9 | 10 |
11 | 12 | 1. **Start succinctly:** Jump to the point with a concise question. 13 | 2. **Conciseness matters:** Keep it brief yet specific; avoid lengthy explanations. 14 | 3. **Include code:** Attach relevant code snippets, configurations, and errors. 15 | 4. **Add screenshots:** If applicable, provide screenshots. 16 |
17 | 18 | - type: textarea 19 | id: improvements 20 | attributes: 21 | label: Question 22 | validations: 23 | required: true 24 | 25 | - type: markdown 26 | attributes: 27 | value: | 28 |
29 | 30 | > **🚀 Try _Priority Support_!** 31 | > 32 | > If you're in a pinch, don't hesitate to take advantage of my [_Priority Support_ service](https://github.com/sponsors/privatenumber) where you can ask me questions in an exclusive forum. I'm well equppied to assist you with this project and would be happy to help you out! 🙂 33 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug-report.yml: -------------------------------------------------------------------------------- 1 | name: 🐛 Bug report 2 | description: Found a bug? File a report and let's get it fixed! 3 | labels: [bug, pending triage] 4 | body: 5 | - type: markdown 6 | attributes: 7 | value: | 8 | 💁‍♂️ This is a collaborative effort. Please do your best to debug, communicate, and demonstrate the problem. 9 | 10 | - type: checkboxes 11 | attributes: 12 | label: Acknowledgements 13 | options: 14 | - label: I read the documentation and searched existing issues to avoid duplicates 15 | required: true 16 | 17 | - label: I understand this is a **bug tracker** and anything other than a proven bug will be closed 18 | required: true 19 | 20 | - label: I understand this is a free project and relies on community contributions 21 | required: true 22 | 23 | - label: I read and understood the [Contribution guide](https://github.com/privatenumber/tsx/blob/master/CONTRIBUTING.md) 24 | required: true 25 | 26 | - type: markdown 27 | attributes: 28 | value: | 29 | ## 📋 Show us the bug 30 | 31 | > [!CAUTION] 32 | > Without proving the bug is in tsx via *minimal* reproduction, your issue will be closed without response. 33 | 34 | The minimal reproduction is the core of your issue. This is usually all we read. 35 | 36 | The first thing we'll do is scrutinize every code, file, and dependency to see how they impact the bug. If you can delete it and still produce the bug, it's not needed. 37 | 38 | **Starter Template**: [Fork this StackBlitz template](https://stackblitz.com/edit/node-huzszn?file=index.ts) 39 | If it's not reproducible on StackBlitz, upload it to a GitHub repository and use GitHub Actions to show the error. 40 | 41 | Please do your best to _show_ the bug rather than talking about it. This will lead to a speedy resolution. 42 | 43 | - type: input 44 | attributes: 45 | label: Minimal reproduction URL 46 | placeholder: https://github.com/... 47 | validations: 48 | required: true 49 | 50 | - type: markdown 51 | attributes: 52 | value: | 53 | > [!TIP] 54 | > **🙋 Need help?** Use [_Priority Support_](https://github.com/sponsors/privatenumber) for debugging help and implementation! 55 | 56 | - type: markdown 57 | attributes: 58 | value: | 59 | ## 🗒️ Notes 60 | 61 | > [!IMPORTANT] 62 | > Please skip this section and focus on minimizing the reproduction. We only read it _after_ verifying the reproduction above. 63 | 64 | - type: textarea 65 | attributes: 66 | label: Problem & expected behavior (under 200 words) 67 | value: | 68 | Skip this section and let your reproduction do the talking... 69 | 70 | 71 | 72 | 73 | But if you really need to explain, keep it under 200 words: 74 | - What happened 75 | - What I expected 76 | - Error stack trace 77 | - Documentation links 78 | - Screenshots 79 | 80 | - type: markdown 81 | attributes: 82 | value: | 83 | ## 🛠️ Contribute 84 | 85 | - type: checkboxes 86 | attributes: 87 | label: Bugs are expected to be fixed by those affected by it 88 | options: 89 | - label: I'm interested in working on this issue 90 | 91 | - type: checkboxes 92 | attributes: 93 | label: Compensating engineering work will speed up resolution and support the project 94 | options: 95 | - label: I'm willing to offer $10 for financial support 96 | 97 | - type: markdown 98 | attributes: 99 | value: | 100 | ## 🚀 Need immediate help? 101 | Escalate this issue by supporting the project as a [_Priority Patron_](https://github.com/sponsors/privatenumber)! 102 | 103 | Your concern will receive prompt attention, ensuring faster and more efficient resolution. 104 | 105 | [→ Become a _Priority Patron_!](https://github.com/sponsors/privatenumber) 106 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | contact_links: 3 | - name: 💖 [Sponsors only] Feature requests / Help / Questions 4 | url: https://github.com/sponsors/privatenumber/ 5 | about: Need help ASAP? Get prioritized help for all your questions and issues! 6 | 7 | - name: 📚 Contribution guide 8 | url: https://github.com/privatenumber/tsx/blob/develop/CONTRIBUTING.md 9 | about: Learn more about contributing to this project 10 | -------------------------------------------------------------------------------- /.github/logo-dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.github/logo-light.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.github/logo-mini.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.github/workflows/lock-threads.yml: -------------------------------------------------------------------------------- 1 | name: Lock threads 2 | 3 | on: 4 | workflow_dispatch: 5 | schedule: 6 | - cron: "0 0 * * 0" # Every Sunday 7 | 8 | jobs: 9 | lock: 10 | runs-on: ubuntu-latest 11 | 12 | permissions: 13 | issues: write 14 | pull-requests: write 15 | discussions: write 16 | 17 | steps: 18 | - uses: dessant/lock-threads@v5 19 | with: 20 | github-token: ${{ github.token }} 21 | issue-inactive-days: "91" 22 | add-issue-labels: outdated 23 | pr-inactive-days: "91" 24 | add-pr-labels: outdated 25 | discussion-inactive-days: "91" 26 | add-discussion-labels: outdated 27 | log-output: "true" 28 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release 2 | 3 | on: 4 | push: 5 | branches: [master, develop] 6 | 7 | permissions: 8 | contents: write 9 | 10 | jobs: 11 | release: 12 | name: Release 13 | if: ( 14 | github.repository_owner == 'pvtnbr' && github.ref_name =='develop' 15 | ) || ( 16 | github.repository_owner == 'privatenumber' && github.ref_name =='master' 17 | ) 18 | runs-on: ubuntu-latest 19 | timeout-minutes: 10 20 | 21 | steps: 22 | - name: Checkout 23 | uses: actions/checkout@v4 24 | with: 25 | token: ${{ secrets.GH_TOKEN }} 26 | 27 | - name: Use Node.js 28 | uses: actions/setup-node@v4 29 | with: 30 | node-version-file: .nvmrc 31 | 32 | - name: Setup pnpm 33 | uses: pnpm/action-setup@v4 34 | with: 35 | run_install: true 36 | 37 | - name: Lint 38 | run: pnpm lint 39 | 40 | - name: Prerelease to GitHub 41 | if: github.repository_owner == 'pvtnbr' 42 | run: | 43 | git remote add public https://github.com/$(echo $GITHUB_REPOSITORY | sed "s/^pvtnbr/privatenumber/") 44 | git fetch public master 'refs/tags/*:refs/tags/*' 45 | git push --force --tags origin refs/remotes/public/master:refs/heads/master 46 | 47 | jq ' 48 | .publishConfig.registry = "https://npm.pkg.github.com" 49 | | .name = ("@" + env.GITHUB_REPOSITORY_OWNER + "/" + .name) 50 | | .repository = env.GITHUB_REPOSITORY 51 | | .release.branches = [ 52 | "master", 53 | { name: "develop", prerelease: "rc", channel: "latest" } 54 | ] 55 | ' package.json > _package.json 56 | mv _package.json package.json 57 | 58 | - name: Release 59 | env: 60 | GH_TOKEN: ${{ secrets.GH_TOKEN }} 61 | NPM_TOKEN: ${{ secrets.NPM_TOKEN }} 62 | run: pnpm dlx semantic-release 63 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: Test 2 | on: 3 | push: 4 | branches: [master, develop] 5 | pull_request: 6 | jobs: 7 | test: 8 | name: Test 9 | runs-on: ${{ matrix.os }} 10 | strategy: 11 | matrix: 12 | os: [ubuntu-latest, windows-latest] 13 | timeout-minutes: 10 14 | 15 | steps: 16 | - name: Checkout 17 | uses: actions/checkout@v4 18 | 19 | - name: Use Node.js 20 | uses: actions/setup-node@v4 21 | with: 22 | node-version-file: .nvmrc 23 | 24 | - name: Authenticate GitHub registry 25 | run: npm set "//npm.pkg.github.com:_authToken=${{ secrets.GH_TOKEN }}" 26 | 27 | - name: Setup pnpm 28 | uses: pnpm/action-setup@v4 29 | 30 | - name: Get pnpm store directory 31 | shell: bash 32 | run: echo "PNPM_STORE=$(pnpm store path --silent)" >> $GITHUB_ENV 33 | 34 | - uses: actions/cache@v3 35 | name: Cache pnpm 36 | with: 37 | path: ${{ env.PNPM_STORE }} 38 | key: ${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }} 39 | restore-keys: ${{ runner.os }}-pnpm- 40 | 41 | - name: Install dependencies 42 | run: pnpm install 43 | 44 | - name: Get Node.js cache directory 45 | shell: bash 46 | run: echo "NVE_CACHE=$(node -p 'require("cachedir")("nve")')" >> $GITHUB_ENV 47 | 48 | - name: Cache Node.js versions 49 | uses: actions/cache@v3 50 | with: 51 | path: ${{ env.NVE_CACHE }} 52 | key: ${{ runner.os }}-nodejs-${{ hashFiles('.nvmrc') }}-${{ hashFiles('tests/utils/node-versions.ts') }} 53 | restore-keys: ${{ runner.os }}-nodejs- 54 | 55 | - name: Test 56 | run: pnpm test 57 | 58 | - name: Type check 59 | if: ${{ matrix.os == 'ubuntu-latest' }} 60 | run: pnpm type-check 61 | 62 | - name: Lint 63 | if: ${{ matrix.os == 'ubuntu-latest' }} 64 | run: pnpm lint 65 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # macOS 2 | .DS_Store 3 | 4 | # Logs 5 | logs 6 | *.log 7 | npm-debug.log* 8 | yarn-debug.log* 9 | yarn-error.log* 10 | lerna-debug.log* 11 | 12 | # Dependency directories 13 | node_modules 14 | 15 | # Output of 'npm pack' 16 | *.tgz 17 | 18 | # dotenv environment variables file 19 | .env 20 | .env.test 21 | 22 | # Cache 23 | .eslintcache 24 | 25 | # Distribution 26 | dist 27 | 28 | # Link config 29 | link.config.json 30 | 31 | # Vitepress 32 | docs/.vitepress/cache 33 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | 20.19.1 2 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "typescript.tsdk": "node_modules/typescript/lib" 3 | } 4 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contribution guide 2 | 3 | Welcome! We're excited you're interested in contributing. To ensure a smooth and productive collaboration, follow these guidelines. 4 | 5 | ## Goals of tsx 6 | 7 | 1. Enhance Node.js with TypeScript support 8 | 2. Improve ESM ↔ CommonJS interoperability as the ecosystem migrates to ESM 9 | 3. Support the [active LTS versions of Node.js](https://endoflife.date/nodejs) 10 | 11 | ## Issues & Discussions 12 | 13 | > [!IMPORTANT] 14 | > Please be polite, respectful, and considerate of people's time and effort. 15 | > 16 | > This is an open source project relying on community contributions. 17 | 18 | ### Opening a new Issue 19 | 20 | > [!IMPORTANT] 21 | > The Issues tab is a bug & feature tracker. Not a place for debugging support. To keep threads concise and easy to follow for collaborators, please participate constructively and follow the guidelines. 22 | 23 | #### Minimal reproduction required 24 | 25 | Provide a clear, minimal example of the issue. This helps contributors identify genuine bugs efficiently. 26 | 27 | #### Check the documentation 28 | 29 | Review the project documentation for known behaviors or caveats to avoid unnecessary issues. 30 | 31 | ### Commenting on an existing Issue 32 | 33 | #### ⭐️ Issue objectives 34 | 35 | Issues serve as a platform for **contributors** to: 36 | 1. Verify bugs 37 | 2. Diagnose the causes 38 | 3. Brainstorm solutions 39 | 4. Implement fix 40 | 41 | #### ✅ Be constructive 42 | 43 | Aim to contribute to the solution with research & PRs (tests + solutions). The goal is to land an improvement in _tsx_ for everyone to benefit. 44 | 45 | Be concise to save people's time. 46 | 47 | #### ❌ Avoid detractive comments 48 | 49 | Keep comments constructive towards fixing the issue. 50 | 51 | These types of comments will be hidden or deleted: 52 | - Comments that pollute the thread (e.g. "updates?", "me too", "also happening in ...") 53 | - Discussing workarounds that can't land in _tsx_ 54 | - Off-topic comments 55 | 56 | After an issue is confirmed by the provided reproduction, the thread may sometimes be locked to direct further conversation & action to PRs. 57 | 58 | > [!TIP] 59 | > **⚡️ Get issues addressed faster!** 60 | > 61 | > Sponsors can prioritize issues. By helping fund development, you can ensure your needs are addressed quickly! 62 | > 63 | > [Sponsor now →](https://github.com/sponsors/privatenumber) 64 | 65 | ## Pull requests 66 | 67 | #### Open an Issue first 68 | 69 | Ensure there’s an existing issue related to your PR to facilitate alignment and prevent wasted work. 70 | 71 | #### Include tests 72 | 73 | Add minimal tests verifying your changes to maintain behavior and reliability. 74 | 75 | ## Development 76 | 77 | ### Initial setup 78 | 79 | After cloning the repo, use [nvm](https://nvm.sh) (optional) to set the expected Node.js version, and [pnpm](https://pnpm.io) to install dependencies: 80 | 81 | ```bash 82 | nvm i # Install or use Node.js version 83 | pnpm i # Install dependencies 84 | ``` 85 | 86 | ### Building 87 | 88 | Build the source code with: 89 | 90 | ```bash 91 | pnpm build # Compiles to `dist` 92 | ``` 93 | 94 | > [!TIP] 95 | > Temporarily disable minification by removing `--minify` in `package.json#scripts.build` for easier debugging. 96 | 97 | 98 | ### Linting and type-checking 99 | 100 | Ensure code quality with: 101 | 102 | ```bash 103 | pnpm lint # ESLint 104 | pnpm type-check # TypeScript type checking 105 | ``` 106 | 107 | ### Testing 108 | 109 | Run automated tests with: 110 | 111 | ```bash 112 | pnpm test # Regular test 113 | CI=1 pnpm test # CI environments 114 | ``` 115 | 116 | ### Manual testing 117 | 118 | #### Local testing 119 | 120 | Use the absolute path to run `./dist/cli.mjs`: 121 | 122 | ```sh 123 | /tsx/dist/cli.mjs 124 | ``` 125 | 126 | #### Collaborative testing 127 | 128 | Use [`git-publish`](https://github.com/privatenumber/git-publish) to publish your changes to your GitHub fork. It can be shared with others and installed from for testing. 129 | 130 | 131 | ## Giving back 132 | 133 | 134 | 135 | _tsx_ has outgrown its "hobby project" status to become a tool used and loved by many. 136 | 137 | While it made it far without sponsorship, funding will accelerate further development by making it easier for devs to choose tsx over other paid work. 138 | 139 | If tsx has helped you, help tsx back! ❤️ 140 | 141 | Any amount makes a difference. 142 | 143 | [Sponsor now →](https://github.com/sponsors/privatenumber) 144 | -------------------------------------------------------------------------------- /FUNDING.json: -------------------------------------------------------------------------------- 1 | { 2 | "drips": { 3 | "ethereum": { 4 | "ownedBy": "0xB9C2F7C3BB7734c37d2949B98A90bAea2fd59E21" 5 | } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) Hiroki Osame 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 |
3 | 4 | 5 | tsx 6 | 7 |

8 | 9 |

10 | 11 |

12 | TypeScript Execute (tsx): The easiest way to run TypeScript in Node.js 13 |

14 | Documentation    |    Getting started → 15 |

16 | 17 |
18 | 19 |

20 | 21 | 22 |

23 |

Already a sponsor? Join the discussion in the Development repo!

24 | 25 | ## Sponsors 26 | 27 |

28 | 29 | 30 | 31 |

32 | 33 | -------------------------------------------------------------------------------- /docs/.vitepress/theme/components/AsideSponsors.vue: -------------------------------------------------------------------------------- 1 | 29 | 30 | 47 | -------------------------------------------------------------------------------- /docs/.vitepress/theme/components/ContactForm.vue: -------------------------------------------------------------------------------- 1 | 41 | 42 |