From 8c4cc3e42ccb24a22e04b1e6eda1911a43ee6ff3 Mon Sep 17 00:00:00 2001 From: Chris Date: Mon, 14 Oct 2024 22:31:59 +0200 Subject: [PATCH] chore: wip chore: wip chore: wip --- .editorconfig | 9 +++ .gitattributes | 2 + .github/CODE_OF_CONDUCT.md | 83 +++++++++++++++++++ .github/SECURITY.md | 70 ++++++++++++++++ .github/art/cover.png | Bin 0 -> 9280 bytes .github/renovate.json | 3 + .github/stale.yml | 14 ++++ .github/workflows/README.md | 13 +++ .github/workflows/ci.yml | 84 +++++++++++++++++++ .github/workflows/release.yml | 43 ++++++++++ .gitignore | 14 ++++ .vscode/dictionary.txt | 41 ++++++++++ .vscode/extensions.json | 9 +++ .vscode/settings.json | 145 +++++++++++++++++++++++++++++++++ .zed/settings.json | 146 ++++++++++++++++++++++++++++++++++ CHANGELOG.md | 68 ++++++++++++++++ LICENSE.md | 21 +++++ README.md | 127 +++++++++++++++++++++++++++++ bin/cli.ts | 29 +++++++ build.ts | 23 ++++++ bun.lockb | Bin 0 -> 85837 bytes bunfig.toml | 2 + commitlint.config.js | 77 ++++++++++++++++++ docs/.vitepress/config.ts | 26 ++++++ docs/api-examples.md | 49 ++++++++++++ docs/index.md | 24 ++++++ docs/markdown-examples.md | 85 ++++++++++++++++++++ dts | 2 + dts.config.ts | 2 + eslint.config.js | 12 +++ package.json | 79 ++++++++++++++++++ pkgx.yaml | 2 + scripts/generate-keys.ts | 10 +++ src/config.ts | 8 ++ src/generate.ts | 69 ++++++++++++++++ src/index.ts | 3 + src/types.ts | 8 ++ test/dts.test.ts | 11 +++ tsconfig.json | 25 ++++++ 39 files changed, 1438 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitattributes create mode 100644 .github/CODE_OF_CONDUCT.md create mode 100644 .github/SECURITY.md create mode 100644 .github/art/cover.png create mode 100644 .github/renovate.json create mode 100644 .github/stale.yml create mode 100644 .github/workflows/README.md create mode 100644 .github/workflows/ci.yml create mode 100644 .github/workflows/release.yml create mode 100644 .gitignore create mode 100644 .vscode/dictionary.txt create mode 100644 .vscode/extensions.json create mode 100644 .vscode/settings.json create mode 100644 .zed/settings.json create mode 100644 CHANGELOG.md create mode 100644 LICENSE.md create mode 100644 README.md create mode 100644 bin/cli.ts create mode 100644 build.ts create mode 100755 bun.lockb create mode 100644 bunfig.toml create mode 100644 commitlint.config.js create mode 100644 docs/.vitepress/config.ts create mode 100644 docs/api-examples.md create mode 100644 docs/index.md create mode 100644 docs/markdown-examples.md create mode 100755 dts create mode 100644 dts.config.ts create mode 100644 eslint.config.js create mode 100644 package.json create mode 100644 pkgx.yaml create mode 100644 scripts/generate-keys.ts create mode 100644 src/config.ts create mode 100644 src/generate.ts create mode 100644 src/index.ts create mode 100644 src/types.ts create mode 100644 test/dts.test.ts create mode 100644 tsconfig.json diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..9d08a1a --- /dev/null +++ b/.editorconfig @@ -0,0 +1,9 @@ +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..6f28e15 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +* text=auto +*.lockb binary diff=lockb diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..68282da --- /dev/null +++ b/.github/CODE_OF_CONDUCT.md @@ -0,0 +1,83 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our community include: + +* Demonstrating empathy and kindness toward other people +* Being respectful of differing opinions, viewpoints, and experiences +* Giving and gracefully accepting constructive feedback +* Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience +* Focusing on what is best not just for us as individuals, but for the overall community + +Examples of unacceptable behavior include: + +* The use of sexualized language or imagery, and sexual attention or advances of any kind +* Trolling, insulting or derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or email address, without their explicit permission +* Other conduct which could reasonably be considered inappropriate in a professional setting + +## Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at chris@stacksjs.org. All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the reporter of any incident. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series of actions. + +**Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within the community. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.1, available at [https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]. + +Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder][Mozilla CoC]. + +For answers to common questions about this code of conduct, see the FAQ at [https://www.contributor-covenant.org/faq][FAQ]. Translations are available at [https://www.contributor-covenant.org/translations][translations]. + +[homepage]: https://www.contributor-covenant.org +[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html +[Mozilla CoC]: https://github.com/mozilla/diversity +[FAQ]: https://www.contributor-covenant.org/faq +[translations]: https://www.contributor-covenant.org/translations diff --git a/.github/SECURITY.md b/.github/SECURITY.md new file mode 100644 index 0000000..1139343 --- /dev/null +++ b/.github/SECURITY.md @@ -0,0 +1,70 @@ +# Security Policy + +**PLEASE DON'T DISCLOSE SECURITY-RELATED ISSUES PUBLICLY, [SEE BELOW](#reporting-a-vulnerability).** + +## Supported Versions + +Only the latest major version receives security fixes. + +## Reporting a Vulnerability + +If you discover a security vulnerability within this package, please send an email to Chris Breuer at chris@stacksjs.org. All security vulnerabilities will be promptly addressed. + +### Public PGP Key + +``` +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: OpenPGP v2.0.8 +Comment: https://sela.io/pgp/ + +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 +HF/6SiI= +=le/X +-----END PGP PUBLIC KEY BLOCK----- +``` diff --git a/.github/art/cover.png b/.github/art/cover.png new file mode 100644 index 0000000000000000000000000000000000000000..3989237c39cb72233475a45565c2baa7f675f5f1 GIT binary patch literal 9280 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 literal 0 HcmV?d00001 diff --git a/.github/renovate.json b/.github/renovate.json new file mode 100644 index 0000000..66937d2 --- /dev/null +++ b/.github/renovate.json @@ -0,0 +1,3 @@ +{ + "extends": ["@ow3"] +} diff --git a/.github/stale.yml b/.github/stale.yml new file mode 100644 index 0000000..ece9846 --- /dev/null +++ b/.github/stale.yml @@ -0,0 +1,14 @@ +daysUntilStale: 60 +daysUntilClose: 7 +exemptLabels: + - pinned + - security + - no-stale + - no stale + - pr welcome +staleLabel: stale +markComment: > + This issue has been automatically marked as stale because it has not had + recent activity. It will be closed if no further activity occurs. + Thank you for your contributions. +closeComment: false diff --git a/.github/workflows/README.md b/.github/workflows/README.md new file mode 100644 index 0000000..79d40a0 --- /dev/null +++ b/.github/workflows/README.md @@ -0,0 +1,13 @@ +# GitHub Actions + +This folder contains the following GitHub Actions: + +- [CI][CI] - all CI jobs for the project + - lints the code + - `typecheck`s the code + - runs test suite + - runs on `ubuntu-latest` +- [Release][Release] - automates the release process & changelog generation + +[CI]: ./workflows/ci.yml +[Release]: ./workflows/release.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..d0ab6fe --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,84 @@ +name: CI + +on: + push: + branches: + - main + + pull_request: + branches: + - main + +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + lint: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Install Bun + uses: oven-sh/setup-bun@v2 + + - name: Use cached node_modules + uses: actions/cache@v4 + with: + path: node_modules + key: node-modules-${{ hashFiles('**/bun.lockb') }} + restore-keys: | + node-modules- + + - name: Install Dependencies + run: bun install + + - name: Lint + run: bun run lint + + typecheck: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Install Bun + uses: oven-sh/setup-bun@v2 + + - name: Use cached node_modules + uses: actions/cache@v4 + with: + path: node_modules + key: node-modules-${{ hashFiles('**/bun.lockb') }} + restore-keys: | + node-modules- + + - name: Install Dependencies + run: bun install + + - name: Typecheck + run: bun --bun run typecheck + + test: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Install Bun + uses: oven-sh/setup-bun@v2 + + - name: Use cached node_modules + uses: actions/cache@v4 + with: + path: node_modules + key: node-modules-${{ hashFiles('**/bun.lockb') }} + restore-keys: | + node-modules- + + - name: Install Dependencies + run: bun install + + - name: Unit Test + run: bun test diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..e808da4 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,43 @@ +name: CI + +on: + push: + tags: + - 'v*' + +jobs: + release: + name: release + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Install Bun + uses: oven-sh/setup-bun@v2 + + - name: Use cached node_modules + uses: actions/cache@v4 + with: + path: node_modules + key: node-modules-${{ hashFiles('**/bun.lockb') }} + restore-keys: | + node-modules- + + - name: Install Dependencies + run: bun install + + - name: Build the release + run: bun run build + + - name: Publish to npm + run: bun publish --access public + env: + BUN_AUTH_TOKEN: ${{secrets.NPM_TOKEN}} + + - name: Create GitHub release + run: bunx changelogithub + env: + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a572eb1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,14 @@ +.cache +.DS_Store +.idea +*.log +*.tgz +*.pem +coverage +dist +lib-cov +logs +node_modules +temp +docs/.vitepress/cache +storage diff --git a/.vscode/dictionary.txt b/.vscode/dictionary.txt new file mode 100644 index 0000000..5973a3a --- /dev/null +++ b/.vscode/dictionary.txt @@ -0,0 +1,41 @@ +antfu +biomejs +booleanish +bumpp +bunx +changelogen +changelogithub +codecov +commitlint +commitlintrc +composables +davidanson +degit +deps +destructurable +entrypoints +heroicons +lockb +mkcert +openweb +outdir +outfile +pausable +pkgx +Postcardware +postcompile +prefetch +preinstall +socio +Solana +stacksjs +typecheck +unplugin +unref +upath +vite +vitebook +vitejs +vitepress +vue-demi +vueus diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..a4d6a99 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,9 @@ +{ + // See https://go.microsoft.com/fwlink/?LinkId=827846 + // for the documentation about the extensions.json format + "recommendations": [ + "biomejs.biome", + "streetsidesoftware.code-spell-checker", + "davidanson.vscode-markdownlint" + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..bf5d2c9 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,145 @@ +{ + // Disable the default formatter, use eslint instead + "prettier.enable": false, + "biome.enabled": false, + "editor.formatOnSave": false, + + // Auto fix + "editor.codeActionsOnSave": { + "source.fixAll.eslint": "explicit", + "source.organizeImports": "never" + }, + + // Silent the stylistic rules in you IDE, but still auto fix them + "eslint.rules.customizations": [ + { "rule": "style/*", "severity": "off", "fixable": true }, + { "rule": "format/*", "severity": "off", "fixable": true }, + { "rule": "*-indent", "severity": "off", "fixable": true }, + { "rule": "*-spacing", "severity": "off", "fixable": true }, + { "rule": "*-spaces", "severity": "off", "fixable": true }, + { "rule": "*-order", "severity": "off", "fixable": true }, + { "rule": "*-dangle", "severity": "off", "fixable": true }, + { "rule": "*-newline", "severity": "off", "fixable": true }, + { "rule": "*quotes", "severity": "off", "fixable": true }, + { "rule": "*semi", "severity": "off", "fixable": true } + ], + + // Enable eslint for all supported languages + "eslint.validate": [ + "javascript", + "javascriptreact", + "typescript", + "typescriptreact", + "vue", + "html", + "markdown", + "json", + "jsonc", + "yaml", + "toml", + "xml", + "gql", + "graphql", + "astro", + "svelte", + "css", + "less", + "scss", + "pcss", + "postcss" + ], + + "[stx]": { + "editor.defaultFormatter": "dbaeumer.vscode-eslint" + }, + + // TypeScript + "typescript.tsdk": "${workspaceFolder}/node_modules/typescript/lib", + "unocss.root": "${workspaceFolder}/storage/framework/core/ui/src/uno.config.ts", + // Shell + "[shellscript]": { + "editor.defaultFormatter": "foxundermoon.shell-format" + }, + + // Markdown + "[markdown]": { + "editor.defaultFormatter": "DavidAnson.vscode-markdownlint", + "editor.formatOnSave": true + }, + + "[dockerfile]": { + "editor.defaultFormatter": "foxundermoon.shell-format" + }, + + "markdownlint.config": { + "default": true, + "MD033": { + "allowed_elements": [ + "details", + "summary", + "VPTeamPage", + "VPTeamPageTitle", + "VPTeamMembers", + "script" + ] + }, + "MD041": false + }, + + // Stacks + "vue.inlayHints.missingProps": true, + "typescript.preferGoToSourceDefinition": true, + "files.associations": { + "buddy": "typescript", + "*.stx": "vue" + }, + "editor.quickSuggestions": { + "strings": true + }, + "vsicons.associations.files": [ + { + "icon": "${workspaceFolder}/public/favicon.svg", + "extensions": ["stx"], + "format": "svg" + } + ], + "git.enableSmartCommit": true, + "npm.enableRunFromFolder": true, + "npm.packageManager": "bun", + "editor.gotoLocation.multipleDefinitions": "goto", + "search.exclude": { + "**/node_modules": true, + "**/cdk.out": true, + "**/dist": true, + "**/storage/public": true, + "CHANGELOG.md": true + }, + "explorer.confirmDragAndDrop": false, + "todo-tree.highlights.enabled": true, + "cSpell.ignorePaths": [ + "node_modules", + "lang/de.yml" + ], + "cSpell.dictionaries": [ + "custom-dictionary" + ], + "cSpell.diagnosticLevel": "Hint", + "cSpell.customDictionaries": { + "stacks": { + "name": "custom-dictionary", + "path": "./.vscode/dictionary.txt", + "scope": "user", + "addWords": true + }, + "custom": true // enable the `custom` dictionary + }, + "terminal.integrated.scrollback": 10000, + "grammarly.files.include": [ + "**/README.md", + "**/readme.md", + "**/*.txt" + ], + "grammarly.files.exclude": [ + "**/dictionary.txt" + ], +} diff --git a/.zed/settings.json b/.zed/settings.json new file mode 100644 index 0000000..bcb8f7a --- /dev/null +++ b/.zed/settings.json @@ -0,0 +1,146 @@ +// For a full list of overridable settings, and general information on folder-specific settings, +// see the documentation: https://zed.dev/docs/configuring-zed#settings-files +{ + "languages": { + "JavaScript": { + "formatter": { + "code_actions": { + "source.fixAll.eslint": true + } + } + }, + "TypeScript": { + "formatter": { + "code_actions": { + "source.fixAll.eslint": true + } + } + }, + "Vue.js": { + "formatter": { + "code_actions": { + "source.fixAll.eslint": true + } + } + }, + "HTML": { + "formatter": { + "code_actions": { + "source.fixAll.eslint": true + } + } + }, + "CSS": { + "formatter": { + "code_actions": { + "source.fixAll.eslint": true + } + } + }, + "Markdown": { + "formatter": { + "code_actions": { + "source.fixAll.eslint": true + } + } + }, + "JSON": { + "formatter": { + "code_actions": { + "source.fixAll.eslint": true + } + } + }, + "JSONC": { + "formatter": { + "code_actions": { + "source.fixAll.eslint": true + } + } + }, + "YAML": { + "formatter": { + "code_actions": { + "source.fixAll.eslint": true + } + } + }, + "XML": { + "formatter": { + "code_actions": { + "source.fixAll.eslint": true + } + } + }, + "TOML": { + "formatter": { + "code_actions": { + "source.fixAll.eslint": true + } + } + } + }, + "lsp": { + "eslint": { + "settings": { + "rulesCustomizations": [ + { + "rule": "style/*", + "severity": "off", + "fixable": true + }, + { + "rule": "format/*", + "severity": "off", + "fixable": true + }, + { + "rule": "*-indent", + "severity": "off", + "fixable": true + }, + { + "rule": "*-spacing", + "severity": "off", + "fixable": true + }, + { + "rule": "*-spaces", + "severity": "off", + "fixable": true + }, + { + "rule": "*-order", + "severity": "off", + "fixable": true + }, + { + "rule": "*-dangle", + "severity": "off", + "fixable": true + }, + { + "rule": "*-newline", + "severity": "off", + "fixable": true + }, + { + "rule": "*quotes", + "severity": "off", + "fixable": true + }, + { + "rule": "*semi", + "severity": "off", + "fixable": true + } + ] + } + } + }, + "file_types": { + "JavaScript": [ + "buddy" + ] + } +} diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..ec90a7a --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,68 @@ +# Changelog + + +## v0.0.1...main + +[compare changes](https://github.com/stacksjs/reverse-proxy/compare/v0.0.1...main) + +### 🏡 Chore + +- Wip ([c5e31d5](https://github.com/stacksjs/reverse-proxy/commit/c5e31d5)) +- Wip ([6020df1](https://github.com/stacksjs/reverse-proxy/commit/6020df1)) +- Wip ([be3dde1](https://github.com/stacksjs/reverse-proxy/commit/be3dde1)) +- Wip ([e9e0feb](https://github.com/stacksjs/reverse-proxy/commit/e9e0feb)) +- Wip ([383854c](https://github.com/stacksjs/reverse-proxy/commit/383854c)) +- Wip ([363445b](https://github.com/stacksjs/reverse-proxy/commit/363445b)) +- Add `rp` ([beced3c](https://github.com/stacksjs/reverse-proxy/commit/beced3c)) +- Wip ([99cf0df](https://github.com/stacksjs/reverse-proxy/commit/99cf0df)) +- Wip ([c9341a4](https://github.com/stacksjs/reverse-proxy/commit/c9341a4)) +- Use `bun publish` ([6f6ae9d](https://github.com/stacksjs/reverse-proxy/commit/6f6ae9d)) +- Add tests ([da19c51](https://github.com/stacksjs/reverse-proxy/commit/da19c51)) +- Ignore docs cache ([81f2296](https://github.com/stacksjs/reverse-proxy/commit/81f2296)) +- Use bunx ([ec65717](https://github.com/stacksjs/reverse-proxy/commit/ec65717)) +- Adjust examples ([d4745fc](https://github.com/stacksjs/reverse-proxy/commit/d4745fc)) +- Adjust build process ([1e5c63c](https://github.com/stacksjs/reverse-proxy/commit/1e5c63c)) +- Remove postcompile ([52a9bc6](https://github.com/stacksjs/reverse-proxy/commit/52a9bc6)) +- Remove lint:fix-unsafe ([91ad947](https://github.com/stacksjs/reverse-proxy/commit/91ad947)) + +### ❤️ Contributors + +- Chris + +## ...main + + +### 🏡 Chore + +- Initial commit ([beb4d96](https://github.com/stacksjs/reverse-proxy/commit/beb4d96)) +- Wip ([8e3fce6](https://github.com/stacksjs/reverse-proxy/commit/8e3fce6)) +- Wip ([bbb6783](https://github.com/stacksjs/reverse-proxy/commit/bbb6783)) +- Wip ([2cfb363](https://github.com/stacksjs/reverse-proxy/commit/2cfb363)) +- Wip ([6bb85ac](https://github.com/stacksjs/reverse-proxy/commit/6bb85ac)) +- Wip ([602c9e1](https://github.com/stacksjs/reverse-proxy/commit/602c9e1)) +- Wip ([5986105](https://github.com/stacksjs/reverse-proxy/commit/5986105)) +- Wip ([c2bfec6](https://github.com/stacksjs/reverse-proxy/commit/c2bfec6)) +- Wip ([454dd58](https://github.com/stacksjs/reverse-proxy/commit/454dd58)) +- Wip ([b55ae41](https://github.com/stacksjs/reverse-proxy/commit/b55ae41)) +- Wip ([e2f1350](https://github.com/stacksjs/reverse-proxy/commit/e2f1350)) +- Wip ([61b2aa5](https://github.com/stacksjs/reverse-proxy/commit/61b2aa5)) +- Wip ([a80283b](https://github.com/stacksjs/reverse-proxy/commit/a80283b)) +- Wip ([97b9b16](https://github.com/stacksjs/reverse-proxy/commit/97b9b16)) +- Wip ([fc8d633](https://github.com/stacksjs/reverse-proxy/commit/fc8d633)) +- Wip ([e924f9c](https://github.com/stacksjs/reverse-proxy/commit/e924f9c)) +- Wip ([249e8fa](https://github.com/stacksjs/reverse-proxy/commit/249e8fa)) +- Wip ([1045bb1](https://github.com/stacksjs/reverse-proxy/commit/1045bb1)) +- Wip ([c0a8bad](https://github.com/stacksjs/reverse-proxy/commit/c0a8bad)) +- Wip ([f28b118](https://github.com/stacksjs/reverse-proxy/commit/f28b118)) +- Wip ([712a5bf](https://github.com/stacksjs/reverse-proxy/commit/712a5bf)) +- Wip ([2786e8d](https://github.com/stacksjs/reverse-proxy/commit/2786e8d)) +- Wip ([1290366](https://github.com/stacksjs/reverse-proxy/commit/1290366)) +- Wip ([030a8b7](https://github.com/stacksjs/reverse-proxy/commit/030a8b7)) +- Wip ([2116f75](https://github.com/stacksjs/reverse-proxy/commit/2116f75)) +- Wip ([5352f7a](https://github.com/stacksjs/reverse-proxy/commit/5352f7a)) +- Wip ([1b99dd0](https://github.com/stacksjs/reverse-proxy/commit/1b99dd0)) + +### ❤️ Contributors + +- Chris + diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..1aef080 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,21 @@ +# MIT License + +Copyright (c) 2024 Open Web Foundation + +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 new file mode 100644 index 0000000..a4b7c26 --- /dev/null +++ b/README.md @@ -0,0 +1,127 @@ +

