├── .editorconfig ├── .github └── workflows │ ├── ci.yml │ └── update_versions.yml ├── .gitignore ├── .vscode └── settings.json ├── LICENSE ├── README.md ├── components ├── BenchmarkChart.tsx ├── CodeBlock.tsx ├── ContentMeta.tsx ├── DirectoryListing.tsx ├── DocView.tsx ├── ErrorMessage.tsx ├── FileDisplay.tsx ├── Header.tsx ├── Icons.tsx ├── InlineCode.tsx ├── Markdown.tsx ├── PopularityTag.tsx ├── SidePanelPage.tsx ├── SourceView.tsx └── symbol_kind.tsx ├── data ├── artwork.json ├── showcase.json └── translations.json ├── deno.json ├── dev.ts ├── fresh.gen.ts ├── import_map.json ├── islands ├── AddModule.tsx ├── GlobalSearch.tsx ├── HelloBar.tsx ├── ScrollInGif.tsx └── VersionSelect.tsx ├── main.ts ├── routes ├── _404.tsx ├── _app.tsx ├── add_module.tsx ├── api.tsx ├── api │ └── closehellobar.ts ├── artwork.tsx ├── badge.ts ├── benchmarks.tsx ├── chat.ts ├── completions │ ├── config.ts │ └── v1.ts ├── gfm.css.ts ├── index.tsx ├── install.ts ├── legacy_redirects │ ├── posts.ts │ └── v1.ts ├── manual.tsx ├── manual_page.tsx ├── search_event.ts ├── showcase.tsx ├── status.tsx ├── std.tsx ├── translations.tsx └── x │ ├── index.tsx │ └── module.tsx ├── scripts └── update_versions.ts ├── static ├── .well-known │ └── security.txt ├── app.css ├── apple-touch-icon.png ├── favicon.ico ├── fonts │ └── inter │ │ ├── Inter-Black.woff │ │ ├── Inter-Black.woff2 │ │ ├── Inter-BlackItalic.woff │ │ ├── Inter-BlackItalic.woff2 │ │ ├── Inter-Bold.woff │ │ ├── Inter-Bold.woff2 │ │ ├── Inter-BoldItalic.woff │ │ ├── Inter-BoldItalic.woff2 │ │ ├── Inter-ExtraBold.woff │ │ ├── Inter-ExtraBold.woff2 │ │ ├── Inter-ExtraBoldItalic.woff │ │ ├── Inter-ExtraBoldItalic.woff2 │ │ ├── Inter-ExtraLight.woff │ │ ├── Inter-ExtraLight.woff2 │ │ ├── Inter-ExtraLightItalic.woff │ │ ├── Inter-ExtraLightItalic.woff2 │ │ ├── Inter-Italic.woff │ │ ├── Inter-Italic.woff2 │ │ ├── Inter-Light.woff │ │ ├── Inter-Light.woff2 │ │ ├── Inter-LightItalic.woff │ │ ├── Inter-LightItalic.woff2 │ │ ├── Inter-Medium.woff │ │ ├── Inter-Medium.woff2 │ │ ├── Inter-MediumItalic.woff │ │ ├── Inter-MediumItalic.woff2 │ │ ├── Inter-Regular.woff │ │ ├── Inter-Regular.woff2 │ │ ├── Inter-SemiBold.woff │ │ ├── Inter-SemiBold.woff2 │ │ ├── Inter-SemiBoldItalic.woff │ │ ├── Inter-SemiBoldItalic.woff2 │ │ ├── Inter-Thin.woff │ │ ├── Inter-Thin.woff2 │ │ ├── Inter-ThinItalic.woff │ │ ├── Inter-ThinItalic.woff2 │ │ ├── Inter-italic.var.woff2 │ │ ├── Inter-roman.var.woff2 │ │ ├── Inter.var.woff2 │ │ └── inter.css ├── images │ ├── add_webhook.mp4 │ ├── artwork │ │ ├── DenoLogo3D-Anim.gif │ │ ├── Deno_Web_Sockets.svg │ │ ├── HypnoDeno.gif │ │ ├── deno_acrylic.jpg │ │ ├── deno_city.jpeg │ │ ├── deno_inVR_withUsasaki.png │ │ ├── deno_logo.png │ │ ├── deno_matrix.png │ │ ├── deno_minecraft.jpg │ │ ├── deno_news.png │ │ ├── deno_paper.png │ │ ├── deno_rick.png │ │ ├── deno_simpson.png │ │ ├── deno_sun.png │ │ ├── deno_v1_congrats.jpeg │ │ ├── deno_with_ghutrah.svg │ │ ├── discodeno.gif │ │ ├── duri4n.png │ │ ├── glitchy-deno.jpg │ │ ├── hashrock_simple.png │ │ ├── jurassicDeno.jpg │ │ ├── ogdeno.png │ │ ├── pride_deno.gif │ │ ├── snow_den.png │ │ ├── space_deno.png │ │ ├── stone.jpeg │ │ └── v1.png │ ├── deno404.gif │ ├── deno_logo_4.gif │ ├── ferris.gif │ ├── icons │ │ ├── icon-128x128.png │ │ ├── icon-144x144.png │ │ ├── icon-152x152.png │ │ ├── icon-192x192.png │ │ ├── icon-384x384.png │ │ ├── icon-512x512.png │ │ ├── icon-72x72.png │ │ └── icon-96x96.png │ ├── lp │ │ ├── armor_deno.png │ │ ├── benchmark.avif │ │ ├── benchmark.png │ │ ├── benchmark.webp │ │ ├── benchmark@lg.avif │ │ ├── benchmark@lg.png │ │ ├── benchmark@lg.webp │ │ ├── companies │ │ │ ├── github.svg │ │ │ ├── netlify.svg │ │ │ ├── slack.svg │ │ │ ├── stack overflow.svg │ │ │ └── supabase.svg │ │ ├── cover.avif │ │ ├── cover.jpg │ │ ├── cover.webp │ │ ├── cover@lg.avif │ │ ├── cover@lg.jpg │ │ ├── cover@lg.webp │ │ ├── cover@xl.avif │ │ ├── cover@xl.jpg │ │ ├── cover@xl.webp │ │ ├── dependencies.gif │ │ ├── dependencies.png │ │ ├── secure.gif │ │ ├── secure.png │ │ ├── typing_deno.png │ │ ├── v8.avif │ │ ├── v8.png │ │ ├── v8.webp │ │ ├── web_compatibility.svg │ │ └── web_compatibility@lg.svg │ ├── module_banner.png │ └── showcase │ │ ├── andbounds.png │ │ ├── balello.png │ │ ├── bloginmail.png │ │ ├── budgetzen.png │ │ ├── cargo.png │ │ ├── deno-boilerplate-simple-website.png │ │ ├── denoblog.png │ │ ├── denoflow.png │ │ ├── edrys.png │ │ ├── euromillionsgenerator.png │ │ ├── fast-favicon.png │ │ ├── fresh.png │ │ ├── grammy.png │ │ ├── jsland.png │ │ ├── localseostudio.png │ │ ├── lume.png │ │ ├── minimalist-blog.png │ │ ├── neolace.png │ │ ├── netlify.png │ │ ├── optimem.png │ │ ├── pbkit.png │ │ ├── peko.png │ │ ├── profilator.png │ │ ├── sdns.png │ │ ├── shield.png │ │ ├── slack.png │ │ ├── socialcards.png │ │ ├── supabase.png │ │ ├── ter.png │ │ ├── transloadit.png │ │ ├── ultra.png │ │ ├── var.png │ │ ├── wricord.png │ │ ├── ycrm.png │ │ └── zencron.png ├── logo.svg ├── og │ ├── api.png │ ├── image.png │ ├── manual.png │ ├── modules.png │ └── std.png ├── robots.txt └── site.webmanifest ├── tests ├── handler_test.ts └── registry_config_test.ts ├── twind.config.ts ├── utils ├── benchmark_utils.ts ├── doc_utils.ts ├── manual_utils.ts ├── manual_utils_test.ts ├── prism_utils.ts ├── prism_utils_test.ts ├── registry_utils.ts ├── registry_utils_test.ts └── search_insights_utils.ts └── versions.json /.editorconfig: -------------------------------------------------------------------------------- 1 | root=true 2 | 3 | [*.{js,ts,jsx,tsx}] 4 | charset = utf-8 5 | 6 | end_of_line = lf 7 | trim_trailing_whitespace = true 8 | 9 | indent_style = space 10 | indent_size = 2 11 | 12 | insert_final_newline = true 13 | 14 | [*.yml] 15 | indent_style = space 16 | indent_size = 2 17 | trim_trailing_whitespace = true 18 | 19 | [*.md] 20 | trim_trailing_whitespace = false 21 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: ci 2 | 3 | on: [push, pull_request] 4 | 5 | jobs: 6 | check: 7 | runs-on: ubuntu-latest 8 | steps: 9 | - name: Clone repository 10 | uses: actions/checkout@v3 11 | 12 | - name: Install Deno 13 | uses: denoland/setup-deno@v1 14 | with: 15 | deno-version: v1.x 16 | 17 | - name: Check formatting 18 | run: deno fmt --check 19 | 20 | - name: Lint 21 | run: deno lint 22 | 23 | - name: Type Check 24 | run: deno check main.ts 25 | 26 | test: 27 | runs-on: ubuntu-latest 28 | steps: 29 | - name: Clone repository 30 | uses: actions/checkout@v2 31 | 32 | - name: Install Deno 33 | uses: denoland/setup-deno@v1 34 | with: 35 | deno-version: v1.x 36 | 37 | - name: Run Tests 38 | run: deno task test 39 | -------------------------------------------------------------------------------- /.github/workflows/update_versions.yml: -------------------------------------------------------------------------------- 1 | name: update_versions 2 | 3 | on: 4 | workflow_dispatch: 5 | 6 | jobs: 7 | build: 8 | name: update versions.json 9 | runs-on: ubuntu-latest 10 | timeout-minutes: 30 11 | 12 | steps: 13 | - name: Clone repository 14 | uses: actions/checkout@v2 15 | with: 16 | token: ${{ secrets.DENOBOT_PAT }} 17 | 18 | - name: Install deno 19 | uses: denoland/setup-deno@v1 20 | 21 | - name: Build and Create PR 22 | env: 23 | GITHUB_TOKEN: ${{ secrets.DENOBOT_PAT }} 24 | GH_WORKFLOW_ACTOR: ${{ github.actor }} 25 | run: | 26 | git config user.email "${{ github.actor }}@users.noreply.github.com" 27 | git config user.name "${{ github.actor }}" 28 | deno run -A scripts/update_versions.ts --create-pr 29 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # misc 2 | .DS_Store -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "deno.enable": true, 3 | "deno.lint": true, 4 | "deno.unstable": false, 5 | "editor.defaultFormatter": "denoland.vscode-deno" 6 | } 7 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018-2023 the Deno authors 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # dotland 2 | 3 | ## This repository has been archived as the source code has been moved to be closed-source only instead. For any issues, please open an issue on https://github.com/denoland/website_feedback. 4 | 5 | [![Build Status](https://github.com/denoland/dotland/workflows/ci/badge.svg?branch=main&event=push)](https://github.com/denoland/dotland/actions) 6 | 7 | This is the code for https://deno.land/ 8 | 9 | We want to provide pretty and semantic URLs for modules that will be used within 10 | Deno. For example: https://deno.land/std/http/server.ts 11 | 12 | When we request this file inside of Deno, we need to receive back the raw 13 | content of the file. However, when we visit that URL in the browser we want to 14 | see a pretty HTML file with syntax highlighting. 15 | 16 | To accomplish this, we look at the "Accept:" HTTP header to see if the client 17 | wants HTML or not. If it does want HTML, we simply render the html, else we 18 | proxy the file contents from S3 buckets. 19 | 20 | For questions or problems regarding modules, please e-mail modules@deno.com. 21 | 22 | ## Image License 23 | 24 | These Deno images are distributed under the MIT license (public domain and free 25 | for use). 26 | 27 | - [A graphic for the v1 blog post by @hashrock](https://deno.land/images/artwork/v1.png) 28 | -------------------------------------------------------------------------------- /components/BenchmarkChart.tsx: -------------------------------------------------------------------------------- 1 | // Copyright 2022-2023 the Deno authors. All rights reserved. MIT license. 2 | 3 | import { Column, formatLogScale, logScale } from "@/utils/benchmark_utils.ts"; 4 | 5 | export interface BenchmarkChartProps { 6 | yTickFormat?: (n: number) => string; 7 | columns: Column[]; 8 | yLabel?: string; 9 | } 10 | 11 | export function BenchmarkChart(props: BenchmarkChartProps) { 12 | const id = Math.random().toString(); 13 | const cols = props.columns.map((d) => ({ name: d.name, data: [...d.data] })); 14 | 15 | if (props.yTickFormat && props.yTickFormat === formatLogScale) { 16 | logScale(cols); 17 | } 18 | 19 | const series = cols.sort((a, b) => { 20 | // Sort by last benchmark. 21 | const aLast = a.data[a.data.length - 1]; 22 | const bLast = b.data[b.data.length - 1]; 23 | return (bLast ?? 0) - (aLast ?? 0); 24 | }); 25 | 26 | return ( 27 | <> 28 |
29 |