From f0d04fc87c6e5e9fdb18876c8db1d9716695fd5f Mon Sep 17 00:00:00 2001 From: Luka <47296785+lukadev-0@users.noreply.github.com> Date: Tue, 29 Oct 2024 20:06:00 +0100 Subject: [PATCH] feat: website * feat(website): init * feat(website): home page * feat(website): make page more responsive * feat(website): layout * feat(website): package page * feat(website): update PackageResponse type * feat(website): display package readme * feat(website): use new /latest/any endpoint * feat(website): make website lg instead of xl * fix(website): use NodeJS.Timeout * feat(website): versions page * feat(website): add latest version indicator * feat(website): add target select menu * feat(website): indicate current version * feat(website): add package metadata * feat(website): add hamburger * fix(website): header responsiveness * feat(website): better package layout * feat(website): display authors on package page * fix(website): only display relative dates on client * feat(docs): init docs site * chore(website): read .env from project root * feat(website): add gemoji support * fix(website): overflow on code blocks * chore(docs): read .env from project root * feat(docs): config changes * fix: authors not displaying * fix(website): use fallback language * refactor(website): use predefined target names * refactor(website): change Github to GitHub * chore: remove starter readmes * chore(docs): remove .vscode * chore(docs): remove unused assets folder * fix(website): fix missing datetime attribute * feat(website): switch to universal loaders * feat(docs): search * fix(website): type errors * fix(website): use provided fetch instead of global * feat(website): remove isr * chore(website): add .env.example * feat(website): add icons and metadata * chore(website): add debug logs * chore(website): remove shiki temporarily * fix(website): rehype shiki lazy load * fix(website): use custom highlighter * fix(website): move highlighter creation into load * docs: write docs * feat(website): add og image * feat(website): fix accessibility issues * fix(website): no target selector on mobile * fix(website): close dialog on navigation * fix(website): logo is not a link in hamburger menu * feat(website): dependencies tab * fix(website): use correct dependency target * fix(website): navigation links * feat(website): support wally dependencies * feat(website): metadata + case insensitivity * fix(website): manually implement groupBy `Object.groupBy` isn't supported on Vercel right now. * fix(website): code block with an unknown language * docs(policies): explain & cover more cases * docs: update cli reference * docs: add self hosting registries guide * docs: update README * docs: add more configs to registry guide * fix: favicon and logomark * feat(website): package documentation * fix(website): missing $derive for toc * docs: change SENTRY_URL to SENTRY_DSN * chore(website): remove unused file * chore: remove favicon.zip * fix(website): strip wally# prefix * chore: add changelog entry --------- Co-authored-by: daimond113 <72147841+daimond113@users.noreply.github.com> --- .env.example | 2 + CHANGELOG.md | 3 + README.md | 34 +- assets/logomark.svg | 3 + docs/.gitignore | 22 + docs/.prettierrc | 14 + docs/astro.config.mjs | 110 +++++ docs/bun.lockb | Bin 0 -> 293514 bytes docs/package.json | 30 ++ docs/public/apple-touch-icon.png | Bin 0 -> 3980 bytes docs/public/favicon-48x48.png | Bin 0 -> 1308 bytes docs/public/favicon.ico | Bin 0 -> 15086 bytes docs/public/favicon.svg | 3 + docs/public/site.webmanifest | 21 + docs/public/web-app-manifest-192x192.png | Bin 0 -> 4242 bytes docs/public/web-app-manifest-512x512.png | Bin 0 -> 15581 bytes docs/src/components/SiteTitle.astro | 30 ++ docs/src/content/config.ts | 6 + .../content/docs/guides/binary-packages.mdx | 41 ++ docs/src/content/docs/guides/dependencies.mdx | 170 ++++++++ docs/src/content/docs/guides/overrides.mdx | 80 ++++ docs/src/content/docs/guides/publishing.mdx | 94 ++++ docs/src/content/docs/guides/roblox.mdx | 36 ++ .../docs/guides/self-hosting-registries.mdx | 204 +++++++++ docs/src/content/docs/guides/workspaces.mdx | 100 +++++ docs/src/content/docs/index.mdx | 32 ++ docs/src/content/docs/installation.mdx | 89 ++++ docs/src/content/docs/quickstart.mdx | 142 ++++++ docs/src/content/docs/reference/cli.mdx | 188 ++++++++ docs/src/content/docs/reference/manifest.mdx | 405 ++++++++++++++++++ docs/src/content/docs/registry/policies.md | 96 +++++ docs/src/env.d.ts | 2 + docs/src/tailwind.css | 11 + docs/tailwind.config.ts | 36 ++ docs/tsconfig.json | 3 + registry/src/endpoints/publish_version.rs | 2 +- website/.gitignore | 21 + website/.npmrc | 1 + website/.prettierignore | 4 + website/.prettierrc | 14 + website/bun.lockb | Bin 0 -> 227536 bytes website/eslint.config.js | 33 ++ website/package.json | 70 +++ .../patches/@shikijs%2Frehype@1.22.0.patch | 26 ++ website/postcss.config.js | 6 + website/src/app.css | 92 ++++ website/src/app.d.ts | 13 + website/src/app.html | 12 + website/src/lib/components/GitHub.svelte | 11 + website/src/lib/components/Logo.svelte | 23 + website/src/lib/components/Logomark.svelte | 9 + website/src/lib/components/Select.svelte | 74 ++++ website/src/lib/markdown.ts | 116 +++++ website/src/lib/registry-api.ts | 106 +++++ website/src/routes/(app)/+error.svelte | 8 + website/src/routes/(app)/+layout.svelte | 14 + website/src/routes/(app)/+page.svelte | 56 +++ website/src/routes/(app)/+page.ts | 10 + website/src/routes/(app)/Footer.svelte | 17 + website/src/routes/(app)/Hamburger.svelte | 77 ++++ website/src/routes/(app)/Header.svelte | 81 ++++ website/src/routes/(app)/Hero.svelte | 90 ++++ website/src/routes/(app)/Search.svelte | 18 + website/src/routes/(app)/[...404]/+page.ts | 6 + .../packages/[scope]/[name]/+layout.svelte | 91 ++++ .../(app)/packages/[scope]/[name]/+layout.ts | 46 ++ .../(app)/packages/[scope]/[name]/Tab.svelte | 33 ++ .../[scope]/[name]/TargetSelector.svelte | 52 +++ .../[[version]]/[[target]]/(docs)/+layout.ts | 67 +++ .../[[target]]/(docs)/+layout@.svelte | 169 ++++++++ .../[[target]]/(docs)/Hamburger.svelte | 101 +++++ .../[[target]]/(docs)/MobileNavbar.svelte | 48 +++ .../[[target]]/(docs)/Sidebar.svelte | 36 ++ .../[[target]]/(docs)/SidebarItem.svelte | 45 ++ .../[[version]]/[[target]]/(docs)/Tab.svelte | 26 ++ .../[[target]]/(docs)/TargetSelector.svelte | 46 ++ .../[[version]]/[[target]]/(docs)/Toc.svelte | 20 + .../[[target]]/(docs)/TocList.svelte | 45 ++ .../[[target]]/(docs)/TocObserver.svelte | 80 ++++ .../[[target]]/(docs)/VersionSelector.svelte | 48 +++ .../[[target]]/(docs)/docs/+error.svelte | 8 + .../[[target]]/(docs)/docs/+layout.ts | 33 ++ .../[[target]]/(docs)/docs/+page.ts | 6 + .../(docs)/docs/[...doc]/+page.svelte | 8 + .../[[target]]/(docs)/docs/[...doc]/+page.ts | 62 +++ .../[[target]]/(docs)/reference/+layout.ts | 29 ++ .../[[target]]/(docs)/reference/+page.svelte | 10 + .../[[version]]/[[target]]/+layout.svelte | 136 ++++++ .../[[version]]/[[target]]/+page.svelte | 8 + .../[name]/[[version]]/[[target]]/+page.ts | 51 +++ .../[[version]]/[[target]]/Command.svelte | 36 ++ .../[[target]]/dependencies/+page.svelte | 93 ++++ .../[[target]]/dependencies/+page.ts | 12 + .../[scope]/[name]/versions/+page.svelte | 46 ++ .../packages/[scope]/[name]/versions/+page.ts | 34 ++ .../src/routes/(app)/search-state.svelte.ts | 10 + website/src/routes/(app)/search/+page.svelte | 169 ++++++++ website/src/routes/(app)/search/+page.ts | 31 ++ website/src/routes/+error.svelte | 8 + website/src/routes/+layout.svelte | 78 ++++ website/static/apple-touch-icon.png | Bin 0 -> 3980 bytes website/static/favicon-48x48.png | Bin 0 -> 1308 bytes website/static/favicon.ico | Bin 0 -> 15086 bytes website/static/favicon.svg | 3 + website/static/site.webmanifest | 21 + website/static/web-app-manifest-192x192.png | Bin 0 -> 4242 bytes website/static/web-app-manifest-512x512.png | Bin 0 -> 15581 bytes website/svelte.config.js | 19 + website/tailwind.config.ts | 78 ++++ website/tsconfig.json | 19 + website/vite.config.ts | 6 + 111 files changed, 4969 insertions(+), 15 deletions(-) create mode 100644 .env.example create mode 100644 assets/logomark.svg create mode 100644 docs/.gitignore create mode 100644 docs/.prettierrc create mode 100644 docs/astro.config.mjs create mode 100755 docs/bun.lockb create mode 100644 docs/package.json create mode 100644 docs/public/apple-touch-icon.png create mode 100644 docs/public/favicon-48x48.png create mode 100644 docs/public/favicon.ico create mode 100644 docs/public/favicon.svg create mode 100644 docs/public/site.webmanifest create mode 100644 docs/public/web-app-manifest-192x192.png create mode 100644 docs/public/web-app-manifest-512x512.png create mode 100644 docs/src/components/SiteTitle.astro create mode 100644 docs/src/content/config.ts create mode 100644 docs/src/content/docs/guides/binary-packages.mdx create mode 100644 docs/src/content/docs/guides/dependencies.mdx create mode 100644 docs/src/content/docs/guides/overrides.mdx create mode 100644 docs/src/content/docs/guides/publishing.mdx create mode 100644 docs/src/content/docs/guides/roblox.mdx create mode 100644 docs/src/content/docs/guides/self-hosting-registries.mdx create mode 100644 docs/src/content/docs/guides/workspaces.mdx create mode 100644 docs/src/content/docs/index.mdx create mode 100644 docs/src/content/docs/installation.mdx create mode 100644 docs/src/content/docs/quickstart.mdx create mode 100644 docs/src/content/docs/reference/cli.mdx create mode 100644 docs/src/content/docs/reference/manifest.mdx create mode 100644 docs/src/content/docs/registry/policies.md create mode 100644 docs/src/env.d.ts create mode 100644 docs/src/tailwind.css create mode 100644 docs/tailwind.config.ts create mode 100644 docs/tsconfig.json create mode 100644 website/.gitignore create mode 100644 website/.npmrc create mode 100644 website/.prettierignore create mode 100644 website/.prettierrc create mode 100755 website/bun.lockb create mode 100644 website/eslint.config.js create mode 100644 website/package.json create mode 100644 website/patches/@shikijs%2Frehype@1.22.0.patch create mode 100644 website/postcss.config.js create mode 100644 website/src/app.css create mode 100644 website/src/app.d.ts create mode 100644 website/src/app.html create mode 100644 website/src/lib/components/GitHub.svelte create mode 100644 website/src/lib/components/Logo.svelte create mode 100644 website/src/lib/components/Logomark.svelte create mode 100644 website/src/lib/components/Select.svelte create mode 100644 website/src/lib/markdown.ts create mode 100644 website/src/lib/registry-api.ts create mode 100644 website/src/routes/(app)/+error.svelte create mode 100644 website/src/routes/(app)/+layout.svelte create mode 100644 website/src/routes/(app)/+page.svelte create mode 100644 website/src/routes/(app)/+page.ts create mode 100644 website/src/routes/(app)/Footer.svelte create mode 100644 website/src/routes/(app)/Hamburger.svelte create mode 100644 website/src/routes/(app)/Header.svelte create mode 100644 website/src/routes/(app)/Hero.svelte create mode 100644 website/src/routes/(app)/Search.svelte create mode 100644 website/src/routes/(app)/[...404]/+page.ts create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/+layout.svelte create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/+layout.ts create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/Tab.svelte create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/TargetSelector.svelte create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/[[version]]/[[target]]/(docs)/+layout.ts create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/[[version]]/[[target]]/(docs)/+layout@.svelte create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/[[version]]/[[target]]/(docs)/Hamburger.svelte create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/[[version]]/[[target]]/(docs)/MobileNavbar.svelte create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/[[version]]/[[target]]/(docs)/Sidebar.svelte create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/[[version]]/[[target]]/(docs)/SidebarItem.svelte create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/[[version]]/[[target]]/(docs)/Tab.svelte create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/[[version]]/[[target]]/(docs)/TargetSelector.svelte create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/[[version]]/[[target]]/(docs)/Toc.svelte create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/[[version]]/[[target]]/(docs)/TocList.svelte create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/[[version]]/[[target]]/(docs)/TocObserver.svelte create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/[[version]]/[[target]]/(docs)/VersionSelector.svelte create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/[[version]]/[[target]]/(docs)/docs/+error.svelte create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/[[version]]/[[target]]/(docs)/docs/+layout.ts create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/[[version]]/[[target]]/(docs)/docs/+page.ts create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/[[version]]/[[target]]/(docs)/docs/[...doc]/+page.svelte create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/[[version]]/[[target]]/(docs)/docs/[...doc]/+page.ts create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/[[version]]/[[target]]/(docs)/reference/+layout.ts create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/[[version]]/[[target]]/(docs)/reference/+page.svelte create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/[[version]]/[[target]]/+layout.svelte create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/[[version]]/[[target]]/+page.svelte create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/[[version]]/[[target]]/+page.ts create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/[[version]]/[[target]]/Command.svelte create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/[[version]]/[[target]]/dependencies/+page.svelte create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/[[version]]/[[target]]/dependencies/+page.ts create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/versions/+page.svelte create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/versions/+page.ts create mode 100644 website/src/routes/(app)/search-state.svelte.ts create mode 100644 website/src/routes/(app)/search/+page.svelte create mode 100644 website/src/routes/(app)/search/+page.ts create mode 100644 website/src/routes/+error.svelte create mode 100644 website/src/routes/+layout.svelte create mode 100644 website/static/apple-touch-icon.png create mode 100644 website/static/favicon-48x48.png create mode 100644 website/static/favicon.ico create mode 100644 website/static/favicon.svg create mode 100644 website/static/site.webmanifest create mode 100644 website/static/web-app-manifest-192x192.png create mode 100644 website/static/web-app-manifest-512x512.png create mode 100644 website/svelte.config.js create mode 100644 website/tailwind.config.ts create mode 100644 website/tsconfig.json create mode 100644 website/vite.config.ts diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..b17436e --- /dev/null +++ b/.env.example @@ -0,0 +1,2 @@ +PUBLIC_REGISTRY_URL= # url of the registry API, this must have a trailing slash and include the version + # example: https://registry.pesde.daimond113.com/v0/ \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 4430b78..92c09d0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +### Added +- New website by @lukadev-0 + ### Fixed - Use updated aliases when reusing lockfile dependencies by @daimond113 - Listen for device flow completion without requiring pressing enter by @daimond113 diff --git a/README.md b/README.md index 5c9dddf..2fa94d5 100644 --- a/README.md +++ b/README.md @@ -6,21 +6,23 @@
-pesde is a package manager for the Luau programming language, supporting multiple runtimes including Roblox and Lune. -pesde has its own registry, however it can also use Wally, and Git repositories as package sources. -It has been designed with multiple targets in mind, namely Roblox, Lune, and Luau. +pesde is a package manager for the Luau programming language, supporting +multiple runtimes including Roblox and Lune. pesde has its own registry, however +it can also use Wally, and Git repositories as package sources. It has been +designed with multiple targets in mind, namely Roblox, Lune, and Luau. ## Installation -pesde can be installed from GitHub Releases. You can find the latest -release [here](https://github.com/daimond113/pesde/releases). Once you have downloaded the binary, -run the following command to install it: +pesde can be installed from GitHub Releases. You can find the latest release +[here](https://github.com/daimond113/pesde/releases). Once you have downloaded +the binary, run the following command to install it: ```sh pesde self-install ``` -Note that pesde manages its own versions, so you can update it by running the following command: +Note that pesde manages its own versions, so you can update it by running the +following command: ```sh pesde self-upgrade @@ -28,19 +30,23 @@ pesde self-upgrade ## Documentation -For more information about its usage, you can check the [documentation](https://docs.pesde.daimond113.com). - -*Currently waiting on [this PR](https://github.com/daimond113/pesde/pull/3) to be merged.* +For more information about its usage, you can check the +[documentation](https://docs.pesde.daimond113.com). ## Registry -The main pesde registry is hosted on [fly.io](https://fly.io). You can find it at https://registry.pesde.daimond113.com. +The main pesde registry is hosted on [fly.io](https://fly.io). You can find it +at https://registry.pesde.daimond113.com. ### Self-hosting -The registry tries to require no modifications to be self-hosted. Please refer to the [example .env file](https://github.com/daimond113/pesde/blob/0.5/registry/.env.example) for more information. +The registry tries to require no modifications to be self-hosted. Please refer +to the +[documentation](http://docs.pesde.daimond113.com/guides/self-hosting-registries) +for more information. ## Previous art -pesde is heavily inspired by [npm](https://www.npmjs.com/), [pnpm](https://pnpm.io/), [Wally](https://wally.run), -and [Cargo](https://doc.rust-lang.org/cargo/). +pesde is heavily inspired by [npm](https://www.npmjs.com/), +[pnpm](https://pnpm.io/), [Wally](https://wally.run), and +[Cargo](https://doc.rust-lang.org/cargo/). diff --git a/assets/logomark.svg b/assets/logomark.svg new file mode 100644 index 0000000..4772b9b --- /dev/null +++ b/assets/logomark.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 0000000..d10a8bf --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1,22 @@ +# build output +dist/ +# generated types +.astro/ +.vercel/ + +# dependencies +node_modules/ + +# logs +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + + +# environment variables +.env +.env.production + +# macOS-specific files +.DS_Store diff --git a/docs/.prettierrc b/docs/.prettierrc new file mode 100644 index 0000000..20791be --- /dev/null +++ b/docs/.prettierrc @@ -0,0 +1,14 @@ +{ + "useTabs": true, + "printWidth": 100, + "semi": false, + "plugins": ["prettier-plugin-astro", "prettier-plugin-tailwindcss"], + "overrides": [ + { + "files": "*.astro", + "options": { + "parser": "astro" + } + } + ] +} diff --git a/docs/astro.config.mjs b/docs/astro.config.mjs new file mode 100644 index 0000000..41d2334 --- /dev/null +++ b/docs/astro.config.mjs @@ -0,0 +1,110 @@ +import starlight from "@astrojs/starlight" +import tailwind from "@astrojs/tailwind" +import { defineConfig } from "astro/config" + +import vercel from "@astrojs/vercel/serverless" + +// https://astro.build/config +export default defineConfig({ + integrations: [ + starlight({ + title: "pesde docs", + social: { + github: "https://github.com/daimond113/pesde", + }, + sidebar: [ + { + label: "Intro", + items: [{ slug: "" }, { slug: "installation" }, { slug: "quickstart" }], + }, + { + label: "Guides", + autogenerate: { directory: "guides" }, + }, + { + label: "Reference", + autogenerate: { directory: "reference" }, + }, + { + label: "Registry", + autogenerate: { directory: "registry" }, + }, + ], + components: { + SiteTitle: "./src/components/SiteTitle.astro", + }, + customCss: ["./src/tailwind.css", "@fontsource-variable/nunito-sans"], + favicon: "/favicon.ico", + head: [ + { + tag: "meta", + attrs: { + name: "theme-color", + content: "#F19D1E", + }, + }, + { + tag: "meta", + attrs: { + property: "og:image", + content: "/favicon-48x48.png", + }, + }, + { + tag: "meta", + attrs: { + name: "twitter:card", + content: "summary", + }, + }, + { + tag: "link", + attrs: { + rel: "icon", + type: "image/png", + href: "/favicon-48x48.png", + sizes: "48x48", + }, + }, + { + tag: "link", + attrs: { + rel: "icon", + type: "image/svg+xml", + href: "/favicon.svg", + }, + }, + { + tag: "link", + attrs: { + rel: "apple-touch-icon", + sizes: "180x180", + href: "/apple-touch-icon.png", + }, + }, + { + tag: "meta", + attrs: { + name: "apple-mobile-web-app-title", + content: "pesde docs", + }, + }, + { + tag: "link", + attrs: { + rel: "manifest", + href: "/site.webmanifest", + }, + }, + ], + }), + tailwind({ + applyBaseStyles: false, + }), + ], + vite: { + envDir: "..", + }, + output: "hybrid", + adapter: vercel(), +}) diff --git a/docs/bun.lockb b/docs/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..cd13c414a445c00fd38e002d037741968cc7d182 GIT binary patch literal 293514 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 literal 0 HcmV?d00001 diff --git a/docs/public/favicon.svg b/docs/public/favicon.svg new file mode 100644 index 0000000..4772b9b --- /dev/null +++ b/docs/public/favicon.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/docs/public/site.webmanifest b/docs/public/site.webmanifest new file mode 100644 index 0000000..4f0f430 --- /dev/null +++ b/docs/public/site.webmanifest @@ -0,0 +1,21 @@ +{ + "name": "pesde", + "short_name": "pesde", + "icons": [ + { + "src": "/web-app-manifest-192x192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "/web-app-manifest-512x512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ], + "theme_color": "#f19d1e", + "background_color": "#0a0704", + "display": "standalone" +} \ No newline at end of file diff --git a/docs/public/web-app-manifest-192x192.png b/docs/public/web-app-manifest-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..e8fc90345ae0d87ad7e39ec80a31410e50fdfb24 GIT binary patch literal 4242 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 literal 0 HcmV?d00001 diff --git a/docs/public/web-app-manifest-512x512.png b/docs/public/web-app-manifest-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..f817b7abc14315018eb3318bec515fc1975f4e50 GIT binary patch literal 15581 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 literal 0 HcmV?d00001 diff --git a/docs/src/components/SiteTitle.astro b/docs/src/components/SiteTitle.astro new file mode 100644 index 0000000..c3da7d5 --- /dev/null +++ b/docs/src/components/SiteTitle.astro @@ -0,0 +1,30 @@ + diff --git a/docs/src/content/config.ts b/docs/src/content/config.ts new file mode 100644 index 0000000..45f60b0 --- /dev/null +++ b/docs/src/content/config.ts @@ -0,0 +1,6 @@ +import { defineCollection } from 'astro:content'; +import { docsSchema } from '@astrojs/starlight/schema'; + +export const collections = { + docs: defineCollection({ schema: docsSchema() }), +}; diff --git a/docs/src/content/docs/guides/binary-packages.mdx b/docs/src/content/docs/guides/binary-packages.mdx new file mode 100644 index 0000000..250d46e --- /dev/null +++ b/docs/src/content/docs/guides/binary-packages.mdx @@ -0,0 +1,41 @@ +--- +title: Using Binary Packages +description: Learn how to use binary packages. +--- + +A **binary package** is a package that contains a binary export. + +Binary packages can be run like a normal program. There are several ways to use +binary packages with pesde. + +## Using `pesde x` + +The `pesde x` command can be used to run a one-off binary package. This is +useful for running a binary package without installing it or outside of a pesde +project. + +```sh +pesde x pesde/hello +# Hello, pesde! (pesde/hello@1.0.0, lune) +``` + +## Installing a binary package + +Binary packages can be installed using the `pesde add` and `pesde install` +commands. + +This requires a `pesde.toml` file to be present in the current directory, and +will add the binary package to the `dependencies` section of the file. + +```sh +pesde add pesde/hello +pesde install +``` + +This will add the binary package to your `PATH`, meaning that it can be run +anywhere! + +```sh +hello +# Hello, pesde! (pesde/hello@1.0.0, lune) +``` \ No newline at end of file diff --git a/docs/src/content/docs/guides/dependencies.mdx b/docs/src/content/docs/guides/dependencies.mdx new file mode 100644 index 0000000..8fafc79 --- /dev/null +++ b/docs/src/content/docs/guides/dependencies.mdx @@ -0,0 +1,170 @@ +--- +title: Specifying Dependencies +description: Learn how to specify dependencies in your pesde project. +--- + +import { Aside, FileTree, LinkCard } from "@astrojs/starlight/components" + +The `[dependencies]` section of your `pesde.toml` file is where you specify the +dependencies of your project. + +pesde supports multiple types of dependencies. + +## pesde Dependencies + +The most common type of dependency are pesde dependencies. These are +dependencies on packages published to a [pesde registry](https://pesde.daimond113.com). + +```toml title="pesde.toml" +[indices] +default = "https://github.com/daimond113/pesde-index" + +[dependencies] +hello = { name = "pesde/hello", version = "^1.0.0" } +``` + +In this example, we're specifying a dependency on the `pesde/hello` package on +the official pesde registry with a version constraint of `^1.0.0`. + +You can also add a dependency by running the following command: + +```sh +pesde add pesde/hello +``` + +## Git Dependencies + +Git dependencies are dependencies on packages hosted on a Git repository. + +```toml title="pesde.toml" +[dependencies] +acme = { repo = "acme/package", rev = "main" } +``` + +In this example, we're specifying a dependency on the package contained within +the `acme/package` GitHub repository at the `main` branch. + +You can also use a URL to specify the Git repository and a specific commit. + +```toml title="pesde.toml" +[dependencies] +acme = { repo = "https://git.acme.local/package.git", rev = "aeff6" } +``` + +You can also specify a path if the package is not at the root of the repository. + + + +- acme/package.git + - pkgs/ + - **foo/** + - pesde.toml + - ... + + + +```toml title="pesde.toml" +[dependencies] +foo = { repo = "acme/package", rev = "main", path = "pkgs/foo" } +``` + +The path specified by the Git dependency must either be a valid pesde package or +a [Wally][wally] package. + +You can also add a Git dependency by running the following command: + +```sh +# From Git URL +pesde add https://git.acme.local/package.git#aeff6 + +# From GitHub repository +pesde add gh#acme/package#main +``` + +## Wally Dependencies + +Wally dependencies are dependencies on packages published to a +[Wally registry][wally]. Wally is a package manager for Roblox and thus Wally +dependencies should only be used in Roblox projects. + +```toml title="pesde.toml" +[wally_indices] +default = "https://github.com/UpliftGames/wally-index" + +[dependencies] +foo = { wally = "acme/package", version = "^1.0.0" } +``` + +In this example, we're specifying a dependency on the `acme/package` package +on the official Wally registry with a version constraint of `^1.0.0`. + + + +You can also add a Wally dependency by running the following command: + +```sh +pesde add wally#acme/package +``` + +[wally]: https://wally.run/ + +## Workspace Dependencies + +Packages within a workspace can depend on each other. For example, if `foo` +and `bar` are both packages in the same workspace, you can add a dependency to +`bar` in the `foo/pesde.toml` file: + +```toml title="foo/pesde.toml" +[dependencies] +bar = { workspace = "acme/bar", version = "^" } +``` + +You can also add a workspace dependency by running the following command: + +```sh +pesde add workspace:acme/bar +``` + + + +## Peer Dependencies + +Peer dependencies are dependencies that are not installed automatically when +used by another package. They need to be installed by the user of the package. + +```toml title="pesde.toml" +[peer_dependencies] +foo = { name = "acme/foo", version = "^1.0.0" } +``` + +You can add a peer dependency by passing `--peer` to the `pesde add` command: + +```sh +pesde add --peer acme/foo +``` + +## Dev Dependencies + +Dev dependencies are dependencies that are only used during development. They +are not installed when the package is used as a dependency. + +```toml title="pesde.toml" +[dev_dependencies] +foo = { name = "acme/foo", version = "^1.0.0" } +``` + +You can add a dev dependency by passing `--dev` to the `pesde add` command: + +```sh +pesde add --dev acme/foo +``` diff --git a/docs/src/content/docs/guides/overrides.mdx b/docs/src/content/docs/guides/overrides.mdx new file mode 100644 index 0000000..fc28c1c --- /dev/null +++ b/docs/src/content/docs/guides/overrides.mdx @@ -0,0 +1,80 @@ +--- +title: Overriding Dependencies +description: Learn how to override and patch dependencies in pesde. +--- + +import { Aside } from '@astrojs/starlight/components' + +pesde has several ways to override or patch dependencies in your project. + +## Dependency Overrides + +Dependency overrides allow you to replace a dependency of a dependency with a +different version or package. + +Let's say you have a project with the following dependencies: + +```toml title="pesde.toml" +[dependencies] +foo = { name = "acme/foo", version = "^1.0.0" } +``` + +But `foo` depends on `bar` 1.0.0, and you want to use `bar` 2.0.0 instead. You +can override the `bar` dependency in your `pesde.toml` file: + +```toml title="pesde.toml" +[dependencies] +foo = { name = "acme/foo", version = "^1.0.0" } + +[overrides] +"foo>bar" = { name = "acme/bar", version = "^2.0.0" } +``` + +Now, when you run `pesde install`, `bar` 2.0.0 will be used instead of 1.0.0. + +You can learn more about the syntax for dependency overrides in the +[reference](/reference/manifest#overrides). + +## Patching Dependencies + +Patching allows you to modify the source code of a dependency. + +To patch a dependency, you can use the `pesde patch` and `pesde patch-commit` +commands. + +Let's say you have the following dependency in your `pesde.toml` file: + +```toml title="pesde.toml" +[target] +environment = "luau" + +[dependencies] +foo = { name = "acme/foo", version = "^1.0.0" } +``` + +And you want to patch `foo` to fix a bug. You can run the following command: + +```sh +pesde patch "acme/foo@1.0.0 luau" + +# done! modify the files in the directory, then run `pesde patch-commit /x/y/z` +# to apply. +# warning: do not commit these changes +# note: the pesde.toml file will be ignored when patching +``` + +pesde will copy the source code of `foo` to a temporary directory, in this case +`/x/y/z`. You can then modify the files in this directory. Once you're done, +run `pesde patch-commit /x/y/z` to apply the changes. + +This will create a patch within the `patches` directory of your project, and +add an entry to `[patches]`. Then, next time you run `pesde install`, the patch +will be applied to the dependency. + + + diff --git a/docs/src/content/docs/guides/publishing.mdx b/docs/src/content/docs/guides/publishing.mdx new file mode 100644 index 0000000..e111f31 --- /dev/null +++ b/docs/src/content/docs/guides/publishing.mdx @@ -0,0 +1,94 @@ +--- +title: Publishing Packages +description: Learn how to publish packages to the pesde registry. +--- + +## Configuration + +Before you can publish a package, you must configure the required fields in your +`pesde.toml` file. + +### `includes` + +The `includes` field is a list of files and directories that should be included +in the package. + +```toml +includes = [ + "pesde.toml", + "README.md", + "LICENSE", + "init.luau", +] +``` + +### `target` + +The `target` field defines the environment where the package can be run. + +Here, you must also specify the `lib` and/or `bin` fields to indicate the path +of the exported library or binary. + +```toml +[target] +environment = "luau" +lib = "init.luau" +``` + +#### Roblox + +`bin` is not supported in Roblox packages. You must also specify a list of +`build_files`. These are the files that should be synced into Roblox. They are +passed to the `roblox_sync_config_generator` script. + +For more information, see [Roblox](/guides/roblox). + +```toml +[target] +environment = "roblox" +lib = "init.luau" +build_files = ["init.luau"] +``` + +## Authentication + +Before you can publish a package, you must authenticate with your GitHub account. + +```sh +pesde auth login +``` + +You will be given a code and prompted to open the GitHub authentication page in +your browser. You must enter the code to authenticate. + +## Publishing + +To publish a package, run the following command: + +```sh +pesde publish +``` + +You will be prompted to confirm the package details before publishing. + +Once a package is published, others will be able to install it. You may not +remove a package once it has been published. You may not publish a package with +an already existing version. + +## Multi-target Packages + +You may publish packages under the same name and version but with different +targets. This allows you to publish a package that can be used in multiple +environments. + +For example, you may publish a package that can be used in both Roblox and +Luau environments by publishing two versions of the package, one for each +environment. + +## Documentation + +The `README.md` file in the root of the package will be displayed on the +[pesde registry website](https://pesde.daimond113.com/). + +If you have a `docs` directory in the root of the package, they will be +hosted by pesde and be accessible on the pesde website. diff --git a/docs/src/content/docs/guides/roblox.mdx b/docs/src/content/docs/guides/roblox.mdx new file mode 100644 index 0000000..b35517e --- /dev/null +++ b/docs/src/content/docs/guides/roblox.mdx @@ -0,0 +1,36 @@ +--- +title: Roblox +description: Using pesde in a Roblox project. +--- + +pesde can be used in Roblox projects, however this requires some extra setup. +Namely, you need to specify a `roblox_sync_config_generator` script in order +to generate the adequate configuration for the sync tool you are using. + +The [`pesde-scripts`](https://github.com/daimond113/pesde-scripts) +repository contains a list of scripts for different sync tools. If the tool +you are using is not supported, you can write your own script and submit a PR +to get it added. + +These scripts are automatically cloned into the `~/.pesde/scripts` folder and +kept up to date when you use pesde. + +## Usage with Rojo + +[Rojo](https://rojo.space/) is a popular tool for syncing files into Roblox +Studio. + +Running `pesde init` will prompt you to select a target, select +`roblox` or `roblox_server` in this case. This will setup the configuration +needed to use pesde in a project using Rojo. + +## Usage with other tools + +If you are using a different sync tool, you should look for it's scripts in the +pesde-scripts repository. If you cannot find them, you can write your own and +optionally submit a PR to help others using the same tool as you get started +quicker. + +Scaffold your project with `pesde init`, select the `roblox` or `roblox_server` +target, and then replace the `.pesde/roblox_sync_config_generator.luau` script +with the one you want to use. diff --git a/docs/src/content/docs/guides/self-hosting-registries.mdx b/docs/src/content/docs/guides/self-hosting-registries.mdx new file mode 100644 index 0000000..dc8c3bf --- /dev/null +++ b/docs/src/content/docs/guides/self-hosting-registries.mdx @@ -0,0 +1,204 @@ +--- +title: Self Hosting Registries +description: Learn how to self host registries for pesde. +--- + +You can self host registries for pesde. This is useful if you want a private +registry or if you a separate registry for other reasons. + +## Making the index repository + +The index is a repository that contains metadata about all the packages in the +registry. + +An index contains a `config.toml` file with configuration options. + +To create an index, create a new repository and add a `config.toml` file with +the following content: + +```toml title="config.toml" +# The URL of the registry API +api = "https://registry.acme.local/" + +# Package download URL (optional) +download = "{API_URL}/v0/packages/{PACKAGE}/{PACKAGE_VERSION}/{PACKAGE_TARGET}" + +# the client ID of the GitHub OAuth app (optional) +github_oauth_client_id = "a1d648966fdfbdcd9295" + +# whether to allow packages with Git dependencies (default: false) +git_allowed = true + +# whether to allow packages which depend on packages from other registries +# (default: false) +other_registries_allowed = true + +# whether to allow packages with Wally dependencies (default: false) +wally_allowed = false + +# the maximum size of the archive in bytes (default: 4MB) +max_archive_size = 4194304 +``` + +- **api**: The URL of the registry API. See below for more information. + +- **download**: The URL to download packages from. This is optional and + defaults to the correct URL for the official pesde registry implementation. + You only need this if you are using a custom registry implementation. + + This string can contain the following placeholders: + + - `{API_URL}`: The API URL (as specified in the `api` field). + - `{PACKAGE}`: The package name. + - `{PACKAGE_VERSION}`: The package version. + - `{PACKAGE_TARGET}`: The package target. + + Defaults to `{API_URL}/v0/packages/{PACKAGE}/{PACKAGE_VERSION}/{PACKAGE_TARGET}`. + +- **github_oauth_client_id**: This is required if you use GitHub OAuth for + authentication. See below for more information. + +- **git_allowed**: Whether to allow packages with Git dependencies. This is + optional and defaults to `false`. + +- **other_registries_allowed**: Whether to allow packages which depend on + packages from other registries. This is optional and defaults to `false`. + +- **wally_allowed**: Whether to allow packages with Wally dependencies. This is + optional and defaults to `false`. + +- **max_archive_size**: The maximum size of the archive in bytes. This is + optional and defaults to `4194304` (4MB). + +You should then push this repository to [GitHub](https://github.com/). + +## Configuring the registry + +The registry is a web server that provides package downloads and the ability to +publish packages. + +The official registry implementation is available in the +[pesde GitHub repository](https://github.com/daimond113/pesde/tree/0.5/registry). + +Configuring the registry is done using environment variables. In order to allow +the registry to access the index repository, you must use a personal access +token of a GitHub account that has access to the index repository. We recommend +using a separate GitHub account for this purpose. + +For instructions on how to create a personal access token, see the +[GitHub documentation](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens). +The access token must have read and write access to the index repository. + +### General configuration + +- **INDEX_REPO_URL**: The URL of the index repository. This is required.\ + Example: `https://github.com/daimond113/pesde-index.git` + +- **GITHUB_USERNAME**: The username of the GitHub account that has access to the + index repository. This is required. + +- **GITHUB_PAT**: The personal access token of the GitHub account specified by + `GITHUB_USERNAME`. This is required. + +- **COMMITTER_GIT_NAME**: The name to use for the committer when updating the + index repository.\ + Example: `pesde index updater` + +- **COMMITTER_GIT_EMAIL**: The email to use for the committer when updating the + index repository.\ + Example: `pesde@localhost` + +- **ADDRESS**: The address to bind the server to.\ + Default: `127.0.0.1` + +- **PORT**: The port to bind the server to.\ + Default: `8080` + +### Authentication configuration + +The registry supports multiple authentication methods, which are documented +below. + +#### General configuration + +- **READ_NEEDS_AUTH**: If set to any value, reading data requires + authentication. If not set, anyone can read from the registry. + This is optional. + +#### Single token authentication + +Allows read and write access to the registry using a single token. + +- **ACCESS_TOKEN**: The token to use for authentication. + +#### Multiple token authentication + +Allows read and write access to the registry using different tokens. + +- **READ_ACCESS_TOKEN**: The token that grants read access. +- **WRITE_ACCESS_TOKEN**: The token that grants write access. + +#### GitHub OAuth authentication + +Allows clients to get read and write access to the registry using GitHub OAuth. +This requires a GitHub OAuth app, instructions to create one can be found +in the [GitHub documentation](https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/creating-an-oauth-app). + +- **GITHUB_CLIENT_SECRET**: The client secret of the GitHub OAuth app. + +#### No authentication + +If none of the above variables are set, **anyone** will be able to read and +write to the registry. + +### Storage configuration + +The registry supports multiple storage backends, which are documented below. + +#### File system storage + +Stores packages on the file system. + +- **FS_STORAGE_ROOT**: The root directory where packages are stored. + +#### S3 storage + +Stores packages on an S3 compatible storage service, such as +[Amazon S3](https://aws.amazon.com/s3/) or +[Cloudflare R2](https://www.cloudflare.com/r2/). + +- **S3_ENDPOINT**: The endpoint of the S3 bucket to store packages in. +- **S3_BUCKET_NAME**: The name of the bucket. +- **S3_REGION**: The region of the bucket. +- **S3_ACCESS_KEY**: The access key to use. +- **S3_SECRET_KEY**: The secret key to use. + +### Sentry configuration + +The registry supports [Sentry](https://sentry.io/) for error tracking. + +- **SENTRY_DSN**: The DSN of the Sentry instance. + +## Running the registry + +First clone the repository and navigate to the repository directory: + +```sh +git clone https://github.com/daimond113/pesde.git +cd pesde +``` + +You can then build the registry using the following command: + +```sh +cargo build --release -p pesde-registry +``` + +This will build the registry. The resulting binary will be located at +`target/release/pesde-registry` or `target/release/pesde-registry.exe`. + +After setting the environment variables, you can run the registry using the +by executing the binary. + +The registry must be exposed at the URL specified in the `api` field of the +index repository configuration. diff --git a/docs/src/content/docs/guides/workspaces.mdx b/docs/src/content/docs/guides/workspaces.mdx new file mode 100644 index 0000000..4b7bb52 --- /dev/null +++ b/docs/src/content/docs/guides/workspaces.mdx @@ -0,0 +1,100 @@ +--- +title: Workspaces +description: Learn how to use workspaces in pesde. +--- + +import { FileTree, LinkCard } from "@astrojs/starlight/components" + +Workspaces allow you to work with multiple pesde projects within a single +repository. Packages within a workspace can depend on each other. And you can +run commands like install or publish on every package in the workspace at once. + +Let's say you have a repository with the following structure: + + + +- pesde.toml +- pkgs/ + - foo/ + - pesde.toml + - ... + - bar/ + - pesde.toml + - ... + + + +Within the root `pesde.toml` file, we can define a workspace: + +```toml title="pesde.toml" +name = "acme/root" +version = "0.0.0" +private = "true" + +workspace_members = ["pkgs/*"] + +[target] +environment = "luau" +``` + +Now, each folder within the `pkgs/` directory is considered a package in the +workspace. You can run commands like `pesde install` or `pesde publish` from +the root of the repository to run them on every package in the workspace. + +## Workspace Dependencies + +Packages within a workspace can depend on each other. For example, if `foo` +depends on `bar`, you can add a dependency to `bar` in the `foo/pesde.toml` file: + +```toml title="pkgs/foo/pesde.toml" +name = "acme/foo" +version = "1.0.0" + +[dependencies] +bar = { workspace = "acme/bar", version = "^" } +``` + +Workspace dependencies are replaced with normal pesde dependencies when +publishing. + +The `version` field can either contain `^`, `*`, `=`, `~`, or a specific version +requirement, such as `^1.0.0`. If you use `^`, `=`, or `~`, it will be replaced +with the version of the package in the workspace when publishing. + +For example, if you had the following: + +```toml title="pesde.toml" +[dependencies] +bar = { workspace = "acme/bar", version = "^" } +qux = { workspace = "acme/qux", version = "=" } +qar = { workspace = "acme/qar", version = "~" } +zoo = { workspace = "acme/zoo", version = "^2.1.0" } +baz = { workspace = "acme/baz", version = "*" } +``` + +If `bar`, `baz`, `qux`, `qar`, and `zoo` are all at version `2.1.5` in the +workspace, the `pesde.toml` file will be transformed into the following when +publishing. + +```toml title="pesde.toml" +[dependencies] +bar = { name = "acme/bar", version = "^2.1.5" } +qux = { name = "acme/qux", version = "=2.1.5" } +qar = { name = "acme/qar", version = "~2.1.5" } +zoo = { name = "acme/zoo", version = "^2.1.0" } +baz = { name = "acme/baz", version = "*" } +``` + +A `target` field can be added to the `dependencies` table to specify a target +environment for the dependency. + +```toml title="pesde.toml" +[dependencies] +bar = { workspace = "acme/bar", version = "^", target = "luau" } +``` + + diff --git a/docs/src/content/docs/index.mdx b/docs/src/content/docs/index.mdx new file mode 100644 index 0000000..45255fc --- /dev/null +++ b/docs/src/content/docs/index.mdx @@ -0,0 +1,32 @@ +--- +title: What is pesde? +description: A package manager for the Luau programming language, supporting multiple runtimes including Roblox and Lune. +--- + +pesde is a package manager for the Luau programming language. + +## Why use pesde? + +When you write code, you often want to use libraries or frameworks that others +have written. Manually downloading and managing these can be cumbersome. + +These libraries or frameworks can be distributed as packages. You can then +easily install and use these packages using pesde. pesde will automatically +download and manage the packages, and their dependencies, for you. + +## Multi-target support + +Luau can run in a lot of different places, such as on [Roblox][roblox], or in +[Lune][lune]. + +pesde is designed to work with all of these runtimes. Packages can publish +multiple versions of themselves, each tailored to a specific runtime. + +[registry]: https://pesde.daimond113.com/ +[roblox]: https://www.roblox.com/ +[lune]: https://lune-org.github.io/docs + +## The pesde registry + +The [pesde registry][registry] is where anyone can publish their packages for +others to use. diff --git a/docs/src/content/docs/installation.mdx b/docs/src/content/docs/installation.mdx new file mode 100644 index 0000000..3cb8f8c --- /dev/null +++ b/docs/src/content/docs/installation.mdx @@ -0,0 +1,89 @@ +--- +title: Installation +description: Install pesde +--- + +import { Aside, Steps, TabItem, Tabs } from "@astrojs/starlight/components" + +## Prerequisites + +pesde requires [Lune](https://lune-org.github.io/docs) to be installed on your +system in order to function properly. + +You can follow the installation instructions in the +[Lune documentation](https://lune-org.github.io/docs/getting-started/1-installation). + +## Installing pesde + + + +1. Go to the [GitHub releases page](https://github.com/daimond113/pesde/releases/latest). + +2. Download the corresponding archive for your operating system. You can choose + whether to use the `.zip` or `.tar.gz` files. + +3. Extract the downloaded archive to a folder on your computer. + +4. Open a terminal and locate the path of the extracted `pesde` binary. + + + + + If you extracted the archive to `C:\Users\User\Downloads`, the path to the + `pesde` binary would be `C:\Users\User\Downloads\pesde.exe`. + + You can then run the `self-install` command: + + ```ps + C:\Users\User\Downloads\pesde.exe self-install + ``` + + pesde should now be installed on your system. You may need to restart your + computer for the changes to take effect. + + + + + If you extracted the archive to `~/Downloads`, the path to the `pesde` + binary would be `~/Downloads/pesde`. + + You must then add execute permissions and run the `self-install` command: + + ```sh + chmod +x ~/Downloads/pesde + ~/Downloads/pesde self-install + ``` + + pesde should now be installed on your system. You will need to update your + shell configuration file to add the pesde binary to your `PATH` + environment variable. + + ```sh title=".zshrc" + export PATH = "$PATH:/home/user/.pesde/bin" + ``` + + You should then be able to run `pesde` after restarting your shell. + + + + + 5. Verify that pesde is installed by running the following command: + + ```sh + pesde -v + ``` + + This command should output the version of pesde that you installed. + + + + diff --git a/docs/src/content/docs/quickstart.mdx b/docs/src/content/docs/quickstart.mdx new file mode 100644 index 0000000..10ce4d9 --- /dev/null +++ b/docs/src/content/docs/quickstart.mdx @@ -0,0 +1,142 @@ +--- +title: Quickstart +description: Start using pesde +--- + +import { FileTree } from "@astrojs/starlight/components" + +Let's make a simple Luau program that uses the `pesde/hello` package to print +hello to the terminal. + +## Scaffolding the project + +In your terminal, run the following commands to create a folder and navigate +into it. + +```sh +mkdir hello-pesde +cd hello-pesde +``` + +Then, we'll use `pesde init` to scaffold a new pesde project. The command will +ask you a few questions to set up the project. Our project will be named +`/hello_pesde`, replace `` with a username of your choice. +The name may only contain lowercase letters, numbers, and underscores. The +environment we're targeting is `luau`. + +```sh +pesde init + +# What is the name of the project? /hello_pesde +# What is the description of the project? (leave empty for none) +# Who are the authors of this project? (leave empty for none, comma separated) +# What is the repository URL of this project? (leave empty for none) +# What is the license of this project? (leave empty for none) MIT +# What environment are you targeting for your package? luau +# Would you like to setup a default roblox_sync_config_generator script? No +``` + +The command will create a `pesde.toml` file in the current folder. Go ahead +and open this file in your text editor of choice. + +## Adding a main script + +Under the `[target]` section, we're going to add a `bin` field to specify +the path to the main script of our package. + +```diff lang="toml" title="pesde.toml" + name = "/hello_pesde" + version = "0.1.0" + license = "MIT" + + [target] + environment = "luau" ++ bin = "main.luau" + + [indices] + default = "https://github.com/daimond113/pesde-index" +``` + +Don't forget to save the file after making the changes. + +Now, lets create a `main.luau` file in the project folder and add the following +code to it. + +```luau title="main.luau" +print("Hello, pesde!") +``` + +## Running the script + +Then, we can run the following command to run the script. + +```sh +pesde run +``` + +You should see `Hello, pesde!` printed to the terminal. + +## Install a dependency + +Let's use the `pesde/hello` package instead of printing ourselves. + +Run the following command to add the package to `pesde.toml`. + +```sh +pesde add pesde/hello +``` + +You should see that `pesde.toml` has been updated with the new dependency. + +```diff lang="toml" title="pesde.toml" + name = "lukadev_0/hello_pesde" + version = "0.1.0" + license = "MIT" + + [target] + environment = "luau" + bin = "main.luau" + + [indices] + default = "https://github.com/daimond113/pesde-index" + ++ [dependencies] ++ hello = { name = "pesde/hello", version = "^1.0.0" } +``` + +Run the following command to install the new dependency. + +```sh +pesde install +``` + +You should see that pesde has created a `luau_packages` folder containing the +newly installed package. It has alsoo created a `pesde.lock` file, this file +contains the exact versions of the dependencies that were installed so that +they can be installed again in the future. + + + +- luau_packages/ + - hello.luau + - ... +- main.luau +- pesde.lock +- pesde.toml + + + +Let's update the `main.luau` file to use the `pesde/hello` package. + +```luau title="main.luau" +local hello = require("./luau_packages/hello") + +hello() +``` + +If we run the script again, we should see something printed to the terminal. + +```sh +pesde run +# Hello, pesde! (pesde/hello@1.0.0, luau) +``` \ No newline at end of file diff --git a/docs/src/content/docs/reference/cli.mdx b/docs/src/content/docs/reference/cli.mdx new file mode 100644 index 0000000..48fdea3 --- /dev/null +++ b/docs/src/content/docs/reference/cli.mdx @@ -0,0 +1,188 @@ +--- +title: pesde CLI +description: Reference for the pesde CLI. +--- + +import { LinkCard } from "@astrojs/starlight/components" + +The pesde CLI is the primary way to interact with pesde projects. It provides +commands for installing dependencies, running scripts, and more. + +## `pesde auth` + +Authentication-related commands. + +- `-i, --index`: The index of which token to manipulate. May be a URL or an alias. + Defaults to the default + index of the current project or the default index set in the config. + +### `pesde auth login` + +Sets the token for the index. + +- `-t, --token`: The token to set. + +If no token is provided, you will be prompted to authenticate with GitHub. A +code will be provided that you can paste into the GitHub authentication prompt. + +### `pesde auth logout` + +Removes the stored token for the index. + +### `pesde auth whoami` + +Prints the username of the currently authenticated user of the index. Only +works if the token is a GitHub token. + +## `pesde config` + +Configuration-related commands. + +### `pesde config default-index` + +```sh +pesde config default-index [INDEX] +``` + +Configures the default index. If no index is provided, the current default index +is printed. + +- `-r, --reset`: Resets the default index. + +The default index is [`pesde-index`](https://github.com/daimond113/pesde-index). + +### `pesde config scripts-repo` + +```sh +pesde config scripts-repo [REPO] +``` + +Configures the scripts repository. If no repository is provided, the current +scripts repository is printed. + +- `-r, --reset`: Resets the scripts repository. + +The default scripts repository is [`pesde-scripts`](https://github.com/daimond113/pesde-scripts). + +## `pesde init` + +Initializes a new pesde project in the current directory. + +## `pesde run` + +Runs a script from the current project using Lune. + +```sh +pesde run [SCRIPT] [ -- ...] +``` + +If no script is provided, it will run the script specified by `target.bin` +in `pesde.toml`. + +If a path is provided, it will run the script at that path. + +If a script defined in `[scripts]` is provided, it will run that script. + +If a package name is provided, it will run the script specified by `target.bin` +in that package. + +Arguments can be passed to the script by using `--` followed by the arguments. + +```sh +pesde run foo -- --arg1 --arg2 +``` + +## `pesde install` + +Installs dependencies for the current project. + +- `-t, --threads`: The number of threads to use for downloading dependencies. +- `--locked`: Whether to error if the lockfile is out of date. +- `--prod`: Whether to skip installing dev dependencies. + +## `pesde publish` + +Publishes the current project to the pesde registry. + +- `-d, --dry-run`: Whether to perform a dry run. This will output a + tarball containing the package that would be published, but will not actually + publish it. +- `-y, --yes`: Whether to skip the confirmation prompt. + +## `pesde self-install` + +Performs the pesde installation process. This should be the first command run +after downloading the pesde binary. + +## `pesde self-upgrade` + +Upgrades the pesde binary to the latest version. + +## `pesde patch` + +```sh +pesde patch +``` + +Prepares a patching environment for a package. This will copy the source code of +the package to a temporary directory. + +The package specified must be in the format `@ `. + + + +## `pesde patch-commit` + +```sh +pesde patch-commit +``` + +Applies the changes made in the patching environment created by `pesde patch`. + +## `pesde add` + +```sh +pesde add +``` + +Adds a package to the dependencies of the current project. + +- `-i, --index `: The index in which to search for the package. +- `-t, --target `: The target environment for the package. +- `-a, --alias `: The alias to use for the package, defaults to the + package name. +- `-p, --peer`: Adds the package as a peer dependency. +- `-d, --dev`: Adds the package as a dev dependency. + +The following formats are supported: + +```sh +pesde add pesde/hello +pesde add gh#acme/package#main +pesde add https://git.acme.local/package.git#aeff6 +``` + +## `pesde update` + +Updates the dependencies of the current project. + +- `-t, --threads`: The number of threads to use for downloading dependencies. + +## `pesde x` + +Runs a one-off binary package. + +```sh +pesde x +``` + +This is useful for running a binary package without installing it or outside of +a pesde project. + +```sh +pesde x pesde/hello +``` diff --git a/docs/src/content/docs/reference/manifest.mdx b/docs/src/content/docs/reference/manifest.mdx new file mode 100644 index 0000000..9156e00 --- /dev/null +++ b/docs/src/content/docs/reference/manifest.mdx @@ -0,0 +1,405 @@ +--- +title: pesde.toml +description: Reference for `pesde.toml` +--- + +import { LinkCard } from "@astrojs/starlight/components" + +`pesde.toml` is the manifest file for a pesde package. It contains metadata about +the package and its dependencies. + +## Top-level fields + +```toml +name = "acme/package" +version = "1.2.3" +description = "A package that does foo and bar" +license = "MIT" +authors = ["John Doe (https://acme.local)"] +repository = "https://github.com/acme/package" +``` + +### `name` + +The name of the package. This is used to identify the package in the registry. + +The name consists of a scope and a package name, separated by a slash (`/`). It +may only contain lowercase letters, numbers, and underscores. + +The first one to publish to a given scope gets to own it. If you want multiple +people to be able to publish to the same scope, you can send a pull request to +the [pesde-index GitHub repository](https://github.com/daimond113/pesde-index) +and add the GitHub user ID of the other person to the `owners` field of the +`scope.toml` file of the given scope. For more information, see +[policies](/registry/policies#package-ownership). + +### `version` + +The version of the package. This must be a valid [SemVer](https://semver.org/) +version, such as `1.2.3`. + +### `description` + +A short description of the package. This is displayed on the package page in the +registry. + +### `license` + +The license of the package. It is recommended to use a +[SPDX license identifier](https://spdx.org/licenses/), such as `MIT` or +`Apache-2.0`. + +### `authors` + +A list of authors of the package. Each author is a string containing the name of +the author, optionally followed by an email address in angle brackets, and a +website URL in parentheses. For example: + +```toml +authors = ["John Doe (https://acme.local)"] +``` + +### `repository` + +The URL of the repository where the package is hosted. This is displayed on the +package page in the registry. + +### `private` + +A boolean indicating whether the package is private. If set to `true`, the +package cannot be published to the registry. + +### `includes` + +List of top-level files and directories to include in the package when +publishing. Files not listed here will not be published. + +```toml +includes = [ + "pesde.toml", + "README.md", + "LICENSE", + "init.luau", + "docs", +] +``` + +### `pesde_version` + +The version of pesde to use within this project. The `pesde` CLI will look at +this field and run the correct version of pesde for this project. + +### `workspace_members` + +A list of globs containing the members of this workspace. + + + + +## `[target]` + +The `[target]` section contains information about the target platform for the +package. + +```toml +[target] +environment = "luau" +lib = "init.luau" +``` + +### `environment` + +The target environment for the package. This can be one of the following: + +- `luau`: Standalone Luau code that can be run using the `luau` CLI. +- `lune`: Luau code that requires the Lune runtime. +- `roblox`: Luau code that must be run in Roblox. +- `roblox_server`: Same as `roblox`, but only for server-side code. + +### `lib` + +**Allowed in:** `luau`, `lune`, `roblox`, `roblox_server` + +The entry point of the library exported by the package. This file is what will +be required when the package is loaded using `require`. + +### `bin` + +**Allowed in:** `luau`, `lune` + +The entry point of the binary exported by the package. This file is what will be +run when the package is executed as a binary. + + + +### `build_files` + +**Allowed in:** `roblox`, `roblox_server` + +A list of files that should be synced to Roblox when the package is installed. + +```toml +build_files = [ + "init.luau", + "foo.luau", +] +``` + +These files are passed to [`roblox_sync_config_generator`](#roblox_sync_config_generator) +when the package is installed in order to generate the necessary configuration. + +## `[scripts]` + +The `[scripts]` section contains scripts that can be run using the `pesde run` +command. These scripts are run using [Lune](https://lune-org.github.io/docs). + +```toml +[scripts] +build = "sripts/build.luau" +test = "scripts/test.luau" +``` + +There are also a few special scripts that are run in certain cases by pesde. + +### `roblox_sync_config_generator` + +This is responsible for generating adequate configuration files for Roblox +sync tools. + +`process.args` will contain the directory containing the package, and the list +of files specified within the [`target.build_files`](#build_files) of the +package. + +You can find template scripts inside the +[`pesde-scripts` repository](https://github.com/daimond113/pesde-scripts) +for various sync tools. + + + + + +### `sourcemap_generator` + +This is responsible for generating source maps for packages that are installed. +This is required to get proper types support when using +[Wally dependencies](/guides/dependencies/#wally-dependencies). + +The script will receive the path to the package directory as the first argument +through `process.args`. + + + +## `[indices]` + +The `[indices]` section contains a list of pesde indices where packages can be +installed from. + +```toml +[indices] +default = "https://github.com/daimond113/pesde-index" +acme = "https://github.com/acme/pesde-index" +``` + +These can then be referenced in the [`dependencies`](#dependencies) of the +package. The `default` index is used if no index is specified. + +```toml +[dependencies] +foo = { name = "acme/foo", version = "1.2.3", index = "acme" } +``` + +## `[wally_indices]` + +The `[wally_indices]` section contains a list of Wally indices where packages +can be installed from. This is used for +[Wally dependencies](/guides/dependencies/#wally-dependencies). + +```toml +[wally_indices] +default = "https://github.com/UpliftGames/wally-index" +acme = "https://github.com/acme/wally-index" +``` + +These can then be referenced in the [`dependencies`](#dependencies) of the +package. The `default` index is used if no index is specified. + +```toml +[dependencies] +foo = { wally = "acme/foo", version = "1.2.3", index = "acme" } +``` + +## `[overrides]` + +The `[overrides]` section contains a list of overrides for dependencies. This +allows you to replace certain dependencies with different versions or even +different packages. + +```toml +[overrides] +"bar>baz" = { name = "acme/baz", version = "1.0.0" } +"foo>bar,baz>bar" = { name = "acme/bar", version = "2.0.0" } +``` + +The above example will replace the `baz` dependency of the `bar` package with +version `1.0.0`, and the `bar` and `baz` dependencies of the `foo` package with +version `2.0.0`. + +Each key in the overrides table is a comma-separated list of package paths. The +path is a list of package names separated by `>`. For example, `foo>bar>baz` +refers to the `baz` dependency of the `bar` package, which is a dependency of +the `foo` package. + + + +## `[patches]` + +The `[patches]` section contains a list of patches for dependencies. This allows +you to modify the source code of dependencies. + +```toml +[patches] +"acme/foo" = { "1.0.0 luau" = "patches/acme+foo-1.0.0+luau.patch" } +``` + +The above example will patch version `1.0.0` with the `luau` target of the +`acme/foo` package using the `patches/acme+foo-1.0.0+luau.patch` file. + +Each key in the patches table is the package name, and the value is a table +where the keys are the version and target, and the value is the path to the +patch. + +The patches can be generated using the `pesde patch` command. + + + +## `[place]` + +This is used in Roblox projects to specify where packages are located in the +Roblox datamodel. + +```toml +[place] +shared = "game.ReplicatedStorage.Packages" +server = "game.ServerScriptService.Packages" +``` + +## `[dependencies]` + +The `[dependencies]` section contains a list of dependencies for the package. + +```toml +[dependencies] +foo = { name = "acme/foo", version = "1.2.3" } +bar = { wally = "acme/bar", version = "2.3.4" } +baz = { git = "acme/baz", rev = "main" } +``` + +Each key in the dependencies table is the name of the dependency, and the value +is a dependency specifier. + +There are several types of dependency specifiers. + +### pesde + +```toml +[dependencies] +foo = { name = "acme/foo", version = "1.2.3", index = "acme", target = "lune" } +``` + +**pesde dependencies** contain the following fields: + +- `name`: The name of the package. +- `version`: The version of the package. +- `index`: The [pesde index](#indices) to install the package from. If not + specified, the `default` index is used. +- `target`: The target platform for the package. If not specified, the target + platform of the current package is used. + +### Wally + +```toml +[dependencies] +foo = { wally = "acme/foo", version = "1.2.3", index = "acme" } +``` + +**Wally dependencies** contain the following fields: + +- `wally`: The name of the package. +- `version`: The version of the package. +- `index`: The [Wally index](#wally_indices) to install the package from. If not + specified, the `default` index is used. + +### Git + +```toml +[dependencies] +foo = { git = "acme/packages", rev = "main", path = "foo" } +``` + +**Git dependencies** contain the following fields: + +- `git`: The URL of the Git repository. + This can either be `/` for a GitHub repository, or a full URL. +- `rev`: The Git revision to install. This can be a branch, tag, or commit hash. +- `path`: The path within the repository to install. If not specified, the root + of the repository is used. + +## `[peer_dependencies]` + +The `[peer_dependencies]` section contains a list of peer dependencies for the +package. These are dependencies that are required by the package, but are not +installed automatically. Instead, they must be installed by the user of the +package. + +```toml +[peer_dependencies] +foo = { name = "acme/foo", version = "1.2.3" } +``` + +## `[dev_dependencies]` + +The `[dev_dependencies]` section contains a list of development dependencies for +the package. These are dependencies that are only required during development, +such as testing libraries or build tools. They are not installed when the +package is used by another package. + +```toml +[dev_dependencies] +foo = { name = "acme/foo", version = "1.2.3" } +``` + +
+ + diff --git a/docs/src/content/docs/registry/policies.md b/docs/src/content/docs/registry/policies.md new file mode 100644 index 0000000..707d467 --- /dev/null +++ b/docs/src/content/docs/registry/policies.md @@ -0,0 +1,96 @@ +--- +title: Policies +description: Policies for the pesde registry +--- + +The following policies apply to the [official public pesde registry](https://registry.pesde.daimond113.com) +and its related services, such as the index repository or websites. +They may not apply to other registries. By using the pesde registry, you agree +to these policies. + +If anything is unclear, please [contact us](#contact-us), and we will be happy +to help. + +## Contact Us + +You can contact us at [pesde@daimond113.com](mailto:pesde@daimond113.com). In +case of a security issue, please prefix the subject with `[SECURITY]`. + +## Permitted content + +The pesde registry is a place for Luau-related packages. This includes: + +- Libraries +- Frameworks +- Tools + +The following content is forbidden: + +- Malicious, vulnerable code +- Illegal, harmful content +- Miscellaneous files (doesn't include configuration files, documentation, etc.) + +pesde is not responsible for the content of packages, the scope owner is. It +is the responsibility of the scope owner to ensure that the content of their +packages is compliant with the permitted content policy. + +If you believe a package is breaking these requirements, please [contact us](#contact-us). + +## Package removal + +pesde does not support removing packages for reasons such as abandonment. A +package may only be removed for the following reasons: + +- The package is breaking the permitted content policy +- The package contains security vulnerabilities +- The package must be removed for legal reasons (e.g. DMCA takedown) + +In case a secret has been published to the registry, it must be invalidated. +If you believe a package should be removed, please [contact us](#contact-us). +We will review your request and take action if necessary. + +If we find that a package is breaking the permitted content policy, we will +exercise our right to remove it from the registry without notice. + +pesde reserves the right to remove any package from the registry at any time for +any or no reason, without notice. + +## Package ownership + +Packages are owned by scopes. Scope ownership is determined by the first person +to publish a package to the scope. The owner of the scope may send a pull request +to the index repository adding team members' user IDs to the scope's `scope.toml` +file to give them access to the scope, however at least one package must be +published to the scope before this can be done. The owner may also remove team +members from the scope. + +A scope's true owner's ID must appear first in the `owners` field of the scope's +`scope.toml` file. Ownership may be transferred by the current owner sending a +pull request to the index repository, and the new owner confirming the transfer. + +Only the owner may add or remove team members from the scope. + +pesde reserves the right to override scope ownership in the case of a dispute, +such as if the original owner is unresponsive or multiple parties claim ownership. + +## Scope squatting + +Scope squatting is the act of creating a scope with the intent of preventing +others from using it, without any intention of using it yourself. This is +forbidden and can result in the removal (release) of the scope and its packages +from the registry without notice. + +If you believe a scope is being squatted, please [contact us](#contact-us). +We will review your request and take action if necessary. + +## API Usage + +The pesde registry has an API for querying, downloading, and publishing packages. +Only non-malicious use is permitted. Malicious uses include: + +- **Service Degradation**: this includes sending an excessive amount of requests + to the registry in order to degrade the service +- **Exploitation**: this includes trying to break the security of the registry + in order to gain unauthorized access +- **Harmful content**: this includes publishing harmful (non-law compliant, + purposefully insecure) content diff --git a/docs/src/env.d.ts b/docs/src/env.d.ts new file mode 100644 index 0000000..acef35f --- /dev/null +++ b/docs/src/env.d.ts @@ -0,0 +1,2 @@ +/// +/// diff --git a/docs/src/tailwind.css b/docs/src/tailwind.css new file mode 100644 index 0000000..a5ca780 --- /dev/null +++ b/docs/src/tailwind.css @@ -0,0 +1,11 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +:root[data-theme="light"] { + --sl-color-bg: rgb(255 245 230); +} + +:root[data-theme="light"] .sidebar-pane { + background-color: var(--sl-color-bg); +} diff --git a/docs/tailwind.config.ts b/docs/tailwind.config.ts new file mode 100644 index 0000000..32bae0d --- /dev/null +++ b/docs/tailwind.config.ts @@ -0,0 +1,36 @@ +import starlightPlugin from "@astrojs/starlight-tailwind" +import type { Config } from "tailwindcss" +import defaultTheme from "tailwindcss/defaultTheme" + +export default { + content: ["./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}"], + + theme: { + extend: { + fontFamily: { + sans: ["Nunito Sans Variable", ...defaultTheme.fontFamily.sans], + }, + colors: { + accent: { + 200: "rgb(241 157 30)", + 600: "rgb(120 70 10)", + 900: "rgb(24 16 8)", + 950: "rgb(10 7 4)", + }, + gray: { + 100: "rgb(245 230 210)", + 200: "rgb(228 212 192)", + 300: "rgb(198 167 140)", + 400: "rgb(142 128 112)", + 500: "rgb(84 70 50)", + 600: "rgb(65 50 41)", + 700: "rgb(50 42 35)", + 800: "rgb(28 22 17)", + 900: "rgb(10 7 4)", + }, + }, + }, + }, + + plugins: [starlightPlugin()], +} as Config diff --git a/docs/tsconfig.json b/docs/tsconfig.json new file mode 100644 index 0000000..a3f6981 --- /dev/null +++ b/docs/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "astro/tsconfigs/strict" +} diff --git a/registry/src/endpoints/publish_version.rs b/registry/src/endpoints/publish_version.rs index d6a38ab..043f5ff 100644 --- a/registry/src/endpoints/publish_version.rs +++ b/registry/src/endpoints/publish_version.rs @@ -61,7 +61,7 @@ const ADDITIONAL_FORBIDDEN_FILES: &[&str] = &["default.project.json"]; struct DocEntryInfo { #[serde(default)] label: Option, - #[serde(default)] + #[serde(default, alias = "position")] sidebar_position: Option, #[serde(default)] collapsed: bool, diff --git a/website/.gitignore b/website/.gitignore new file mode 100644 index 0000000..79518f7 --- /dev/null +++ b/website/.gitignore @@ -0,0 +1,21 @@ +node_modules + +# Output +.output +.vercel +/.svelte-kit +/build + +# OS +.DS_Store +Thumbs.db + +# Env +.env +.env.* +!.env.example +!.env.test + +# Vite +vite.config.js.timestamp-* +vite.config.ts.timestamp-* diff --git a/website/.npmrc b/website/.npmrc new file mode 100644 index 0000000..b6f27f1 --- /dev/null +++ b/website/.npmrc @@ -0,0 +1 @@ +engine-strict=true diff --git a/website/.prettierignore b/website/.prettierignore new file mode 100644 index 0000000..ab78a95 --- /dev/null +++ b/website/.prettierignore @@ -0,0 +1,4 @@ +# Package Managers +package-lock.json +pnpm-lock.yaml +yarn.lock diff --git a/website/.prettierrc b/website/.prettierrc new file mode 100644 index 0000000..4ebb478 --- /dev/null +++ b/website/.prettierrc @@ -0,0 +1,14 @@ +{ + "useTabs": true, + "printWidth": 100, + "semi": false, + "plugins": ["prettier-plugin-svelte", "prettier-plugin-tailwindcss"], + "overrides": [ + { + "files": "*.svelte", + "options": { + "parser": "svelte" + } + } + ] +} diff --git a/website/bun.lockb b/website/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..db992e70618c3b7645a1a731a8e709f21d8ed58e GIT binary patch literal 227536 zcmeF32{cu0^#3oJ6{RGVWQdYfNF-wtsie?ocFj{}QYkcRPNoVal4dkeNHi)cRH9LZ z(yW=^-tKwc&fBlJm;YM7^*VR;?!_GA;_L725I81yoDesI!C1DZ^hTBY`xe_P4(shMWhUNCXcc&%X~x)^ z7A$@*xN4(*XfJ5RV2s7akOWxrk494Y4@M16= z9o*q3gE0f_2!Wk|K!2u#cPPVwkHHXzycH<=b5wWeh}8`8*iIN!5Zk-Cd%8o7ByiGBXJhpMd^4@Tu07K#~@c2fA0YJ0m&H}VZ7;3iT+nW9Plr46tyn44`Yq%D^QHb zS(-JT)}Sz?kr7aieuTie0%+rKRvgzs(O(AW2+%d4@GsI1evAb50S ze;EuDD93($<6`xTth;eato4!sivIl^`~#R17!0OQpnIS@Ghhdl<2qUait9#HnbnRL zR0#6BL2xOf^5}<`DzAWYE zH7NF{4iq^DCtrUbXqN(cameq|WUbqFP@LCDO0%?B^?_7>-9RypK(~$qO_e&v7|oMd z<9A4#?mlizfA_!ue<(+LenH-T?k-^rR0xaV>*IvS zEh7ZF;}^zYywYLy?<6ShhkLp#E))EseJ4GZx(AGL4R`lr?16IZ?`A44KL<}=wCC&) z2p0{X07vjWCdi#Z#+i(tp#iHO{S8?f0*dqGtRW%+G3VXdbsN((7HNa+qxoYzQD9Ct5D=TmA#={QPOjliu)m&Qh!SADV;^ieZ9PbU}h66So>)iD4rwsRDK#Lo|~gU z;RuT41%;y}vSBuBye@%a`F>D5w^xD6f;xfXd16GV0w}iQr}E9_EI$>XL!i7LjDJ5+ zk@+mUpXRarGGYGkdf@@53eJniBG&lZQ#y4qYhJyW!MJT0+K|Wj8A+)sD6UIqCev?> zdjKN=?2AHv9`IN`!IqUz07Y&CDDF!$sK@oM018Je?2j?7UcQbDVS84)AyAI%+uha2 z*B@3)Un=k7?&CZL2Gr1jRX>qZKfE=9H4f_T?Hh?IRv_mfgqjS9K1ZCJ_#D* zc)2+QjDc8Pw?H24IJvXhp8&=996UO@#nAR(o!5$>xc-Cu-N$$YFyMUg33KvwX68a1 zxNcKHu|5hE*G(`e`j7HrsWa7XAt>6P4vOQr*_+jWkAN{@4&Gi22Y=U&OH&k-<2amw zRf3ugiuR_#>4W2flk3niuKylKU9gMol|V6`Qa{%I&4hJ?`=U3LV|-+tD*LnI@uzec zD2@-A2NB3)oGuOlflFZg{Fy-kc)l)$F~E770c#!o#e?EHoeYZY$#{_dl6c5`A6UTJ zm-P@A?z>Hp9|Rf;d9=q5`wPeE_jMl!(}Mk98p^6K2F1Lizk?GKV$uv_l`jXyepG;B zy*Ja}m8lA`QR_Z{=^f03zWoG$!=b(y6tB;9u#X3UMnfJs62}kdJFb)G5v+3)&RAvu ztohrJ$8lH!itRfl5!#kO9>*aU6yx~Yxtu}O`!fT4y@Htx{Ych$XnM}i^`>(w{J zhrtM6$yx^wR-CV7CUs{ic5*RZq@SvTyUC9@iyVpJZL8QQT 73Vb)X&nN?`3{ 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 literal 0 HcmV?d00001 diff --git a/website/eslint.config.js b/website/eslint.config.js new file mode 100644 index 0000000..b36887c --- /dev/null +++ b/website/eslint.config.js @@ -0,0 +1,33 @@ +import js from "@eslint/js" +import ts from "typescript-eslint" +import svelte from "eslint-plugin-svelte" +import prettier from "eslint-config-prettier" +import globals from "globals" + +/** @type {import('eslint').Linter.Config[]} */ +export default [ + js.configs.recommended, + ...ts.configs.recommended, + ...svelte.configs["flat/recommended"], + prettier, + ...svelte.configs["flat/prettier"], + { + languageOptions: { + globals: { + ...globals.browser, + ...globals.node, + }, + }, + }, + { + files: ["**/*.svelte"], + languageOptions: { + parserOptions: { + parser: ts.parser, + }, + }, + }, + { + ignores: ["build/", ".svelte-kit/", "dist/"], + }, +] diff --git a/website/package.json b/website/package.json new file mode 100644 index 0000000..9a26eeb --- /dev/null +++ b/website/package.json @@ -0,0 +1,70 @@ +{ + "name": "website", + "version": "0.0.1", + "private": true, + "scripts": { + "dev": "vite dev", + "build": "vite build", + "preview": "vite preview", + "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", + "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", + "lint": "prettier --check . && eslint .", + "format": "prettier --write ." + }, + "devDependencies": { + "@sveltejs/adapter-vercel": "^5.4.6", + "@sveltejs/kit": "^2.7.3", + "@sveltejs/vite-plugin-svelte": "^4.0.0", + "@tailwindcss/typography": "^0.5.15", + "@types/eslint": "^9.6.1", + "@types/gunzip-maybe": "^1.4.2", + "@types/tar-stream": "^3.1.3", + "autoprefixer": "^10.4.20", + "eslint": "^9.13.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-svelte": "^2.46.0", + "globals": "^15.11.0", + "mdsvex": "^0.12.3", + "prettier": "^3.3.3", + "prettier-plugin-svelte": "^3.2.7", + "prettier-plugin-tailwindcss": "^0.6.8", + "svelte": "^5.1.4", + "svelte-check": "^4.0.5", + "tailwindcss": "^3.4.14", + "typescript": "^5.6.3", + "typescript-eslint": "^8.12.2", + "vite": "^5.4.10" + }, + "type": "module", + "dependencies": { + "@fontsource-variable/nunito-sans": "^5.1.0", + "@shikijs/rehype": "^1.22.2", + "@types/hast": "^3.0.4", + "@types/unist": "^3.0.3", + "bits-ui": "next", + "date-fns": "^4.1.0", + "gunzip-maybe": "^1.4.2", + "hast-util-heading": "^3.0.0", + "hast-util-heading-rank": "^3.0.0", + "hast-util-to-text": "^4.0.2", + "lucide-svelte": "^0.446.0", + "rehype-infer-description-meta": "^2.0.0", + "rehype-raw": "^7.0.0", + "rehype-sanitize": "^6.0.0", + "rehype-slug": "^6.0.0", + "rehype-stringify": "^10.0.1", + "remark-frontmatter": "^5.0.0", + "remark-gemoji": "^8.0.0", + "remark-gfm": "^4.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.1.1", + "shiki": "^1.22.2", + "tar-stream": "^3.1.7", + "unified": "^11.0.5", + "unist-util-map": "^4.0.0", + "vfile": "^6.0.3" + }, + "patchedDependencies": { + "@shikijs/rehype@1.22.0": "patches/@shikijs%2Frehype@1.22.0.patch" + } +} diff --git a/website/patches/@shikijs%2Frehype@1.22.0.patch b/website/patches/@shikijs%2Frehype@1.22.0.patch new file mode 100644 index 0000000..a2e86a8 --- /dev/null +++ b/website/patches/@shikijs%2Frehype@1.22.0.patch @@ -0,0 +1,26 @@ +@shikis/rehype doesn't use the `fallbackLanguage` if `lazy` is used. + +--- a/dist/core.mjs ++++ b/dist/core.mjs +@@ -1,6 +1,8 @@ + import { visit } from 'unist-util-visit'; + import { toString } from 'hast-util-to-string'; + ++import { bundledLanguages } from 'shiki'; ++ + const InlineCodeHandlers = { + "tailing-curly-colon": (_tree, node) => { + const raw = toString(node); +@@ -90,8 +92,12 @@ function rehypeShikiFromHighlighter(highlighter, options) { + const languageQueue = []; + const queue = []; + function getLanguage(lang) { + if (!lang) + return defaultLanguage; ++ ++ if (!(lang in bundledLanguages)) ++ return fallbackLanguage; ++ + if (highlighter.getLoadedLanguages().includes(lang)) + return lang; + if (lazy) { diff --git a/website/postcss.config.js b/website/postcss.config.js new file mode 100644 index 0000000..1a52624 --- /dev/null +++ b/website/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/website/src/app.css b/website/src/app.css new file mode 100644 index 0000000..0883f6a --- /dev/null +++ b/website/src/app.css @@ -0,0 +1,92 @@ +@import "tailwindcss/base"; +@import "tailwindcss/components"; +@import "tailwindcss/utilities"; + +:root { + --color-background: 255 245 230; + --color-card: 245 230 210; + --color-card-hover: 240 225 205; + --color-border: 200 180 160; + --color-header: 250 234 215; + + --color-body: 84 70 50; + --color-heading: 70 55 35; + --color-light: 0 0 0; + + --color-input-bg: 245 230 210; + --color-input-border: 180 160 140; + --color-placeholder: 130 90 40; + + --color-primary: 120 70 10; + --color-primary-hover: 255 172 42; + --color-primary-bg: 241 157 30; + --color-primary-fg: 10 7 4; + + --shiki-foreground: rgb(var(--color-heading)); + --shiki-background: rgb(var(--color-card)); + --shiki-token-constant: color-mix(in srgb, rgb(120 140 230), rgb(var(--color-light)) 50%); + --shiki-token-string: rgb(var(--color-heading)); + --shiki-token-comment: rgb(var(--color-body)); + --shiki-token-keyword: color-mix(in srgb, rgb(var(--color-primary)), rgb(var(--color-light)) 50%); + --shiki-token-parameter: rgb(var(--color-heading)); + --shiki-token-function: rgb(var(--color-primary)); + --shiki-token-string-expression: color-mix( + in srgb, + rgb(120 230 140), + rgb(var(--color-light)) 50% + ); + --shiki-token-punctuation: rgb(var(--color-heading)); + --shiki-token-link: rgb(var(--color-primary)); +} + +@media (prefers-color-scheme: dark) { + :root { + --color-background: 10 7 4; + --color-card: 28 22 17; + --color-card-hover: 40 32 25; + --color-border: 28 22 17; + --color-header: 20 16 12; + + --color-body: 198 167 140; + --color-heading: 227 213 200; + --color-light: 255 255 255; + + --color-input-bg: 20 13 8; + --color-input-border: 78 60 40; + --color-placeholder: 169 147 128; + + --color-primary: 241 157 30; + --color-primary-hover: 255 172 42; + --color-primary-bg: 241 157 30; + --color-primary-fg: 10 7 4; + } +} + +html { + scroll-padding-top: theme(spacing.24); + color-scheme: light dark; +} + +body { + background-color: theme(colors.background); + color: theme(colors.body); +} + +@keyframes cursor-blink { + 0%, + 100% { + opacity: 1; + } + 50% { + opacity: 0; + } +} + +.hide-scrollbar::-webkit-scrollbar { + display: none; +} + +.hide-scrollbar { + -ms-overflow-style: none; + scrollbar-width: none; +} diff --git a/website/src/app.d.ts b/website/src/app.d.ts new file mode 100644 index 0000000..f70d0e1 --- /dev/null +++ b/website/src/app.d.ts @@ -0,0 +1,13 @@ +// See https://kit.svelte.dev/docs/types#app +// for information about these interfaces +declare global { + namespace App { + // interface Error {} + // interface Locals {} + // interface PageData {} + // interface PageState {} + // interface Platform {} + } +} + +export {} diff --git a/website/src/app.html b/website/src/app.html new file mode 100644 index 0000000..77a5ff5 --- /dev/null +++ b/website/src/app.html @@ -0,0 +1,12 @@ + + + + + + + %sveltekit.head% + + +
%sveltekit.body%
+ + diff --git a/website/src/lib/components/GitHub.svelte b/website/src/lib/components/GitHub.svelte new file mode 100644 index 0000000..a808d35 --- /dev/null +++ b/website/src/lib/components/GitHub.svelte @@ -0,0 +1,11 @@ + + + + GitHub + + diff --git a/website/src/lib/components/Logo.svelte b/website/src/lib/components/Logo.svelte new file mode 100644 index 0000000..f333830 --- /dev/null +++ b/website/src/lib/components/Logo.svelte @@ -0,0 +1,23 @@ + + pesde + + + + + + diff --git a/website/src/lib/components/Logomark.svelte b/website/src/lib/components/Logomark.svelte new file mode 100644 index 0000000..21e8346 --- /dev/null +++ b/website/src/lib/components/Logomark.svelte @@ -0,0 +1,9 @@ + + pesde + + diff --git a/website/src/lib/components/Select.svelte b/website/src/lib/components/Select.svelte new file mode 100644 index 0000000..f593bff --- /dev/null +++ b/website/src/lib/components/Select.svelte @@ -0,0 +1,74 @@ + + + + + {#snippet child({ props })} + {#if trigger} + {@render trigger(props, triggerLabel)} + {:else} + + {/if} + {/snippet} + + + + {#each items as { value, label, disabled } (value)} + + {#snippet children({ selected })} + {label} + {#if selected} + + {/if} + {/snippet} + + {/each} + + + diff --git a/website/src/lib/markdown.ts b/website/src/lib/markdown.ts new file mode 100644 index 0000000..2cab9b2 --- /dev/null +++ b/website/src/lib/markdown.ts @@ -0,0 +1,116 @@ +import rehypeShikiFromHighlighter from "@shikijs/rehype/core" +import type { Nodes } from "hast" +import { heading } from "hast-util-heading" +import { headingRank } from "hast-util-heading-rank" +import { toText } from "hast-util-to-text" +import rehypeInferDescriptionMeta from "rehype-infer-description-meta" +import rehypeRaw from "rehype-raw" +import rehypeSanitize from "rehype-sanitize" +import rehypeSlug from "rehype-slug" +import rehypeStringify from "rehype-stringify" +import remarkFrontmatter from "remark-frontmatter" +import remarkGemoji from "remark-gemoji" +import remarkGfm from "remark-gfm" +import remarkParse from "remark-parse" +import remarkRehype from "remark-rehype" +import { createCssVariablesTheme, createHighlighter } from "shiki" +import { unified } from "unified" +import type { Node } from "unist" +import { map } from "unist-util-map" + +const highlighter = createHighlighter({ + themes: [], + langs: [], +}) + +export const markdown = (async () => { + return unified() + .use(remarkParse) + .use(remarkFrontmatter) + .use(remarkGfm) + .use(remarkGemoji) + .use(remarkRehype, { allowDangerousHtml: true }) + .use(rehypeRaw) + .use(rehypeSanitize) + .use(rehypeShikiFromHighlighter, await highlighter, { + lazy: true, + theme: createCssVariablesTheme({ + name: "css-variables", + variablePrefix: "--shiki-", + variableDefaults: {}, + fontStyle: true, + }), + fallbackLanguage: "text", + }) + .use(rehypeStringify) + .freeze() +})() + +export type TocItem = { + id: string + title: string + level: number +} + +export const docsMarkdown = (async () => { + return unified() + .use(remarkParse) + .use(remarkFrontmatter) + .use(remarkGfm) + .use(remarkGemoji) + .use(remarkRehype, { allowDangerousHtml: true, clobberPrefix: "" }) + .use(rehypeSlug) + .use(() => (node, file) => { + const toc: TocItem[] = [] + file.data.toc = toc + + return map(node as Nodes, (node) => { + if (node.type === "element" && node.tagName === "a") { + const fullUrl = new URL(node.properties.href as string, `file://${file.path}`) + + let href = node.properties.href as string + if (fullUrl.protocol === "file:") { + href = file.data.basePath + fullUrl.pathname.replace(/\.mdx?$/, "") + fullUrl.hash + } + + return { + ...node, + properties: { + ...node.properties, + href, + }, + } + } + + if (heading(node)) { + const rank = headingRank(node) + if (rank && typeof node.properties.id === "string" && rank >= 2 && rank <= 3) { + toc.push({ + id: node.properties.id, + title: toText(node), + level: rank, + }) + } + } + + return node + }) as Node + }) + .use(rehypeRaw) + .use(rehypeSanitize) + .use(rehypeShikiFromHighlighter, await highlighter, { + lazy: true, + theme: createCssVariablesTheme({ + name: "css-variables", + variablePrefix: "--shiki-", + variableDefaults: {}, + fontStyle: true, + }), + fallbackLanguage: "text", + }) + .use(rehypeInferDescriptionMeta, { + selector: "p", + }) + .use(rehypeStringify) + .freeze() +})() diff --git a/website/src/lib/registry-api.ts b/website/src/lib/registry-api.ts new file mode 100644 index 0000000..99900ae --- /dev/null +++ b/website/src/lib/registry-api.ts @@ -0,0 +1,106 @@ +import { PUBLIC_REGISTRY_URL } from "$env/static/public" + +export type SearchResponse = { + count: number + data: PackageResponse[] +} + +export type PackageVersionsResponse = PackageResponse[] + +export type PackageVersionResponse = PackageResponse + +export type PackageResponse = { + name: string + version: string + targets: TargetInfo[] + description: string + published_at: string + license?: string + authors?: string[] + repository?: string + dependencies: Record + docs?: DocEntry[] +} + +export type TargetInfo = { + kind: TargetKind + lib: boolean + bin: boolean +} + +export type TargetKind = "roblox" | "roblox_server" | "lune" | "luau" + +export type DependencyEntry = [DependencyInfo, DependencyKind] + +export type DependencyInfo = + | { + index: string + name: string + target?: string + version: string + } + | { + index: string + wally: string + version: string + } + +export type DependencyKind = "standard" | "peer" | "dev" + +export type DocEntry = DocEntryCategory | DocEntryPage + +export type DocEntryBase = { + label: string + position: number +} + +export type DocEntryCategory = DocEntryBase & { + items?: DocEntry[] + collapsed?: boolean +} + +export type DocEntryPage = DocEntryBase & { + name: string + hash: string +} + +export const TARGET_KIND_DISPLAY_NAMES: Record = { + roblox: "Roblox", + roblox_server: "Roblox (server)", + lune: "Lune", + luau: "Luau", +} + +export const DEPENDENCY_KIND_DISPLAY_NAMES: Record = { + standard: "Dependencies", + peer: "Peer Dependencies", + dev: "Dev Dependencies", +} + +export class RegistryHttpError extends Error { + name = "RegistryError" + constructor( + message: string, + public response: Response, + ) { + super(message) + } +} + +export async function fetchRegistryJson( + path: string, + fetcher: typeof fetch, + options?: RequestInit, +): Promise { + const response = await fetchRegistry(path, fetcher, options) + return response.json() +} + +export async function fetchRegistry(path: string, fetcher: typeof fetch, options?: RequestInit) { + const response = await fetcher(new URL(path, PUBLIC_REGISTRY_URL), options) + if (!response.ok) { + throw new RegistryHttpError(`Failed to fetch ${response.url}: ${response.statusText}`, response) + } + + return response +} diff --git a/website/src/routes/(app)/+error.svelte b/website/src/routes/(app)/+error.svelte new file mode 100644 index 0000000..99b3ae6 --- /dev/null +++ b/website/src/routes/(app)/+error.svelte @@ -0,0 +1,8 @@ + + +
+

{$page.status}

+

{$page.error?.message}

+
diff --git a/website/src/routes/(app)/+layout.svelte b/website/src/routes/(app)/+layout.svelte new file mode 100644 index 0000000..29c6736 --- /dev/null +++ b/website/src/routes/(app)/+layout.svelte @@ -0,0 +1,14 @@ + + +
+ +
+ {@render children()} +
+ +
diff --git a/website/src/routes/(app)/+page.svelte b/website/src/routes/(app)/+page.svelte new file mode 100644 index 0000000..6196285 --- /dev/null +++ b/website/src/routes/(app)/+page.svelte @@ -0,0 +1,56 @@ + + + + +
+

+ Recently Published +

+ +
+ {#each data.packages.slice(0, 24) as pkg} + {@const [scope, name] = pkg.name.split("/")} + +
+

+ + {scope}/{name} + +

+
+ v{pkg.version} + {` · ${pkg.targets + .map((target) => TARGET_KIND_DISPLAY_NAMES[target.kind]) + .join(", ")}`} +
+

{pkg.description}

+
+ +
+
+ {/each} +
+
diff --git a/website/src/routes/(app)/+page.ts b/website/src/routes/(app)/+page.ts new file mode 100644 index 0000000..2f84aea --- /dev/null +++ b/website/src/routes/(app)/+page.ts @@ -0,0 +1,10 @@ +import { fetchRegistryJson, type SearchResponse } from "$lib/registry-api" +import type { PageLoad } from "./$types" + +export const load: PageLoad = async ({ fetch }) => { + const { data: packages } = await fetchRegistryJson("search", fetch) + + return { + packages, + } +} diff --git a/website/src/routes/(app)/Footer.svelte b/website/src/routes/(app)/Footer.svelte new file mode 100644 index 0000000..ac3b8ae --- /dev/null +++ b/website/src/routes/(app)/Footer.svelte @@ -0,0 +1,17 @@ +
+
+

Licensed under the MIT License.

+

Copyright © 2024 daimond113

+

+ Designed with ♥︎ by + + lukadev + . +

+
+
diff --git a/website/src/routes/(app)/Hamburger.svelte b/website/src/routes/(app)/Hamburger.svelte new file mode 100644 index 0000000..a8db89c --- /dev/null +++ b/website/src/routes/(app)/Hamburger.svelte @@ -0,0 +1,77 @@ + + + + + open menu +