Social Card of this repo

+ +[![npm version][npm-version-src]][npm-version-href] +[![GitHub Actions][github-actions-src]][github-actions-href] +[![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg)](http://commitizen.github.io/cz-cli/) + + + +# A Faster Developer Experience + +> ... + +## Features + +- Fast .d.ts generation via isolatedDeclaration +- Configurability +- Ships with binary +- Bun-powered + +## Install + +```bash +bun install -d dts-generation +``` + + + +## Get Started + +There are two ways of using this dts generation tool: _as a library or as a CLI._ + +### Library + +Given the npm package is installed: + +```js +import { generate } from 'dts-generation' + +generate() +``` + +### CLI + +```bash +dts-generation ... +dts-generation --help +dts-generation --version +``` + +## Configuration + +The Reverse Proxy can be configured using a `dts.config.ts` _(or `dts.config.js`)_ file and it will be automatically loaded when running the `dts-generation` command. + +```ts +// dts.config.ts (or dts.config.js) +export default {} +``` + +_Then run:_ + +```bash +dts-generation generate +``` + +To learn more, head over to the [documentation](https://dts-generation.sh/). + +## Testing + +```bash +bun test +``` + +## Changelog + +Please see our [releases](https://github.com/stacksjs/stacks/releases) page for more information on what has changed recently. + +## Contributing + +Please review the [Contributing Guide](https://github.com/stacksjs/contributing) for details. + +## Community + +For help, discussion about best practices, or any other conversation that would benefit from being searchable: + +[Discussions on GitHub](https://github.com/stacksjs/stacks/discussions) + +For casual chit-chat with others using this package: + +[Join the Stacks Discord Server](https://discord.gg/stacksjs) + +## Postcardware + +Two things are true: Stacks OSS will always stay open-source, and we do love to receive postcards from wherever Stacks is used! 🌍 _We also publish them on our website. And thank you, Spatie_ + +Our address: Stacks.js, 12665 Village Ln #2306, Playa Vista, CA 90094 + +## Sponsors + +We would like to extend our thanks to the following sponsors for funding Stacks development. If you are interested in becoming a sponsor, please reach out to us. + +- [JetBrains](https://www.jetbrains.com/) +- [The Solana Foundation](https://solana.com/) + +## Credits + +- [Chris Breuer](https://github.com/chrisbbreuer) +- [All Contributors](../../contributors) + +## License + +The MIT License (MIT). Please see [LICENSE](https://github.com/stacksjs/stacks/tree/main/LICENSE.md) for more information. + +Made with 💙 + + +[npm-version-src]: https://img.shields.io/npm/v/@stacksjs/reverse-proxy?style=flat-square +[npm-version-href]: https://npmjs.com/package/@stacksjs/reverse-proxy +[github-actions-src]: https://img.shields.io/github/actions/workflow/status/stacksjs/reverse-proxy/ci.yml?style=flat-square&branch=main +[github-actions-href]: https://github.com/stacksjs/reverse-proxy/actions?query=workflow%3Aci + + diff --git a/bin/cli.ts b/bin/cli.ts new file mode 100644 index 0000000..99f631c --- /dev/null +++ b/bin/cli.ts @@ -0,0 +1,29 @@ +import { log, CAC } from '@stacksjs/cli' +import { version } from '../package.json' +import { config } from '../src/config' +import type { DtsGenerationOption } from '../src/types' + +// import { generate } from '../src/generate' + +const cli = new CAC('dts') + +cli + .command('generate', 'Start the Reverse Proxy Server') + .option('--from ', 'The URL to proxy from') + .option('--to ', 'The URL to proxy to') + .option('--keyPath ', 'Absolute path to the SSL key') + .option('--certPath ', 'Absolute path to the SSL certificate') + .option('--verbose', 'Enable verbose logging', { default: false }) + .example('') + .action(async (options?: DtsGenerationOption) => { + // + }) + +cli.command('version', 'Show the version of the Reverse Proxy CLI').action(() => { + // eslint-disable-next-line no-console + console.log(version) +}) + +cli.version(version) +cli.help() +cli.parse() diff --git a/build.ts b/build.ts new file mode 100644 index 0000000..b6c669a --- /dev/null +++ b/build.ts @@ -0,0 +1,23 @@ +import { log } from '@stacksjs/cli' + +// import { $ } from 'bun' + +log.info('Building...') + +await Bun.build({ + entrypoints: ['./src/index.ts', './bin/cli.ts'], + outdir: './dist', + format: 'esm', + target: 'bun', +}) + +// tigger dts generation here + +// await $`cp ./dist/src/index.js ./dist/index.js` +// await $`rm -rf ./dist/src` +// await $`cp ./dist/bin/cli.js ./dist/cli.js` +// await $`rm -rf ./dist/bin` +// await $`cp ./bin/cli.d.ts ./dist/cli.d.ts` +// await $`rm ./bin/cli.d.ts` + +log.success('Built') diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..7140ca69305438022b2fe292743c360d50e224dd GIT binary patch literal 85837 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 +import { useData } from 'vitepress' + +const { theme, page, frontmatter } = useData() + + +## Results + +### Theme Data +
{{ theme }}
+ +### Page Data +
{{ page }}
+ +### Page Frontmatter +
{{ frontmatter }}
+``` + + + +## Results + +### Theme Data +
{{ theme }}
+ +### Page Data +
{{ page }}
+ +### Page Frontmatter +
{{ frontmatter }}
+ +## More + +Check out the documentation for the [full list of runtime APIs](https://vitepress.dev/reference/runtime-api#usedata). diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..c7a7353 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,24 @@ +--- +# https://vitepress.dev/reference/default-theme-home-page +layout: home + +hero: + name: "Reverse Proxy" + text: "A better developer environment." + tagline: My great project tagline + actions: + - theme: brand + text: Markdown Examples + link: /markdown-examples + - theme: alt + text: API Examples + link: /api-examples + +features: + - title: Feature A + details: Lorem ipsum dolor sit amet, consectetur adipiscing elit + - title: Feature B + details: Lorem ipsum dolor sit amet, consectetur adipiscing elit + - title: Feature C + details: Lorem ipsum dolor sit amet, consectetur adipiscing elit +--- diff --git a/docs/markdown-examples.md b/docs/markdown-examples.md new file mode 100644 index 0000000..f9258a5 --- /dev/null +++ b/docs/markdown-examples.md @@ -0,0 +1,85 @@ +# Markdown Extension Examples + +This page demonstrates some of the built-in markdown extensions provided by VitePress. + +## Syntax Highlighting + +VitePress provides Syntax Highlighting powered by [Shiki](https://github.com/shikijs/shiki), with additional features like line-highlighting: + +**Input** + +````md +```js{4} +export default { + data () { + return { + msg: 'Highlighted!' + } + } +} +``` +```` + +**Output** + +```js{4} +export default { + data () { + return { + msg: 'Highlighted!' + } + } +} +``` + +## Custom Containers + +**Input** + +```md +::: info +This is an info box. +::: + +::: tip +This is a tip. +::: + +::: warning +This is a warning. +::: + +::: danger +This is a dangerous warning. +::: + +::: details +This is a details block. +::: +``` + +**Output** + +::: info +This is an info box. +::: + +::: tip +This is a tip. +::: + +::: warning +This is a warning. +::: + +::: danger +This is a dangerous warning. +::: + +::: details +This is a details block. +::: + +## More + +Check out the documentation for the [full list of markdown extensions](https://vitepress.dev/guide/markdown). diff --git a/dts b/dts new file mode 100755 index 0000000..c3d8286 --- /dev/null +++ b/dts @@ -0,0 +1,2 @@ +#!/usr/bin/env bun +import('./bin/cli') diff --git a/dts.config.ts b/dts.config.ts new file mode 100644 index 0000000..efba7fa --- /dev/null +++ b/dts.config.ts @@ -0,0 +1,2 @@ +export default { +} diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..44b7d05 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,12 @@ +import stacks from '@stacksjs/eslint-config' + +export default stacks({ + stylistic: { + indent: 2, + quotes: 'single', + }, + + typescript: true, + jsonc: true, + yaml: true, +}) diff --git a/package.json b/package.json new file mode 100644 index 0000000..09aa347 --- /dev/null +++ b/package.json @@ -0,0 +1,79 @@ +{ + "name": "dts-generation", + "type": "module", + "version": "0.1.0", + "description": "A modern, fast .d.ts generation tool, powered by Bun.", + "author": "Chris Breuer ", + "license": "MIT", + "homepage": "https://github.com/stacksjs/dts-generation#readme", + "repository": { + "type": "git", + "url": "git+https://github.com/stacksjs/dts-generation.git" + }, + "bugs": { + "url": "https://github.com/stacksjs/dts-generation/issues" + }, + "keywords": [ + "dts", + "generation", + "development", + "environment", + "bun", + "stacks", + "typescript", + "javascript" + ], + "exports": { + ".": { + "import": "./dist/index.js" + }, + "./*": { + "import": "./dist/*" + } + }, + "module": "./dist/index.js", + "types": "./dist/index.d.ts", + "bin": { + "dts": "./dist/cli.js" + }, + "files": [ + "dist" + ], + "scripts": { + "build": "bun build.ts && bun run compile", + "compile": "bun build ./bin/cli.ts --compile --minify --outfile dist/dts", + "lint": "bunx eslint .", + "lint:fix": "bunx eslint . --fix", + "fresh": "bunx rimraf node_modules/ bun.lock && bun i", + "commit": "git cz", + "changelog": "bunx changelogen --output CHANGELOG.md", + "prepublishOnly": "bun --bun run build", + "release": "bun run changelog && bunx bumpp package.json --all", + "test": "bun test", + "typecheck": "bunx tsc --noEmit", + "docs:dev": "vitepress dev docs", + "docs:build": "vitepress build docs", + "docs:preview": "vitepress preview docs" + }, + "devDependencies": { + "@stacksjs/cli": "^0.65.0", + "@stacksjs/eslint-config": "^3.7.3-stacks-1.11", + "@stacksjs/development": "^0.65.0", + "@stacksjs/storage": "^0.65.0", + "@types/bun": "^1.1.10", + "c12": "^2.0.1", + "vitepress": "^1.4.0" + }, + "simple-git-hooks": { + "pre-commit": "bunx lint-staged", + "commit-msg": "bunx --no -- commitlint --edit $1" + }, + "lint-staged": { + "*.{js,jsx,ts,tsx,vue}": "bunx eslint . --fix" + }, + "config": { + "commitizen": { + "path": "node_modules/cz-git" + } + } +} diff --git a/pkgx.yaml b/pkgx.yaml new file mode 100644 index 0000000..9b325ec --- /dev/null +++ b/pkgx.yaml @@ -0,0 +1,2 @@ +dependencies: + bun.sh: ^1.0.30 diff --git a/scripts/generate-keys.ts b/scripts/generate-keys.ts new file mode 100644 index 0000000..03870cb --- /dev/null +++ b/scripts/generate-keys.ts @@ -0,0 +1,10 @@ +// todo - need to import from tlsx +// import { generateAndSaveCertificates, generateRootCA } from '../src/keys' + +// Generate a root key and certificate (self-signed) +// await generateRootCA() + +// Generate a keypair and create an X.509v3 certificate for the domain +// await generateAndSaveCertificates() + +// await addRootCAToSystemTrust() diff --git a/src/config.ts b/src/config.ts new file mode 100644 index 0000000..e7e5ffa --- /dev/null +++ b/src/config.ts @@ -0,0 +1,8 @@ +import { loadConfig } from 'c12' + +// Get loaded config +const { config } = await loadConfig({ + name: "dts", +}) + +export { config } diff --git a/src/generate.ts b/src/generate.ts new file mode 100644 index 0000000..52ca3fd --- /dev/null +++ b/src/generate.ts @@ -0,0 +1,69 @@ +import { join, extname } from 'node:path'; +import { readdir } from 'node:fs/promises'; +import type { DtsGenerationOption } from './types'; + +async function getAllTypeScriptFiles(dir: string): Promise { + const entries = await readdir(dir, { withFileTypes: true }); + const files = await Promise.all(entries.map(entry => { + const res = join(dir, entry.name); + return entry.isDirectory() ? getAllTypeScriptFiles(res) : res; + })); + return Array.prototype.concat(...files).filter(file => extname(file) === '.ts'); +} + +async function extractTypeDeclarations(filePath: string): Promise { + const file = Bun.file(filePath); + const fileContent = await file.text(); + const sourceFile = ts.createSourceFile(filePath, fileContent, ts.ScriptTarget.Latest, true); + let typeDeclarations = ''; + + function visit(node: ts.Node) { + if (ts.isTypeAliasDeclaration(node) || ts.isInterfaceDeclaration(node)) { + typeDeclarations += node.getFullText(sourceFile) + '\n'; + } + ts.forEachChild(node, visit); + } + + visit(sourceFile); + return typeDeclarations; +} + +export async function generateBundledDts(options: DtsGenerationOption = {}): Promise { + try { + const cwd = options.cwd || '.'; + const root = options.root || cwd; + const output = options.outdir || join(cwd, 'types.d.ts'); + + const tsFiles = await getAllTypeScriptFiles(root); + let bundledDeclarations = ''; + + for (const file of tsFiles) { + bundledDeclarations += await extractTypeDeclarations(file); + } + + await Bun.write(output, bundledDeclarations); + console.log(`Bundled .d.ts file generated at ${output}`); + } catch (error) { + console.error('Error generating bundled .d.ts file:', error); + } +} + +export async function isIsolatedDeclarations(options: DtsGenerationOption = {}): Promise { + try { + const tsconfigPath = options.tsconfigPath || join(options.cwd || '.', 'tsconfig.json'); + const tsconfigFile = Bun.file(tsconfigPath); + + if (!(await tsconfigFile.exists())) { + console.error(`Error: ${tsconfigPath} does not exist.`); + return false; + } + + const tsconfigContent = await tsconfigFile.text(); + const tsconfig = JSON.parse(tsconfigContent); + + return tsconfig.compilerOptions?.isolatedDeclarations === true; + } catch (error) { + console.error('Error reading tsconfig.json:', error); + return false; + } +} diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..6d3e6fb --- /dev/null +++ b/src/index.ts @@ -0,0 +1,3 @@ +export { config } from './config' +export * from './generate' +export * from './types' diff --git a/src/types.ts b/src/types.ts new file mode 100644 index 0000000..2ccbc38 --- /dev/null +++ b/src/types.ts @@ -0,0 +1,8 @@ +export interface DtsGenerationOption { + cwd?: string + tsconfigPath?: string + root?: string + outdir?: string +} + +export type DtsGenerationOptions = DtsGenerationOption | DtsGenerationOption[] diff --git a/test/dts.test.ts b/test/dts.test.ts new file mode 100644 index 0000000..1877a42 --- /dev/null +++ b/test/dts.test.ts @@ -0,0 +1,11 @@ +import { afterEach, beforeAll, beforeEach, describe, expect, it, mock } from 'bun:test' +import { generate } from '../src/generate' +import type { DtsGenerationOption } from '../src/types' + +describe('@stacksjs/reverse-proxy', () => { + beforeAll(() => { + process.env.APP_ENV = 'test' + }) + + // describe... +}) diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..853ce1d --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "target": "esnext", + "lib": [ + "esnext" + ], + "moduleDetection": "force", + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "allowImportingTsExtensions": true, + "strict": true, + "strictNullChecks": true, + "noFallthroughCasesInSwitch": true, + "declaration": true, + "isolatedDeclarations": true, + "noEmit": true, + "outDir": "./dist", + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "verbatimModuleSyntax": true, + "skipDefaultLibCheck": true, + "skipLibCheck": true + } +}