diff --git a/.gitignore b/.gitignore index 404d8b1..493a8d4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,23 @@ +# Astro +dist/ +.astro/ + +# Node +node_modules/ + +# Jekyll (legacy, can be removed after full migration) _site .asset-cache .sass-cache .jekyll-metadata +.jekyll-cache docs/assets/.sprockets-manifest-*.json + +# Editor +.DS_Store +*.swp +*.swo + +# Environment +.env +.env.* diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..22a1505 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,4 @@ +{ + "recommendations": ["astro-build.astro-vscode"], + "unwantedRecommendations": [] +} diff --git a/404.html b/404.html deleted file mode 100644 index e6b61db..0000000 --- a/404.html +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 404 Page Not Found -sitemap: false ---- -
-

404

-

Page not found :(

-

The requested page could not be found.

-
diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..ba6e4dc --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,56 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with +code in this repository. + +## Project Overview + +This is the source for commonflow.org, an Astro-based static site that documents +the Git Common-Flow specification. Common-Flow is a git workflow specification +that combines GitHub Flow with versioned releases. + +## Build Commands + +```bash +# Install dependencies +npm install + +# Development server +npm run dev + +# Build site (outputs to docs/ directory) +npm run build + +# Preview built site +npm run preview + +# Update specs from upstream (fetches from github.com/jimeh/common-flow) +npm run update +``` + +The site is built to `docs/` for GitHub Pages hosting. + +## Architecture + +- **Astro 5.x** static site generator +- **Tailwind CSS 4.x** for styling with dark mode support +- **Content Collections** for spec markdown files +- **TypeScript** throughout + +### Key Files + +- `src/config.ts` - Site configuration with version list +- `src/content.config.ts` - Astro content collection definition +- `src/layouts/Default.astro` - Main layout with sidebar +- `src/components/` - Sidebar, MenuToggle, ThemeToggle components +- `src/pages/spec/[version].astro` - Dynamic route for spec versions +- `src/content/spec/*.md` - Versioned spec documents +- `public/spec/*.svg` - SVG diagrams for each version +- `scripts/update-specs.ts` - Fetches specs from GitHub + +### Updating Spec Versions + +1. Add new version to `versions` array in `src/config.ts` +2. Update `currentVersion` if this is the new default +3. Run `npm run update` to fetch specs from GitHub +4. Run `npm run build` to rebuild the site diff --git a/Gemfile b/Gemfile deleted file mode 100644 index d0c3d1e..0000000 --- a/Gemfile +++ /dev/null @@ -1,21 +0,0 @@ -source 'https://rubygems.org' - -gem 'jekyll', '3.5.0' - -group :development do - gem 'rake' - gem 'rubocop' -end - -# If you have any plugins, put them here! -group :jekyll_plugins do - gem 'jekyll-assets' - gem 'jekyll-pants' - gem 'jekyll-seo-tag' - gem 'jekyll-sitemap' - gem 'jekyll-tidy' - gem 'uglifier' # required by 'jekyll-assets' for JS compression -end - -# Windows does not include zoneinfo files, so bundle the tzinfo-data gem -gem 'tzinfo-data', platforms: %i[mingw mswin x64_mingw jruby] diff --git a/Gemfile.lock b/Gemfile.lock deleted file mode 100644 index 6cee0d1..0000000 --- a/Gemfile.lock +++ /dev/null @@ -1,104 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - addressable (2.5.1) - public_suffix (~> 2.0, >= 2.0.2) - ast (2.4.0) - colorator (1.1.0) - concurrent-ruby (1.0.5) - execjs (2.7.0) - extras (0.3.0) - forwardable-extended (~> 2.5) - fastimage (2.1.0) - ffi (1.9.18) - forwardable-extended (2.6.0) - htmlbeautifier (1.3.1) - htmlcompressor (0.3.1) - jekyll (3.5.0) - addressable (~> 2.4) - colorator (~> 1.0) - jekyll-sass-converter (~> 1.0) - jekyll-watch (~> 1.1) - kramdown (~> 1.3) - liquid (~> 4.0) - mercenary (~> 0.3.3) - pathutil (~> 0.9) - rouge (~> 1.7) - safe_yaml (~> 1.0) - jekyll-assets (2.3.2) - concurrent-ruby (~> 1.0) - extras (~> 0.2) - fastimage (~> 2.0, >= 1.8) - jekyll (~> 3.1, >= 3.0) - pathutil (>= 0.8) - rack (~> 1.6) - sprockets (~> 3.3, < 3.8) - jekyll-pants (0.2.1) - rubypants - jekyll-sass-converter (1.5.0) - sass (~> 3.4) - jekyll-seo-tag (2.2.3) - jekyll (~> 3.3) - jekyll-sitemap (1.0.0) - jekyll (~> 3.3) - jekyll-tidy (0.2.2) - htmlbeautifier - htmlcompressor - jekyll - jekyll-watch (1.5.0) - listen (~> 3.0, < 3.1) - kramdown (1.14.0) - liquid (4.0.0) - listen (3.0.8) - rb-fsevent (~> 0.9, >= 0.9.4) - rb-inotify (~> 0.9, >= 0.9.7) - mercenary (0.3.6) - parallel (1.12.1) - parser (2.5.1.0) - ast (~> 2.4.0) - pathutil (0.14.0) - forwardable-extended (~> 2.6) - powerpack (0.1.1) - public_suffix (2.0.5) - rack (1.6.8) - rainbow (3.0.0) - rake (12.0.0) - rb-fsevent (0.10.2) - rb-inotify (0.9.10) - ffi (>= 0.5.0, < 2) - rouge (1.11.1) - rubocop (0.56.0) - parallel (~> 1.10) - parser (>= 2.5) - powerpack (~> 0.1) - rainbow (>= 2.2.2, < 4.0) - ruby-progressbar (~> 1.7) - unicode-display_width (~> 1.0, >= 1.0.1) - ruby-progressbar (1.9.0) - rubypants (0.6.0) - safe_yaml (1.0.4) - sass (3.4.25) - sprockets (3.7.1) - concurrent-ruby (~> 1.0) - rack (> 1, < 3) - uglifier (3.2.0) - execjs (>= 0.3.0, < 3) - unicode-display_width (1.3.2) - -PLATFORMS - ruby - -DEPENDENCIES - jekyll (= 3.5.0) - jekyll-assets - jekyll-pants - jekyll-seo-tag - jekyll-sitemap - jekyll-tidy - rake - rubocop - tzinfo-data - uglifier - -BUNDLED WITH - 1.16.1 diff --git a/Rakefile b/Rakefile deleted file mode 100644 index 0b75100..0000000 --- a/Rakefile +++ /dev/null @@ -1,85 +0,0 @@ -require 'open-uri' -require 'yaml' - -desc 'Build site into docs directory' -task :build do - jekyll_build -end - -desc 'Update index.md and spec folder based on versions in _config.yml' -task :update do - config = YAML.load_file('_config.yml') - current_version = config['current_version'] - versions = config['versions'] - - remove_all_specs(config['update']) - - puts '' - puts 'Fetching configured spec versions:' - versions.each do |version| - spec = fetch_spec(version, config['update']) - - if current_version == version - write_file('index.md', spec[:body], " (#{version})") - end - - filename = File.join(config['update']['output_dir'], version) - write_file("#{filename}.md", spec[:body]) - write_file("#{filename}.svg", spec[:diagram]) if spec[:diagram] - end - - jekyll_build -end - -def jekyll_build - puts 'Rebuilding output into docs directory...' - exec 'jekyll build --destination docs && touch docs/.nojekyll' -end - -def write_file(file, content, comment = nil) - puts " - #{file}#{comment}" - File.write(file, content) -end - -def fetch_spec(version, config) - document = get(build_file_url('document', version, config)) - diagram = get(build_file_url('diagram', version, config)) - - if diagram - img_tag = config['img_tpl'].gsub('{{file}}', "#{version}.svg") - document.gsub!(/\A(.*\n=+\n)/, "\\1\n#{img_tag}\n") - end - - title = document.split("\n", 2).first - body = config['body_tpl'].gsub('{{content}}', document) - .gsub('{{title}}', title) - .gsub('{{version}}', version) - - { - version: version, - title: title, - body: body, - diagram: diagram - } -end - -def build_file_url(file, version, config) - config['url_tpl'] - .gsub('{{version}}', version) - .gsub('{{file}}', config['files'][file]) -end - -def get(url) - URI.parse(url).read -rescue OpenURI::HTTPError - nil -end - -def remove_all_specs(config) - puts '' - puts 'Removing existing spec files:' - Dir["#{config['output_dir']}/*"].each do |file| - puts " #{file.gsub(File.dirname(__FILE__), '')}" - File.delete(file) - end -end diff --git a/_assets/css/_base.scss b/_assets/css/_base.scss deleted file mode 100644 index 5cb3783..0000000 --- a/_assets/css/_base.scss +++ /dev/null @@ -1,90 +0,0 @@ -html { - height: 100%; -} - -body { - font-family: 'Open Sans', Helvetica, Arial, sans-serif; - font-size: 16px; - font-weight: 400; - line-height: 1.5; - color: #1a1a1a; - background-color: #fdfdfd; -} - -h1, h2, h3, h4, h5, h6 { - font-family: 'Open Sans Condensed', Helvetica, Arial, sans-serif; - font-weight: 700; - color: #333; -} - -h1 { - font-size: 2.5em; - line-height: 1.2; -} - -ol ol, ul ol { - list-style-type: lower-roman; -} - -ul ul ol, ul ol ol, ol ul ol, ol ol ol { - list-style-type: lower-alpha; -} - -.content { - margin-top: 80px; - - a { - word-break: break-word; - } - - code { - background-color: rgba(27,31,35,0.05); - border-radius: 3px; - font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace; - font-size: 85%; - margin: 0; - padding: 0.3em 0.4em 0.1em 0.4em; - } - - pre { - background-color: #f6f8fa; - border-radius: 3px; - line-height: 1.45; - padding: 16px; - } - - pre > code { - background-color: transparent !important; - border-radius: none; - font-size: 90%; - padding: 0; - } -} - -#menu { - .pure-menu-label { - color: #999; - border: none; - padding: 0.6em 0 0.6em 0.6em; - } - - .links { - font-size: 50px; - position: absolute; - bottom: 10px; - left: 0px; - right: 0px; - text-align: center; - - a { - color: #555; - padding: 0; - position: relative; - text-decoration: none; - - &:hover { - color: #777; - } - } - } -} diff --git a/_assets/css/_side-menu.scss b/_assets/css/_side-menu.scss deleted file mode 100644 index 7abd61c..0000000 --- a/_assets/css/_side-menu.scss +++ /dev/null @@ -1,248 +0,0 @@ -body { - color: #777; -} - -.pure-img-responsive { - max-width: 100%; - height: auto; -} - -/* -Add transition to containers so they can push in and out. -*/ -#layout, -#menu, -.menu-link { - -webkit-transition: all 0.2s ease-out; - -moz-transition: all 0.2s ease-out; - -ms-transition: all 0.2s ease-out; - -o-transition: all 0.2s ease-out; - transition: all 0.2s ease-out; -} - -/* -This is the parent `
` that contains the menu and the content area. -*/ -#layout { - position: relative; - left: 0; - padding-left: 0; -} - #layout.active #menu { - left: 150px; - width: 150px; - } - - #layout.active .menu-link { - left: 150px; - } -/* -The content `
` is where all your content goes. -*/ -.content { - margin: 0 auto; - padding: 0 2em; - max-width: 800px; - margin-bottom: 50px; - line-height: 1.6em; -} - -.header { - margin: 0; - color: #333; - text-align: center; - padding: 2.5em 2em 0; - border-bottom: 1px solid #eee; - } - .header h1 { - margin: 0.2em 0; - font-size: 3em; - font-weight: 300; - } - .header h2 { - font-weight: 300; - color: #ccc; - padding: 0; - margin-top: 0; - } - -.content-subhead { - margin: 50px 0 20px 0; - font-weight: 300; - color: #888; -} - - - -/* -The `#menu` `
` is the parent `
` that contains the `.pure-menu` that -appears on the left side of the page. -*/ - -#menu { - margin-left: -150px; /* "#menu" width */ - width: 150px; - position: fixed; - top: 0; - left: 0; - bottom: 0; - z-index: 1000; /* so the menu or its navicon stays above all content */ - background: #191818; - overflow-y: auto; - -webkit-overflow-scrolling: touch; -} - /* - All anchors inside the menu should be styled like this. - */ - #menu a { - color: #999; - border: none; - padding: 0.6em 0 0.6em 0.6em; - } - - /* - Remove all background/borders, since we are applying them to #menu. - */ - #menu .pure-menu, - #menu .pure-menu ul { - border: none; - background: transparent; - } - - /* - Add that light border to separate items into groups. - */ - #menu .pure-menu ul, - #menu .pure-menu .menu-item-divided { - border-top: 1px solid #333; - } - /* - Change color of the anchor links on hover/focus. - */ - #menu .pure-menu li a:hover, - #menu .pure-menu li a:focus { - background: #333; - } - - /* - This styles the selected menu item `
  • `. - */ - #menu .pure-menu-selected, - #menu .pure-menu-heading { - background: #1f8dd6; - } - /* - This styles a link within a selected menu item `
  • `. - */ - #menu .pure-menu-selected a { - color: #fff; - } - - /* - This styles the menu heading. - */ - #menu .pure-menu-heading { - font-size: 110%; - color: #fff; - margin: 0; - } - -/* -- Dynamic Button For Responsive Menu -------------------------------------*/ - -/* -The button to open/close the Menu is custom-made and not part of Pure. Here's -how it works: -*/ - -/* -`.menu-link` represents the responsive menu toggle that shows/hides on -small screens. -*/ -.menu-link { - position: fixed; - display: block; /* show this only on small screens */ - top: 0; - left: 0; /* "#menu width" */ - background: #000; - background: rgba(0,0,0,0.7); - font-size: 10px; /* change this value to increase/decrease button size */ - z-index: 10; - width: 2em; - height: auto; - padding: 2.1em 1.6em; -} - - .menu-link:hover, - .menu-link:focus { - background: #000; - } - - .menu-link span { - position: relative; - display: block; - } - - .menu-link span, - .menu-link span:before, - .menu-link span:after { - background-color: #fff; - width: 100%; - height: 0.2em; - } - - .menu-link span:before, - .menu-link span:after { - position: absolute; - margin-top: -0.6em; - content: " "; - } - - .menu-link span:after { - margin-top: 0.6em; - } - - -/* -- Responsive Styles (Media Queries) ------------------------------------- */ - -/* -Hides the menu at `48em`, but modify this based on your app's needs. -*/ -@media (min-width: 48em) { - - .header, - .content { - padding-left: 2em; - padding-right: 2em; - } - - #layout { - padding-left: 150px; /* left col width "#menu" */ - left: 0; - } - #menu { - left: 150px; - } - - .menu-link { - position: fixed; - left: 150px; - display: none; - } - - #layout.active .menu-link { - left: 150px; - } -} - -@media (max-width: 48em) { - /* Only apply this when the window is small. Otherwise, the following - case results in extra padding on the left: - * Make the window small. - * Tap the menu to trigger the active state. - * Make the window large again. - */ - #layout.active { - position: relative; - left: 150px; - } -} diff --git a/_assets/css/main.scss b/_assets/css/main.scss deleted file mode 100644 index d5e35b0..0000000 --- a/_assets/css/main.scss +++ /dev/null @@ -1,2 +0,0 @@ -@import "side-menu"; -@import "base"; diff --git a/_assets/js/main.js b/_assets/js/main.js deleted file mode 100644 index afe5bb6..0000000 --- a/_assets/js/main.js +++ /dev/null @@ -1 +0,0 @@ -// = require ui diff --git a/_assets/js/ui.js b/_assets/js/ui.js deleted file mode 100644 index 4308341..0000000 --- a/_assets/js/ui.js +++ /dev/null @@ -1,44 +0,0 @@ -(function (window, document) { - var layout = document.getElementById('layout'); - var menu = document.getElementById('menu'); - var menuLink = document.getElementById('menuLink'); - var content = document.getElementById('main'); - - function toggleClass (element, className) { - var classes = element.className.split(/\s+/); - var length = classes.length; - var i = 0; - - for (; i < length; i++) { - if (classes[i] === className) { - classes.splice(i, 1); - break; - } - } - // The className is not found - if (length === classes.length) { - classes.push(className); - } - - element.className = classes.join(' '); - } - - function toggleAll (e) { - var active = 'active'; - - e.preventDefault(); - toggleClass(layout, active); - toggleClass(menu, active); - toggleClass(menuLink, active); - } - - menuLink.onclick = function (e) { - toggleAll(e); - }; - - content.onclick = function (e) { - if (menu.className.indexOf('active') !== -1) { - toggleAll(e); - } - }; -}(this, this.document)); diff --git a/_config.yml b/_config.yml deleted file mode 100644 index 65c65c5..0000000 --- a/_config.yml +++ /dev/null @@ -1,61 +0,0 @@ -title: Git Common Flow -description: > - An attempt to gather a sensible selection of the most common usage patterns of - git into a single and concise specification. -author: Jim Myhrberg -hostname: commonflow.org -url: https://commonflow.org -repo_url: https://github.com/jimeh/common-flow - -current_version: 1.0.0-rc.5 -versions: - - 1.0.0-rc.5 - - 1.0.0-rc.4 - - 1.0.0-rc.3 - - 1.0.0-rc.2 - - 1.0.0-rc.1 - -exclude: - - Gemfile - - Gemfile.lock - - Rakefile - - README.md - -update: - body_tpl: | - --- - title: {{title}} - version: {{version}} - --- - {{content}} - url_tpl: "https://github.com/jimeh/common-flow/raw/{{version}}/{{file}}" - img_tpl: "" - output_dir: "spec" - files: - document: common-flow.md - diagram: common-flow.svg - -plugins: - - jekyll-assets - - jekyll-pants - - jekyll-sitemap - - jekyll-seo-tag - - jekyll-tidy - -defaults: - - - scope: - path: "" - values: - layout: "default" - -assets: - digest: true - compress: - css: true - js: true - img: true - -markdown: kramdown -kramdown: - input: Pantsdown # disable smart quotes typographic symbols diff --git a/_layouts/default.html b/_layouts/default.html deleted file mode 100644 index 9e047d6..0000000 --- a/_layouts/default.html +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - {% css main %} - {% seo %} - - -
    - - - - - -
    -
    - {{ content }} -
    -
    -
    - {% js main %} - - diff --git a/astro.config.mjs b/astro.config.mjs new file mode 100644 index 0000000..873140a --- /dev/null +++ b/astro.config.mjs @@ -0,0 +1,12 @@ +import { defineConfig } from "astro/config"; +import tailwindcss from "@tailwindcss/vite"; +import sitemap from "@astrojs/sitemap"; + +export default defineConfig({ + site: "https://commonflow.org", + outDir: "./docs", + integrations: [sitemap()], + vite: { + plugins: [tailwindcss()], + }, +}); diff --git a/docs/404.html b/docs/404.html index d0e17ca..5451fc9 100644 --- a/docs/404.html +++ b/docs/404.html @@ -1,72 +1,30 @@ - - - - - - - - - - - - 404 Page Not Found | Git Common Flow - - - - - - - - - - - - -
    - - - - -
    -
    -
    -

    404

    -

    Page not found :(

    -

    The requested page could not be found.

    -
    -
    -
    -
    - - - \ No newline at end of file + Page Not Found | Git Common Flow +

    404

    Page not found.

    Go to the homepage

    \ No newline at end of file diff --git a/docs/CNAME b/docs/CNAME deleted file mode 100644 index 18678d3..0000000 --- a/docs/CNAME +++ /dev/null @@ -1 +0,0 @@ -commonflow.org diff --git a/docs/_astro/_version_.BDyAzQHc.css b/docs/_astro/_version_.BDyAzQHc.css new file mode 100644 index 0000000..4ef9fb8 --- /dev/null +++ b/docs/_astro/_version_.BDyAzQHc.css @@ -0,0 +1 @@ +/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-duration:initial}}}@layer theme{:root,:host{--font-sans:"Open Sans",Helvetica,Arial,sans-serif;--font-mono:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,Courier,monospace;--color-white:#fff;--spacing:.25rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-text-primary:#1a1a1a;--color-text-muted:#999;--color-bg-primary:#fdfdfd;--color-bg-code:#f6f8fa;--color-bg-code-inline:#1b1f230d;--color-dark-text-primary:#e5e5e5;--color-dark-bg-primary:#0d0d0d;--color-dark-bg-code:#1a1a1a;--color-dark-bg-code-inline:#ffffff1a;--font-heading:"Open Sans Condensed",Helvetica,Arial,sans-serif}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}html{height:100%}body{font-family:var(--font-sans);color:var(--color-text-primary);background-color:var(--color-bg-primary);font-size:16px;font-weight:400;line-height:1.5}.dark body{color:var(--color-dark-text-primary);background-color:var(--color-dark-bg-primary)}h1,h2,h3,h4,h5,h6{font-family:var(--font-heading);color:#333;font-weight:700}.dark h1,.dark h2,.dark h3,.dark h4,.dark h5,.dark h6{color:#e5e5e5}h1{font-size:2.5em;line-height:1.2}ol ol,ul ol{list-style-type:lower-roman}ul ul ol,ul ol ol,ol ul ol,ol ol ol{list-style-type:lower-alpha}a{word-break:break-word}code{background-color:var(--color-bg-code-inline);font-family:var(--font-mono);border-radius:3px;margin:0;padding:.3em .4em .1em;font-size:85%}.dark code{background-color:var(--color-dark-bg-code-inline)}pre{background-color:var(--color-bg-code);border-radius:3px;padding:16px;line-height:1.45}.dark pre{background-color:var(--color-dark-bg-code)}pre>code{border-radius:0;padding:0;font-size:90%;background-color:#0000!important}}@layer components{#layout,#menu,.menu-link{transition:all .2s ease-out}}@layer utilities{.visible{visibility:visible}.static{position:static}.flex{display:flex}.hidden{display:none}.h-6{height:calc(var(--spacing)*6)}.h-12{height:calc(var(--spacing)*12)}.w-6{width:calc(var(--spacing)*6)}.w-12{width:calc(var(--spacing)*12)}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.border{border-style:var(--tw-border-style);border-width:1px}.p-2{padding:calc(var(--spacing)*2)}.text-\[color\:var\(--color-text-muted\)\]{color:var(--color-text-muted)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}@media(hover:hover){.hover\:text-white:hover{color:var(--color-white)}}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-duration{syntax:"*";inherits:false}#menu[data-astro-cid-ssfzsv2f]{margin-left:-150px;width:150px;position:fixed;top:0;left:0;bottom:0;z-index:1000;background:#191818;overflow-y:auto;-webkit-overflow-scrolling:touch;transition:all .2s ease-out;display:flex;flex-direction:column}.menu-inner[data-astro-cid-ssfzsv2f]{flex:1}.menu-list[data-astro-cid-ssfzsv2f]{list-style:none;margin:0;padding:0;border:none;background:transparent;border-top:1px solid #333}.menu-label[data-astro-cid-ssfzsv2f]{color:#999;border:none;padding:.6em 0 .6em .6em;font-size:.9em}.menu-item[data-astro-cid-ssfzsv2f]{border:none}.menu-link-item[data-astro-cid-ssfzsv2f]{display:block;color:#999;border:none;padding:.6em 0 .6em .6em;text-decoration:none;transition:background-color .15s ease}.menu-link-item[data-astro-cid-ssfzsv2f]:hover,.menu-link-item[data-astro-cid-ssfzsv2f]:focus{background:#333}.menu-item[data-astro-cid-ssfzsv2f].selected{background:#1f8dd6}.menu-item[data-astro-cid-ssfzsv2f].selected .menu-link-item[data-astro-cid-ssfzsv2f]{color:#fff}.links[data-astro-cid-ssfzsv2f]{font-size:50px;padding:10px 0;text-align:center;display:flex;flex-direction:column;align-items:center;gap:.25rem}.github-link[data-astro-cid-ssfzsv2f]{color:#555;padding:0;position:relative;text-decoration:none;transition:color .15s ease}.github-link[data-astro-cid-ssfzsv2f]:hover{color:#777}@media(min-width:48em){#menu[data-astro-cid-ssfzsv2f]{left:150px}}#layout.active #menu[data-astro-cid-ssfzsv2f]{left:150px;width:150px}.menu-link[data-astro-cid-jyixok4n]{position:fixed;display:block;top:0;left:0;background:#000000b3;font-size:10px;z-index:10;width:2em;height:auto;padding:2.1em 1.6em;transition:all .2s ease-out}.menu-link[data-astro-cid-jyixok4n]:hover,.menu-link[data-astro-cid-jyixok4n]:focus{background:#000}.menu-link[data-astro-cid-jyixok4n] span[data-astro-cid-jyixok4n]{position:relative;display:block}.menu-link[data-astro-cid-jyixok4n] span[data-astro-cid-jyixok4n],.menu-link[data-astro-cid-jyixok4n] span[data-astro-cid-jyixok4n]:before,.menu-link[data-astro-cid-jyixok4n] span[data-astro-cid-jyixok4n]:after{background-color:#fff;width:100%;height:.2em}.menu-link[data-astro-cid-jyixok4n] span[data-astro-cid-jyixok4n]:before,.menu-link[data-astro-cid-jyixok4n] span[data-astro-cid-jyixok4n]:after{position:absolute;margin-top:-.6em;content:" "}.menu-link[data-astro-cid-jyixok4n] span[data-astro-cid-jyixok4n]:after{margin-top:.6em}@media(min-width:48em){.menu-link[data-astro-cid-jyixok4n]{left:150px;display:none}}#layout.active .menu-link[data-astro-cid-jyixok4n]{left:150px}#layout[data-astro-cid-jwirc66j]{position:relative;left:0;padding-left:0;transition:all .2s ease-out}#main[data-astro-cid-jwirc66j]{min-height:100vh}.content[data-astro-cid-jwirc66j]{margin:0 auto 50px;padding:80px 2em 0;max-width:800px;line-height:1.6em}@media(min-width:48em){#layout[data-astro-cid-jwirc66j]{padding-left:150px;left:0}.content[data-astro-cid-jwirc66j]{padding-left:2em;padding-right:2em}}@media(max-width:48em){#layout.active{position:relative;left:150px}} diff --git a/docs/assets/main-082b10f3e2581d4b34b66958419ec52aec823571e474eb04ffdb3b7c4e6f455e.css b/docs/assets/main-082b10f3e2581d4b34b66958419ec52aec823571e474eb04ffdb3b7c4e6f455e.css deleted file mode 100644 index d112b2d..0000000 --- a/docs/assets/main-082b10f3e2581d4b34b66958419ec52aec823571e474eb04ffdb3b7c4e6f455e.css +++ /dev/null @@ -1 +0,0 @@ -body{color:#777}.pure-img-responsive{max-width:100%;height:auto}#layout,#menu,.menu-link{-webkit-transition:all 0.2s ease-out;-moz-transition:all 0.2s ease-out;-ms-transition:all 0.2s ease-out;-o-transition:all 0.2s ease-out;transition:all 0.2s ease-out}#layout{position:relative;left:0;padding-left:0}#layout.active #menu{left:150px;width:150px}#layout.active .menu-link{left:150px}.content{margin:0 auto;padding:0 2em;max-width:800px;margin-bottom:50px;line-height:1.6em}.header{margin:0;color:#333;text-align:center;padding:2.5em 2em 0;border-bottom:1px solid #eee}.header h1{margin:0.2em 0;font-size:3em;font-weight:300}.header h2{font-weight:300;color:#ccc;padding:0;margin-top:0}.content-subhead{margin:50px 0 20px 0;font-weight:300;color:#888}#menu{margin-left:-150px;width:150px;position:fixed;top:0;left:0;bottom:0;z-index:1000;background:#191818;overflow-y:auto;-webkit-overflow-scrolling:touch}#menu a{color:#999;border:none;padding:0.6em 0 0.6em 0.6em}#menu .pure-menu,#menu .pure-menu ul{border:none;background:transparent}#menu .pure-menu ul,#menu .pure-menu .menu-item-divided{border-top:1px solid #333}#menu .pure-menu li a:hover,#menu .pure-menu li a:focus{background:#333}#menu .pure-menu-selected,#menu .pure-menu-heading{background:#1f8dd6}#menu .pure-menu-selected a{color:#fff}#menu .pure-menu-heading{font-size:110%;color:#fff;margin:0}.menu-link{position:fixed;display:block;top:0;left:0;background:#000;background:rgba(0,0,0,0.7);font-size:10px;z-index:10;width:2em;height:auto;padding:2.1em 1.6em}.menu-link:hover,.menu-link:focus{background:#000}.menu-link span{position:relative;display:block}.menu-link span,.menu-link span:before,.menu-link span:after{background-color:#fff;width:100%;height:0.2em}.menu-link span:before,.menu-link span:after{position:absolute;margin-top:-0.6em;content:" "}.menu-link span:after{margin-top:0.6em}@media (min-width: 48em){.header,.content{padding-left:2em;padding-right:2em}#layout{padding-left:150px;left:0}#menu{left:150px}.menu-link{position:fixed;left:150px;display:none}#layout.active .menu-link{left:150px}}@media (max-width: 48em){#layout.active{position:relative;left:150px}}html{height:100%}body{font-family:'Open Sans', Helvetica, Arial, sans-serif;font-size:16px;font-weight:400;line-height:1.5;color:#1a1a1a;background-color:#fdfdfd}h1,h2,h3,h4,h5,h6{font-family:'Open Sans Condensed', Helvetica, Arial, sans-serif;font-weight:700;color:#333}h1{font-size:2.5em;line-height:1.2}ol ol,ul ol{list-style-type:lower-roman}ul ul ol,ul ol ol,ol ul ol,ol ol ol{list-style-type:lower-alpha}.content{margin-top:80px}.content a{word-break:break-word}.content code{background-color:rgba(27,31,35,0.05);border-radius:3px;font-family:"SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;font-size:90%;margin:0;padding:0.2em}#menu .pure-menu-label{color:#999;border:none;padding:0.6em 0 0.6em 0.6em} diff --git a/docs/assets/main-16db41e8ef2362fe9967bb0bee92e459cf76f2a846e85c96322243077a88c301.css b/docs/assets/main-16db41e8ef2362fe9967bb0bee92e459cf76f2a846e85c96322243077a88c301.css deleted file mode 100644 index 8cf46c1..0000000 --- a/docs/assets/main-16db41e8ef2362fe9967bb0bee92e459cf76f2a846e85c96322243077a88c301.css +++ /dev/null @@ -1 +0,0 @@ -body{color:#777}.pure-img-responsive{max-width:100%;height:auto}#layout,#menu,.menu-link{-webkit-transition:all 0.2s ease-out;-moz-transition:all 0.2s ease-out;-ms-transition:all 0.2s ease-out;-o-transition:all 0.2s ease-out;transition:all 0.2s ease-out}#layout{position:relative;left:0;padding-left:0}#layout.active #menu{left:150px;width:150px}#layout.active .menu-link{left:150px}.content{margin:0 auto;padding:0 2em;max-width:800px;margin-bottom:50px;line-height:1.6em}.header{margin:0;color:#333;text-align:center;padding:2.5em 2em 0;border-bottom:1px solid #eee}.header h1{margin:0.2em 0;font-size:3em;font-weight:300}.header h2{font-weight:300;color:#ccc;padding:0;margin-top:0}.content-subhead{margin:50px 0 20px 0;font-weight:300;color:#888}#menu{margin-left:-150px;width:150px;position:fixed;top:0;left:0;bottom:0;z-index:1000;background:#191818;overflow-y:auto;-webkit-overflow-scrolling:touch}#menu a{color:#999;border:none;padding:0.6em 0 0.6em 0.6em}#menu .pure-menu,#menu .pure-menu ul{border:none;background:transparent}#menu .pure-menu ul,#menu .pure-menu .menu-item-divided{border-top:1px solid #333}#menu .pure-menu li a:hover,#menu .pure-menu li a:focus{background:#333}#menu .pure-menu-selected,#menu .pure-menu-heading{background:#1f8dd6}#menu .pure-menu-selected a{color:#fff}#menu .pure-menu-heading{font-size:110%;color:#fff;margin:0}.menu-link{position:fixed;display:block;top:0;left:0;background:#000;background:rgba(0,0,0,0.7);font-size:10px;z-index:10;width:2em;height:auto;padding:2.1em 1.6em}.menu-link:hover,.menu-link:focus{background:#000}.menu-link span{position:relative;display:block}.menu-link span,.menu-link span:before,.menu-link span:after{background-color:#fff;width:100%;height:0.2em}.menu-link span:before,.menu-link span:after{position:absolute;margin-top:-0.6em;content:" "}.menu-link span:after{margin-top:0.6em}@media (min-width: 48em){.header,.content{padding-left:2em;padding-right:2em}#layout{padding-left:150px;left:0}#menu{left:150px}.menu-link{position:fixed;left:150px;display:none}#layout.active .menu-link{left:150px}}@media (max-width: 48em){#layout.active{position:relative;left:150px}}html{height:100%}body{font-family:'Open Sans', Helvetica, Arial, sans-serif;font-size:16px;font-weight:400;line-height:1.5;color:#1a1a1a;background-color:#fdfdfd}h1,h2,h3,h4,h5,h6{font-family:'Open Sans Condensed', Helvetica, Arial, sans-serif;font-weight:700;color:#333}h1{font-size:2.5em;line-height:1.2}ol ol,ul ol{list-style-type:lower-roman}ul ul ol,ul ol ol,ol ul ol,ol ol ol{list-style-type:lower-alpha}.content{margin-top:80px}.content a{word-break:break-word}.content code{background-color:rgba(27,31,35,0.05);border-radius:3px;font-family:"SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;font-size:90%;margin:0;padding:0.2em}#menu .pure-menu-label{color:#999;border:none;padding:0.6em 0 0.6em 0.6em}#menu .links{font-size:50px;position:absolute;bottom:10px;left:0px;right:0px;text-align:center}#menu .links a{color:#555;padding:0;position:relative;text-decoration:none}#menu .links a:hover{color:#777} diff --git a/docs/assets/main-870855580c69dec57be4c965d0cf8afe78afa6b7b6f6bdb5aff91ac0256c0a1a.js b/docs/assets/main-870855580c69dec57be4c965d0cf8afe78afa6b7b6f6bdb5aff91ac0256c0a1a.js deleted file mode 100644 index fa63c7a..0000000 --- a/docs/assets/main-870855580c69dec57be4c965d0cf8afe78afa6b7b6f6bdb5aff91ac0256c0a1a.js +++ /dev/null @@ -1 +0,0 @@ -!function(e,n){function t(e,n){for(var t=e.className.split(/\s+/),i=t.length,c=0;ccode{background-color:transparent !important;border-radius:none;font-size:90%;padding:0}#menu .pure-menu-label{color:#999;border:none;padding:0.6em 0 0.6em 0.6em}#menu .links{font-size:50px;position:absolute;bottom:10px;left:0px;right:0px;text-align:center}#menu .links a{color:#555;padding:0;position:relative;text-decoration:none}#menu .links a:hover{color:#777} diff --git a/docs/index.html b/docs/index.html index 6812219..2947b2d 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1,425 +1 @@ - - - - - - - - - - - - Git Common-Flow 1.0.0-rc.5 | Git Common Flow - - - - - - - - - - - - -
    - - - - -
    -
    -

    Git Common-Flow 1.0.0-rc.5

    -

    -

    Introduction

    -

    Common-Flow is an attempt to gather a sensible selection of the most common - usage patterns of git into a single and concise specification. It is based on - the original variant - of GitHub Flow, while taking - into account how a lot of open source projects most commonly use git.

    -

    In short, Common-Flow is essentially GitHub Flow with the addition of versioned - releases, optional release branches, and without the requirement to deploy to - production all the time.

    -

    Summary

    -
      -
    • The "master" branch is the mainline branch with latest changes, and must not - be broken.
    • -
    • Changes (features, bugfixes, etc.) are done on "change branches" created from - the master branch.
    • -
    • Rebase change branches early and often.
    • -
    • When a change branch is stable and ready, it is merged back in to master.
    • -
    • A release is just a git tag who's name is the exact release version string - (e.g. "2.11.4").
    • -
    • Release branches can be used to avoid change freezes on master. They are not - required, instead they are available if you need them.
    • -
    -

    Terminology

    -
      -
    • Master Branch - Must be named "master", must always have passing tests, - and is not guaranteed to always work in production environments.
    • -
    • Change Branches - Any branch that introduces changes like a new feature, a - bug fix, etc.
    • -
    • Source Branch - The branch that a change branch was created from. New - changes in the source branch should be incorporated into the change branch via - rebasing.
    • -
    • Merge Target - A branch that is the intended merge target for a change - branch. Typically the merge target branch will be the same as the source - branch.
    • -
    • Pull Request - A means of requesting that a change branch is merged in to - its merge target, allowing others to review, discuss and approve the changes.
    • -
    • Release - May be considered safe to use in production environments. Is - effectively just a git tag named after the version of the release.
    • -
    • Release Branches - Used both for short-term preparations of a release, and - also for long-term maintenance of older version.
    • -
    -

    Git Common-Flow Specification (Common-Flow)

    -

    The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", - "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be - interpreted as described in RFC 2119.

    -
      -
    1. TL;DR -
        -
      1. Do not break the master branch.
      2. -
      3. A release is a git tag.
      4. -
      -
    2. -
    3. The Master Branch -
        -
      1. A branch named "master" MUST exist and it MUST be referred to as the - "master branch".
      2. -
      3. The master branch MUST always be in a non-broken state with its test - suite passing.
      4. -
      5. The master branch IS NOT guaranteed to always work in production - environments. Despite test suites passing it may at times contain - unfinished work. Only releases may be considered safe for production use.
      6. -
      7. The master branch SHOULD always be in a "as near as possibly ready for - release/production" state to reduce any friction with creating a new - release.
      8. -
      -
    4. -
    5. Change Branches -
        -
      1. Each change (feature, bugfix, etc.) MUST be performed on separate - branches that SHOULD be referred to as "change branches".
      2. -
      3. All change branches MUST have descriptive names.
      4. -
      5. It is RECOMMENDED that you commit often locally, and that you try and - keep the commits reasonably structured to avoid a messy and confusing git - history.
      6. -
      7. You SHOULD regularly push your work to the same named branch on the - remote server.
      8. -
      9. You SHOULD create separate change branches for each distinctly different - change. You SHOULD NOT include multiple unrelated changes into a single - change branch.
      10. -
      11. When a change branch is created, the branch that it is created from - SHOULD be referred to as the "source branch". Each change branch also - needs a designated "merge target" branch, typically this will be the same - as the source branch.
      12. -
      13. Change branches MUST be regularly updated with any changes from their - source branch. This MUST be done by rebasing the change branch on top of - the source branch.
      14. -
      15. After updating a change branch from its source branch you MUST push the - change branch to the remote server. Due to the nature of rebasing, you - will be required to do a force push, and you MUST use the - "--force-with-lease" git push option when doing so instead of the regular - "--force".
      16. -
      17. If there is a truly valid technical reason to not use rebase when - updating change branches, then you can update change branches via merge - instead of rebase. The decision to use merge MUST only be taken after all - possible options to use rebase have been tried and failed. People not - understanding how to use rebase is NOT a valid reason to use merge. If - you do decide to use merge instead of rebase, you MUST NOT use a mixture - of both methods, pick one and stick to it.
      18. -
      -
    6. -
    7. Pull Requests -
        -
      1. To merge a change branch into its merge target, you MUST open a "pull - request" (or equivalent).
      2. -
      3. The purpose of a pull request is to allow others to review your changes - and give feedback. You can then fix any issues, complaints, and more that - might arise, and then let people review again.
      4. -
      5. Before creating a pull request, it is RECOMMENDED that you consider the - state of your change branch's commit history. If it is messy and - confusing, it might be a good idea to rebase your branch with "git rebase - -i" to present a cleaner and easier to follow commit history for your - reviewers.
      6. -
      7. A pull request MUST only be merged when the change branch is up-to-date - with its source branch, the test suite is passing, and you and others are - happy with the change. This is especially important if the merge target - is the master branch.
      8. -
      9. To get feedback, help, or generally just discuss a change branch with - others, it is RECOMMENDED you create a pull request and discuss the - changes with others there. This leaves a clear and visible history of - how, when, and why the code looks and behaves the way it does.
      10. -
      -
    8. -
    9. Versioning -
        -
      1. A "version string" is a typically mostly numeric string that identifies a - specific version of a project. The version string itself MUST NOT have a - "v" prefix, but the version string can be displayed with a "v" prefix to - indicate it is a version that is being referred to.
      2. -
      3. The source of truth for a project's version MUST be a git tag with a name - based on the version string. This kind of tag MUST be referred to as a - "release tag".
      4. -
      5. It is OPTIONAL, but RECOMMENDED to also keep the version string - hard-coded somewhere in the project code-base.
      6. -
      7. If you hard-code the version string into the code-base, it is RECOMMENDED - that you do so in a file called "VERSION" located in the root of the - project. But be mindful of the conventions of your programming language - and community when choosing if, where and how to hard-code the version - string.
      8. -
      9. If you are using a "VERSION" file in the root of the project, this file - MUST only contain the exact version string, meaning it MUST NOT have a - "v" prefix. For example "v2.11.4" is bad, and "2.11.4" is good.
      10. -
      11. It is OPTIONAL, but RECOMMENDED that that the version string follows - Semantic Versioning (http://semver.org/).
      12. -
      -
    10. -
    11. Releases -
        -
      1. To create a new release, you MUST create a git tag named as the exact - version string of the release. This kind of tag MUST be referred to as a - "release tag".
      2. -
      3. The release tag name can OPTIONALLY be prefixed with "v". For example the - tag name can be either "2.11.4" or "v2.11.4". It is however RECOMMENDED - that you do not use a "v" prefix. You MUST NOT use a mixture of "v" - prefixed and non-prefixed tags. Pick one form and stick to it.
      4. -
      5. If the version string is hard-coded into the code-base, you MUST create a - "version bump" commit which changes the hard-coded version string of the - project.
      6. -
      7. When using version bump commits, the release tag MUST be placed on the - version bump commit.
      8. -
      9. If you are not using a release branch, then the release tag, and if - relevant the version bump commit, MUST be created directly on the master - branch.
      10. -
      11. The version bump commit SHOULD have a commit message title of "Bump - version to VERSION". For example, if the new version string is "2.11.4", - the first line of the commit message SHOULD read: "Bump version to - 2.11.4"
      12. -
      13. It is RECOMMENDED that release tags are lightweight tags, but you can - OPTIONALLY use annotated tags if you want to include changelog - information in the release tag itself.
      14. -
      15. If you use annotated release tags, the first line of the annotation - SHOULD read "Release VERSION". For example for version "2.11.4" the first - line of the tag annotation SHOULD read "Release 2.11.4". The second line - MUST be blank, and the changelog MUST start on the third line.
      16. -
      -
    12. -
    13. Short-Term Release Branches -
        -
      1. Any branch that has a name starting with "release-" SHOULD be referred to - as a "release branch".
      2. -
      3. Any release branch which has a name ending with a specific version - string, MUST be referred to as a "short-term release branch".
      4. -
      5. Use of short-term release branches are OPTIONAL, and intended to be used - to create a specific versioned release.
      6. -
      7. A short-term release branch is RECOMMENDED if there is a lengthy - pre-release verification process to avoid a code freeze on the master - branch.
      8. -
      9. Short-term release branches MUST have a name of "release-VERSION". For - example for version "2.11.4" the release branch name MUST be - "release-2.11.4".
      10. -
      11. When using a short-term release branch to create a release, the release - tag and if used, version bump commit, MUST be placed directly on the - short-term release branch itself.
      12. -
      13. Only very minor changes should be performed on a short-term release - branch directly. Any larger changes SHOULD be done in the master branch, - and SHOULD be pulled into the release branch by rebasing it on top of the - master branch the same way a change branch pulls in updates from its - source branch.
      14. -
      15. After a release tag has been created, the release branch MUST be merged - back into its source branch and then deleted. Typically the source branch - will be the master branch.
      16. -
      -
    14. -
    15. Long-term Release Branches -
        -
      1. Any release branch which has a name ending with a non-specific version - string, MUST be referred to as a "long-term release branch". For example - "release-2.11" is a long-term release branch, while "release-2.11.4" is a - short-term release branch.
      2. -
      3. Use of long-term release branches are OPTIONAL, and intended for work on - versions which are not currently part of the master branch. Typically - this is useful when you need to create a new maintenance release for a - older version.
      4. -
      5. A long-term release branch MUST have a name with a non-specific version - number. For example a long-term release branch for creating new 2.9.x - releases MUST be named "release-2.9".
      6. -
      7. Long-term release branches for maintenance releases of older versions - MUST be created from the relevant release tag. For example if the master - branch is on version 2.11.4 and there is a security fix for all 2.9.x - releases, the latest of which is "2.9.7". Create a new branch called - "release-2.9" from the "2.9.7" release tag. The security fix release will - then end up being version "2.9.8".
      8. -
      9. To create a new release from a long-term release branch, you MUST follow - the same process as a release from the master branch, except the - long-term release branch takes the place of the master branch.
      10. -
      11. A long-term release branch should be treated with the same respect as the - master branch. It is effectively the master branch for the release series - in question. Meaning it MUST always be in a non-broken state, MUST NOT be - force pushed to, etc.
      12. -
      -
    16. -
    17. Bug Fixes & Rollback -
        -
      1. You MUST NOT under any circumstances force push to the master branch or - to long-term release branches.
      2. -
      3. If a change branch which has been merged into the master branch is found - to have a bug in it, the bug fix work MUST be done as a new separate - change branch and MUST follow the same workflow as any other change - branch.
      4. -
      5. If a change branch is wrongfully merged into master, or for any other - reason the merge must be undone, you MUST undo the merge by reverting the - merge commit itself. Effectively creating a new commit that reverses all - the relevant changes.
      6. -
      -
    18. -
    19. Git Best Practices -
        -
      1. All commit messages SHOULD follow the Commit Guidelines and format from - the official git - documentation: - https://git-scm.com/book/en/v2/Distributed-Git-Contributing-to-a-Project#_commit_guidelines
      2. -
      3. You SHOULD never blindly commit all changes with "git commit -a". It is - RECOMMENDED you use "git add -i" or "git add -p" to add individual - changes to the staging area so you are fully aware of what you are - committing.
      4. -
      5. You SHOULD always use "--force-with-lease" when doing a force push. The - regular "--force" option is dangerous and destructive. More - information: - https://developer.atlassian.com/blog/2015/04/force-with-lease/
      6. -
      7. You SHOULD understand and be comfortable with - rebasing: https://git-scm.com/book/en/v2/Git-Branching-Rebasing
      8. -
      9. It is RECOMMENDED that you always do "git pull --rebase" instead of "git - pull" to avoid unnecessary merge commits. You can make this the default - behavior of "git pull" with "git config --global pull.rebase true".
      10. -
      11. It is RECOMMENDED that all branches be merged using "git merge --no-ff". - This makes sure the reference to the original branch is kept in the - commits, allows one to revert a merge by reverting a single merge commit, - and creates a merge commit to mark the integration of the branch with - master.
      12. -
      -
    20. -
    -

    FAQ

    -

    Why use Common-Flow instead of Git Flow, and how does it differ?

    -

    Common-Flow tries to be a lot less complicated than Git Flow by having fewer - types of branches, and simpler rules. Normal day to day development doesn't - really change much:

    -
      -
    • You create change branches instead of feature branches, without the need of a - "feature/" or "change/" prefix in the branch name.
    • -
    • Change branches are typically created from and merged back into "master" - instead of "develop".
    • -
    • Creating a release is done by simply creating a git tag, typically on the - master branch.
    • -
    -

    In detail, the main differences between Git Flow and Common-Flow are:

    -
      -
    • There is no "develop" branch, there is only a "master" branch which contains - the latest work. In Git Flow the master branch effectively ends up just being - a pointer to the latest release, despite the fact that Git Flow includes - release tags too. In Common-Flow you just look at the tags to find the latest - release.
    • -
    • There are no "feature" or "hotfix" branches, there's only "change" - branches. Any branch that is not master and introduces changes is a change - branch. Change branches also don't have a enforced naming convention, they - just have to have a "descriptive name". This makes things simpler and allows - more flexibility.
    • -
    • Release branches are available, but optional. Instead of enforcing the use of - release branches like Git Flow, Common-Flow only recommends the use of release - branches when it makes things easier. If creating a new release by tagging - "master" works for you, great, do that.
    • -
    -

    Why use Common-Flow instead of GitHub Flow, and how does it differ?

    -

    Common-Flow is essentially GitHub Flow with the addition of a "Release" concept - that uses tags. It also attempts to define how certain common tasks are done, - like updating change/feature branches from their source branches for - example. This is to help end arguments about how such things are done.

    -

    If a deployment/release for you is just getting the latest code in the master - branch out, without caring about bumping version numbers or anything, then - GitHub Flow is a good fit for you, and you probably don't need the extras of - Common-Flow.

    -

    However if your deployments/releases have specific version numbers, then - Common-Flow gives you a simple set of rules of how to create and manage - releases, on top of what GitHub Flow already does.

    -

    What does "descriptive name" mean for change branches?

    -

    It means what it sounds like. The name should be descriptive, as in by just - reading the name of the branch you should understand what the branch's purpose - is and what it does. Here's a few examples:

    -
      -
    • add-2fa-support
    • -
    • fix-login-issue
    • -
    • remove-sort-by-middle-name-functionality
    • -
    • update-font-awesome
    • -
    • change-search-behavior
    • -
    • improve-pagination-performance
    • -
    • tweak-footer-style
    • -
    -

    Notice how none of these have any prefixes like "feature/" or "hotfix/", they're - not needed when branch names are properly descriptive. However there's nothing - to say you can't use such prefixes if you want.

    -

    You can also add ticket numbers to the branch name if your team/org has that as - part of it's process. But it is recommended that ticket numbers are added to the - end of the branch name. The ticket number is essentially metadata, so put it at - the end and out of the way of humans trying to read the descriptive name from - left to right.

    -

    How do we release an emergency hotfix when the master branch is broken?

    -

    This should ideally never happen, however if it does you can do one of the - following:

    -
      -
    • Review why the master branch is broken and revert the changes that caused the - issues. Then apply the hotfix and release.
    • -
    • Or use a short-term release branch created from the latest release tag instead - of the master branch. Apply the hotfix to the release branch, create a release - tag on the release branch, and then merge it back into master.
    • -
    -

    In this situation, it is recommended you try to revert the offending changes - that's preventing a new release from master. But if that proves to be a - complicated task and you're short on time, a short-term release branch gives you - a instant fix to the situation at hand, and let's you resolve the issues with - the master branch when you have more time on your hands.

    -

    About

    -

    The Git Common-Flow specification is authored - by Jim Myhrberg.

    -

    If you'd like to leave feedback, - please open an issue on GitHub.

    -

    License

    -

    Creative Commons - CC BY 4.0

    -
    -
    -
    - - - \ No newline at end of file +Redirecting to: /spec/1.0.0-rc.5 Redirecting from / to /spec/1.0.0-rc.5 \ No newline at end of file diff --git a/docs/robots.txt b/docs/robots.txt deleted file mode 100644 index c6d7aaa..0000000 --- a/docs/robots.txt +++ /dev/null @@ -1 +0,0 @@ -Sitemap: https://commonflow.org/sitemap.xml \ No newline at end of file diff --git a/docs/sitemap-0.xml b/docs/sitemap-0.xml new file mode 100644 index 0000000..5289de2 --- /dev/null +++ b/docs/sitemap-0.xml @@ -0,0 +1 @@ +https://commonflow.org/https://commonflow.org/spec/1.0.0-rc.1/https://commonflow.org/spec/1.0.0-rc.2/https://commonflow.org/spec/1.0.0-rc.3/https://commonflow.org/spec/1.0.0-rc.4/https://commonflow.org/spec/1.0.0-rc.5/ \ No newline at end of file diff --git a/docs/sitemap-index.xml b/docs/sitemap-index.xml new file mode 100644 index 0000000..17dab80 --- /dev/null +++ b/docs/sitemap-index.xml @@ -0,0 +1 @@ +https://commonflow.org/sitemap-0.xml \ No newline at end of file diff --git a/docs/sitemap.xml b/docs/sitemap.xml deleted file mode 100644 index dcc82ad..0000000 --- a/docs/sitemap.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - https://commonflow.org/spec/1.0.0-rc.1.html - - - https://commonflow.org/spec/1.0.0-rc.2.html - - - https://commonflow.org/spec/1.0.0-rc.3.html - - - https://commonflow.org/spec/1.0.0-rc.4.html - - - https://commonflow.org/spec/1.0.0-rc.5.html - - - https://commonflow.org/ - - \ No newline at end of file diff --git a/docs/spec/1.0.0-rc.1.html b/docs/spec/1.0.0-rc.1.html deleted file mode 100644 index 4a1a781..0000000 --- a/docs/spec/1.0.0-rc.1.html +++ /dev/null @@ -1,251 +0,0 @@ - - - - - - - - - - - - Git Common-Flow 1.0.0-rc.1 | Git Common Flow - - - - - - - - - - - - -
    - - - - -
    -
    -

    Git Common-Flow 1.0.0-rc.1

    -

    -

    Summary

    -

    Common-Flow is an attempt to gather a sensible selection of the most common - usage patterns of git into a single and concise specification. It is based on - the original variant - of GitHub Flow, while taking - into account how a lot of open source projects use git.

    -

    TL;DR: Common-Flow is basically GitHub Flow with the addition of versioned - releases, maintenance releases for old versions, and without the requirement to - deploy to production all the time.

    -

    Terminology

    -
      -
    • Master Branch - Must always have passing tests, is considered bleeding - edge, and must be named master.
    • -
    • Change Branches - Any branch that introduces changes like a new feature, a - bug fix, etc.
    • -
    • Source Branch - The branch that a change branch was created from. New - changes in the source branch should be incorporated into the change branch via - rebasing.
    • -
    • Merge Target - A branch that is the intended merge target for a change - branch. Typically the merge target branch will be the same as the source - branch.
    • -
    • Maintenance Branches - Used for maintaining old versions and releasing - PATCH updates when the master branch has moved on. Should follow a - stable-X.Y naming pattern, where X is MAJOR version and Y is MINOR - version.
    • -
    • Pull Request - A means of requesting that a change branch is merged in to - its merge target, allowing others to review, discuss and approve the changes.
    • -
    • Release - Consists of a version bump commit directly on the master branch, - and a git tag named according to the new version string placed on said commit.
    • -
    • Maintenance Release - Just like a regular release, except the version bump - commit and release tag are on a maintenance branch instead of the master - branch.
    • -
    -

    Git Common-Flow Specification (Common-Flow)

    -

    The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", - "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be - interpreted as described in RFC 2119.

    -
      -
    1. The Master Branch -
        -
      1. A branch named "master" MUST exist and it MUST be referred to as the - "master branch".
      2. -
      3. The master branch MUST be considered bleeding edge.
      4. -
      5. The master branch MUST always be in a non-broken state with its test - suite passing.
      6. -
      7. The master branch SHOULD always be in a "as near as possible ready for - release/production" state to reduce the friction of creating a new - release.
      8. -
      -
    2. -
    3. Changes -
        -
      1. Changes MUST be performed on a separate branch that SHOULD be referred to - as a "change branch". All change branches MUST have descriptive names. It - is RECOMMENDED that you commit often locally, and you SHOULD regularly - push your work to the same named branch on the remote server.
      2. -
      3. When a change branch is created, the branch that it is created from - SHOULD be referred to as the "source branch". Each change branch also - needs a designated "merge target branch", typically this will be the same - as the source branch.
      4. -
      5. Change branches MUST be regularly updated with any changes from their - source branch. This MUST be done by rebasing the change branch on top of - the source branch. To be clear you MUST NOT merge a source branch into a - change branch.
      6. -
      7. After rebasing a change branch on top of its source branch you MUST push - the change branch to the remote server. This will require you do a force - push, and you SHOULD use the "--force-with-lease" git push option.
      8. -
      9. To merge a change branch into its merge target branch, you MUST open a - "pull request" (or equivalent) so others can review and approve your - changes.
      10. -
      11. A pull request MUST only be merged when the change branch is up-to-date - with its source branch, the test suite is passing, and you and others are - happy with the change. This is especially important if the merge target - is the master branch.
      12. -
      13. To get feedback, help, or generally just discuss a change branch with - others, it is RECOMMENDED you do this by creating a pull request and - discuss the changes with others there.
      14. -
      -
    4. -
    5. Git Best Practices -
        -
      1. All commit messages SHOULD follow the Commit Guidelines and format from - the official git - documentation: - https://git-scm.com/book/en/v2/Distributed-Git-Contributing-to-a-Project
      2. -
      3. You SHOULD always use "--force-with-lease" when doing a force push. The - plain "--force" option is dangerous and destructive. More - information: - https://developer.atlassian.com/blog/2015/04/force-with-lease/
      4. -
      5. You SHOULD understand and be comfortable with - rebasing: https://git-scm.com/book/en/v2/Git-Branching-Rebasing
      6. -
      7. It is RECOMMENDED that you always do "git pull --rebase" instead of "git - pull" to avoid unnecessary merge commits. You can make this the default - behavior of "git pull" with "git config --global pull.rebase true".
      8. -
      9. It is RECOMMENDED that all branches be merged using "git merge --no-ff". - This makes sure the reference to the original branch is kept in the commits, - allows one to revert a merge by reverting a single merge commit, and creates - a merge commit to mark the integration of the branch with master.
      10. -
      -
    6. -
    7. Versioning -
        -
      1. The project MUST have its version hard-coded somewhere in the - code-base. It is RECOMMENDED that this is done in a file called "VERSION" - located in the root of the project.
      2. -
      3. If you are using a "VERSION" file in the root of the project, this MUST - only contain the exact version string.
      4. -
      5. The version string SHOULD follow the Semantic Versioning - (http://semver.org/) format. Use of Semantic Versioning is OPTIONAL, - but the version string MUST NOT have a "v" prefix. For example "v2.11.4" - is bad, and "2.11.4" is good.
      6. -
      -
    8. -
    9. Releases -
        -
      1. To create a new release, you MUST create a "version bump" commit directly - on the master branch which changes the hard-coded version value of the - project. The version bump commit MUST have a git tag created on it and - named as the exact version string.
      2. -
      3. A version bump commit MUST have a commit message title of "Bump version - to VERSION". For example, if the new version string is "2.11.4", the - first line of the commit message MUST read: "Bump version to 2.11.4"
      4. -
      5. The release tag on the version bump commit MUST be named exactly the same - as the version string. The tag name can OPTIONALLY be prefixed with - "v". For example the tag name can be either "2.11.4" or "v2.11.4".
      6. -
      7. It is RECOMMENDED that release tags are lightweight tags, but you can - OPTIONALLY use annotated tags if you want to include changelog - information in the release tag itself.
      8. -
      9. If you use annotated release tags, the first line of the annotation MUST - read "Release VERSION". For example for version "2.11.4" the first line - of the tag annotation would read "Release 2.11.4". The second line must - be blank, and the changelog MUST start on the third line.
      10. -
      -
    10. -
    11. Bug Fixes & Rollback -
        -
      1. You MUST NOT under any circumstances force push to the master branch.
      2. -
      3. If a change branch which has been merged in to the master branch is found - to have a bug in it, the bug fix work MUST be done as a new separate - change branch and MUST follow the same workflow as any other change - branch.
      4. -
      5. If a change branch is wrongfully merged in to master, or for any other - reason the merge must be undone, you MUST undo the merge by reverting the - merge commit itself. Effectively creating a new commit that reverses all - the relevant changes.
      6. -
      -
    12. -
    13. Maintenance Releases -
        -
      1. Any branch that has a name starting with "stable-" SHOULD be referred to - as a "maintenance branch".
      2. -
      3. Maintenance branches are used for managing new releases of older - versions. Typically this is used to provide security updates for older - versions when the master branch has moved on to a point that a new - release for the old version cannot be made from the master branch.
      4. -
      5. A "maintenance release" is identical to a regular release, except the - version bump commit and the release tag are placed on the maintenance - branch instead of on the master branch.
      6. -
      7. A maintenance branch SHOULD follow a "stable-X.Y" naming pattern, where - "X" is the MAJOR version and "Y" is the minor version.
      8. -
      9. A maintenance branch MUST be created from the relevant release tag. For - example if there is a security fix for all 2.9.x releases, the latest of - which is "2.9.7", we create a new branch called "stable-2.9" off of the - "2.9.7" release tag. The security fix release will then end up being - version "2.9.8".
      10. -
      11. When working on a maintenance release, the relevant maintenance branch - MUST be thought of as the master branch for that maintenance work.
      12. -
      13. Changes in a maintenance branch SHOULD typically come from work being - done against the master branch. Meaning changes SHOULD only trickle - downwards from the master branch. If a change needs to trickle back up - into the master branch, that work should have happened against the master - branch in the first place.
      14. -
      -
    14. -
    -

    About

    -

    The Git Common-Flow specification is authored - by Jim Myhrberg.

    -

    If you'd like to leave feedback, - please open an issue on GitHub.

    -

    License

    -

    Creative Commons - CC BY 3.0

    -
    -
    -
    - - - \ No newline at end of file diff --git a/docs/spec/1.0.0-rc.1/index.html b/docs/spec/1.0.0-rc.1/index.html new file mode 100644 index 0000000..94d8e5a --- /dev/null +++ b/docs/spec/1.0.0-rc.1/index.html @@ -0,0 +1,213 @@ + Git Common-Flow 1.0.0-rc.1 | Git Common Flow +

    Git Common-Flow 1.0.0-rc.1

    +Git Common-Flow 1.0.0-rc.1 diagram +

    Summary

    +

    Common-Flow is an attempt to gather a sensible selection of the most common +usage patterns of git into a single and concise specification. It is based on +the original variant +of GitHub Flow, while taking +into account how a lot of open source projects use git.

    +

    TL;DR: Common-Flow is basically GitHub Flow with the addition of versioned +releases, maintenance releases for old versions, and without the requirement to +deploy to production all the time.

    +

    Terminology

    +
      +
    • Master Branch - Must always have passing tests, is considered bleeding +edge, and must be named master.
    • +
    • Change Branches - Any branch that introduces changes like a new feature, a +bug fix, etc.
    • +
    • Source Branch - The branch that a change branch was created from. New +changes in the source branch should be incorporated into the change branch via +rebasing.
    • +
    • Merge Target - A branch that is the intended merge target for a change +branch. Typically the merge target branch will be the same as the source +branch.
    • +
    • Maintenance Branches - Used for maintaining old versions and releasing +PATCH updates when the master branch has moved on. Should follow a +stable-X.Y naming pattern, where X is MAJOR version and Y is MINOR +version.
    • +
    • Pull Request - A means of requesting that a change branch is merged in to +its merge target, allowing others to review, discuss and approve the changes.
    • +
    • Release - Consists of a version bump commit directly on the master branch, +and a git tag named according to the new version string placed on said commit.
    • +
    • Maintenance Release - Just like a regular release, except the version bump +commit and release tag are on a maintenance branch instead of the master +branch.
    • +
    +

    Git Common-Flow Specification (Common-Flow)

    +

    The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, +“SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be +interpreted as described in RFC 2119.

    +
      +
    1. The Master Branch +
        +
      1. A branch named “master” MUST exist and it MUST be referred to as the +“master branch”.
      2. +
      3. The master branch MUST be considered bleeding edge.
      4. +
      5. The master branch MUST always be in a non-broken state with its test +suite passing.
      6. +
      7. The master branch SHOULD always be in a “as near as possible ready for +release/production” state to reduce the friction of creating a new +release.
      8. +
      +
    2. +
    3. Changes +
        +
      1. Changes MUST be performed on a separate branch that SHOULD be referred to +as a “change branch”. All change branches MUST have descriptive names. It +is RECOMMENDED that you commit often locally, and you SHOULD regularly +push your work to the same named branch on the remote server.
      2. +
      3. When a change branch is created, the branch that it is created from +SHOULD be referred to as the “source branch”. Each change branch also +needs a designated “merge target branch”, typically this will be the same +as the source branch.
      4. +
      5. Change branches MUST be regularly updated with any changes from their +source branch. This MUST be done by rebasing the change branch on top of +the source branch. To be clear you MUST NOT merge a source branch into a +change branch.
      6. +
      7. After rebasing a change branch on top of its source branch you MUST push +the change branch to the remote server. This will require you do a force +push, and you SHOULD use the “—force-with-lease” git push option.
      8. +
      9. To merge a change branch into its merge target branch, you MUST open a +“pull request” (or equivalent) so others can review and approve your +changes.
      10. +
      11. A pull request MUST only be merged when the change branch is up-to-date +with its source branch, the test suite is passing, and you and others are +happy with the change. This is especially important if the merge target +is the master branch.
      12. +
      13. To get feedback, help, or generally just discuss a change branch with +others, it is RECOMMENDED you do this by creating a pull request and +discuss the changes with others there.
      14. +
      +
    4. +
    5. Git Best Practices +
        +
      1. All commit messages SHOULD follow the Commit Guidelines and format from +the official git +documentation: +https://git-scm.com/book/en/v2/Distributed-Git-Contributing-to-a-Project
      2. +
      3. You SHOULD always use “—force-with-lease” when doing a force push. The +plain “—force” option is dangerous and destructive. More +information: +https://developer.atlassian.com/blog/2015/04/force-with-lease/
      4. +
      5. You SHOULD understand and be comfortable with +rebasing: https://git-scm.com/book/en/v2/Git-Branching-Rebasing
      6. +
      7. It is RECOMMENDED that you always do “git pull —rebase” instead of “git +pull” to avoid unnecessary merge commits. You can make this the default +behavior of “git pull” with “git config —global pull.rebase true”.
      8. +
      9. It is RECOMMENDED that all branches be merged using “git merge —no-ff”. +This makes sure the reference to the original branch is kept in the commits, +allows one to revert a merge by reverting a single merge commit, and creates +a merge commit to mark the integration of the branch with master.
      10. +
      +
    6. +
    7. Versioning +
        +
      1. The project MUST have its version hard-coded somewhere in the +code-base. It is RECOMMENDED that this is done in a file called “VERSION” +located in the root of the project.
      2. +
      3. If you are using a “VERSION” file in the root of the project, this MUST +only contain the exact version string.
      4. +
      5. The version string SHOULD follow the Semantic Versioning +(http://semver.org/) format. Use of Semantic Versioning is OPTIONAL, +but the version string MUST NOT have a “v” prefix. For example “v2.11.4” +is bad, and “2.11.4” is good.
      6. +
      +
    8. +
    9. Releases +
        +
      1. To create a new release, you MUST create a “version bump” commit directly +on the master branch which changes the hard-coded version value of the +project. The version bump commit MUST have a git tag created on it and +named as the exact version string.
      2. +
      3. A version bump commit MUST have a commit message title of “Bump version +to VERSION”. For example, if the new version string is “2.11.4”, the +first line of the commit message MUST read: “Bump version to 2.11.4”
      4. +
      5. The release tag on the version bump commit MUST be named exactly the same +as the version string. The tag name can OPTIONALLY be prefixed with +“v”. For example the tag name can be either “2.11.4” or “v2.11.4”.
      6. +
      7. It is RECOMMENDED that release tags are lightweight tags, but you can +OPTIONALLY use annotated tags if you want to include changelog +information in the release tag itself.
      8. +
      9. If you use annotated release tags, the first line of the annotation MUST +read “Release VERSION”. For example for version “2.11.4” the first line +of the tag annotation would read “Release 2.11.4”. The second line must +be blank, and the changelog MUST start on the third line.
      10. +
      +
    10. +
    11. Bug Fixes & Rollback +
        +
      1. You MUST NOT under any circumstances force push to the master branch.
      2. +
      3. If a change branch which has been merged in to the master branch is found +to have a bug in it, the bug fix work MUST be done as a new separate +change branch and MUST follow the same workflow as any other change +branch.
      4. +
      5. If a change branch is wrongfully merged in to master, or for any other +reason the merge must be undone, you MUST undo the merge by reverting the +merge commit itself. Effectively creating a new commit that reverses all +the relevant changes.
      6. +
      +
    12. +
    13. Maintenance Releases +
        +
      1. Any branch that has a name starting with “stable-” SHOULD be referred to +as a “maintenance branch”.
      2. +
      3. Maintenance branches are used for managing new releases of older +versions. Typically this is used to provide security updates for older +versions when the master branch has moved on to a point that a new +release for the old version cannot be made from the master branch.
      4. +
      5. A “maintenance release” is identical to a regular release, except the +version bump commit and the release tag are placed on the maintenance +branch instead of on the master branch.
      6. +
      7. A maintenance branch SHOULD follow a “stable-X.Y” naming pattern, where +“X” is the MAJOR version and “Y” is the minor version.
      8. +
      9. A maintenance branch MUST be created from the relevant release tag. For +example if there is a security fix for all 2.9.x releases, the latest of +which is “2.9.7”, we create a new branch called “stable-2.9” off of the +“2.9.7” release tag. The security fix release will then end up being +version “2.9.8”.
      10. +
      11. When working on a maintenance release, the relevant maintenance branch +MUST be thought of as the master branch for that maintenance work.
      12. +
      13. Changes in a maintenance branch SHOULD typically come from work being +done against the master branch. Meaning changes SHOULD only trickle +downwards from the master branch. If a change needs to trickle back up +into the master branch, that work should have happened against the master +branch in the first place.
      14. +
      +
    14. +
    +

    About

    +

    The Git Common-Flow specification is authored +by Jim Myhrberg.

    +

    If you’d like to leave feedback, +please open an issue on GitHub.

    +

    License

    +

    Creative Commons - CC BY 3.0

    \ No newline at end of file diff --git a/docs/spec/1.0.0-rc.2.html b/docs/spec/1.0.0-rc.2.html deleted file mode 100644 index 5432aa8..0000000 --- a/docs/spec/1.0.0-rc.2.html +++ /dev/null @@ -1,285 +0,0 @@ - - - - - - - - - - - - Git Common-Flow 1.0.0-rc.2 | Git Common Flow - - - - - - - - - - - - -
    - - - - -
    -
    -

    Git Common-Flow 1.0.0-rc.2

    -

    -

    Summary

    -

    Common-Flow is an attempt to gather a sensible selection of the most common - usage patterns of git into a single and concise specification. It is based on - the original variant - of GitHub Flow, while taking - into account how a lot of open source projects use git.

    -

    TL;DR: Common-Flow is basically GitHub Flow with the addition of versioned - releases, maintenance releases for old versions, and without the requirement to - deploy to production all the time.

    -

    Terminology

    -
      -
    • Master Branch - Must always have passing tests, is considered bleeding - edge, and must be named master.
    • -
    • Change Branches - Any branch that introduces changes like a new feature, a - bug fix, etc.
    • -
    • Source Branch - The branch that a change branch was created from. New - changes in the source branch should be incorporated into the change branch via - rebasing.
    • -
    • Merge Target - A branch that is the intended merge target for a change - branch. Typically the merge target branch will be the same as the source - branch.
    • -
    • Pull Request - A means of requesting that a change branch is merged in to - its merge target, allowing others to review, discuss and approve the changes.
    • -
    • Release - Consists of a version bump commit, and a git tag named according - to the new version string placed on said commit.
    • -
    • Release Branches - Used both for short-term preparations of a release, and - also for long-term maintenance of older version.
    • -
    -

    Git Common-Flow Specification (Common-Flow)

    -

    The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", - "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be - interpreted as described in RFC 2119.

    -
      -
    1. The Master Branch -
        -
      1. A branch named "master" MUST exist and it MUST be referred to as the - "master branch".
      2. -
      3. The master branch MUST be considered bleeding edge.
      4. -
      5. The master branch MUST always be in a non-broken state with its test - suite passing.
      6. -
      7. The master branch SHOULD always be in a "as near as possibly ready for - release/production" state to reduce any friction with creating a new - release.
      8. -
      -
    2. -
    3. Change Branches -
        -
      1. Each change (feature, bugfix, etc.) MUST be performed on separate - branches that SHOULD be referred to as "change branches". All change - branches MUST have descriptive names. It is RECOMMENDED that you commit - often locally, and you SHOULD regularly push your work to the same named - branch on the remote server.
      2. -
      3. You MUST create separate change branches for each distinctly different - change. You MUST NOT include multiple unrelated changes into a single - change branch.
      4. -
      5. When a change branch is created, the branch that it is created from - SHOULD be referred to as the "source branch". Each change branch also - needs a designated "merge target" branch, typically this will be the same - as the source branch.
      6. -
      7. Change branches MUST be regularly updated with any changes from their - source branch. This MUST be done by rebasing the change branch on top of - the source branch.
      8. -
      9. After rebasing a change branch on top of its source branch you MUST push - the change branch to the remote server. This will require you to do a - force push, and you SHOULD use the "--force-with-lease" git push option.
      10. -
      -
    4. -
    5. Pull Requests -
        -
      1. To merge a change branch into its merge target, you MUST open a "pull - request" (or equivalent) so others can review and approve your changes.
      2. -
      3. A pull request MUST only be merged when the change branch is up-to-date - with its source branch, the test suite is passing, and you and others are - happy with the change. This is especially important if the merge target - is the master branch.
      4. -
      5. To get feedback, help, or generally just discuss a change branch with - others, the RECOMMENDED way to do so is by creating a pull request and - discuss the changes with others there.
      6. -
      -
    6. -
    7. Versioning -
        -
      1. The project MUST have its version hard-coded somewhere in the - code-base. It is RECOMMENDED that this is done in a file called "VERSION" - located in the root of the project.
      2. -
      3. If you are using a "VERSION" file in the root of the project, this MUST - only contain the exact version string.
      4. -
      5. The version string SHOULD follow the Semantic Versioning - (http://semver.org/) format. Use of Semantic Versioning is OPTIONAL, - but the version string MUST NOT have a "v" prefix. For example "v2.11.4" - is bad, and "2.11.4" is good.
      6. -
      -
    8. -
    9. Releases -
        -
      1. To create a new release, you MUST create a "version bump" commit which - changes the hard-coded version string of the project. The version bump - commit MUST have a git tag created on it and named as the exact version - string.
      2. -
      3. If you are not using a release branch, then the version bump commit MUST - be created directly on the master branch.
      4. -
      5. The version bump commit MUST have a commit message title of "Bump version - to VERSION". For example, if the new version string is "2.11.4", the - first line of the commit message MUST read: "Bump version to 2.11.4"
      6. -
      7. The release tag on the version bump commit MUST be named exactly the same - as the version string. The tag name can OPTIONALLY be prefixed with - "v". For example the tag name can be either "2.11.4" or "v2.11.4". You - MUST not use a mix of "v" prefixed and non-prefixed tags. Pick one form - and stick to it.
      8. -
      9. It is RECOMMENDED that release tags are lightweight tags, but you can - OPTIONALLY use annotated tags if you want to include changelog - information in the release tag itself.
      10. -
      11. If you use annotated release tags, the first line of the annotation MUST - read "Release VERSION". For example for version "2.11.4" the first line - of the tag annotation would read "Release 2.11.4". The second line must - be blank, and the changelog MUST start on the third line.
      12. -
      -
    10. -
    11. Release Branches -
        -
      1. Any branch that has a name starting with "release-" SHOULD be referred to - as a "release branch".
      2. -
      3. Use of release branches is OPTIONAL.
      4. -
      5. Changes in a release branch SHOULD typically come from work being - done against the master branch. Meaning changes SHOULD only trickle - downwards from the master branch. If a change needs to trickle back up - into the master branch, that work should have happened against the master - branch in the first place. One exception to this is version bump commits.
      6. -
      7. There are two types of release branches; short-term, and long-term.
      8. -
      9. Short-Term Release Branches -
          -
        1. Used for creating a specific versioned release.
        2. -
        3. A short-term release branch is RECOMMENDED if there is a lengthy - pre-release verification process to avoid a code freeze on the master - branch.
        4. -
        5. MUST have a name of "release-VERSION". For example for version - "2.11.4" the release branch name MUST be "release-2.11.4".
        6. -
        7. When using a short-term release branch, the version bump commit and - release tag MUST be made directly on the release branch itself.
        8. -
        9. Only very minor changes should be performed on a short-term release - branch directly. Any larger changes SHOULD be done in the master - branch, and SHOULD be pulled into the release branch by rebasing it - on top of the master branch the same way a change branch pulls in - updates from its source branch.
        10. -
        11. After the version bump commit and release tag have been created, the - release branch MUST be merged back into its source branch and then - deleted. Typically the source branch will be the master branch.
        12. -
        -
      10. -
      11. Long-Term Release Branches -
          -
        1. Used for work on versions which are not currently part of the master - branch. Typically this is useful when you need to create a new - maintenance release for a older version.
        2. -
        3. The branch name MUST have a non-specific version number. For example - a long-term release branch for creating new 2.9.x releases would be - named "release-2.9".
        4. -
        5. To create a new release from a long-term release branch, you MUST - create a version bump commit and release tag directly on the release - branch.
        6. -
        7. A long-term release branch MUST be created from the relevant release - tag. For example if the master branch is on version 2.11.4 and there - is a security fix for all 2.9.x releases, the latest of which is - "2.9.7". Create a new branch called "release-2.9" off of the "2.9.7" - release tag. The security fix release will then end up being version - "2.9.8".
        8. -
        -
      12. -
      -
    12. -
    13. Bug Fixes & Rollback -
        -
      1. You MUST NOT under any circumstances force push to the master branch.
      2. -
      3. If a change branch which has been merged into the master branch is found - to have a bug in it, the bug fix work MUST be done as a new separate - change branch and MUST follow the same workflow as any other change - branch.
      4. -
      5. If a change branch is wrongfully merged into master, or for any other - reason the merge must be undone, you MUST undo the merge by reverting the - merge commit itself. Effectively creating a new commit that reverses all - the relevant changes.
      6. -
      -
    14. -
    15. Git Best Practices -
        -
      1. All commit messages SHOULD follow the Commit Guidelines and format from - the official git - documentation: - https://git-scm.com/book/en/v2/Distributed-Git-Contributing-to-a-Project
      2. -
      3. You SHOULD never blindly commit all changes with "git commit -a". It is - RECOMMENDED you use "git add -i" to add individual changes to the staging - area so you are fully aware of what you are committing.
      4. -
      5. You SHOULD always use "--force-with-lease" when doing a force push. The - regular "--force" option is dangerous and destructive. More - information: - https://developer.atlassian.com/blog/2015/04/force-with-lease/
      6. -
      7. You SHOULD understand and be comfortable with - rebasing: https://git-scm.com/book/en/v2/Git-Branching-Rebasing
      8. -
      9. It is RECOMMENDED that you always do "git pull --rebase" instead of "git - pull" to avoid unnecessary merge commits. You can make this the default - behavior of "git pull" with "git config --global pull.rebase true".
      10. -
      11. It is RECOMMENDED that all branches be merged using "git merge --no-ff". - This makes sure the reference to the original branch is kept in the - commits, allows one to revert a merge by reverting a single merge commit, - and creates a merge commit to mark the integration of the branch with - master.
      12. -
      -
    16. -
    -

    About

    -

    The Git Common-Flow specification is authored - by Jim Myhrberg.

    -

    If you'd like to leave feedback, - please open an issue on GitHub.

    -

    License

    -

    Creative Commons - CC BY 3.0

    -
    -
    -
    - - - \ No newline at end of file diff --git a/docs/spec/1.0.0-rc.2/index.html b/docs/spec/1.0.0-rc.2/index.html new file mode 100644 index 0000000..45baf89 --- /dev/null +++ b/docs/spec/1.0.0-rc.2/index.html @@ -0,0 +1,247 @@ + Git Common-Flow 1.0.0-rc.2 | Git Common Flow +

    Git Common-Flow 1.0.0-rc.2

    +Git Common-Flow 1.0.0-rc.2 diagram +

    Summary

    +

    Common-Flow is an attempt to gather a sensible selection of the most common +usage patterns of git into a single and concise specification. It is based on +the original variant +of GitHub Flow, while taking +into account how a lot of open source projects use git.

    +

    TL;DR: Common-Flow is basically GitHub Flow with the addition of versioned +releases, maintenance releases for old versions, and without the requirement to +deploy to production all the time.

    +

    Terminology

    +
      +
    • Master Branch - Must always have passing tests, is considered bleeding +edge, and must be named master.
    • +
    • Change Branches - Any branch that introduces changes like a new feature, a +bug fix, etc.
    • +
    • Source Branch - The branch that a change branch was created from. New +changes in the source branch should be incorporated into the change branch via +rebasing.
    • +
    • Merge Target - A branch that is the intended merge target for a change +branch. Typically the merge target branch will be the same as the source +branch.
    • +
    • Pull Request - A means of requesting that a change branch is merged in to +its merge target, allowing others to review, discuss and approve the changes.
    • +
    • Release - Consists of a version bump commit, and a git tag named according +to the new version string placed on said commit.
    • +
    • Release Branches - Used both for short-term preparations of a release, and +also for long-term maintenance of older version.
    • +
    +

    Git Common-Flow Specification (Common-Flow)

    +

    The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, +“SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be +interpreted as described in RFC 2119.

    +
      +
    1. The Master Branch +
        +
      1. A branch named “master” MUST exist and it MUST be referred to as the +“master branch”.
      2. +
      3. The master branch MUST be considered bleeding edge.
      4. +
      5. The master branch MUST always be in a non-broken state with its test +suite passing.
      6. +
      7. The master branch SHOULD always be in a “as near as possibly ready for +release/production” state to reduce any friction with creating a new +release.
      8. +
      +
    2. +
    3. Change Branches +
        +
      1. Each change (feature, bugfix, etc.) MUST be performed on separate +branches that SHOULD be referred to as “change branches”. All change +branches MUST have descriptive names. It is RECOMMENDED that you commit +often locally, and you SHOULD regularly push your work to the same named +branch on the remote server.
      2. +
      3. You MUST create separate change branches for each distinctly different +change. You MUST NOT include multiple unrelated changes into a single +change branch.
      4. +
      5. When a change branch is created, the branch that it is created from +SHOULD be referred to as the “source branch”. Each change branch also +needs a designated “merge target” branch, typically this will be the same +as the source branch.
      6. +
      7. Change branches MUST be regularly updated with any changes from their +source branch. This MUST be done by rebasing the change branch on top of +the source branch.
      8. +
      9. After rebasing a change branch on top of its source branch you MUST push +the change branch to the remote server. This will require you to do a +force push, and you SHOULD use the “—force-with-lease” git push option.
      10. +
      +
    4. +
    5. Pull Requests +
        +
      1. To merge a change branch into its merge target, you MUST open a “pull +request” (or equivalent) so others can review and approve your changes.
      2. +
      3. A pull request MUST only be merged when the change branch is up-to-date +with its source branch, the test suite is passing, and you and others are +happy with the change. This is especially important if the merge target +is the master branch.
      4. +
      5. To get feedback, help, or generally just discuss a change branch with +others, the RECOMMENDED way to do so is by creating a pull request and +discuss the changes with others there.
      6. +
      +
    6. +
    7. Versioning +
        +
      1. The project MUST have its version hard-coded somewhere in the +code-base. It is RECOMMENDED that this is done in a file called “VERSION” +located in the root of the project.
      2. +
      3. If you are using a “VERSION” file in the root of the project, this MUST +only contain the exact version string.
      4. +
      5. The version string SHOULD follow the Semantic Versioning +(http://semver.org/) format. Use of Semantic Versioning is OPTIONAL, +but the version string MUST NOT have a “v” prefix. For example “v2.11.4” +is bad, and “2.11.4” is good.
      6. +
      +
    8. +
    9. Releases +
        +
      1. To create a new release, you MUST create a “version bump” commit which +changes the hard-coded version string of the project. The version bump +commit MUST have a git tag created on it and named as the exact version +string.
      2. +
      3. If you are not using a release branch, then the version bump commit MUST +be created directly on the master branch.
      4. +
      5. The version bump commit MUST have a commit message title of “Bump version +to VERSION”. For example, if the new version string is “2.11.4”, the +first line of the commit message MUST read: “Bump version to 2.11.4”
      6. +
      7. The release tag on the version bump commit MUST be named exactly the same +as the version string. The tag name can OPTIONALLY be prefixed with +“v”. For example the tag name can be either “2.11.4” or “v2.11.4”. You +MUST not use a mix of “v” prefixed and non-prefixed tags. Pick one form +and stick to it.
      8. +
      9. It is RECOMMENDED that release tags are lightweight tags, but you can +OPTIONALLY use annotated tags if you want to include changelog +information in the release tag itself.
      10. +
      11. If you use annotated release tags, the first line of the annotation MUST +read “Release VERSION”. For example for version “2.11.4” the first line +of the tag annotation would read “Release 2.11.4”. The second line must +be blank, and the changelog MUST start on the third line.
      12. +
      +
    10. +
    11. Release Branches +
        +
      1. Any branch that has a name starting with “release-” SHOULD be referred to +as a “release branch”.
      2. +
      3. Use of release branches is OPTIONAL.
      4. +
      5. Changes in a release branch SHOULD typically come from work being +done against the master branch. Meaning changes SHOULD only trickle +downwards from the master branch. If a change needs to trickle back up +into the master branch, that work should have happened against the master +branch in the first place. One exception to this is version bump commits.
      6. +
      7. There are two types of release branches; short-term, and long-term.
      8. +
      9. Short-Term Release Branches +
          +
        1. Used for creating a specific versioned release.
        2. +
        3. A short-term release branch is RECOMMENDED if there is a lengthy +pre-release verification process to avoid a code freeze on the master +branch.
        4. +
        5. MUST have a name of “release-VERSION”. For example for version +“2.11.4” the release branch name MUST be “release-2.11.4”.
        6. +
        7. When using a short-term release branch, the version bump commit and +release tag MUST be made directly on the release branch itself.
        8. +
        9. Only very minor changes should be performed on a short-term release +branch directly. Any larger changes SHOULD be done in the master +branch, and SHOULD be pulled into the release branch by rebasing it +on top of the master branch the same way a change branch pulls in +updates from its source branch.
        10. +
        11. After the version bump commit and release tag have been created, the +release branch MUST be merged back into its source branch and then +deleted. Typically the source branch will be the master branch.
        12. +
        +
      10. +
      11. Long-Term Release Branches +
          +
        1. Used for work on versions which are not currently part of the master +branch. Typically this is useful when you need to create a new +maintenance release for a older version.
        2. +
        3. The branch name MUST have a non-specific version number. For example +a long-term release branch for creating new 2.9.x releases would be +named “release-2.9”.
        4. +
        5. To create a new release from a long-term release branch, you MUST +create a version bump commit and release tag directly on the release +branch.
        6. +
        7. A long-term release branch MUST be created from the relevant release +tag. For example if the master branch is on version 2.11.4 and there +is a security fix for all 2.9.x releases, the latest of which is +“2.9.7”. Create a new branch called “release-2.9” off of the “2.9.7” +release tag. The security fix release will then end up being version +“2.9.8”.
        8. +
        +
      12. +
      +
    12. +
    13. Bug Fixes & Rollback +
        +
      1. You MUST NOT under any circumstances force push to the master branch.
      2. +
      3. If a change branch which has been merged into the master branch is found +to have a bug in it, the bug fix work MUST be done as a new separate +change branch and MUST follow the same workflow as any other change +branch.
      4. +
      5. If a change branch is wrongfully merged into master, or for any other +reason the merge must be undone, you MUST undo the merge by reverting the +merge commit itself. Effectively creating a new commit that reverses all +the relevant changes.
      6. +
      +
    14. +
    15. Git Best Practices +
        +
      1. All commit messages SHOULD follow the Commit Guidelines and format from +the official git +documentation: +https://git-scm.com/book/en/v2/Distributed-Git-Contributing-to-a-Project
      2. +
      3. You SHOULD never blindly commit all changes with “git commit -a”. It is +RECOMMENDED you use “git add -i” to add individual changes to the staging +area so you are fully aware of what you are committing.
      4. +
      5. You SHOULD always use “—force-with-lease” when doing a force push. The +regular “—force” option is dangerous and destructive. More +information: +https://developer.atlassian.com/blog/2015/04/force-with-lease/
      6. +
      7. You SHOULD understand and be comfortable with +rebasing: https://git-scm.com/book/en/v2/Git-Branching-Rebasing
      8. +
      9. It is RECOMMENDED that you always do “git pull —rebase” instead of “git +pull” to avoid unnecessary merge commits. You can make this the default +behavior of “git pull” with “git config —global pull.rebase true”.
      10. +
      11. It is RECOMMENDED that all branches be merged using “git merge —no-ff”. +This makes sure the reference to the original branch is kept in the +commits, allows one to revert a merge by reverting a single merge commit, +and creates a merge commit to mark the integration of the branch with +master.
      12. +
      +
    16. +
    +

    About

    +

    The Git Common-Flow specification is authored +by Jim Myhrberg.

    +

    If you’d like to leave feedback, +please open an issue on GitHub.

    +

    License

    +

    Creative Commons - CC BY 3.0

    \ No newline at end of file diff --git a/docs/spec/1.0.0-rc.3.html b/docs/spec/1.0.0-rc.3.html deleted file mode 100644 index 12894bb..0000000 --- a/docs/spec/1.0.0-rc.3.html +++ /dev/null @@ -1,294 +0,0 @@ - - - - - - - - - - - - Git Common-Flow 1.0.0-rc.3 | Git Common Flow - - - - - - - - - - - - -
    - - - - -
    -
    -

    Git Common-Flow 1.0.0-rc.3

    -

    -

    Summary

    -

    Common-Flow is an attempt to gather a sensible selection of the most common - usage patterns of git into a single and concise specification. It is based on - the original variant - of GitHub Flow, while taking - into account how a lot of open source projects use git.

    -

    In short, Common-Flow is essentially GitHub Flow with the addition of versioned - releases, optional release branches, and without the requirement to deploy to - production all the time.

    -

    Terminology

    -
      -
    • Master Branch - Must be named "master", must always have passing tests, - and is not guaranteed to always work in production environments.
    • -
    • Change Branches - Any branch that introduces changes like a new feature, a - bug fix, etc.
    • -
    • Source Branch - The branch that a change branch was created from. New - changes in the source branch should be incorporated into the change branch via - rebasing.
    • -
    • Merge Target - A branch that is the intended merge target for a change - branch. Typically the merge target branch will be the same as the source - branch.
    • -
    • Pull Request - A means of requesting that a change branch is merged in to - its merge target, allowing others to review, discuss and approve the changes.
    • -
    • Release - May be considered safe to use in production - environments. Consists of a version bump commit, and a git tag named according - to the new version string placed on said commit.
    • -
    • Release Branches - Used both for short-term preparations of a release, and - also for long-term maintenance of older version.
    • -
    -

    Git Common-Flow Specification (Common-Flow)

    -

    The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", - "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be - interpreted as described in RFC 2119.

    -
      -
    1. TL;DR -
        -
      1. Don't break the master branch.
      2. -
      3. A release is a git tag.
      4. -
      -
    2. -
    3. The Master Branch -
        -
      1. A branch named "master" MUST exist and it MUST be referred to as the - "master branch".
      2. -
      3. The master branch MUST always be in a non-broken state with its test - suite passing.
      4. -
      5. The master branch IS NOT guaranteed to always work in production - environments. Despite test suites passing it may at times contain - unfinished work. Only releases may be considered safe for production use.
      6. -
      7. The master branch SHOULD always be in a "as near as possibly ready for - release/production" state to reduce any friction with creating a new - release.
      8. -
      -
    4. -
    5. Change Branches -
        -
      1. Each change (feature, bugfix, etc.) MUST be performed on separate - branches that SHOULD be referred to as "change branches". All change - branches MUST have descriptive names. It is RECOMMENDED that you commit - often locally, and you SHOULD regularly push your work to the same named - branch on the remote server.
      2. -
      3. You MUST create separate change branches for each distinctly different - change. You MUST NOT include multiple unrelated changes into a single - change branch.
      4. -
      5. When a change branch is created, the branch that it is created from - SHOULD be referred to as the "source branch". Each change branch also - needs a designated "merge target" branch, typically this will be the same - as the source branch.
      6. -
      7. Change branches MUST be regularly updated with any changes from their - source branch. This MUST be done by rebasing the change branch on top of - the source branch.
      8. -
      9. After rebasing a change branch on top of its source branch you MUST push - the change branch to the remote server. This will require you to do a - force push, and you SHOULD use the "--force-with-lease" git push option.
      10. -
      -
    6. -
    7. Pull Requests -
        -
      1. To merge a change branch into its merge target, you MUST open a "pull - request" (or equivalent) so others can review and approve your changes.
      2. -
      3. A pull request MUST only be merged when the change branch is up-to-date - with its source branch, the test suite is passing, and you and others are - happy with the change. This is especially important if the merge target - is the master branch.
      4. -
      5. To get feedback, help, or generally just discuss a change branch with - others, the RECOMMENDED way to do so is by creating a pull request and - discuss the changes with others there.
      6. -
      -
    8. -
    9. Versioning -
        -
      1. The project MUST have its version hard-coded somewhere in the - code-base. It is RECOMMENDED that this is done in a file called "VERSION" - located in the root of the project.
      2. -
      3. If you are using a "VERSION" file in the root of the project, this MUST - only contain the exact version string.
      4. -
      5. The version string SHOULD follow the Semantic Versioning - (http://semver.org/) format. Use of Semantic Versioning is OPTIONAL, - but the version string MUST NOT have a "v" prefix. For example "v2.11.4" - is bad, and "2.11.4" is good.
      6. -
      -
    10. -
    11. Releases -
        -
      1. To create a new release, you MUST create a "version bump" commit which - changes the hard-coded version string of the project. The version bump - commit MUST have a git tag created on it and named as the exact version - string.
      2. -
      3. If you are not using a release branch, then the version bump commit MUST - be created directly on the master branch.
      4. -
      5. The version bump commit MUST have a commit message title of "Bump version - to VERSION". For example, if the new version string is "2.11.4", the - first line of the commit message MUST read: "Bump version to 2.11.4"
      6. -
      7. The release tag on the version bump commit MUST be named exactly the same - as the version string. The tag name can OPTIONALLY be prefixed with - "v". For example the tag name can be either "2.11.4" or "v2.11.4". You - MUST not use a mix of "v" prefixed and non-prefixed tags. Pick one form - and stick to it.
      8. -
      9. It is RECOMMENDED that release tags are lightweight tags, but you can - OPTIONALLY use annotated tags if you want to include changelog - information in the release tag itself.
      10. -
      11. If you use annotated release tags, the first line of the annotation MUST - read "Release VERSION". For example for version "2.11.4" the first line - of the tag annotation would read "Release 2.11.4". The second line must - be blank, and the changelog MUST start on the third line.
      12. -
      -
    12. -
    13. Release Branches -
        -
      1. Any branch that has a name starting with "release-" SHOULD be referred to - as a "release branch".
      2. -
      3. Use of release branches is OPTIONAL.
      4. -
      5. Changes in a release branch SHOULD typically come from work being - done against the master branch. Meaning changes SHOULD only trickle - downwards from the master branch. If a change needs to trickle back up - into the master branch, that work should have happened against the master - branch in the first place. One exception to this is version bump commits.
      6. -
      7. There are two types of release branches; short-term, and long-term.
      8. -
      9. Short-Term Release Branches -
          -
        1. Used for creating a specific versioned release.
        2. -
        3. A short-term release branch is RECOMMENDED if there is a lengthy - pre-release verification process to avoid a code freeze on the master - branch.
        4. -
        5. MUST have a name of "release-VERSION". For example for version - "2.11.4" the release branch name MUST be "release-2.11.4".
        6. -
        7. When using a short-term release branch, the version bump commit and - release tag MUST be made directly on the release branch itself.
        8. -
        9. Only very minor changes should be performed on a short-term release - branch directly. Any larger changes SHOULD be done in the master - branch, and SHOULD be pulled into the release branch by rebasing it - on top of the master branch the same way a change branch pulls in - updates from its source branch.
        10. -
        11. After the version bump commit and release tag have been created, the - release branch MUST be merged back into its source branch and then - deleted. Typically the source branch will be the master branch.
        12. -
        -
      10. -
      11. Long-Term Release Branches -
          -
        1. Used for work on versions which are not currently part of the master - branch. Typically this is useful when you need to create a new - maintenance release for a older version.
        2. -
        3. The branch name MUST have a non-specific version number. For example - a long-term release branch for creating new 2.9.x releases would be - named "release-2.9".
        4. -
        5. To create a new release from a long-term release branch, you MUST - create a version bump commit and release tag directly on the release - branch.
        6. -
        7. A long-term release branch MUST be created from the relevant release - tag. For example if the master branch is on version 2.11.4 and there - is a security fix for all 2.9.x releases, the latest of which is - "2.9.7". Create a new branch called "release-2.9" off of the "2.9.7" - release tag. The security fix release will then end up being version - "2.9.8".
        8. -
        -
      12. -
      -
    14. -
    15. Bug Fixes & Rollback -
        -
      1. You MUST NOT under any circumstances force push to the master branch.
      2. -
      3. If a change branch which has been merged into the master branch is found - to have a bug in it, the bug fix work MUST be done as a new separate - change branch and MUST follow the same workflow as any other change - branch.
      4. -
      5. If a change branch is wrongfully merged into master, or for any other - reason the merge must be undone, you MUST undo the merge by reverting the - merge commit itself. Effectively creating a new commit that reverses all - the relevant changes.
      6. -
      -
    16. -
    17. Git Best Practices -
        -
      1. All commit messages SHOULD follow the Commit Guidelines and format from - the official git - documentation: - https://git-scm.com/book/en/v2/Distributed-Git-Contributing-to-a-Project#_commit_guidelines
      2. -
      3. You SHOULD never blindly commit all changes with "git commit -a". It is - RECOMMENDED you use "git add -i" to add individual changes to the staging - area so you are fully aware of what you are committing.
      4. -
      5. You SHOULD always use "--force-with-lease" when doing a force push. The - regular "--force" option is dangerous and destructive. More - information: - https://developer.atlassian.com/blog/2015/04/force-with-lease/
      6. -
      7. You SHOULD understand and be comfortable with - rebasing: https://git-scm.com/book/en/v2/Git-Branching-Rebasing
      8. -
      9. It is RECOMMENDED that you always do "git pull --rebase" instead of "git - pull" to avoid unnecessary merge commits. You can make this the default - behavior of "git pull" with "git config --global pull.rebase true".
      10. -
      11. It is RECOMMENDED that all branches be merged using "git merge --no-ff". - This makes sure the reference to the original branch is kept in the - commits, allows one to revert a merge by reverting a single merge commit, - and creates a merge commit to mark the integration of the branch with - master.
      12. -
      -
    18. -
    -

    About

    -

    The Git Common-Flow specification is authored - by Jim Myhrberg.

    -

    If you'd like to leave feedback, - please open an issue on GitHub.

    -

    License

    -

    Creative Commons - CC BY 3.0

    -
    -
    -
    - - - \ No newline at end of file diff --git a/docs/spec/1.0.0-rc.3/index.html b/docs/spec/1.0.0-rc.3/index.html new file mode 100644 index 0000000..57b2d2d --- /dev/null +++ b/docs/spec/1.0.0-rc.3/index.html @@ -0,0 +1,256 @@ + Git Common-Flow 1.0.0-rc.3 | Git Common Flow +

    Git Common-Flow 1.0.0-rc.3

    +Git Common-Flow 1.0.0-rc.3 diagram +

    Summary

    +

    Common-Flow is an attempt to gather a sensible selection of the most common +usage patterns of git into a single and concise specification. It is based on +the original variant +of GitHub Flow, while taking +into account how a lot of open source projects use git.

    +

    In short, Common-Flow is essentially GitHub Flow with the addition of versioned +releases, optional release branches, and without the requirement to deploy to +production all the time.

    +

    Terminology

    +
      +
    • Master Branch - Must be named “master”, must always have passing tests, +and is not guaranteed to always work in production environments.
    • +
    • Change Branches - Any branch that introduces changes like a new feature, a +bug fix, etc.
    • +
    • Source Branch - The branch that a change branch was created from. New +changes in the source branch should be incorporated into the change branch via +rebasing.
    • +
    • Merge Target - A branch that is the intended merge target for a change +branch. Typically the merge target branch will be the same as the source +branch.
    • +
    • Pull Request - A means of requesting that a change branch is merged in to +its merge target, allowing others to review, discuss and approve the changes.
    • +
    • Release - May be considered safe to use in production +environments. Consists of a version bump commit, and a git tag named according +to the new version string placed on said commit.
    • +
    • Release Branches - Used both for short-term preparations of a release, and +also for long-term maintenance of older version.
    • +
    +

    Git Common-Flow Specification (Common-Flow)

    +

    The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, +“SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be +interpreted as described in RFC 2119.

    +
      +
    1. TL;DR +
        +
      1. Don’t break the master branch.
      2. +
      3. A release is a git tag.
      4. +
      +
    2. +
    3. The Master Branch +
        +
      1. A branch named “master” MUST exist and it MUST be referred to as the +“master branch”.
      2. +
      3. The master branch MUST always be in a non-broken state with its test +suite passing.
      4. +
      5. The master branch IS NOT guaranteed to always work in production +environments. Despite test suites passing it may at times contain +unfinished work. Only releases may be considered safe for production use.
      6. +
      7. The master branch SHOULD always be in a “as near as possibly ready for +release/production” state to reduce any friction with creating a new +release.
      8. +
      +
    4. +
    5. Change Branches +
        +
      1. Each change (feature, bugfix, etc.) MUST be performed on separate +branches that SHOULD be referred to as “change branches”. All change +branches MUST have descriptive names. It is RECOMMENDED that you commit +often locally, and you SHOULD regularly push your work to the same named +branch on the remote server.
      2. +
      3. You MUST create separate change branches for each distinctly different +change. You MUST NOT include multiple unrelated changes into a single +change branch.
      4. +
      5. When a change branch is created, the branch that it is created from +SHOULD be referred to as the “source branch”. Each change branch also +needs a designated “merge target” branch, typically this will be the same +as the source branch.
      6. +
      7. Change branches MUST be regularly updated with any changes from their +source branch. This MUST be done by rebasing the change branch on top of +the source branch.
      8. +
      9. After rebasing a change branch on top of its source branch you MUST push +the change branch to the remote server. This will require you to do a +force push, and you SHOULD use the “—force-with-lease” git push option.
      10. +
      +
    6. +
    7. Pull Requests +
        +
      1. To merge a change branch into its merge target, you MUST open a “pull +request” (or equivalent) so others can review and approve your changes.
      2. +
      3. A pull request MUST only be merged when the change branch is up-to-date +with its source branch, the test suite is passing, and you and others are +happy with the change. This is especially important if the merge target +is the master branch.
      4. +
      5. To get feedback, help, or generally just discuss a change branch with +others, the RECOMMENDED way to do so is by creating a pull request and +discuss the changes with others there.
      6. +
      +
    8. +
    9. Versioning +
        +
      1. The project MUST have its version hard-coded somewhere in the +code-base. It is RECOMMENDED that this is done in a file called “VERSION” +located in the root of the project.
      2. +
      3. If you are using a “VERSION” file in the root of the project, this MUST +only contain the exact version string.
      4. +
      5. The version string SHOULD follow the Semantic Versioning +(http://semver.org/) format. Use of Semantic Versioning is OPTIONAL, +but the version string MUST NOT have a “v” prefix. For example “v2.11.4” +is bad, and “2.11.4” is good.
      6. +
      +
    10. +
    11. Releases +
        +
      1. To create a new release, you MUST create a “version bump” commit which +changes the hard-coded version string of the project. The version bump +commit MUST have a git tag created on it and named as the exact version +string.
      2. +
      3. If you are not using a release branch, then the version bump commit MUST +be created directly on the master branch.
      4. +
      5. The version bump commit MUST have a commit message title of “Bump version +to VERSION”. For example, if the new version string is “2.11.4”, the +first line of the commit message MUST read: “Bump version to 2.11.4”
      6. +
      7. The release tag on the version bump commit MUST be named exactly the same +as the version string. The tag name can OPTIONALLY be prefixed with +“v”. For example the tag name can be either “2.11.4” or “v2.11.4”. You +MUST not use a mix of “v” prefixed and non-prefixed tags. Pick one form +and stick to it.
      8. +
      9. It is RECOMMENDED that release tags are lightweight tags, but you can +OPTIONALLY use annotated tags if you want to include changelog +information in the release tag itself.
      10. +
      11. If you use annotated release tags, the first line of the annotation MUST +read “Release VERSION”. For example for version “2.11.4” the first line +of the tag annotation would read “Release 2.11.4”. The second line must +be blank, and the changelog MUST start on the third line.
      12. +
      +
    12. +
    13. Release Branches +
        +
      1. Any branch that has a name starting with “release-” SHOULD be referred to +as a “release branch”.
      2. +
      3. Use of release branches is OPTIONAL.
      4. +
      5. Changes in a release branch SHOULD typically come from work being +done against the master branch. Meaning changes SHOULD only trickle +downwards from the master branch. If a change needs to trickle back up +into the master branch, that work should have happened against the master +branch in the first place. One exception to this is version bump commits.
      6. +
      7. There are two types of release branches; short-term, and long-term.
      8. +
      9. Short-Term Release Branches +
          +
        1. Used for creating a specific versioned release.
        2. +
        3. A short-term release branch is RECOMMENDED if there is a lengthy +pre-release verification process to avoid a code freeze on the master +branch.
        4. +
        5. MUST have a name of “release-VERSION”. For example for version +“2.11.4” the release branch name MUST be “release-2.11.4”.
        6. +
        7. When using a short-term release branch, the version bump commit and +release tag MUST be made directly on the release branch itself.
        8. +
        9. Only very minor changes should be performed on a short-term release +branch directly. Any larger changes SHOULD be done in the master +branch, and SHOULD be pulled into the release branch by rebasing it +on top of the master branch the same way a change branch pulls in +updates from its source branch.
        10. +
        11. After the version bump commit and release tag have been created, the +release branch MUST be merged back into its source branch and then +deleted. Typically the source branch will be the master branch.
        12. +
        +
      10. +
      11. Long-Term Release Branches +
          +
        1. Used for work on versions which are not currently part of the master +branch. Typically this is useful when you need to create a new +maintenance release for a older version.
        2. +
        3. The branch name MUST have a non-specific version number. For example +a long-term release branch for creating new 2.9.x releases would be +named “release-2.9”.
        4. +
        5. To create a new release from a long-term release branch, you MUST +create a version bump commit and release tag directly on the release +branch.
        6. +
        7. A long-term release branch MUST be created from the relevant release +tag. For example if the master branch is on version 2.11.4 and there +is a security fix for all 2.9.x releases, the latest of which is +“2.9.7”. Create a new branch called “release-2.9” off of the “2.9.7” +release tag. The security fix release will then end up being version +“2.9.8”.
        8. +
        +
      12. +
      +
    14. +
    15. Bug Fixes & Rollback +
        +
      1. You MUST NOT under any circumstances force push to the master branch.
      2. +
      3. If a change branch which has been merged into the master branch is found +to have a bug in it, the bug fix work MUST be done as a new separate +change branch and MUST follow the same workflow as any other change +branch.
      4. +
      5. If a change branch is wrongfully merged into master, or for any other +reason the merge must be undone, you MUST undo the merge by reverting the +merge commit itself. Effectively creating a new commit that reverses all +the relevant changes.
      6. +
      +
    16. +
    17. Git Best Practices +
        +
      1. All commit messages SHOULD follow the Commit Guidelines and format from +the official git +documentation: +https://git-scm.com/book/en/v2/Distributed-Git-Contributing-to-a-Project#_commit_guidelines
      2. +
      3. You SHOULD never blindly commit all changes with “git commit -a”. It is +RECOMMENDED you use “git add -i” to add individual changes to the staging +area so you are fully aware of what you are committing.
      4. +
      5. You SHOULD always use “—force-with-lease” when doing a force push. The +regular “—force” option is dangerous and destructive. More +information: +https://developer.atlassian.com/blog/2015/04/force-with-lease/
      6. +
      7. You SHOULD understand and be comfortable with +rebasing: https://git-scm.com/book/en/v2/Git-Branching-Rebasing
      8. +
      9. It is RECOMMENDED that you always do “git pull —rebase” instead of “git +pull” to avoid unnecessary merge commits. You can make this the default +behavior of “git pull” with “git config —global pull.rebase true”.
      10. +
      11. It is RECOMMENDED that all branches be merged using “git merge —no-ff”. +This makes sure the reference to the original branch is kept in the +commits, allows one to revert a merge by reverting a single merge commit, +and creates a merge commit to mark the integration of the branch with +master.
      12. +
      +
    18. +
    +

    About

    +

    The Git Common-Flow specification is authored +by Jim Myhrberg.

    +

    If you’d like to leave feedback, +please open an issue on GitHub.

    +

    License

    +

    Creative Commons - CC BY 3.0

    \ No newline at end of file diff --git a/docs/spec/1.0.0-rc.4.html b/docs/spec/1.0.0-rc.4.html deleted file mode 100644 index e741fe3..0000000 --- a/docs/spec/1.0.0-rc.4.html +++ /dev/null @@ -1,406 +0,0 @@ - - - - - - - - - - - - Git Common-Flow 1.0.0-rc.4 | Git Common Flow - - - - - - - - - - - - -
    - - - - -
    -
    -

    Git Common-Flow 1.0.0-rc.4

    -

    -

    Summary

    -

    Common-Flow is an attempt to gather a sensible selection of the most common - usage patterns of git into a single and concise specification. It is based on - the original variant - of GitHub Flow, while taking - into account how a lot of open source projects use git.

    -

    In short, Common-Flow is essentially GitHub Flow with the addition of versioned - releases, optional release branches, and without the requirement to deploy to - production all the time.

    -

    Terminology

    -
      -
    • Master Branch - Must be named "master", must always have passing tests, - and is not guaranteed to always work in production environments.
    • -
    • Change Branches - Any branch that introduces changes like a new feature, a - bug fix, etc.
    • -
    • Source Branch - The branch that a change branch was created from. New - changes in the source branch should be incorporated into the change branch via - rebasing.
    • -
    • Merge Target - A branch that is the intended merge target for a change - branch. Typically the merge target branch will be the same as the source - branch.
    • -
    • Pull Request - A means of requesting that a change branch is merged in to - its merge target, allowing others to review, discuss and approve the changes.
    • -
    • Release - May be considered safe to use in production environments. Is - effectively just a git tag named after the version of the release.
    • -
    • Release Branches - Used both for short-term preparations of a release, and - also for long-term maintenance of older version.
    • -
    -

    Git Common-Flow Specification (Common-Flow)

    -

    The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", - "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be - interpreted as described in RFC 2119.

    -
      -
    1. TL;DR -
        -
      1. Don't break the master branch.
      2. -
      3. A release is a git tag.
      4. -
      -
    2. -
    3. The Master Branch -
        -
      1. A branch named "master" MUST exist and it MUST be referred to as the - "master branch".
      2. -
      3. The master branch MUST always be in a non-broken state with its test - suite passing.
      4. -
      5. The master branch IS NOT guaranteed to always work in production - environments. Despite test suites passing it may at times contain - unfinished work. Only releases may be considered safe for production use.
      6. -
      7. The master branch SHOULD always be in a "as near as possibly ready for - release/production" state to reduce any friction with creating a new - release.
      8. -
      -
    4. -
    5. Change Branches -
        -
      1. Each change (feature, bugfix, etc.) MUST be performed on separate - branches that SHOULD be referred to as "change branches".
      2. -
      3. All change branches MUST have descriptive names.
      4. -
      5. It is RECOMMENDED that you commit often locally, and that you try and - keep the commits reasonably structured to avoid a messy and confusing git - history.
      6. -
      7. You SHOULD regularly push your work to the same named branch on the - remote server.
      8. -
      9. You SHOULD create separate change branches for each distinctly different - change. You SHOULD NOT include multiple unrelated changes into a single - change branch.
      10. -
      11. When a change branch is created, the branch that it is created from - SHOULD be referred to as the "source branch". Each change branch also - needs a designated "merge target" branch, typically this will be the same - as the source branch.
      12. -
      13. Change branches MUST be regularly updated with any changes from their - source branch. This MUST be done by rebasing the change branch on top of - the source branch.
      14. -
      15. After updating a change branch from its source branch you MUST push the - change branch to the remote server. Due to the nature of rebasing, you - will be required to do a force push, and you MUST use the - "--force-with-lease" git push option when doing so instead of the regular - "--force".
      16. -
      17. If there is a truly valid technical reason to not use rebase when - updating change branches, then you can update change branches via merge - instead of rebase. The decision to use merge MUST only be taken after all - possible options to use rebase have been tried and failed. People not - understanding how to use rebase is NOT a valid reason to use merge. If - you do decide to use merge instead of rebase, you MUST NOT use a mixture - of both methods, pick one and stick to it.
      18. -
      -
    6. -
    7. Pull Requests -
        -
      1. To merge a change branch into its merge target, you MUST open a "pull - request" (or equivalent).
      2. -
      3. The purpose of a pull request is to allow others to review your changes - and give feedback. You can then fix any issues, complaints, and more that - might arise, and then let people review again.
      4. -
      5. Before creating a pull request, it is RECOMMENDED that you consider the - state of your change branch's commit history. If it is messy and - confusing, it might be a good idea to rebase your branch with "git rebase - -i" to present a cleaner and easier to follow commit history for your - reviewers.
      6. -
      7. A pull request MUST only be merged when the change branch is up-to-date - with its source branch, the test suite is passing, and you and others are - happy with the change. This is especially important if the merge target - is the master branch.
      8. -
      9. To get feedback, help, or generally just discuss a change branch with - others, the RECOMMENDED way to do so is by creating a pull request and - discuss the changes with others there.
      10. -
      -
    8. -
    9. Versioning -
        -
      1. A "version string" is a typically mostly numeric string that identifies a - specific version of a project. The version string itself MUST NOT have a - "v" prefix, but the version string can be displayed with a "v" prefix to - indicate it is a version that is being referred to.
      2. -
      3. The source of truth for a project's version MUST be a git tag with a name - based on the version string. This kind of tag MUST be referred to as a - "release tag".
      4. -
      5. It is OPTIONAL, but RECOMMENDED to also keep the version string - hard-coded somewhere in the project code-base.
      6. -
      7. If you hard-code the version string into the code-base, it is RECOMMENDED - that you do so in a file called "VERSION" located in the root of the - project. But be mindful of the conventions of your programming language - and community when choosing if, where and how to hard-code the version - string.
      8. -
      9. If you are using a "VERSION" file in the root of the project, this file - MUST only contain the exact version string, meaning it MUST NOT have a - "v" prefix. For example "v2.11.4" is bad, and "2.11.4" is good.
      10. -
      11. It is OPTIONAL, but RECOMMENDED that that the version string follows - Semantic Versioning (http://semver.org/).
      12. -
      -
    10. -
    11. Releases -
        -
      1. To create a new release, you MUST create a git tag named as the exact - version string of the release. This kind of tag MUST be referred to as a - "release tag".
      2. -
      3. The release tag name can OPTIONALLY be prefixed with "v". For example the - tag name can be either "2.11.4" or "v2.11.4". It is however RECOMMENDED - that you do not use a "v" prefix. You MUST NOT use a mixture of "v" - prefixed and non-prefixed tags. Pick one form and stick to it.
      4. -
      5. If the version string is hard-coded into the code-base, you MUST create a - "version bump" commit which changes the hard-coded version string of the - project.
      6. -
      7. When using version bump commits, the release tag MUST be placed on the - version bump commit.
      8. -
      9. If you are not using a release branch, then the release tag, and if - relevant the version bump commit, MUST be created directly on the master - branch.
      10. -
      11. The version bump commit SHOULD have a commit message title of "Bump - version to VERSION". For example, if the new version string is "2.11.4", - the first line of the commit message SHOULD read: "Bump version to - 2.11.4"
      12. -
      13. It is RECOMMENDED that release tags are lightweight tags, but you can - OPTIONALLY use annotated tags if you want to include changelog - information in the release tag itself.
      14. -
      15. If you use annotated release tags, the first line of the annotation - SHOULD read "Release VERSION". For example for version "2.11.4" the first - line of the tag annotation SHOULD read "Release 2.11.4". The second line - MUST be blank, and the changelog MUST start on the third line.
      16. -
      -
    12. -
    13. Short-Term Release Branches -
        -
      1. Any branch that has a name starting with "release-" SHOULD be referred to - as a "release branch".
      2. -
      3. Any release branch which has a name ending with a specific version - string, MUST be referred to as a "short-term release branch".
      4. -
      5. Use of short-term release branches are OPTIONAL, and intended to be used - to create a specific versioned release.
      6. -
      7. A short-term release branch is RECOMMENDED if there is a lengthy - pre-release verification process to avoid a code freeze on the master - branch.
      8. -
      9. Short-term release branches MUST have a name of "release-VERSION". For - example for version "2.11.4" the release branch name MUST be - "release-2.11.4".
      10. -
      11. When using a short-term release branch to create a release, the release - tag and if used, version bump commit, MUST be placed directly on the - short-term release branch itself.
      12. -
      13. Only very minor changes should be performed on a short-term release - branch directly. Any larger changes SHOULD be done in the master branch, - and SHOULD be pulled into the release branch by rebasing it on top of the - master branch the same way a change branch pulls in updates from its - source branch.
      14. -
      15. After a release tag has been created, the release branch MUST be merged - back into its source branch and then deleted. Typically the source branch - will be the master branch.
      16. -
      -
    14. -
    15. Long-term Release Branches -
        -
      1. Any release branch which has a name ending with a non-specific version - string, MUST be referred to as a "long-term release branch". For example - "release-2.11" is a long-term release branch, while "release-2.11.4" is a - short-term release branch.
      2. -
      3. Use of long-term release branches are OPTIONAL, and intended for work on - versions which are not currently part of the master branch. Typically - this is useful when you need to create a new maintenance release for a - older version.
      4. -
      5. A long-term release branch MUST have a name with a non-specific version - number. For example a long-term release branch for creating new 2.9.x - releases MUST be named "release-2.9".
      6. -
      7. Long-term release branches for maintenance releases of older versions - MUST be created from the relevant release tag. For example if the master - branch is on version 2.11.4 and there is a security fix for all 2.9.x - releases, the latest of which is "2.9.7". Create a new branch called - "release-2.9" off of the "2.9.7" release tag. The security fix release - will then end up being version "2.9.8".
      8. -
      9. To create a new release from a long-term release branch, you MUST follow - the same process as a release from the master branch, except the - long-term release branch takes the place of the master branch.
      10. -
      11. A long-term release branch should be treated with the same respect as the - master branch. It is effectively the master branch for the release series - in question. Meaning it MUST always be in a non-broken state, MUST NOT be - force pushed to, etc.
      12. -
      -
    16. -
    17. Bug Fixes & Rollback -
        -
      1. You MUST NOT under any circumstances force push to the master branch or - to long-term release branches.
      2. -
      3. If a change branch which has been merged into the master branch is found - to have a bug in it, the bug fix work MUST be done as a new separate - change branch and MUST follow the same workflow as any other change - branch.
      4. -
      5. If a change branch is wrongfully merged into master, or for any other - reason the merge must be undone, you MUST undo the merge by reverting the - merge commit itself. Effectively creating a new commit that reverses all - the relevant changes.
      6. -
      -
    18. -
    19. Git Best Practices -
        -
      1. All commit messages SHOULD follow the Commit Guidelines and format from - the official git - documentation: - https://git-scm.com/book/en/v2/Distributed-Git-Contributing-to-a-Project#_commit_guidelines
      2. -
      3. You SHOULD never blindly commit all changes with "git commit -a". It is - RECOMMENDED you use "git add -i" or "git add -p" to add individual - changes to the staging area so you are fully aware of what you are - committing.
      4. -
      5. You SHOULD always use "--force-with-lease" when doing a force push. The - regular "--force" option is dangerous and destructive. More - information: - https://developer.atlassian.com/blog/2015/04/force-with-lease/
      6. -
      7. You SHOULD understand and be comfortable with - rebasing: https://git-scm.com/book/en/v2/Git-Branching-Rebasing
      8. -
      9. It is RECOMMENDED that you always do "git pull --rebase" instead of "git - pull" to avoid unnecessary merge commits. You can make this the default - behavior of "git pull" with "git config --global pull.rebase true".
      10. -
      11. It is RECOMMENDED that all branches be merged using "git merge --no-ff". - This makes sure the reference to the original branch is kept in the - commits, allows one to revert a merge by reverting a single merge commit, - and creates a merge commit to mark the integration of the branch with - master.
      12. -
      -
    20. -
    -

    FAQ

    -

    Why use Common-Flow instead of Git Flow, and how does it differ?

    -

    Common-Flow tries to be a lot less complicated than Git Flow by having fewer - types of branches, and simpler rules. Normal day to day development doesn't - really change much:

    -
      -
    • You create change branches instead of feature branches, without the need of a - "feature/" or "change/" prefix in the branch name.
    • -
    • Change branches are typically created off of and merged back into "master" - instead of "develop".
    • -
    • Creating a release is done by simply creating a git tag, typically on the - master branch.
    • -
    -

    In detail, the main differences between Git Flow and Common-Flow are:

    -
      -
    • There is no "develop" branch, there is only a "master" branch which contains - the latest work. In Git Flow the master branch effectively ends up just being - a pointer to the latest release, despite the fact that Git Flow includes - release tags too. In Common-Flow you just look at the tags to find the latest - release.
    • -
    • There are no "feature" or "hotfix" branches, there's only "change" - branches. Any branch that is not master and introduces changes is a change - branch. Change branches also don't have a enforced naming convention, they - just have to have a "descriptive name". This makes things simpler and allows - more flexibility.
    • -
    • Release branches are available, but optional. Instead of enforcing the use of - release branches like Git Flow, Common-Flow only recommends the use of release - branches when it makes things easier. If creating a new release by tagging - "master" works for you, great, do that.
    • -
    -

    Why use Common-Flow instead of GitHub Flow, and how does it differ?

    -

    Common-Flow is essentially GitHub Flow with the addition of a "Release" concept - that uses tags. It also attempts to define how certain common tasks are done, - like updating change/feature branches from their source branches for - example. This is to help end arguments about how such things are done.

    -

    If a deployment/release for you is just getting the latest code in the master - branch out, without caring about bumping version numbers or anything, then - GitHub Flow is a good fit for you, and you probably don't need the extras of - Common-Flow.

    -

    However if your deployments/releases have specific version numbers, then - Common-Flow gives you a simple set of rules of how to create and manage - releases, on top of what GitHub Flow already does.

    -

    What does "descriptive name" mean for change branches?

    -

    It means what it sounds like. The name should be descriptive, as in by just - reading the name of the branch you should understand what the branch's purpose - is and what it does. Here's a few examples:

    -
      -
    • add-2fa-support
    • -
    • fix-login-issue
    • -
    • remove-sort-by-middle-name-functionality
    • -
    • update-font-awesome
    • -
    • change-search-behavior
    • -
    • tweak-footer-style
    • -
    -

    Notice how none of these have any prefixes like "feature/" or "hotfix/", they're - not needed when branch names are properly descriptive. However there's nothing - to say you can't use such prefixes if you want. That also means that you can add - ticket number prefixes if your team/org has that as part of it's process.

    -

    How do we release an emergency hotfix when the master branch is broken?

    -

    This should ideally never happen, however if it does you can do one of the - following:

    -
      -
    • Review why the master branch is broken and revert the changes that caused the - issues. Then apply the hotfix and release.
    • -
    • Or use a short-term release branch created from the latest release tag instead - of the master branch. Apply the hotfix to the release branch, create a release - tag on the release branch, and then merge it back into master.
    • -
    -

    In this situation, it is recommended you try to revert the offending changes - that's preventing a new release from master. But if that proves to be a - complicated task and you're short on time, a short-term release branch gives you - a instant fix to the situation at hand, and let's you resolve the issues with - the master branch when you have more time on your hands.

    -

    About

    -

    The Git Common-Flow specification is authored - by Jim Myhrberg.

    -

    If you'd like to leave feedback, - please open an issue on GitHub.

    -

    License

    -

    Creative Commons - CC BY 3.0

    -
    -
    -
    - - - \ No newline at end of file diff --git a/docs/spec/1.0.0-rc.4/index.html b/docs/spec/1.0.0-rc.4/index.html new file mode 100644 index 0000000..165d9b6 --- /dev/null +++ b/docs/spec/1.0.0-rc.4/index.html @@ -0,0 +1,368 @@ + Git Common-Flow 1.0.0-rc.4 | Git Common Flow +

    Git Common-Flow 1.0.0-rc.4

    +Git Common-Flow 1.0.0-rc.4 diagram +

    Summary

    +

    Common-Flow is an attempt to gather a sensible selection of the most common +usage patterns of git into a single and concise specification. It is based on +the original variant +of GitHub Flow, while taking +into account how a lot of open source projects use git.

    +

    In short, Common-Flow is essentially GitHub Flow with the addition of versioned +releases, optional release branches, and without the requirement to deploy to +production all the time.

    +

    Terminology

    +
      +
    • Master Branch - Must be named “master”, must always have passing tests, +and is not guaranteed to always work in production environments.
    • +
    • Change Branches - Any branch that introduces changes like a new feature, a +bug fix, etc.
    • +
    • Source Branch - The branch that a change branch was created from. New +changes in the source branch should be incorporated into the change branch via +rebasing.
    • +
    • Merge Target - A branch that is the intended merge target for a change +branch. Typically the merge target branch will be the same as the source +branch.
    • +
    • Pull Request - A means of requesting that a change branch is merged in to +its merge target, allowing others to review, discuss and approve the changes.
    • +
    • Release - May be considered safe to use in production environments. Is +effectively just a git tag named after the version of the release.
    • +
    • Release Branches - Used both for short-term preparations of a release, and +also for long-term maintenance of older version.
    • +
    +

    Git Common-Flow Specification (Common-Flow)

    +

    The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, +“SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be +interpreted as described in RFC 2119.

    +
      +
    1. TL;DR +
        +
      1. Don’t break the master branch.
      2. +
      3. A release is a git tag.
      4. +
      +
    2. +
    3. The Master Branch +
        +
      1. A branch named “master” MUST exist and it MUST be referred to as the +“master branch”.
      2. +
      3. The master branch MUST always be in a non-broken state with its test +suite passing.
      4. +
      5. The master branch IS NOT guaranteed to always work in production +environments. Despite test suites passing it may at times contain +unfinished work. Only releases may be considered safe for production use.
      6. +
      7. The master branch SHOULD always be in a “as near as possibly ready for +release/production” state to reduce any friction with creating a new +release.
      8. +
      +
    4. +
    5. Change Branches +
        +
      1. Each change (feature, bugfix, etc.) MUST be performed on separate +branches that SHOULD be referred to as “change branches”.
      2. +
      3. All change branches MUST have descriptive names.
      4. +
      5. It is RECOMMENDED that you commit often locally, and that you try and +keep the commits reasonably structured to avoid a messy and confusing git +history.
      6. +
      7. You SHOULD regularly push your work to the same named branch on the +remote server.
      8. +
      9. You SHOULD create separate change branches for each distinctly different +change. You SHOULD NOT include multiple unrelated changes into a single +change branch.
      10. +
      11. When a change branch is created, the branch that it is created from +SHOULD be referred to as the “source branch”. Each change branch also +needs a designated “merge target” branch, typically this will be the same +as the source branch.
      12. +
      13. Change branches MUST be regularly updated with any changes from their +source branch. This MUST be done by rebasing the change branch on top of +the source branch.
      14. +
      15. After updating a change branch from its source branch you MUST push the +change branch to the remote server. Due to the nature of rebasing, you +will be required to do a force push, and you MUST use the +“—force-with-lease” git push option when doing so instead of the regular +“—force”.
      16. +
      17. If there is a truly valid technical reason to not use rebase when +updating change branches, then you can update change branches via merge +instead of rebase. The decision to use merge MUST only be taken after all +possible options to use rebase have been tried and failed. People not +understanding how to use rebase is NOT a valid reason to use merge. If +you do decide to use merge instead of rebase, you MUST NOT use a mixture +of both methods, pick one and stick to it.
      18. +
      +
    6. +
    7. Pull Requests +
        +
      1. To merge a change branch into its merge target, you MUST open a “pull +request” (or equivalent).
      2. +
      3. The purpose of a pull request is to allow others to review your changes +and give feedback. You can then fix any issues, complaints, and more that +might arise, and then let people review again.
      4. +
      5. Before creating a pull request, it is RECOMMENDED that you consider the +state of your change branch’s commit history. If it is messy and +confusing, it might be a good idea to rebase your branch with “git rebase +-i” to present a cleaner and easier to follow commit history for your +reviewers.
      6. +
      7. A pull request MUST only be merged when the change branch is up-to-date +with its source branch, the test suite is passing, and you and others are +happy with the change. This is especially important if the merge target +is the master branch.
      8. +
      9. To get feedback, help, or generally just discuss a change branch with +others, the RECOMMENDED way to do so is by creating a pull request and +discuss the changes with others there.
      10. +
      +
    8. +
    9. Versioning +
        +
      1. A “version string” is a typically mostly numeric string that identifies a +specific version of a project. The version string itself MUST NOT have a +“v” prefix, but the version string can be displayed with a “v” prefix to +indicate it is a version that is being referred to.
      2. +
      3. The source of truth for a project’s version MUST be a git tag with a name +based on the version string. This kind of tag MUST be referred to as a +“release tag”.
      4. +
      5. It is OPTIONAL, but RECOMMENDED to also keep the version string +hard-coded somewhere in the project code-base.
      6. +
      7. If you hard-code the version string into the code-base, it is RECOMMENDED +that you do so in a file called “VERSION” located in the root of the +project. But be mindful of the conventions of your programming language +and community when choosing if, where and how to hard-code the version +string.
      8. +
      9. If you are using a “VERSION” file in the root of the project, this file +MUST only contain the exact version string, meaning it MUST NOT have a +“v” prefix. For example “v2.11.4” is bad, and “2.11.4” is good.
      10. +
      11. It is OPTIONAL, but RECOMMENDED that that the version string follows +Semantic Versioning (http://semver.org/).
      12. +
      +
    10. +
    11. Releases +
        +
      1. To create a new release, you MUST create a git tag named as the exact +version string of the release. This kind of tag MUST be referred to as a +“release tag”.
      2. +
      3. The release tag name can OPTIONALLY be prefixed with “v”. For example the +tag name can be either “2.11.4” or “v2.11.4”. It is however RECOMMENDED +that you do not use a “v” prefix. You MUST NOT use a mixture of “v” +prefixed and non-prefixed tags. Pick one form and stick to it.
      4. +
      5. If the version string is hard-coded into the code-base, you MUST create a +“version bump” commit which changes the hard-coded version string of the +project.
      6. +
      7. When using version bump commits, the release tag MUST be placed on the +version bump commit.
      8. +
      9. If you are not using a release branch, then the release tag, and if +relevant the version bump commit, MUST be created directly on the master +branch.
      10. +
      11. The version bump commit SHOULD have a commit message title of “Bump +version to VERSION”. For example, if the new version string is “2.11.4”, +the first line of the commit message SHOULD read: “Bump version to +2.11.4”
      12. +
      13. It is RECOMMENDED that release tags are lightweight tags, but you can +OPTIONALLY use annotated tags if you want to include changelog +information in the release tag itself.
      14. +
      15. If you use annotated release tags, the first line of the annotation +SHOULD read “Release VERSION”. For example for version “2.11.4” the first +line of the tag annotation SHOULD read “Release 2.11.4”. The second line +MUST be blank, and the changelog MUST start on the third line.
      16. +
      +
    12. +
    13. Short-Term Release Branches +
        +
      1. Any branch that has a name starting with “release-” SHOULD be referred to +as a “release branch”.
      2. +
      3. Any release branch which has a name ending with a specific version +string, MUST be referred to as a “short-term release branch”.
      4. +
      5. Use of short-term release branches are OPTIONAL, and intended to be used +to create a specific versioned release.
      6. +
      7. A short-term release branch is RECOMMENDED if there is a lengthy +pre-release verification process to avoid a code freeze on the master +branch.
      8. +
      9. Short-term release branches MUST have a name of “release-VERSION”. For +example for version “2.11.4” the release branch name MUST be +“release-2.11.4”.
      10. +
      11. When using a short-term release branch to create a release, the release +tag and if used, version bump commit, MUST be placed directly on the +short-term release branch itself.
      12. +
      13. Only very minor changes should be performed on a short-term release +branch directly. Any larger changes SHOULD be done in the master branch, +and SHOULD be pulled into the release branch by rebasing it on top of the +master branch the same way a change branch pulls in updates from its +source branch.
      14. +
      15. After a release tag has been created, the release branch MUST be merged +back into its source branch and then deleted. Typically the source branch +will be the master branch.
      16. +
      +
    14. +
    15. Long-term Release Branches +
        +
      1. Any release branch which has a name ending with a non-specific version +string, MUST be referred to as a “long-term release branch”. For example +“release-2.11” is a long-term release branch, while “release-2.11.4” is a +short-term release branch.
      2. +
      3. Use of long-term release branches are OPTIONAL, and intended for work on +versions which are not currently part of the master branch. Typically +this is useful when you need to create a new maintenance release for a +older version.
      4. +
      5. A long-term release branch MUST have a name with a non-specific version +number. For example a long-term release branch for creating new 2.9.x +releases MUST be named “release-2.9”.
      6. +
      7. Long-term release branches for maintenance releases of older versions +MUST be created from the relevant release tag. For example if the master +branch is on version 2.11.4 and there is a security fix for all 2.9.x +releases, the latest of which is “2.9.7”. Create a new branch called +“release-2.9” off of the “2.9.7” release tag. The security fix release +will then end up being version “2.9.8”.
      8. +
      9. To create a new release from a long-term release branch, you MUST follow +the same process as a release from the master branch, except the +long-term release branch takes the place of the master branch.
      10. +
      11. A long-term release branch should be treated with the same respect as the +master branch. It is effectively the master branch for the release series +in question. Meaning it MUST always be in a non-broken state, MUST NOT be +force pushed to, etc.
      12. +
      +
    16. +
    17. Bug Fixes & Rollback +
        +
      1. You MUST NOT under any circumstances force push to the master branch or +to long-term release branches.
      2. +
      3. If a change branch which has been merged into the master branch is found +to have a bug in it, the bug fix work MUST be done as a new separate +change branch and MUST follow the same workflow as any other change +branch.
      4. +
      5. If a change branch is wrongfully merged into master, or for any other +reason the merge must be undone, you MUST undo the merge by reverting the +merge commit itself. Effectively creating a new commit that reverses all +the relevant changes.
      6. +
      +
    18. +
    19. Git Best Practices +
        +
      1. All commit messages SHOULD follow the Commit Guidelines and format from +the official git +documentation: +https://git-scm.com/book/en/v2/Distributed-Git-Contributing-to-a-Project#_commit_guidelines
      2. +
      3. You SHOULD never blindly commit all changes with “git commit -a”. It is +RECOMMENDED you use “git add -i” or “git add -p” to add individual +changes to the staging area so you are fully aware of what you are +committing.
      4. +
      5. You SHOULD always use “—force-with-lease” when doing a force push. The +regular “—force” option is dangerous and destructive. More +information: +https://developer.atlassian.com/blog/2015/04/force-with-lease/
      6. +
      7. You SHOULD understand and be comfortable with +rebasing: https://git-scm.com/book/en/v2/Git-Branching-Rebasing
      8. +
      9. It is RECOMMENDED that you always do “git pull —rebase” instead of “git +pull” to avoid unnecessary merge commits. You can make this the default +behavior of “git pull” with “git config —global pull.rebase true”.
      10. +
      11. It is RECOMMENDED that all branches be merged using “git merge —no-ff”. +This makes sure the reference to the original branch is kept in the +commits, allows one to revert a merge by reverting a single merge commit, +and creates a merge commit to mark the integration of the branch with +master.
      12. +
      +
    20. +
    +

    FAQ

    +

    Why use Common-Flow instead of Git Flow, and how does it differ?

    +

    Common-Flow tries to be a lot less complicated than Git Flow by having fewer +types of branches, and simpler rules. Normal day to day development doesn’t +really change much:

    +
      +
    • You create change branches instead of feature branches, without the need of a +“feature/” or “change/” prefix in the branch name.
    • +
    • Change branches are typically created off of and merged back into “master” +instead of “develop”.
    • +
    • Creating a release is done by simply creating a git tag, typically on the +master branch.
    • +
    +

    In detail, the main differences between Git Flow and Common-Flow are:

    +
      +
    • There is no “develop” branch, there is only a “master” branch which contains +the latest work. In Git Flow the master branch effectively ends up just being +a pointer to the latest release, despite the fact that Git Flow includes +release tags too. In Common-Flow you just look at the tags to find the latest +release.
    • +
    • There are no “feature” or “hotfix” branches, there’s only “change” +branches. Any branch that is not master and introduces changes is a change +branch. Change branches also don’t have a enforced naming convention, they +just have to have a “descriptive name”. This makes things simpler and allows +more flexibility.
    • +
    • Release branches are available, but optional. Instead of enforcing the use of +release branches like Git Flow, Common-Flow only recommends the use of release +branches when it makes things easier. If creating a new release by tagging +“master” works for you, great, do that.
    • +
    +

    Why use Common-Flow instead of GitHub Flow, and how does it differ?

    +

    Common-Flow is essentially GitHub Flow with the addition of a “Release” concept +that uses tags. It also attempts to define how certain common tasks are done, +like updating change/feature branches from their source branches for +example. This is to help end arguments about how such things are done.

    +

    If a deployment/release for you is just getting the latest code in the master +branch out, without caring about bumping version numbers or anything, then +GitHub Flow is a good fit for you, and you probably don’t need the extras of +Common-Flow.

    +

    However if your deployments/releases have specific version numbers, then +Common-Flow gives you a simple set of rules of how to create and manage +releases, on top of what GitHub Flow already does.

    +

    What does “descriptive name” mean for change branches?

    +

    It means what it sounds like. The name should be descriptive, as in by just +reading the name of the branch you should understand what the branch’s purpose +is and what it does. Here’s a few examples:

    +
      +
    • add-2fa-support
    • +
    • fix-login-issue
    • +
    • remove-sort-by-middle-name-functionality
    • +
    • update-font-awesome
    • +
    • change-search-behavior
    • +
    • tweak-footer-style
    • +
    +

    Notice how none of these have any prefixes like “feature/” or “hotfix/”, they’re +not needed when branch names are properly descriptive. However there’s nothing +to say you can’t use such prefixes if you want. That also means that you can add +ticket number prefixes if your team/org has that as part of it’s process.

    +

    How do we release an emergency hotfix when the master branch is broken?

    +

    This should ideally never happen, however if it does you can do one of the +following:

    +
      +
    • Review why the master branch is broken and revert the changes that caused the +issues. Then apply the hotfix and release.
    • +
    • Or use a short-term release branch created from the latest release tag instead +of the master branch. Apply the hotfix to the release branch, create a release +tag on the release branch, and then merge it back into master.
    • +
    +

    In this situation, it is recommended you try to revert the offending changes +that’s preventing a new release from master. But if that proves to be a +complicated task and you’re short on time, a short-term release branch gives you +a instant fix to the situation at hand, and let’s you resolve the issues with +the master branch when you have more time on your hands.

    +

    About

    +

    The Git Common-Flow specification is authored +by Jim Myhrberg.

    +

    If you’d like to leave feedback, +please open an issue on GitHub.

    +

    License

    +

    Creative Commons - CC BY 3.0

    \ No newline at end of file diff --git a/docs/spec/1.0.0-rc.5.html b/docs/spec/1.0.0-rc.5.html deleted file mode 100644 index f6cee4b..0000000 --- a/docs/spec/1.0.0-rc.5.html +++ /dev/null @@ -1,425 +0,0 @@ - - - - - - - - - - - - Git Common-Flow 1.0.0-rc.5 | Git Common Flow - - - - - - - - - - - - -
    - - - - -
    -
    -

    Git Common-Flow 1.0.0-rc.5

    -

    -

    Introduction

    -

    Common-Flow is an attempt to gather a sensible selection of the most common - usage patterns of git into a single and concise specification. It is based on - the original variant - of GitHub Flow, while taking - into account how a lot of open source projects most commonly use git.

    -

    In short, Common-Flow is essentially GitHub Flow with the addition of versioned - releases, optional release branches, and without the requirement to deploy to - production all the time.

    -

    Summary

    -
      -
    • The "master" branch is the mainline branch with latest changes, and must not - be broken.
    • -
    • Changes (features, bugfixes, etc.) are done on "change branches" created from - the master branch.
    • -
    • Rebase change branches early and often.
    • -
    • When a change branch is stable and ready, it is merged back in to master.
    • -
    • A release is just a git tag who's name is the exact release version string - (e.g. "2.11.4").
    • -
    • Release branches can be used to avoid change freezes on master. They are not - required, instead they are available if you need them.
    • -
    -

    Terminology

    -
      -
    • Master Branch - Must be named "master", must always have passing tests, - and is not guaranteed to always work in production environments.
    • -
    • Change Branches - Any branch that introduces changes like a new feature, a - bug fix, etc.
    • -
    • Source Branch - The branch that a change branch was created from. New - changes in the source branch should be incorporated into the change branch via - rebasing.
    • -
    • Merge Target - A branch that is the intended merge target for a change - branch. Typically the merge target branch will be the same as the source - branch.
    • -
    • Pull Request - A means of requesting that a change branch is merged in to - its merge target, allowing others to review, discuss and approve the changes.
    • -
    • Release - May be considered safe to use in production environments. Is - effectively just a git tag named after the version of the release.
    • -
    • Release Branches - Used both for short-term preparations of a release, and - also for long-term maintenance of older version.
    • -
    -

    Git Common-Flow Specification (Common-Flow)

    -

    The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", - "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be - interpreted as described in RFC 2119.

    -
      -
    1. TL;DR -
        -
      1. Do not break the master branch.
      2. -
      3. A release is a git tag.
      4. -
      -
    2. -
    3. The Master Branch -
        -
      1. A branch named "master" MUST exist and it MUST be referred to as the - "master branch".
      2. -
      3. The master branch MUST always be in a non-broken state with its test - suite passing.
      4. -
      5. The master branch IS NOT guaranteed to always work in production - environments. Despite test suites passing it may at times contain - unfinished work. Only releases may be considered safe for production use.
      6. -
      7. The master branch SHOULD always be in a "as near as possibly ready for - release/production" state to reduce any friction with creating a new - release.
      8. -
      -
    4. -
    5. Change Branches -
        -
      1. Each change (feature, bugfix, etc.) MUST be performed on separate - branches that SHOULD be referred to as "change branches".
      2. -
      3. All change branches MUST have descriptive names.
      4. -
      5. It is RECOMMENDED that you commit often locally, and that you try and - keep the commits reasonably structured to avoid a messy and confusing git - history.
      6. -
      7. You SHOULD regularly push your work to the same named branch on the - remote server.
      8. -
      9. You SHOULD create separate change branches for each distinctly different - change. You SHOULD NOT include multiple unrelated changes into a single - change branch.
      10. -
      11. When a change branch is created, the branch that it is created from - SHOULD be referred to as the "source branch". Each change branch also - needs a designated "merge target" branch, typically this will be the same - as the source branch.
      12. -
      13. Change branches MUST be regularly updated with any changes from their - source branch. This MUST be done by rebasing the change branch on top of - the source branch.
      14. -
      15. After updating a change branch from its source branch you MUST push the - change branch to the remote server. Due to the nature of rebasing, you - will be required to do a force push, and you MUST use the - "--force-with-lease" git push option when doing so instead of the regular - "--force".
      16. -
      17. If there is a truly valid technical reason to not use rebase when - updating change branches, then you can update change branches via merge - instead of rebase. The decision to use merge MUST only be taken after all - possible options to use rebase have been tried and failed. People not - understanding how to use rebase is NOT a valid reason to use merge. If - you do decide to use merge instead of rebase, you MUST NOT use a mixture - of both methods, pick one and stick to it.
      18. -
      -
    6. -
    7. Pull Requests -
        -
      1. To merge a change branch into its merge target, you MUST open a "pull - request" (or equivalent).
      2. -
      3. The purpose of a pull request is to allow others to review your changes - and give feedback. You can then fix any issues, complaints, and more that - might arise, and then let people review again.
      4. -
      5. Before creating a pull request, it is RECOMMENDED that you consider the - state of your change branch's commit history. If it is messy and - confusing, it might be a good idea to rebase your branch with "git rebase - -i" to present a cleaner and easier to follow commit history for your - reviewers.
      6. -
      7. A pull request MUST only be merged when the change branch is up-to-date - with its source branch, the test suite is passing, and you and others are - happy with the change. This is especially important if the merge target - is the master branch.
      8. -
      9. To get feedback, help, or generally just discuss a change branch with - others, it is RECOMMENDED you create a pull request and discuss the - changes with others there. This leaves a clear and visible history of - how, when, and why the code looks and behaves the way it does.
      10. -
      -
    8. -
    9. Versioning -
        -
      1. A "version string" is a typically mostly numeric string that identifies a - specific version of a project. The version string itself MUST NOT have a - "v" prefix, but the version string can be displayed with a "v" prefix to - indicate it is a version that is being referred to.
      2. -
      3. The source of truth for a project's version MUST be a git tag with a name - based on the version string. This kind of tag MUST be referred to as a - "release tag".
      4. -
      5. It is OPTIONAL, but RECOMMENDED to also keep the version string - hard-coded somewhere in the project code-base.
      6. -
      7. If you hard-code the version string into the code-base, it is RECOMMENDED - that you do so in a file called "VERSION" located in the root of the - project. But be mindful of the conventions of your programming language - and community when choosing if, where and how to hard-code the version - string.
      8. -
      9. If you are using a "VERSION" file in the root of the project, this file - MUST only contain the exact version string, meaning it MUST NOT have a - "v" prefix. For example "v2.11.4" is bad, and "2.11.4" is good.
      10. -
      11. It is OPTIONAL, but RECOMMENDED that that the version string follows - Semantic Versioning (http://semver.org/).
      12. -
      -
    10. -
    11. Releases -
        -
      1. To create a new release, you MUST create a git tag named as the exact - version string of the release. This kind of tag MUST be referred to as a - "release tag".
      2. -
      3. The release tag name can OPTIONALLY be prefixed with "v". For example the - tag name can be either "2.11.4" or "v2.11.4". It is however RECOMMENDED - that you do not use a "v" prefix. You MUST NOT use a mixture of "v" - prefixed and non-prefixed tags. Pick one form and stick to it.
      4. -
      5. If the version string is hard-coded into the code-base, you MUST create a - "version bump" commit which changes the hard-coded version string of the - project.
      6. -
      7. When using version bump commits, the release tag MUST be placed on the - version bump commit.
      8. -
      9. If you are not using a release branch, then the release tag, and if - relevant the version bump commit, MUST be created directly on the master - branch.
      10. -
      11. The version bump commit SHOULD have a commit message title of "Bump - version to VERSION". For example, if the new version string is "2.11.4", - the first line of the commit message SHOULD read: "Bump version to - 2.11.4"
      12. -
      13. It is RECOMMENDED that release tags are lightweight tags, but you can - OPTIONALLY use annotated tags if you want to include changelog - information in the release tag itself.
      14. -
      15. If you use annotated release tags, the first line of the annotation - SHOULD read "Release VERSION". For example for version "2.11.4" the first - line of the tag annotation SHOULD read "Release 2.11.4". The second line - MUST be blank, and the changelog MUST start on the third line.
      16. -
      -
    12. -
    13. Short-Term Release Branches -
        -
      1. Any branch that has a name starting with "release-" SHOULD be referred to - as a "release branch".
      2. -
      3. Any release branch which has a name ending with a specific version - string, MUST be referred to as a "short-term release branch".
      4. -
      5. Use of short-term release branches are OPTIONAL, and intended to be used - to create a specific versioned release.
      6. -
      7. A short-term release branch is RECOMMENDED if there is a lengthy - pre-release verification process to avoid a code freeze on the master - branch.
      8. -
      9. Short-term release branches MUST have a name of "release-VERSION". For - example for version "2.11.4" the release branch name MUST be - "release-2.11.4".
      10. -
      11. When using a short-term release branch to create a release, the release - tag and if used, version bump commit, MUST be placed directly on the - short-term release branch itself.
      12. -
      13. Only very minor changes should be performed on a short-term release - branch directly. Any larger changes SHOULD be done in the master branch, - and SHOULD be pulled into the release branch by rebasing it on top of the - master branch the same way a change branch pulls in updates from its - source branch.
      14. -
      15. After a release tag has been created, the release branch MUST be merged - back into its source branch and then deleted. Typically the source branch - will be the master branch.
      16. -
      -
    14. -
    15. Long-term Release Branches -
        -
      1. Any release branch which has a name ending with a non-specific version - string, MUST be referred to as a "long-term release branch". For example - "release-2.11" is a long-term release branch, while "release-2.11.4" is a - short-term release branch.
      2. -
      3. Use of long-term release branches are OPTIONAL, and intended for work on - versions which are not currently part of the master branch. Typically - this is useful when you need to create a new maintenance release for a - older version.
      4. -
      5. A long-term release branch MUST have a name with a non-specific version - number. For example a long-term release branch for creating new 2.9.x - releases MUST be named "release-2.9".
      6. -
      7. Long-term release branches for maintenance releases of older versions - MUST be created from the relevant release tag. For example if the master - branch is on version 2.11.4 and there is a security fix for all 2.9.x - releases, the latest of which is "2.9.7". Create a new branch called - "release-2.9" from the "2.9.7" release tag. The security fix release will - then end up being version "2.9.8".
      8. -
      9. To create a new release from a long-term release branch, you MUST follow - the same process as a release from the master branch, except the - long-term release branch takes the place of the master branch.
      10. -
      11. A long-term release branch should be treated with the same respect as the - master branch. It is effectively the master branch for the release series - in question. Meaning it MUST always be in a non-broken state, MUST NOT be - force pushed to, etc.
      12. -
      -
    16. -
    17. Bug Fixes & Rollback -
        -
      1. You MUST NOT under any circumstances force push to the master branch or - to long-term release branches.
      2. -
      3. If a change branch which has been merged into the master branch is found - to have a bug in it, the bug fix work MUST be done as a new separate - change branch and MUST follow the same workflow as any other change - branch.
      4. -
      5. If a change branch is wrongfully merged into master, or for any other - reason the merge must be undone, you MUST undo the merge by reverting the - merge commit itself. Effectively creating a new commit that reverses all - the relevant changes.
      6. -
      -
    18. -
    19. Git Best Practices -
        -
      1. All commit messages SHOULD follow the Commit Guidelines and format from - the official git - documentation: - https://git-scm.com/book/en/v2/Distributed-Git-Contributing-to-a-Project#_commit_guidelines
      2. -
      3. You SHOULD never blindly commit all changes with "git commit -a". It is - RECOMMENDED you use "git add -i" or "git add -p" to add individual - changes to the staging area so you are fully aware of what you are - committing.
      4. -
      5. You SHOULD always use "--force-with-lease" when doing a force push. The - regular "--force" option is dangerous and destructive. More - information: - https://developer.atlassian.com/blog/2015/04/force-with-lease/
      6. -
      7. You SHOULD understand and be comfortable with - rebasing: https://git-scm.com/book/en/v2/Git-Branching-Rebasing
      8. -
      9. It is RECOMMENDED that you always do "git pull --rebase" instead of "git - pull" to avoid unnecessary merge commits. You can make this the default - behavior of "git pull" with "git config --global pull.rebase true".
      10. -
      11. It is RECOMMENDED that all branches be merged using "git merge --no-ff". - This makes sure the reference to the original branch is kept in the - commits, allows one to revert a merge by reverting a single merge commit, - and creates a merge commit to mark the integration of the branch with - master.
      12. -
      -
    20. -
    -

    FAQ

    -

    Why use Common-Flow instead of Git Flow, and how does it differ?

    -

    Common-Flow tries to be a lot less complicated than Git Flow by having fewer - types of branches, and simpler rules. Normal day to day development doesn't - really change much:

    -
      -
    • You create change branches instead of feature branches, without the need of a - "feature/" or "change/" prefix in the branch name.
    • -
    • Change branches are typically created from and merged back into "master" - instead of "develop".
    • -
    • Creating a release is done by simply creating a git tag, typically on the - master branch.
    • -
    -

    In detail, the main differences between Git Flow and Common-Flow are:

    -
      -
    • There is no "develop" branch, there is only a "master" branch which contains - the latest work. In Git Flow the master branch effectively ends up just being - a pointer to the latest release, despite the fact that Git Flow includes - release tags too. In Common-Flow you just look at the tags to find the latest - release.
    • -
    • There are no "feature" or "hotfix" branches, there's only "change" - branches. Any branch that is not master and introduces changes is a change - branch. Change branches also don't have a enforced naming convention, they - just have to have a "descriptive name". This makes things simpler and allows - more flexibility.
    • -
    • Release branches are available, but optional. Instead of enforcing the use of - release branches like Git Flow, Common-Flow only recommends the use of release - branches when it makes things easier. If creating a new release by tagging - "master" works for you, great, do that.
    • -
    -

    Why use Common-Flow instead of GitHub Flow, and how does it differ?

    -

    Common-Flow is essentially GitHub Flow with the addition of a "Release" concept - that uses tags. It also attempts to define how certain common tasks are done, - like updating change/feature branches from their source branches for - example. This is to help end arguments about how such things are done.

    -

    If a deployment/release for you is just getting the latest code in the master - branch out, without caring about bumping version numbers or anything, then - GitHub Flow is a good fit for you, and you probably don't need the extras of - Common-Flow.

    -

    However if your deployments/releases have specific version numbers, then - Common-Flow gives you a simple set of rules of how to create and manage - releases, on top of what GitHub Flow already does.

    -

    What does "descriptive name" mean for change branches?

    -

    It means what it sounds like. The name should be descriptive, as in by just - reading the name of the branch you should understand what the branch's purpose - is and what it does. Here's a few examples:

    -
      -
    • add-2fa-support
    • -
    • fix-login-issue
    • -
    • remove-sort-by-middle-name-functionality
    • -
    • update-font-awesome
    • -
    • change-search-behavior
    • -
    • improve-pagination-performance
    • -
    • tweak-footer-style
    • -
    -

    Notice how none of these have any prefixes like "feature/" or "hotfix/", they're - not needed when branch names are properly descriptive. However there's nothing - to say you can't use such prefixes if you want.

    -

    You can also add ticket numbers to the branch name if your team/org has that as - part of it's process. But it is recommended that ticket numbers are added to the - end of the branch name. The ticket number is essentially metadata, so put it at - the end and out of the way of humans trying to read the descriptive name from - left to right.

    -

    How do we release an emergency hotfix when the master branch is broken?

    -

    This should ideally never happen, however if it does you can do one of the - following:

    -
      -
    • Review why the master branch is broken and revert the changes that caused the - issues. Then apply the hotfix and release.
    • -
    • Or use a short-term release branch created from the latest release tag instead - of the master branch. Apply the hotfix to the release branch, create a release - tag on the release branch, and then merge it back into master.
    • -
    -

    In this situation, it is recommended you try to revert the offending changes - that's preventing a new release from master. But if that proves to be a - complicated task and you're short on time, a short-term release branch gives you - a instant fix to the situation at hand, and let's you resolve the issues with - the master branch when you have more time on your hands.

    -

    About

    -

    The Git Common-Flow specification is authored - by Jim Myhrberg.

    -

    If you'd like to leave feedback, - please open an issue on GitHub.

    -

    License

    -

    Creative Commons - CC BY 4.0

    -
    -
    -
    - - - \ No newline at end of file diff --git a/docs/spec/1.0.0-rc.5/index.html b/docs/spec/1.0.0-rc.5/index.html new file mode 100644 index 0000000..85a009e --- /dev/null +++ b/docs/spec/1.0.0-rc.5/index.html @@ -0,0 +1,387 @@ + Git Common-Flow 1.0.0-rc.5 | Git Common Flow +

    Git Common-Flow 1.0.0-rc.5

    +Git Common-Flow 1.0.0-rc.5 diagram +

    Introduction

    +

    Common-Flow is an attempt to gather a sensible selection of the most common +usage patterns of git into a single and concise specification. It is based on +the original variant +of GitHub Flow, while taking +into account how a lot of open source projects most commonly use git.

    +

    In short, Common-Flow is essentially GitHub Flow with the addition of versioned +releases, optional release branches, and without the requirement to deploy to +production all the time.

    +

    Summary

    +
      +
    • The “master” branch is the mainline branch with latest changes, and must not +be broken.
    • +
    • Changes (features, bugfixes, etc.) are done on “change branches” created from +the master branch.
    • +
    • Rebase change branches early and often.
    • +
    • When a change branch is stable and ready, it is merged back in to master.
    • +
    • A release is just a git tag who’s name is the exact release version string +(e.g. “2.11.4”).
    • +
    • Release branches can be used to avoid change freezes on master. They are not +required, instead they are available if you need them.
    • +
    +

    Terminology

    +
      +
    • Master Branch - Must be named “master”, must always have passing tests, +and is not guaranteed to always work in production environments.
    • +
    • Change Branches - Any branch that introduces changes like a new feature, a +bug fix, etc.
    • +
    • Source Branch - The branch that a change branch was created from. New +changes in the source branch should be incorporated into the change branch via +rebasing.
    • +
    • Merge Target - A branch that is the intended merge target for a change +branch. Typically the merge target branch will be the same as the source +branch.
    • +
    • Pull Request - A means of requesting that a change branch is merged in to +its merge target, allowing others to review, discuss and approve the changes.
    • +
    • Release - May be considered safe to use in production environments. Is +effectively just a git tag named after the version of the release.
    • +
    • Release Branches - Used both for short-term preparations of a release, and +also for long-term maintenance of older version.
    • +
    +

    Git Common-Flow Specification (Common-Flow)

    +

    The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, +“SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be +interpreted as described in RFC 2119.

    +
      +
    1. TL;DR +
        +
      1. Do not break the master branch.
      2. +
      3. A release is a git tag.
      4. +
      +
    2. +
    3. The Master Branch +
        +
      1. A branch named “master” MUST exist and it MUST be referred to as the +“master branch”.
      2. +
      3. The master branch MUST always be in a non-broken state with its test +suite passing.
      4. +
      5. The master branch IS NOT guaranteed to always work in production +environments. Despite test suites passing it may at times contain +unfinished work. Only releases may be considered safe for production use.
      6. +
      7. The master branch SHOULD always be in a “as near as possibly ready for +release/production” state to reduce any friction with creating a new +release.
      8. +
      +
    4. +
    5. Change Branches +
        +
      1. Each change (feature, bugfix, etc.) MUST be performed on separate +branches that SHOULD be referred to as “change branches”.
      2. +
      3. All change branches MUST have descriptive names.
      4. +
      5. It is RECOMMENDED that you commit often locally, and that you try and +keep the commits reasonably structured to avoid a messy and confusing git +history.
      6. +
      7. You SHOULD regularly push your work to the same named branch on the +remote server.
      8. +
      9. You SHOULD create separate change branches for each distinctly different +change. You SHOULD NOT include multiple unrelated changes into a single +change branch.
      10. +
      11. When a change branch is created, the branch that it is created from +SHOULD be referred to as the “source branch”. Each change branch also +needs a designated “merge target” branch, typically this will be the same +as the source branch.
      12. +
      13. Change branches MUST be regularly updated with any changes from their +source branch. This MUST be done by rebasing the change branch on top of +the source branch.
      14. +
      15. After updating a change branch from its source branch you MUST push the +change branch to the remote server. Due to the nature of rebasing, you +will be required to do a force push, and you MUST use the +“—force-with-lease” git push option when doing so instead of the regular +“—force”.
      16. +
      17. If there is a truly valid technical reason to not use rebase when +updating change branches, then you can update change branches via merge +instead of rebase. The decision to use merge MUST only be taken after all +possible options to use rebase have been tried and failed. People not +understanding how to use rebase is NOT a valid reason to use merge. If +you do decide to use merge instead of rebase, you MUST NOT use a mixture +of both methods, pick one and stick to it.
      18. +
      +
    6. +
    7. Pull Requests +
        +
      1. To merge a change branch into its merge target, you MUST open a “pull +request” (or equivalent).
      2. +
      3. The purpose of a pull request is to allow others to review your changes +and give feedback. You can then fix any issues, complaints, and more that +might arise, and then let people review again.
      4. +
      5. Before creating a pull request, it is RECOMMENDED that you consider the +state of your change branch’s commit history. If it is messy and +confusing, it might be a good idea to rebase your branch with “git rebase +-i” to present a cleaner and easier to follow commit history for your +reviewers.
      6. +
      7. A pull request MUST only be merged when the change branch is up-to-date +with its source branch, the test suite is passing, and you and others are +happy with the change. This is especially important if the merge target +is the master branch.
      8. +
      9. To get feedback, help, or generally just discuss a change branch with +others, it is RECOMMENDED you create a pull request and discuss the +changes with others there. This leaves a clear and visible history of +how, when, and why the code looks and behaves the way it does.
      10. +
      +
    8. +
    9. Versioning +
        +
      1. A “version string” is a typically mostly numeric string that identifies a +specific version of a project. The version string itself MUST NOT have a +“v” prefix, but the version string can be displayed with a “v” prefix to +indicate it is a version that is being referred to.
      2. +
      3. The source of truth for a project’s version MUST be a git tag with a name +based on the version string. This kind of tag MUST be referred to as a +“release tag”.
      4. +
      5. It is OPTIONAL, but RECOMMENDED to also keep the version string +hard-coded somewhere in the project code-base.
      6. +
      7. If you hard-code the version string into the code-base, it is RECOMMENDED +that you do so in a file called “VERSION” located in the root of the +project. But be mindful of the conventions of your programming language +and community when choosing if, where and how to hard-code the version +string.
      8. +
      9. If you are using a “VERSION” file in the root of the project, this file +MUST only contain the exact version string, meaning it MUST NOT have a +“v” prefix. For example “v2.11.4” is bad, and “2.11.4” is good.
      10. +
      11. It is OPTIONAL, but RECOMMENDED that that the version string follows +Semantic Versioning (http://semver.org/).
      12. +
      +
    10. +
    11. Releases +
        +
      1. To create a new release, you MUST create a git tag named as the exact +version string of the release. This kind of tag MUST be referred to as a +“release tag”.
      2. +
      3. The release tag name can OPTIONALLY be prefixed with “v”. For example the +tag name can be either “2.11.4” or “v2.11.4”. It is however RECOMMENDED +that you do not use a “v” prefix. You MUST NOT use a mixture of “v” +prefixed and non-prefixed tags. Pick one form and stick to it.
      4. +
      5. If the version string is hard-coded into the code-base, you MUST create a +“version bump” commit which changes the hard-coded version string of the +project.
      6. +
      7. When using version bump commits, the release tag MUST be placed on the +version bump commit.
      8. +
      9. If you are not using a release branch, then the release tag, and if +relevant the version bump commit, MUST be created directly on the master +branch.
      10. +
      11. The version bump commit SHOULD have a commit message title of “Bump +version to VERSION”. For example, if the new version string is “2.11.4”, +the first line of the commit message SHOULD read: “Bump version to +2.11.4”
      12. +
      13. It is RECOMMENDED that release tags are lightweight tags, but you can +OPTIONALLY use annotated tags if you want to include changelog +information in the release tag itself.
      14. +
      15. If you use annotated release tags, the first line of the annotation +SHOULD read “Release VERSION”. For example for version “2.11.4” the first +line of the tag annotation SHOULD read “Release 2.11.4”. The second line +MUST be blank, and the changelog MUST start on the third line.
      16. +
      +
    12. +
    13. Short-Term Release Branches +
        +
      1. Any branch that has a name starting with “release-” SHOULD be referred to +as a “release branch”.
      2. +
      3. Any release branch which has a name ending with a specific version +string, MUST be referred to as a “short-term release branch”.
      4. +
      5. Use of short-term release branches are OPTIONAL, and intended to be used +to create a specific versioned release.
      6. +
      7. A short-term release branch is RECOMMENDED if there is a lengthy +pre-release verification process to avoid a code freeze on the master +branch.
      8. +
      9. Short-term release branches MUST have a name of “release-VERSION”. For +example for version “2.11.4” the release branch name MUST be +“release-2.11.4”.
      10. +
      11. When using a short-term release branch to create a release, the release +tag and if used, version bump commit, MUST be placed directly on the +short-term release branch itself.
      12. +
      13. Only very minor changes should be performed on a short-term release +branch directly. Any larger changes SHOULD be done in the master branch, +and SHOULD be pulled into the release branch by rebasing it on top of the +master branch the same way a change branch pulls in updates from its +source branch.
      14. +
      15. After a release tag has been created, the release branch MUST be merged +back into its source branch and then deleted. Typically the source branch +will be the master branch.
      16. +
      +
    14. +
    15. Long-term Release Branches +
        +
      1. Any release branch which has a name ending with a non-specific version +string, MUST be referred to as a “long-term release branch”. For example +“release-2.11” is a long-term release branch, while “release-2.11.4” is a +short-term release branch.
      2. +
      3. Use of long-term release branches are OPTIONAL, and intended for work on +versions which are not currently part of the master branch. Typically +this is useful when you need to create a new maintenance release for a +older version.
      4. +
      5. A long-term release branch MUST have a name with a non-specific version +number. For example a long-term release branch for creating new 2.9.x +releases MUST be named “release-2.9”.
      6. +
      7. Long-term release branches for maintenance releases of older versions +MUST be created from the relevant release tag. For example if the master +branch is on version 2.11.4 and there is a security fix for all 2.9.x +releases, the latest of which is “2.9.7”. Create a new branch called +“release-2.9” from the “2.9.7” release tag. The security fix release will +then end up being version “2.9.8”.
      8. +
      9. To create a new release from a long-term release branch, you MUST follow +the same process as a release from the master branch, except the +long-term release branch takes the place of the master branch.
      10. +
      11. A long-term release branch should be treated with the same respect as the +master branch. It is effectively the master branch for the release series +in question. Meaning it MUST always be in a non-broken state, MUST NOT be +force pushed to, etc.
      12. +
      +
    16. +
    17. Bug Fixes & Rollback +
        +
      1. You MUST NOT under any circumstances force push to the master branch or +to long-term release branches.
      2. +
      3. If a change branch which has been merged into the master branch is found +to have a bug in it, the bug fix work MUST be done as a new separate +change branch and MUST follow the same workflow as any other change +branch.
      4. +
      5. If a change branch is wrongfully merged into master, or for any other +reason the merge must be undone, you MUST undo the merge by reverting the +merge commit itself. Effectively creating a new commit that reverses all +the relevant changes.
      6. +
      +
    18. +
    19. Git Best Practices +
        +
      1. All commit messages SHOULD follow the Commit Guidelines and format from +the official git +documentation: +https://git-scm.com/book/en/v2/Distributed-Git-Contributing-to-a-Project#_commit_guidelines
      2. +
      3. You SHOULD never blindly commit all changes with “git commit -a”. It is +RECOMMENDED you use “git add -i” or “git add -p” to add individual +changes to the staging area so you are fully aware of what you are +committing.
      4. +
      5. You SHOULD always use “—force-with-lease” when doing a force push. The +regular “—force” option is dangerous and destructive. More +information: +https://developer.atlassian.com/blog/2015/04/force-with-lease/
      6. +
      7. You SHOULD understand and be comfortable with +rebasing: https://git-scm.com/book/en/v2/Git-Branching-Rebasing
      8. +
      9. It is RECOMMENDED that you always do “git pull —rebase” instead of “git +pull” to avoid unnecessary merge commits. You can make this the default +behavior of “git pull” with “git config —global pull.rebase true”.
      10. +
      11. It is RECOMMENDED that all branches be merged using “git merge —no-ff”. +This makes sure the reference to the original branch is kept in the +commits, allows one to revert a merge by reverting a single merge commit, +and creates a merge commit to mark the integration of the branch with +master.
      12. +
      +
    20. +
    +

    FAQ

    +

    Why use Common-Flow instead of Git Flow, and how does it differ?

    +

    Common-Flow tries to be a lot less complicated than Git Flow by having fewer +types of branches, and simpler rules. Normal day to day development doesn’t +really change much:

    +
      +
    • You create change branches instead of feature branches, without the need of a +“feature/” or “change/” prefix in the branch name.
    • +
    • Change branches are typically created from and merged back into “master” +instead of “develop”.
    • +
    • Creating a release is done by simply creating a git tag, typically on the +master branch.
    • +
    +

    In detail, the main differences between Git Flow and Common-Flow are:

    +
      +
    • There is no “develop” branch, there is only a “master” branch which contains +the latest work. In Git Flow the master branch effectively ends up just being +a pointer to the latest release, despite the fact that Git Flow includes +release tags too. In Common-Flow you just look at the tags to find the latest +release.
    • +
    • There are no “feature” or “hotfix” branches, there’s only “change” +branches. Any branch that is not master and introduces changes is a change +branch. Change branches also don’t have a enforced naming convention, they +just have to have a “descriptive name”. This makes things simpler and allows +more flexibility.
    • +
    • Release branches are available, but optional. Instead of enforcing the use of +release branches like Git Flow, Common-Flow only recommends the use of release +branches when it makes things easier. If creating a new release by tagging +“master” works for you, great, do that.
    • +
    +

    Why use Common-Flow instead of GitHub Flow, and how does it differ?

    +

    Common-Flow is essentially GitHub Flow with the addition of a “Release” concept +that uses tags. It also attempts to define how certain common tasks are done, +like updating change/feature branches from their source branches for +example. This is to help end arguments about how such things are done.

    +

    If a deployment/release for you is just getting the latest code in the master +branch out, without caring about bumping version numbers or anything, then +GitHub Flow is a good fit for you, and you probably don’t need the extras of +Common-Flow.

    +

    However if your deployments/releases have specific version numbers, then +Common-Flow gives you a simple set of rules of how to create and manage +releases, on top of what GitHub Flow already does.

    +

    What does “descriptive name” mean for change branches?

    +

    It means what it sounds like. The name should be descriptive, as in by just +reading the name of the branch you should understand what the branch’s purpose +is and what it does. Here’s a few examples:

    +
      +
    • add-2fa-support
    • +
    • fix-login-issue
    • +
    • remove-sort-by-middle-name-functionality
    • +
    • update-font-awesome
    • +
    • change-search-behavior
    • +
    • improve-pagination-performance
    • +
    • tweak-footer-style
    • +
    +

    Notice how none of these have any prefixes like “feature/” or “hotfix/”, they’re +not needed when branch names are properly descriptive. However there’s nothing +to say you can’t use such prefixes if you want.

    +

    You can also add ticket numbers to the branch name if your team/org has that as +part of it’s process. But it is recommended that ticket numbers are added to the +end of the branch name. The ticket number is essentially metadata, so put it at +the end and out of the way of humans trying to read the descriptive name from +left to right.

    +

    How do we release an emergency hotfix when the master branch is broken?

    +

    This should ideally never happen, however if it does you can do one of the +following:

    +
      +
    • Review why the master branch is broken and revert the changes that caused the +issues. Then apply the hotfix and release.
    • +
    • Or use a short-term release branch created from the latest release tag instead +of the master branch. Apply the hotfix to the release branch, create a release +tag on the release branch, and then merge it back into master.
    • +
    +

    In this situation, it is recommended you try to revert the offending changes +that’s preventing a new release from master. But if that proves to be a +complicated task and you’re short on time, a short-term release branch gives you +a instant fix to the situation at hand, and let’s you resolve the issues with +the master branch when you have more time on your hands.

    +

    About

    +

    The Git Common-Flow specification is authored +by Jim Myhrberg.

    +

    If you’d like to leave feedback, +please open an issue on GitHub.

    +

    License

    +

    Creative Commons - CC BY 4.0

    \ No newline at end of file diff --git a/index.md b/index.md deleted file mode 100644 index 7478527..0000000 --- a/index.md +++ /dev/null @@ -1,362 +0,0 @@ ---- -title: Git Common-Flow 1.0.0-rc.5 -version: 1.0.0-rc.5 ---- -Git Common-Flow 1.0.0-rc.5 -=========================== - - - -Introduction ------------- - -Common-Flow is an attempt to gather a sensible selection of the most common -usage patterns of git into a single and concise specification. It is based on -the [original variant](http://scottchacon.com/2011/08/31/github-flow.html) -of [GitHub Flow](https://guides.github.com/introduction/flow/), while taking -into account how a lot of open source projects most commonly use git. - -In short, Common-Flow is essentially GitHub Flow with the addition of versioned -releases, optional release branches, and without the requirement to deploy to -production all the time. - -Summary -------- - -- The "master" branch is the mainline branch with latest changes, and must not - be broken. -- Changes (features, bugfixes, etc.) are done on "change branches" created from - the master branch. -- Rebase change branches [early and often](https://i.imgur.com/1RS8x2d.png). -- When a change branch is stable and ready, it is merged back in to master. -- A release is just a git tag who's name is the exact release version string - (e.g. "2.11.4"). -- Release branches can be used to avoid change freezes on master. They are not - required, instead they are available if you need them. - -Terminology ------------ - -- **Master Branch** - Must be named "master", must always have passing tests, - and is not guaranteed to always work in production environments. -- **Change Branches** - Any branch that introduces changes like a new feature, a - bug fix, etc. -- **Source Branch** - The branch that a change branch was created from. New - changes in the source branch should be incorporated into the change branch via - rebasing. -- **Merge Target** - A branch that is the intended merge target for a change - branch. Typically the merge target branch will be the same as the source - branch. -- **Pull Request** - A means of requesting that a change branch is merged in to - its merge target, allowing others to review, discuss and approve the changes. -- **Release** - May be considered safe to use in production environments. Is - effectively just a git tag named after the version of the release. -- **Release Branches** - Used both for short-term preparations of a release, and - also for long-term maintenance of older version. - -Git Common-Flow Specification (Common-Flow) -------------------------------------------- - -The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", -"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be -interpreted as described in [RFC 2119](https://tools.ietf.org/html/rfc2119). - -1. TL;DR - 1. Do not break the master branch. - 2. A release is a git tag. -2. The Master Branch - 1. A branch named "master" MUST exist and it MUST be referred to as the - "master branch". - 2. The master branch MUST always be in a non-broken state with its test - suite passing. - 4. The master branch IS NOT guaranteed to always work in production - environments. Despite test suites passing it may at times contain - unfinished work. Only releases may be considered safe for production use. - 5. The master branch SHOULD always be in a "as near as possibly ready for - release/production" state to reduce any friction with creating a new - release. -3. Change Branches - 1. Each change (feature, bugfix, etc.) MUST be performed on separate - branches that SHOULD be referred to as "change branches". - 2. All change branches MUST have descriptive names. - 3. It is RECOMMENDED that you commit often locally, and that you try and - keep the commits reasonably structured to avoid a messy and confusing git - history. - 4. You SHOULD regularly push your work to the same named branch on the - remote server. - 5. You SHOULD create separate change branches for each distinctly different - change. You SHOULD NOT include multiple unrelated changes into a single - change branch. - 6. When a change branch is created, the branch that it is created from - SHOULD be referred to as the "source branch". Each change branch also - needs a designated "merge target" branch, typically this will be the same - as the source branch. - 7. Change branches MUST be regularly updated with any changes from their - source branch. This MUST be done by rebasing the change branch on top of - the source branch. - 8. After updating a change branch from its source branch you MUST push the - change branch to the remote server. Due to the nature of rebasing, you - will be required to do a force push, and you MUST use the - "--force-with-lease" git push option when doing so instead of the regular - "--force". - 9. If there is a truly valid technical reason to not use rebase when - updating change branches, then you can update change branches via merge - instead of rebase. The decision to use merge MUST only be taken after all - possible options to use rebase have been tried and failed. People not - understanding how to use rebase is NOT a valid reason to use merge. If - you do decide to use merge instead of rebase, you MUST NOT use a mixture - of both methods, pick one and stick to it. -4. Pull Requests - 1. To merge a change branch into its merge target, you MUST open a "pull - request" (or equivalent). - 2. The purpose of a pull request is to allow others to review your changes - and give feedback. You can then fix any issues, complaints, and more that - might arise, and then let people review again. - 3. Before creating a pull request, it is RECOMMENDED that you consider the - state of your change branch's commit history. If it is messy and - confusing, it might be a good idea to rebase your branch with "git rebase - -i" to present a cleaner and easier to follow commit history for your - reviewers. - 4. A pull request MUST only be merged when the change branch is up-to-date - with its source branch, the test suite is passing, and you and others are - happy with the change. This is especially important if the merge target - is the master branch. - 5. To get feedback, help, or generally just discuss a change branch with - others, it is RECOMMENDED you create a pull request and discuss the - changes with others there. This leaves a clear and visible history of - how, when, and why the code looks and behaves the way it does. -5. Versioning - 1. A "version string" is a typically mostly numeric string that identifies a - specific version of a project. The version string itself MUST NOT have a - "v" prefix, but the version string can be displayed with a "v" prefix to - indicate it is a version that is being referred to. - 2. The source of truth for a project's version MUST be a git tag with a name - based on the version string. This kind of tag MUST be referred to as a - "release tag". - 3. It is OPTIONAL, but RECOMMENDED to also keep the version string - hard-coded somewhere in the project code-base. - 4. If you hard-code the version string into the code-base, it is RECOMMENDED - that you do so in a file called "VERSION" located in the root of the - project. But be mindful of the conventions of your programming language - and community when choosing if, where and how to hard-code the version - string. - 5. If you are using a "VERSION" file in the root of the project, this file - MUST only contain the exact version string, meaning it MUST NOT have a - "v" prefix. For example "v2.11.4" is bad, and "2.11.4" is good. - 6. It is OPTIONAL, but RECOMMENDED that that the version string follows - Semantic Versioning (). -6. Releases - 1. To create a new release, you MUST create a git tag named as the exact - version string of the release. This kind of tag MUST be referred to as a - "release tag". - 2. The release tag name can OPTIONALLY be prefixed with "v". For example the - tag name can be either "2.11.4" or "v2.11.4". It is however RECOMMENDED - that you do not use a "v" prefix. You MUST NOT use a mixture of "v" - prefixed and non-prefixed tags. Pick one form and stick to it. - 3. If the version string is hard-coded into the code-base, you MUST create a - "version bump" commit which changes the hard-coded version string of the - project. - 4. When using version bump commits, the release tag MUST be placed on the - version bump commit. - 5. If you are not using a release branch, then the release tag, and if - relevant the version bump commit, MUST be created directly on the master - branch. - 6. The version bump commit SHOULD have a commit message title of "Bump - version to VERSION". For example, if the new version string is "2.11.4", - the first line of the commit message SHOULD read: "Bump version to - 2.11.4" - 7. It is RECOMMENDED that release tags are lightweight tags, but you can - OPTIONALLY use annotated tags if you want to include changelog - information in the release tag itself. - 8. If you use annotated release tags, the first line of the annotation - SHOULD read "Release VERSION". For example for version "2.11.4" the first - line of the tag annotation SHOULD read "Release 2.11.4". The second line - MUST be blank, and the changelog MUST start on the third line. -7. Short-Term Release Branches - 1. Any branch that has a name starting with "release-" SHOULD be referred to - as a "release branch". - 2. Any release branch which has a name ending with a specific version - string, MUST be referred to as a "short-term release branch". - 3. Use of short-term release branches are OPTIONAL, and intended to be used - to create a specific versioned release. - 4. A short-term release branch is RECOMMENDED if there is a lengthy - pre-release verification process to avoid a code freeze on the master - branch. - 5. Short-term release branches MUST have a name of "release-VERSION". For - example for version "2.11.4" the release branch name MUST be - "release-2.11.4". - 6. When using a short-term release branch to create a release, the release - tag and if used, version bump commit, MUST be placed directly on the - short-term release branch itself. - 7. Only very minor changes should be performed on a short-term release - branch directly. Any larger changes SHOULD be done in the master branch, - and SHOULD be pulled into the release branch by rebasing it on top of the - master branch the same way a change branch pulls in updates from its - source branch. - 8. After a release tag has been created, the release branch MUST be merged - back into its source branch and then deleted. Typically the source branch - will be the master branch. -8. Long-term Release Branches - 1. Any release branch which has a name ending with a non-specific version - string, MUST be referred to as a "long-term release branch". For example - "release-2.11" is a long-term release branch, while "release-2.11.4" is a - short-term release branch. - 2. Use of long-term release branches are OPTIONAL, and intended for work on - versions which are not currently part of the master branch. Typically - this is useful when you need to create a new maintenance release for a - older version. - 3. A long-term release branch MUST have a name with a non-specific version - number. For example a long-term release branch for creating new 2.9.x - releases MUST be named "release-2.9". - 4. Long-term release branches for maintenance releases of older versions - MUST be created from the relevant release tag. For example if the master - branch is on version 2.11.4 and there is a security fix for all 2.9.x - releases, the latest of which is "2.9.7". Create a new branch called - "release-2.9" from the "2.9.7" release tag. The security fix release will - then end up being version "2.9.8". - 5. To create a new release from a long-term release branch, you MUST follow - the same process as a release from the master branch, except the - long-term release branch takes the place of the master branch. - 7. A long-term release branch should be treated with the same respect as the - master branch. It is effectively the master branch for the release series - in question. Meaning it MUST always be in a non-broken state, MUST NOT be - force pushed to, etc. -9. Bug Fixes & Rollback - 1. You MUST NOT under any circumstances force push to the master branch or - to long-term release branches. - 2. If a change branch which has been merged into the master branch is found - to have a bug in it, the bug fix work MUST be done as a new separate - change branch and MUST follow the same workflow as any other change - branch. - 3. If a change branch is wrongfully merged into master, or for any other - reason the merge must be undone, you MUST undo the merge by reverting the - merge commit itself. Effectively creating a new commit that reverses all - the relevant changes. -10. Git Best Practices - 1. All commit messages SHOULD follow the Commit Guidelines and format from - the official git - documentation: - - 2. You SHOULD never blindly commit all changes with "git commit -a". It is - RECOMMENDED you use "git add -i" or "git add -p" to add individual - changes to the staging area so you are fully aware of what you are - committing. - 3. You SHOULD always use "--force-with-lease" when doing a force push. The - regular "--force" option is dangerous and destructive. More - information: - - 4. You SHOULD understand and be comfortable with - rebasing: - 5. It is RECOMMENDED that you always do "git pull --rebase" instead of "git - pull" to avoid unnecessary merge commits. You can make this the default - behavior of "git pull" with "git config --global pull.rebase true". - 6. It is RECOMMENDED that all branches be merged using "git merge --no-ff". - This makes sure the reference to the original branch is kept in the - commits, allows one to revert a merge by reverting a single merge commit, - and creates a merge commit to mark the integration of the branch with - master. - -FAQ ---- - -### Why use Common-Flow instead of Git Flow, and how does it differ? - -Common-Flow tries to be a lot less complicated than Git Flow by having fewer -types of branches, and simpler rules. Normal day to day development doesn't -really change much: - -- You create change branches instead of feature branches, without the need of a - "feature/" or "change/" prefix in the branch name. -- Change branches are typically created from and merged back into "master" - instead of "develop". -- Creating a release is done by simply creating a git tag, typically on the - master branch. - -In detail, the main differences between Git Flow and Common-Flow are: - -- There is no "develop" branch, there is only a "master" branch which contains - the latest work. In Git Flow the master branch effectively ends up just being - a pointer to the latest release, despite the fact that Git Flow includes - release tags too. In Common-Flow you just look at the tags to find the latest - release. -- There are no "feature" or "hotfix" branches, there's only "change" - branches. Any branch that is not master and introduces changes is a change - branch. Change branches also don't have a enforced naming convention, they - just have to have a "descriptive name". This makes things simpler and allows - more flexibility. -- Release branches are available, but optional. Instead of enforcing the use of - release branches like Git Flow, Common-Flow only recommends the use of release - branches when it makes things easier. If creating a new release by tagging - "master" works for you, great, do that. - -### Why use Common-Flow instead of GitHub Flow, and how does it differ? - -Common-Flow is essentially GitHub Flow with the addition of a "Release" concept -that uses tags. It also attempts to define how certain common tasks are done, -like updating change/feature branches from their source branches for -example. This is to help end arguments about how such things are done. - -If a deployment/release for you is just getting the latest code in the master -branch out, without caring about bumping version numbers or anything, then -GitHub Flow is a good fit for you, and you probably don't need the extras of -Common-Flow. - -However if your deployments/releases have specific version numbers, then -Common-Flow gives you a simple set of rules of how to create and manage -releases, on top of what GitHub Flow already does. - -### What does "descriptive name" mean for change branches? - -It means what it sounds like. The name should be descriptive, as in by just -reading the name of the branch you should understand what the branch's purpose -is and what it does. Here's a few examples: - -- add-2fa-support -- fix-login-issue -- remove-sort-by-middle-name-functionality -- update-font-awesome -- change-search-behavior -- improve-pagination-performance -- tweak-footer-style - -Notice how none of these have any prefixes like "feature/" or "hotfix/", they're -not needed when branch names are properly descriptive. However there's nothing -to say you can't use such prefixes if you want. - -You can also add ticket numbers to the branch name if your team/org has that as -part of it's process. But it is recommended that ticket numbers are added to the -end of the branch name. The ticket number is essentially metadata, so put it at -the end and out of the way of humans trying to read the descriptive name from -left to right. - -### How do we release an emergency hotfix when the master branch is broken? - -This should ideally never happen, however if it does you can do one of the -following: - -- Review why the master branch is broken and revert the changes that caused the - issues. Then apply the hotfix and release. -- Or use a short-term release branch created from the latest release tag instead - of the master branch. Apply the hotfix to the release branch, create a release - tag on the release branch, and then merge it back into master. - -In this situation, it is recommended you try to revert the offending changes -that's preventing a new release from master. But if that proves to be a -complicated task and you're short on time, a short-term release branch gives you -a instant fix to the situation at hand, and let's you resolve the issues with -the master branch when you have more time on your hands. - -About ------ - -The Git Common-Flow specification is authored -by [Jim Myhrberg](https://jimeh.me/). - -If you'd like to leave feedback, -please [open an issue on GitHub](https://github.com/jimeh/common-flow/issues). - -License -------- - -[Creative Commons - CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) - diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..0eb0ed4 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6830 @@ +{ + "name": "commonflow-org", + "version": "0.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "commonflow-org", + "version": "0.0.1", + "dependencies": { + "@astrojs/sitemap": "^3.2.1", + "astro": "^5.1.1" + }, + "devDependencies": { + "@tailwindcss/typography": "^0.5.16", + "@tailwindcss/vite": "^4.0.0", + "tailwindcss": "^4.0.0", + "tsx": "^4.19.2", + "typescript": "^5.7.2" + } + }, + "node_modules/@astrojs/compiler": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-2.13.0.tgz", + "integrity": "sha512-mqVORhUJViA28fwHYaWmsXSzLO9osbdZ5ImUfxBarqsYdMlPbqAqGJCxsNzvppp1BEzc1mJNjOVvQqeDN8Vspw==", + "license": "MIT" + }, + "node_modules/@astrojs/internal-helpers": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.7.5.tgz", + "integrity": "sha512-vreGnYSSKhAjFJCWAwe/CNhONvoc5lokxtRoZims+0wa3KbHBdPHSSthJsKxPd8d/aic6lWKpRTYGY/hsgK6EA==", + "license": "MIT" + }, + "node_modules/@astrojs/markdown-remark": { + "version": "6.3.10", + "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-6.3.10.tgz", + "integrity": "sha512-kk4HeYR6AcnzC4QV8iSlOfh+N8TZ3MEStxPyenyCtemqn8IpEATBFMTJcfrNW32dgpt6MY3oCkMM/Tv3/I4G3A==", + "license": "MIT", + "dependencies": { + "@astrojs/internal-helpers": "0.7.5", + "@astrojs/prism": "3.3.0", + "github-slugger": "^2.0.0", + "hast-util-from-html": "^2.0.3", + "hast-util-to-text": "^4.0.2", + "import-meta-resolve": "^4.2.0", + "js-yaml": "^4.1.1", + "mdast-util-definitions": "^6.0.0", + "rehype-raw": "^7.0.0", + "rehype-stringify": "^10.0.1", + "remark-gfm": "^4.0.1", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.1.2", + "remark-smartypants": "^3.0.2", + "shiki": "^3.19.0", + "smol-toml": "^1.5.2", + "unified": "^11.0.5", + "unist-util-remove-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "unist-util-visit-parents": "^6.0.2", + "vfile": "^6.0.3" + } + }, + "node_modules/@astrojs/prism": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-3.3.0.tgz", + "integrity": "sha512-q8VwfU/fDZNoDOf+r7jUnMC2//H2l0TuQ6FkGJL8vD8nw/q5KiL3DS1KKBI3QhI9UQhpJ5dc7AtqfbXWuOgLCQ==", + "license": "MIT", + "dependencies": { + "prismjs": "^1.30.0" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0" + } + }, + "node_modules/@astrojs/sitemap": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@astrojs/sitemap/-/sitemap-3.6.1.tgz", + "integrity": "sha512-+o+TbxXqQJAOd+HxCjz/5RdAMrRFGjeuO+U6zddUuTO59WqMqXnsc8uveRiEr2Ff+3McZiEne7iG4J5cnuI6kA==", + "license": "MIT", + "dependencies": { + "sitemap": "^8.0.2", + "stream-replace-string": "^2.0.0", + "zod": "^3.25.76" + } + }, + "node_modules/@astrojs/telemetry": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.3.0.tgz", + "integrity": "sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ==", + "license": "MIT", + "dependencies": { + "ci-info": "^4.2.0", + "debug": "^4.4.0", + "dlv": "^1.1.3", + "dset": "^3.1.4", + "is-docker": "^3.0.0", + "is-wsl": "^3.1.0", + "which-pm-runs": "^1.1.0" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.5" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@capsizecss/unpack": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@capsizecss/unpack/-/unpack-4.0.0.tgz", + "integrity": "sha512-VERIM64vtTP1C4mxQ5thVT9fK0apjPFobqybMtA1UdUujWka24ERHbRHFGmpbbhp73MhV+KSsHQH9C6uOTdEQA==", + "license": "MIT", + "dependencies": { + "fontkitten": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz", + "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/colour": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.0.0.tgz", + "integrity": "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", + "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", + "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", + "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", + "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", + "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", + "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", + "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", + "cpu": [ + "ppc64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", + "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", + "cpu": [ + "riscv64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", + "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", + "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", + "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", + "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", + "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", + "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", + "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", + "cpu": [ + "ppc64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", + "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", + "cpu": [ + "riscv64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", + "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", + "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", + "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", + "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", + "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.7.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", + "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", + "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", + "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@oslojs/encoding": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@oslojs/encoding/-/encoding-1.1.0.tgz", + "integrity": "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==", + "license": "MIT" + }, + "node_modules/@rollup/pluginutils": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", + "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.55.1.tgz", + "integrity": "sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.55.1.tgz", + "integrity": "sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.55.1.tgz", + "integrity": "sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.55.1.tgz", + "integrity": "sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.55.1.tgz", + "integrity": "sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.55.1.tgz", + "integrity": "sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.55.1.tgz", + "integrity": "sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.55.1.tgz", + "integrity": "sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.55.1.tgz", + "integrity": "sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.55.1.tgz", + "integrity": "sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.55.1.tgz", + "integrity": "sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.55.1.tgz", + "integrity": "sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.55.1.tgz", + "integrity": "sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.55.1.tgz", + "integrity": "sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.55.1.tgz", + "integrity": "sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.55.1.tgz", + "integrity": "sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.55.1.tgz", + "integrity": "sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.55.1.tgz", + "integrity": "sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.55.1.tgz", + "integrity": "sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.55.1.tgz", + "integrity": "sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.55.1.tgz", + "integrity": "sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.55.1.tgz", + "integrity": "sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.55.1.tgz", + "integrity": "sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.55.1.tgz", + "integrity": "sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.55.1.tgz", + "integrity": "sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@shikijs/core": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.21.0.tgz", + "integrity": "sha512-AXSQu/2n1UIQekY8euBJlvFYZIw0PHY63jUzGbrOma4wPxzznJXTXkri+QcHeBNaFxiiOljKxxJkVSoB3PjbyA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.21.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.5" + } + }, + "node_modules/@shikijs/engine-javascript": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.21.0.tgz", + "integrity": "sha512-ATwv86xlbmfD9n9gKRiwuPpWgPENAWCLwYCGz9ugTJlsO2kOzhOkvoyV/UD+tJ0uT7YRyD530x6ugNSffmvIiQ==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.21.0", + "@shikijs/vscode-textmate": "^10.0.2", + "oniguruma-to-es": "^4.3.4" + } + }, + "node_modules/@shikijs/engine-oniguruma": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.21.0.tgz", + "integrity": "sha512-OYknTCct6qiwpQDqDdf3iedRdzj6hFlOPv5hMvI+hkWfCKs5mlJ4TXziBG9nyabLwGulrUjHiCq3xCspSzErYQ==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.21.0", + "@shikijs/vscode-textmate": "^10.0.2" + } + }, + "node_modules/@shikijs/langs": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.21.0.tgz", + "integrity": "sha512-g6mn5m+Y6GBJ4wxmBYqalK9Sp0CFkUqfNzUy2pJglUginz6ZpWbaWjDB4fbQ/8SHzFjYbtU6Ddlp1pc+PPNDVA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.21.0" + } + }, + "node_modules/@shikijs/themes": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.21.0.tgz", + "integrity": "sha512-BAE4cr9EDiZyYzwIHEk7JTBJ9CzlPuM4PchfcA5ao1dWXb25nv6hYsoDiBq2aZK9E3dlt3WB78uI96UESD+8Mw==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.21.0" + } + }, + "node_modules/@shikijs/types": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.21.0.tgz", + "integrity": "sha512-zGrWOxZ0/+0ovPY7PvBU2gIS9tmhSUUt30jAcNV0Bq0gb2S98gwfjIs1vxlmH5zM7/4YxLamT6ChlqqAJmPPjA==", + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/@shikijs/vscode-textmate": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", + "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", + "license": "MIT" + }, + "node_modules/@tailwindcss/node": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.18.tgz", + "integrity": "sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.4", + "enhanced-resolve": "^5.18.3", + "jiti": "^2.6.1", + "lightningcss": "1.30.2", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.1.18" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.18.tgz", + "integrity": "sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.1.18", + "@tailwindcss/oxide-darwin-arm64": "4.1.18", + "@tailwindcss/oxide-darwin-x64": "4.1.18", + "@tailwindcss/oxide-freebsd-x64": "4.1.18", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.18", + "@tailwindcss/oxide-linux-arm64-gnu": "4.1.18", + "@tailwindcss/oxide-linux-arm64-musl": "4.1.18", + "@tailwindcss/oxide-linux-x64-gnu": "4.1.18", + "@tailwindcss/oxide-linux-x64-musl": "4.1.18", + "@tailwindcss/oxide-wasm32-wasi": "4.1.18", + "@tailwindcss/oxide-win32-arm64-msvc": "4.1.18", + "@tailwindcss/oxide-win32-x64-msvc": "4.1.18" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.18.tgz", + "integrity": "sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.18.tgz", + "integrity": "sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.18.tgz", + "integrity": "sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.18.tgz", + "integrity": "sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.18.tgz", + "integrity": "sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.18.tgz", + "integrity": "sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.18.tgz", + "integrity": "sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.18.tgz", + "integrity": "sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.18.tgz", + "integrity": "sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.18.tgz", + "integrity": "sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1", + "@emnapi/wasi-threads": "^1.1.0", + "@napi-rs/wasm-runtime": "^1.1.0", + "@tybys/wasm-util": "^0.10.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.18.tgz", + "integrity": "sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.18.tgz", + "integrity": "sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/typography": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.19.tgz", + "integrity": "sha512-w31dd8HOx3k9vPtcQh5QHP9GwKcgbMp87j58qi6xgiBnFFtKEAgCWnDw4qUT8aHwkCp8bKvb/KGKWWHedP0AAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "6.0.10" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.1.18.tgz", + "integrity": "sha512-jVA+/UpKL1vRLg6Hkao5jldawNmRo7mQYrZtNHMIVpLfLhDml5nMRUo/8MwoX2vNXvnaXNNMedrMfMugAVX1nA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.1.18", + "@tailwindcss/oxide": "4.1.18", + "tailwindcss": "4.1.18" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7" + } + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT" + }, + "node_modules/@types/nlcst": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-2.0.3.tgz", + "integrity": "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/node": { + "version": "25.0.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.5.tgz", + "integrity": "sha512-FuLxeLuSVOqHPxSN1fkcD8DLU21gAP7nCKqGRJ/FglbCUBs0NYN6TpHcdmyLeh8C0KwGIaZQJSv+OYG+KZz+Gw==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/@types/sax": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz", + "integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "license": "ISC" + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "license": "ISC", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-align/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/ansi-align/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-iterate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-2.0.1.tgz", + "integrity": "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/astro": { + "version": "5.16.8", + "resolved": "https://registry.npmjs.org/astro/-/astro-5.16.8.tgz", + "integrity": "sha512-gzZE+epuCrNuxOa8/F1dzkllDOFvxWhGeobQKeBRIAef5sUpUKMHZo/8clse+02rYnKJCgwXBgjW4uTu9mqUUw==", + "license": "MIT", + "dependencies": { + "@astrojs/compiler": "^2.13.0", + "@astrojs/internal-helpers": "0.7.5", + "@astrojs/markdown-remark": "6.3.10", + "@astrojs/telemetry": "3.3.0", + "@capsizecss/unpack": "^4.0.0", + "@oslojs/encoding": "^1.1.0", + "@rollup/pluginutils": "^5.3.0", + "acorn": "^8.15.0", + "aria-query": "^5.3.2", + "axobject-query": "^4.1.0", + "boxen": "8.0.1", + "ci-info": "^4.3.1", + "clsx": "^2.1.1", + "common-ancestor-path": "^1.0.1", + "cookie": "^1.1.1", + "cssesc": "^3.0.0", + "debug": "^4.4.3", + "deterministic-object-hash": "^2.0.2", + "devalue": "^5.6.1", + "diff": "^5.2.0", + "dlv": "^1.1.3", + "dset": "^3.1.4", + "es-module-lexer": "^1.7.0", + "esbuild": "^0.25.0", + "estree-walker": "^3.0.3", + "flattie": "^1.1.1", + "fontace": "~0.4.0", + "github-slugger": "^2.0.0", + "html-escaper": "3.0.3", + "http-cache-semantics": "^4.2.0", + "import-meta-resolve": "^4.2.0", + "js-yaml": "^4.1.1", + "magic-string": "^0.30.21", + "magicast": "^0.5.1", + "mrmime": "^2.0.1", + "neotraverse": "^0.6.18", + "p-limit": "^6.2.0", + "p-queue": "^8.1.1", + "package-manager-detector": "^1.6.0", + "piccolore": "^0.1.3", + "picomatch": "^4.0.3", + "prompts": "^2.4.2", + "rehype": "^13.0.2", + "semver": "^7.7.3", + "shiki": "^3.20.0", + "smol-toml": "^1.6.0", + "svgo": "^4.0.0", + "tinyexec": "^1.0.2", + "tinyglobby": "^0.2.15", + "tsconfck": "^3.1.6", + "ultrahtml": "^1.6.0", + "unifont": "~0.7.1", + "unist-util-visit": "^5.0.0", + "unstorage": "^1.17.3", + "vfile": "^6.0.3", + "vite": "^6.4.1", + "vitefu": "^1.1.1", + "xxhash-wasm": "^1.1.0", + "yargs-parser": "^21.1.1", + "yocto-spinner": "^0.2.3", + "zod": "^3.25.76", + "zod-to-json-schema": "^3.25.1", + "zod-to-ts": "^1.2.0" + }, + "bin": { + "astro": "astro.js" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/astrodotbuild" + }, + "optionalDependencies": { + "sharp": "^0.34.0" + } + }, + "node_modules/astro/node_modules/vite": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz", + "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==", + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/base-64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz", + "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==", + "license": "MIT" + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" + }, + "node_modules/boxen": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-8.0.1.tgz", + "integrity": "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==", + "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.1", + "camelcase": "^8.0.0", + "chalk": "^5.3.0", + "cli-boxes": "^3.0.0", + "string-width": "^7.2.0", + "type-fest": "^4.21.0", + "widest-line": "^5.0.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", + "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ci-info": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz", + "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/common-ancestor-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", + "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", + "license": "ISC" + }, + "node_modules/cookie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/cookie-es": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.2.tgz", + "integrity": "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==", + "license": "MIT" + }, + "node_modules/crossws": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz", + "integrity": "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==", + "license": "MIT", + "dependencies": { + "uncrypto": "^0.1.3" + } + }, + "node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", + "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.12.2", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "license": "MIT", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "license": "CC0-1.0" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-named-character-reference": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz", + "integrity": "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==", + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "license": "MIT" + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "devOptional": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/deterministic-object-hash": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/deterministic-object-hash/-/deterministic-object-hash-2.0.2.tgz", + "integrity": "sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==", + "license": "MIT", + "dependencies": { + "base-64": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/devalue": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.6.1.tgz", + "integrity": "sha512-jDwizj+IlEZBunHcOuuFVBnIMPAEHvTsJj0BcIp94xYguLRVBcXO853px/MyIJvbVzWdsGvrRweIUWJw8hBP7A==", + "license": "MIT" + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/diff": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "license": "MIT" + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dset": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.4.tgz", + "integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "license": "MIT" + }, + "node_modules/enhanced-resolve": { + "version": "5.18.4", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.4.tgz", + "integrity": "sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" + } + }, + "node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/flattie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flattie/-/flattie-1.1.1.tgz", + "integrity": "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/fontace": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/fontace/-/fontace-0.4.0.tgz", + "integrity": "sha512-moThBCItUe2bjZip5PF/iZClpKHGLwMvR79Kp8XpGRBrvoRSnySN4VcILdv3/MJzbhvUA5WeiUXF5o538m5fvg==", + "license": "MIT", + "dependencies": { + "fontkitten": "^1.0.0" + } + }, + "node_modules/fontkitten": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fontkitten/-/fontkitten-1.0.0.tgz", + "integrity": "sha512-b0RdzQeztiiUFWEDzq6Ka26qkNVNLCehoRtifOIGNbQ4CfxyYRh73fyWaQX/JshPVcueITOEeoSWPy5XQv8FUg==", + "license": "MIT", + "dependencies": { + "tiny-inflate": "^1.0.3" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", + "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-tsconfig": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz", + "integrity": "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/github-slugger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", + "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", + "license": "ISC" + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/h3": { + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.4.tgz", + "integrity": "sha512-z5cFQWDffyOe4vQ9xIqNfCZdV4p//vy6fBnr8Q1AWnVZ0teurKMG66rLj++TKwKPUP3u7iMUvrvKaEUiQw2QWQ==", + "license": "MIT", + "dependencies": { + "cookie-es": "^1.2.2", + "crossws": "^0.3.5", + "defu": "^6.1.4", + "destr": "^2.0.5", + "iron-webcrypto": "^1.2.1", + "node-mock-http": "^1.0.2", + "radix3": "^1.1.2", + "ufo": "^1.6.1", + "uncrypto": "^0.1.3" + } + }, + "node_modules/hast-util-from-html": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz", + "integrity": "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "devlop": "^1.1.0", + "hast-util-from-parse5": "^8.0.0", + "parse5": "^7.0.0", + "vfile": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-parse5": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz", + "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "hastscript": "^9.0.0", + "property-information": "^7.0.0", + "vfile": "^6.0.0", + "vfile-location": "^5.0.0", + "web-namespaces": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-is-element": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", + "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-parse-selector": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", + "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz", + "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-from-parse5": "^8.0.0", + "hast-util-to-parse5": "^8.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "parse5": "^7.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-html": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", + "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.1.tgz", + "integrity": "sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-text": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz", + "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "hast-util-is-element": "^3.0.0", + "unist-util-find-after": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz", + "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^4.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/html-escaper": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz", + "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==", + "license": "MIT" + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "license": "BSD-2-Clause" + }, + "node_modules/import-meta-resolve": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", + "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/iron-webcrypto": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", + "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/brc-dd" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "devOptional": true, + "license": "MIT", + "peer": true, + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/lightningcss": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.2.tgz", + "integrity": "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==", + "devOptional": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.30.2", + "lightningcss-darwin-arm64": "1.30.2", + "lightningcss-darwin-x64": "1.30.2", + "lightningcss-freebsd-x64": "1.30.2", + "lightningcss-linux-arm-gnueabihf": "1.30.2", + "lightningcss-linux-arm64-gnu": "1.30.2", + "lightningcss-linux-arm64-musl": "1.30.2", + "lightningcss-linux-x64-gnu": "1.30.2", + "lightningcss-linux-x64-musl": "1.30.2", + "lightningcss-win32-arm64-msvc": "1.30.2", + "lightningcss-win32-x64-msvc": "1.30.2" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.30.2.tgz", + "integrity": "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.2.tgz", + "integrity": "sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.2.tgz", + "integrity": "sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.2.tgz", + "integrity": "sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.2.tgz", + "integrity": "sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.2.tgz", + "integrity": "sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.2.tgz", + "integrity": "sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.2.tgz", + "integrity": "sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.2.tgz", + "integrity": "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.2.tgz", + "integrity": "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.2.tgz", + "integrity": "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/magicast": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.1.tgz", + "integrity": "sha512-xrHS24IxaLrvuo613F719wvOIv9xPHFWQHuvGUBmPnCA/3MQxKI3b+r7n1jAoDHmsbC5bRhTZYR77invLAxVnw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.5", + "@babel/types": "^7.28.5", + "source-map-js": "^1.2.1" + } + }, + "node_modules/markdown-table": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-definitions": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-6.0.0.tgz", + "integrity": "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", + "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", + "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", + "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdn-data": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", + "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", + "license": "CC0-1.0" + }, + "node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "license": "MIT", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", + "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", + "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", + "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/neotraverse": { + "version": "0.6.18", + "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.18.tgz", + "integrity": "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/nlcst-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-4.0.0.tgz", + "integrity": "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/node-fetch-native": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", + "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", + "license": "MIT" + }, + "node_modules/node-mock-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.4.tgz", + "integrity": "sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==", + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/ofetch": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.5.1.tgz", + "integrity": "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==", + "license": "MIT", + "dependencies": { + "destr": "^2.0.5", + "node-fetch-native": "^1.6.7", + "ufo": "^1.6.1" + } + }, + "node_modules/ohash": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", + "license": "MIT" + }, + "node_modules/oniguruma-parser": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.1.tgz", + "integrity": "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==", + "license": "MIT" + }, + "node_modules/oniguruma-to-es": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.4.tgz", + "integrity": "sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA==", + "license": "MIT", + "dependencies": { + "oniguruma-parser": "^0.12.1", + "regex": "^6.0.1", + "regex-recursion": "^6.0.2" + } + }, + "node_modules/p-limit": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-6.2.0.tgz", + "integrity": "sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-8.1.1.tgz", + "integrity": "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.1", + "p-timeout": "^6.1.2" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz", + "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-manager-detector": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.6.0.tgz", + "integrity": "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==", + "license": "MIT" + }, + "node_modules/parse-latin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-7.0.0.tgz", + "integrity": "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "@types/unist": "^3.0.0", + "nlcst-to-string": "^4.0.0", + "unist-util-modify-children": "^4.0.0", + "unist-util-visit-children": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/piccolore": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/piccolore/-/piccolore-0.1.3.tgz", + "integrity": "sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==", + "license": "ISC" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/prismjs": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", + "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/property-information": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/radix3": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz", + "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==", + "license": "MIT" + }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz", + "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==", + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-recursion": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz", + "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-utilities": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", + "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", + "license": "MIT" + }, + "node_modules/rehype": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/rehype/-/rehype-13.0.2.tgz", + "integrity": "sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "rehype-parse": "^9.0.0", + "rehype-stringify": "^10.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-parse": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-9.0.1.tgz", + "integrity": "sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-from-html": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-raw": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", + "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-raw": "^9.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-stringify": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.1.tgz", + "integrity": "sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-to-html": "^9.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-gfm": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", + "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", + "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-smartypants": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/remark-smartypants/-/remark-smartypants-3.0.2.tgz", + "integrity": "sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==", + "license": "MIT", + "dependencies": { + "retext": "^9.0.0", + "retext-smartypants": "^6.0.0", + "unified": "^11.0.4", + "unist-util-visit": "^5.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "devOptional": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/retext": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/retext/-/retext-9.0.0.tgz", + "integrity": "sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "retext-latin": "^4.0.0", + "retext-stringify": "^4.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-latin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/retext-latin/-/retext-latin-4.0.0.tgz", + "integrity": "sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "parse-latin": "^7.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-smartypants": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/retext-smartypants/-/retext-smartypants-6.2.0.tgz", + "integrity": "sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "nlcst-to-string": "^4.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-stringify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/retext-stringify/-/retext-stringify-4.0.0.tgz", + "integrity": "sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "nlcst-to-string": "^4.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rollup": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.55.1.tgz", + "integrity": "sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.55.1", + "@rollup/rollup-android-arm64": "4.55.1", + "@rollup/rollup-darwin-arm64": "4.55.1", + "@rollup/rollup-darwin-x64": "4.55.1", + "@rollup/rollup-freebsd-arm64": "4.55.1", + "@rollup/rollup-freebsd-x64": "4.55.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.55.1", + "@rollup/rollup-linux-arm-musleabihf": "4.55.1", + "@rollup/rollup-linux-arm64-gnu": "4.55.1", + "@rollup/rollup-linux-arm64-musl": "4.55.1", + "@rollup/rollup-linux-loong64-gnu": "4.55.1", + "@rollup/rollup-linux-loong64-musl": "4.55.1", + "@rollup/rollup-linux-ppc64-gnu": "4.55.1", + "@rollup/rollup-linux-ppc64-musl": "4.55.1", + "@rollup/rollup-linux-riscv64-gnu": "4.55.1", + "@rollup/rollup-linux-riscv64-musl": "4.55.1", + "@rollup/rollup-linux-s390x-gnu": "4.55.1", + "@rollup/rollup-linux-x64-gnu": "4.55.1", + "@rollup/rollup-linux-x64-musl": "4.55.1", + "@rollup/rollup-openbsd-x64": "4.55.1", + "@rollup/rollup-openharmony-arm64": "4.55.1", + "@rollup/rollup-win32-arm64-msvc": "4.55.1", + "@rollup/rollup-win32-ia32-msvc": "4.55.1", + "@rollup/rollup-win32-x64-gnu": "4.55.1", + "@rollup/rollup-win32-x64-msvc": "4.55.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/sax": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.4.tgz", + "integrity": "sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sharp": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", + "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.2", + "semver": "^7.7.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.5", + "@img/sharp-darwin-x64": "0.34.5", + "@img/sharp-libvips-darwin-arm64": "1.2.4", + "@img/sharp-libvips-darwin-x64": "1.2.4", + "@img/sharp-libvips-linux-arm": "1.2.4", + "@img/sharp-libvips-linux-arm64": "1.2.4", + "@img/sharp-libvips-linux-ppc64": "1.2.4", + "@img/sharp-libvips-linux-riscv64": "1.2.4", + "@img/sharp-libvips-linux-s390x": "1.2.4", + "@img/sharp-libvips-linux-x64": "1.2.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", + "@img/sharp-libvips-linuxmusl-x64": "1.2.4", + "@img/sharp-linux-arm": "0.34.5", + "@img/sharp-linux-arm64": "0.34.5", + "@img/sharp-linux-ppc64": "0.34.5", + "@img/sharp-linux-riscv64": "0.34.5", + "@img/sharp-linux-s390x": "0.34.5", + "@img/sharp-linux-x64": "0.34.5", + "@img/sharp-linuxmusl-arm64": "0.34.5", + "@img/sharp-linuxmusl-x64": "0.34.5", + "@img/sharp-wasm32": "0.34.5", + "@img/sharp-win32-arm64": "0.34.5", + "@img/sharp-win32-ia32": "0.34.5", + "@img/sharp-win32-x64": "0.34.5" + } + }, + "node_modules/shiki": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.21.0.tgz", + "integrity": "sha512-N65B/3bqL/TI2crrXr+4UivctrAGEjmsib5rPMMPpFp1xAx/w03v8WZ9RDDFYteXoEgY7qZ4HGgl5KBIu1153w==", + "license": "MIT", + "dependencies": { + "@shikijs/core": "3.21.0", + "@shikijs/engine-javascript": "3.21.0", + "@shikijs/engine-oniguruma": "3.21.0", + "@shikijs/langs": "3.21.0", + "@shikijs/themes": "3.21.0", + "@shikijs/types": "3.21.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, + "node_modules/sitemap": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-8.0.2.tgz", + "integrity": "sha512-LwktpJcyZDoa0IL6KT++lQ53pbSrx2c9ge41/SeLTyqy2XUNA6uR4+P9u5IVo5lPeL2arAcOKn1aZAxoYbCKlQ==", + "license": "MIT", + "dependencies": { + "@types/node": "^17.0.5", + "@types/sax": "^1.2.1", + "arg": "^5.0.0", + "sax": "^1.4.1" + }, + "bin": { + "sitemap": "dist/cli.js" + }, + "engines": { + "node": ">=14.0.0", + "npm": ">=6.0.0" + } + }, + "node_modules/sitemap/node_modules/@types/node": { + "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", + "license": "MIT" + }, + "node_modules/smol-toml": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.6.0.tgz", + "integrity": "sha512-4zemZi0HvTnYwLfrpk/CF9LOd9Lt87kAt50GnqhMpyF9U3poDAP2+iukq2bZsO/ufegbYehBkqINbsWxj4l4cw==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 18" + }, + "funding": { + "url": "https://github.com/sponsors/cyyynthia" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/stream-replace-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stream-replace-string/-/stream-replace-string-2.0.0.tgz", + "integrity": "sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w==", + "license": "MIT" + }, + "node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/svgo": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.0.tgz", + "integrity": "sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw==", + "license": "MIT", + "dependencies": { + "commander": "^11.1.0", + "css-select": "^5.1.0", + "css-tree": "^3.0.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.1.1", + "sax": "^1.4.1" + }, + "bin": { + "svgo": "bin/svgo.js" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/tailwindcss": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.18.tgz", + "integrity": "sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/tapable": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz", + "integrity": "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/tsconfck": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.6.tgz", + "integrity": "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==", + "license": "MIT", + "bin": { + "tsconfck": "bin/tsconfck.js" + }, + "engines": { + "node": "^18 || >=20" + }, + "peerDependencies": { + "typescript": "^5.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD", + "optional": true + }, + "node_modules/tsx": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", + "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", + "devOptional": true, + "license": "MIT", + "peer": true, + "dependencies": { + "esbuild": "~0.27.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/tsx/node_modules/@esbuild/aix-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", + "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/android-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", + "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/android-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", + "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/android-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", + "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/darwin-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", + "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/darwin-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", + "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", + "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/freebsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", + "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", + "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", + "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", + "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-loong64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", + "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-mips64el": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", + "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", + "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-riscv64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", + "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-s390x": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", + "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", + "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", + "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/netbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", + "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", + "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/openbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", + "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", + "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/sunos-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", + "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/win32-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", + "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/win32-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", + "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/win32-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", + "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/esbuild": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", + "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", + "devOptional": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.2", + "@esbuild/android-arm": "0.27.2", + "@esbuild/android-arm64": "0.27.2", + "@esbuild/android-x64": "0.27.2", + "@esbuild/darwin-arm64": "0.27.2", + "@esbuild/darwin-x64": "0.27.2", + "@esbuild/freebsd-arm64": "0.27.2", + "@esbuild/freebsd-x64": "0.27.2", + "@esbuild/linux-arm": "0.27.2", + "@esbuild/linux-arm64": "0.27.2", + "@esbuild/linux-ia32": "0.27.2", + "@esbuild/linux-loong64": "0.27.2", + "@esbuild/linux-mips64el": "0.27.2", + "@esbuild/linux-ppc64": "0.27.2", + "@esbuild/linux-riscv64": "0.27.2", + "@esbuild/linux-s390x": "0.27.2", + "@esbuild/linux-x64": "0.27.2", + "@esbuild/netbsd-arm64": "0.27.2", + "@esbuild/netbsd-x64": "0.27.2", + "@esbuild/openbsd-arm64": "0.27.2", + "@esbuild/openbsd-x64": "0.27.2", + "@esbuild/openharmony-arm64": "0.27.2", + "@esbuild/sunos-x64": "0.27.2", + "@esbuild/win32-arm64": "0.27.2", + "@esbuild/win32-ia32": "0.27.2", + "@esbuild/win32-x64": "0.27.2" + } + }, + "node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ufo": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.2.tgz", + "integrity": "sha512-heMioaxBcG9+Znsda5Q8sQbWnLJSl98AFDXTO80wELWEzX3hordXsTdxrIfMQoO9IY1MEnoGoPjpoKpMj+Yx0Q==", + "license": "MIT" + }, + "node_modules/ultrahtml": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.6.0.tgz", + "integrity": "sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==", + "license": "MIT" + }, + "node_modules/uncrypto": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz", + "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==", + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "license": "MIT" + }, + "node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unifont": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/unifont/-/unifont-0.7.1.tgz", + "integrity": "sha512-0lg9M1cMYvXof8//wZBq6EDEfbwv4++t7+dYpXeS2ypaLuZJmUFYEwTm412/1ED/Wfo/wyzSu6kNZEr9hgRNfg==", + "license": "MIT", + "dependencies": { + "css-tree": "^3.1.0", + "ofetch": "^1.5.1", + "ohash": "^2.0.11" + } + }, + "node_modules/unist-util-find-after": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz", + "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-modify-children": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-4.0.0.tgz", + "integrity": "sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "array-iterate": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", + "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-children": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-children/-/unist-util-visit-children-3.0.0.tgz", + "integrity": "sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unstorage": { + "version": "1.17.3", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.3.tgz", + "integrity": "sha512-i+JYyy0DoKmQ3FximTHbGadmIYb8JEpq7lxUjnjeB702bCPum0vzo6oy5Mfu0lpqISw7hCyMW2yj4nWC8bqJ3Q==", + "license": "MIT", + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^4.0.3", + "destr": "^2.0.5", + "h3": "^1.15.4", + "lru-cache": "^10.4.3", + "node-fetch-native": "^1.6.7", + "ofetch": "^1.5.1", + "ufo": "^1.6.1" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.8.0", + "@azure/cosmos": "^4.2.0", + "@azure/data-tables": "^13.3.0", + "@azure/identity": "^4.6.0", + "@azure/keyvault-secrets": "^4.9.0", + "@azure/storage-blob": "^12.26.0", + "@capacitor/preferences": "^6.0.3 || ^7.0.0", + "@deno/kv": ">=0.9.0", + "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", + "@planetscale/database": "^1.19.0", + "@upstash/redis": "^1.34.3", + "@vercel/blob": ">=0.27.1", + "@vercel/functions": "^2.2.12 || ^3.0.0", + "@vercel/kv": "^1.0.1", + "aws4fetch": "^1.0.20", + "db0": ">=0.2.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.4.2", + "uploadthing": "^7.4.4" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@deno/kv": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/blob": { + "optional": true + }, + "@vercel/functions": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "aws4fetch": { + "optional": true + }, + "db0": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "uploadthing": { + "optional": true + } + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz", + "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vite": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", + "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", + "devOptional": true, + "license": "MIT", + "peer": true, + "dependencies": { + "esbuild": "^0.27.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/@esbuild/aix-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", + "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", + "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", + "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", + "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", + "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", + "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", + "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", + "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", + "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", + "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", + "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", + "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", + "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", + "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", + "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", + "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", + "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", + "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", + "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", + "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", + "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", + "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", + "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", + "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", + "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", + "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/esbuild": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", + "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", + "devOptional": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.2", + "@esbuild/android-arm": "0.27.2", + "@esbuild/android-arm64": "0.27.2", + "@esbuild/android-x64": "0.27.2", + "@esbuild/darwin-arm64": "0.27.2", + "@esbuild/darwin-x64": "0.27.2", + "@esbuild/freebsd-arm64": "0.27.2", + "@esbuild/freebsd-x64": "0.27.2", + "@esbuild/linux-arm": "0.27.2", + "@esbuild/linux-arm64": "0.27.2", + "@esbuild/linux-ia32": "0.27.2", + "@esbuild/linux-loong64": "0.27.2", + "@esbuild/linux-mips64el": "0.27.2", + "@esbuild/linux-ppc64": "0.27.2", + "@esbuild/linux-riscv64": "0.27.2", + "@esbuild/linux-s390x": "0.27.2", + "@esbuild/linux-x64": "0.27.2", + "@esbuild/netbsd-arm64": "0.27.2", + "@esbuild/netbsd-x64": "0.27.2", + "@esbuild/openbsd-arm64": "0.27.2", + "@esbuild/openbsd-x64": "0.27.2", + "@esbuild/openharmony-arm64": "0.27.2", + "@esbuild/sunos-x64": "0.27.2", + "@esbuild/win32-arm64": "0.27.2", + "@esbuild/win32-ia32": "0.27.2", + "@esbuild/win32-x64": "0.27.2" + } + }, + "node_modules/vitefu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.1.tgz", + "integrity": "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==", + "license": "MIT", + "workspaces": [ + "tests/deps/*", + "tests/projects/*", + "tests/projects/workspace/packages/*" + ], + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/web-namespaces": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", + "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/which-pm-runs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz", + "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/widest-line": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-5.0.0.tgz", + "integrity": "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==", + "license": "MIT", + "dependencies": { + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/xxhash-wasm": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.1.0.tgz", + "integrity": "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==", + "license": "MIT" + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", + "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yocto-spinner": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/yocto-spinner/-/yocto-spinner-0.2.3.tgz", + "integrity": "sha512-sqBChb33loEnkoXte1bLg45bEBsOP9N1kzQh5JZNKj/0rik4zAPTNSAVPj3uQAdc6slYJ0Ksc403G2XgxsJQFQ==", + "license": "MIT", + "dependencies": { + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": ">=18.19" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz", + "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.25.1", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.1.tgz", + "integrity": "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==", + "license": "ISC", + "peerDependencies": { + "zod": "^3.25 || ^4" + } + }, + "node_modules/zod-to-ts": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/zod-to-ts/-/zod-to-ts-1.2.0.tgz", + "integrity": "sha512-x30XE43V+InwGpvTySRNz9kB7qFU8DlyEy7BsSTCHPH1R0QasMmHWZDCzYm6bVXtj/9NNJAZF3jW8rzFvH5OFA==", + "peerDependencies": { + "typescript": "^4.9.4 || ^5.0.2", + "zod": "^3" + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..1afae5b --- /dev/null +++ b/package.json @@ -0,0 +1,23 @@ +{ + "name": "commonflow-org", + "type": "module", + "version": "0.0.1", + "scripts": { + "dev": "astro dev", + "build": "astro build", + "preview": "astro preview", + "update": "tsx scripts/update-specs.ts", + "astro": "astro" + }, + "dependencies": { + "@astrojs/sitemap": "^3.2.1", + "astro": "^5.1.1" + }, + "devDependencies": { + "@tailwindcss/typography": "^0.5.16", + "@tailwindcss/vite": "^4.0.0", + "tailwindcss": "^4.0.0", + "tsx": "^4.19.2", + "typescript": "^5.7.2" + } +} diff --git a/public/.nojekyll b/public/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/spec/1.0.0-rc.1.svg b/public/spec/1.0.0-rc.1.svg similarity index 100% rename from spec/1.0.0-rc.1.svg rename to public/spec/1.0.0-rc.1.svg diff --git a/spec/1.0.0-rc.2.svg b/public/spec/1.0.0-rc.2.svg similarity index 100% rename from spec/1.0.0-rc.2.svg rename to public/spec/1.0.0-rc.2.svg diff --git a/spec/1.0.0-rc.3.svg b/public/spec/1.0.0-rc.3.svg similarity index 100% rename from spec/1.0.0-rc.3.svg rename to public/spec/1.0.0-rc.3.svg diff --git a/spec/1.0.0-rc.4.svg b/public/spec/1.0.0-rc.4.svg similarity index 100% rename from spec/1.0.0-rc.4.svg rename to public/spec/1.0.0-rc.4.svg diff --git a/spec/1.0.0-rc.5.svg b/public/spec/1.0.0-rc.5.svg similarity index 100% rename from spec/1.0.0-rc.5.svg rename to public/spec/1.0.0-rc.5.svg diff --git a/scripts/update-specs.ts b/scripts/update-specs.ts new file mode 100644 index 0000000..d9ef69c --- /dev/null +++ b/scripts/update-specs.ts @@ -0,0 +1,157 @@ +/** + * Fetches spec documents and diagrams from the common-flow GitHub repo + * and writes them to the appropriate locations for Astro to consume. + * + * Equivalent to the Jekyll Rakefile's `rake update` task. + */ + +import * as fs from "node:fs"; +import * as path from "node:path"; + +const config = { + currentVersion: "1.0.0-rc.5", + versions: [ + "1.0.0-rc.5", + "1.0.0-rc.4", + "1.0.0-rc.3", + "1.0.0-rc.2", + "1.0.0-rc.1", + ], + update: { + urlTemplate: + "https://github.com/jimeh/common-flow/raw/{{version}}/{{file}}", + bodyTemplate: `--- +title: {{title}} +version: {{version}} +--- +{{content}}`, + imgTemplate: + '{{title}} diagram', + outputDir: "src/content/spec", + publicDir: "public/spec", + files: { + document: "common-flow.md", + diagram: "common-flow.svg", + }, + }, +}; + +function buildFileUrl( + fileType: "document" | "diagram", + version: string +): string { + const file = config.update.files[fileType]; + return config.update.urlTemplate + .replace("{{version}}", version) + .replace("{{file}}", file); +} + +async function fetchFile(url: string): Promise { + try { + const response = await fetch(url); + if (!response.ok) { + return null; + } + return await response.text(); + } catch { + return null; + } +} + +function writeFile(filePath: string, content: string, comment = ""): void { + const dir = path.dirname(filePath); + if (!fs.existsSync(dir)) { + fs.mkdirSync(dir, { recursive: true }); + } + fs.writeFileSync(filePath, content); + console.log(` - ${filePath}${comment}`); +} + +function removeAllSpecs(): void { + console.log("\nRemoving existing spec files:"); + + for (const dir of [config.update.outputDir, config.update.publicDir]) { + if (fs.existsSync(dir)) { + const files = fs.readdirSync(dir); + for (const file of files) { + const filePath = path.join(dir, file); + fs.unlinkSync(filePath); + console.log(` ${filePath}`); + } + } + } +} + +interface Spec { + version: string; + title: string; + body: string; + diagram: string | null; +} + +async function fetchSpec(version: string): Promise { + const documentUrl = buildFileUrl("document", version); + const diagramUrl = buildFileUrl("diagram", version); + + let document = await fetchFile(documentUrl); + const diagram = await fetchFile(diagramUrl); + + if (!document) { + throw new Error(`Failed to fetch document for version ${version}`); + } + + // Replace {{version}} placeholder throughout the document + document = document.replaceAll("{{version}}", version); + + // Extract title from first line (after version replacement) + const title = document.split("\n", 1)[0]; + + // If diagram exists, inject image tag after the title + if (diagram) { + const imgTag = config.update.imgTemplate + .replace("{{file}}", `${version}.svg`) + .replace("{{title}}", title); + document = document.replace(/^(.*\n=+\n)/, `$1\n${imgTag}\n`); + } + + // Build body with frontmatter + const body = config.update.bodyTemplate + .replace("{{content}}", document) + .replace("{{title}}", title) + .replace("{{version}}", version); + + return { + version, + title, + body, + diagram, + }; +} + +async function main(): Promise { + removeAllSpecs(); + + console.log("\nFetching configured spec versions:"); + + for (const version of config.versions) { + try { + const spec = await fetchSpec(version); + + // Write markdown file to content collection + const mdPath = path.join(config.update.outputDir, `${version}.md`); + writeFile(mdPath, spec.body); + + // Write SVG diagram to public directory + if (spec.diagram) { + const svgPath = path.join(config.update.publicDir, `${version}.svg`); + writeFile(svgPath, spec.diagram); + } + } catch (error) { + console.error(`Error processing version ${version}:`, error); + } + } + + console.log("\nDone! Run `npm run build` to rebuild the site."); +} + +main(); diff --git a/src/components/MenuToggle.astro b/src/components/MenuToggle.astro new file mode 100644 index 0000000..27fe87f --- /dev/null +++ b/src/components/MenuToggle.astro @@ -0,0 +1,100 @@ +--- +// Mobile hamburger menu toggle button +--- + + + + + + + + diff --git a/src/components/Sidebar.astro b/src/components/Sidebar.astro new file mode 100644 index 0000000..5bfdc7c --- /dev/null +++ b/src/components/Sidebar.astro @@ -0,0 +1,163 @@ +--- +import { config } from "../config"; +import ThemeToggle from "./ThemeToggle.astro"; + +interface Props { + currentVersion?: string; +} + +const { currentVersion } = Astro.props; +--- + + + + diff --git a/src/components/ThemeToggle.astro b/src/components/ThemeToggle.astro new file mode 100644 index 0000000..99212c6 --- /dev/null +++ b/src/components/ThemeToggle.astro @@ -0,0 +1,102 @@ +--- +// Theme toggle component - sun/moon icon to switch between light and dark mode +--- + + + + diff --git a/src/config.ts b/src/config.ts new file mode 100644 index 0000000..7287f33 --- /dev/null +++ b/src/config.ts @@ -0,0 +1,31 @@ +export const config = { + title: "Git Common Flow", + description: + "An attempt to gather a sensible selection of the most common usage " + + "patterns of git into a single and concise specification.", + author: "Jim Myhrberg", + hostname: "commonflow.org", + url: "https://commonflow.org", + repoUrl: "https://github.com/jimeh/common-flow", + + currentVersion: "1.0.0-rc.5", + versions: [ + "1.0.0-rc.5", + "1.0.0-rc.4", + "1.0.0-rc.3", + "1.0.0-rc.2", + "1.0.0-rc.1", + ], + + // Used by update script + update: { + urlTemplate: + "https://github.com/jimeh/common-flow/raw/{{version}}/{{file}}", + files: { + document: "common-flow.md", + diagram: "common-flow.svg", + }, + }, +} as const; + +export type Config = typeof config; diff --git a/src/content.config.ts b/src/content.config.ts new file mode 100644 index 0000000..3f37b59 --- /dev/null +++ b/src/content.config.ts @@ -0,0 +1,12 @@ +import { defineCollection, z } from "astro:content"; +import { glob } from "astro/loaders"; + +const spec = defineCollection({ + loader: glob({ pattern: "**/*.md", base: "./src/content/spec" }), + schema: z.object({ + title: z.string(), + version: z.string(), + }), +}); + +export const collections = { spec }; diff --git a/spec/1.0.0-rc.1.md b/src/content/spec/1.0.0-rc.1.md similarity index 99% rename from spec/1.0.0-rc.1.md rename to src/content/spec/1.0.0-rc.1.md index 19c7f6c..a234fe4 100644 --- a/spec/1.0.0-rc.1.md +++ b/src/content/spec/1.0.0-rc.1.md @@ -5,7 +5,7 @@ version: 1.0.0-rc.1 Git Common-Flow 1.0.0-rc.1 ============================== - +Git Common-Flow 1.0.0-rc.1 diagram Summary ------- @@ -181,4 +181,3 @@ License ------- [Creative Commons - CC BY 3.0](http://creativecommons.org/licenses/by/3.0/) - diff --git a/spec/1.0.0-rc.2.md b/src/content/spec/1.0.0-rc.2.md similarity index 99% rename from spec/1.0.0-rc.2.md rename to src/content/spec/1.0.0-rc.2.md index f769686..a2dadfd 100644 --- a/spec/1.0.0-rc.2.md +++ b/src/content/spec/1.0.0-rc.2.md @@ -5,7 +5,7 @@ version: 1.0.0-rc.2 Git Common-Flow 1.0.0-rc.2 ============================== - +Git Common-Flow 1.0.0-rc.2 diagram Summary ------- @@ -206,4 +206,3 @@ License ------- [Creative Commons - CC BY 3.0](http://creativecommons.org/licenses/by/3.0/) - diff --git a/spec/1.0.0-rc.3.md b/src/content/spec/1.0.0-rc.3.md similarity index 99% rename from spec/1.0.0-rc.3.md rename to src/content/spec/1.0.0-rc.3.md index 2db6fa0..e6aeab7 100644 --- a/spec/1.0.0-rc.3.md +++ b/src/content/spec/1.0.0-rc.3.md @@ -5,7 +5,7 @@ version: 1.0.0-rc.3 Git Common-Flow 1.0.0-rc.3 =========================== - +Git Common-Flow 1.0.0-rc.3 diagram Summary ------- @@ -212,4 +212,3 @@ License ------- [Creative Commons - CC BY 3.0](http://creativecommons.org/licenses/by/3.0/) - diff --git a/spec/1.0.0-rc.4.md b/src/content/spec/1.0.0-rc.4.md similarity index 99% rename from spec/1.0.0-rc.4.md rename to src/content/spec/1.0.0-rc.4.md index f2405f6..b7fb974 100644 --- a/spec/1.0.0-rc.4.md +++ b/src/content/spec/1.0.0-rc.4.md @@ -5,7 +5,7 @@ version: 1.0.0-rc.4 Git Common-Flow 1.0.0-rc.4 =========================== - +Git Common-Flow 1.0.0-rc.4 diagram Summary ------- @@ -338,4 +338,3 @@ License ------- [Creative Commons - CC BY 3.0](http://creativecommons.org/licenses/by/3.0/) - diff --git a/spec/1.0.0-rc.5.md b/src/content/spec/1.0.0-rc.5.md similarity index 99% rename from spec/1.0.0-rc.5.md rename to src/content/spec/1.0.0-rc.5.md index 7478527..9107211 100644 --- a/spec/1.0.0-rc.5.md +++ b/src/content/spec/1.0.0-rc.5.md @@ -5,7 +5,7 @@ version: 1.0.0-rc.5 Git Common-Flow 1.0.0-rc.5 =========================== - +Git Common-Flow 1.0.0-rc.5 diagram Introduction ------------ @@ -359,4 +359,3 @@ License ------- [Creative Commons - CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) - diff --git a/src/layouts/Default.astro b/src/layouts/Default.astro new file mode 100644 index 0000000..49208f4 --- /dev/null +++ b/src/layouts/Default.astro @@ -0,0 +1,116 @@ +--- +import "../styles/global.css"; +import { config } from "../config"; +import Sidebar from "../components/Sidebar.astro"; +import MenuToggle from "../components/MenuToggle.astro"; + +interface Props { + title: string; + description?: string; + version?: string; +} + +const { title, description = config.description, version } = Astro.props; +const fullTitle = title === config.title ? title : `${title} | ${config.title}`; +--- + + + + + + + + + {fullTitle} + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    + +
    +
    +
    + + + + diff --git a/src/pages/404.astro b/src/pages/404.astro new file mode 100644 index 0000000..67b85f0 --- /dev/null +++ b/src/pages/404.astro @@ -0,0 +1,48 @@ +--- +import Default from "../layouts/Default.astro"; +--- + + +
    +

    404

    +

    Page not found.

    +

    + Go to the homepage +

    +
    +
    + + \ No newline at end of file diff --git a/src/pages/index.astro b/src/pages/index.astro new file mode 100644 index 0000000..33ffccd --- /dev/null +++ b/src/pages/index.astro @@ -0,0 +1,6 @@ +--- +import { config } from "../config"; + +// Redirect to current version +return Astro.redirect(`/spec/${config.currentVersion}`); +--- diff --git a/src/pages/spec/[version].astro b/src/pages/spec/[version].astro new file mode 100644 index 0000000..b9650a3 --- /dev/null +++ b/src/pages/spec/[version].astro @@ -0,0 +1,102 @@ +--- +import { getCollection, render } from "astro:content"; +import Default from "../../layouts/Default.astro"; + +export async function getStaticPaths() { + const specs = await getCollection("spec"); + return specs.map((spec) => ({ + params: { version: spec.data.version }, + props: { spec }, + })); +} + +const { spec } = Astro.props; +const { Content } = await render(spec); +--- + + +
    + +
    +
    + + diff --git a/src/styles/global.css b/src/styles/global.css new file mode 100644 index 0000000..2820a00 --- /dev/null +++ b/src/styles/global.css @@ -0,0 +1,135 @@ +@import "tailwindcss"; +@plugin "@tailwindcss/typography"; + +@theme { + /* Colors */ + --color-sidebar: #191818; + --color-sidebar-hover: #333; + --color-accent: #1f8dd6; + --color-text-primary: #1a1a1a; + --color-text-secondary: #777; + --color-text-muted: #999; + --color-bg-primary: #fdfdfd; + --color-bg-code: #f6f8fa; + --color-bg-code-inline: rgba(27, 31, 35, 0.05); + --color-border: #333; + + /* Dark mode colors */ + --color-dark-text-primary: #e5e5e5; + --color-dark-text-secondary: #a0a0a0; + --color-dark-bg-primary: #0d0d0d; + --color-dark-bg-code: #1a1a1a; + --color-dark-bg-code-inline: rgba(255, 255, 255, 0.1); + + /* Fonts */ + --font-sans: "Open Sans", Helvetica, Arial, sans-serif; + --font-heading: "Open Sans Condensed", Helvetica, Arial, sans-serif; + --font-mono: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, + monospace; + + /* Sizing */ + --sidebar-width: 150px; +} + +/* Base styles */ +@layer base { + html { + height: 100%; + } + + body { + font-family: var(--font-sans); + font-size: 16px; + font-weight: 400; + line-height: 1.5; + color: var(--color-text-primary); + background-color: var(--color-bg-primary); + } + + .dark body { + color: var(--color-dark-text-primary); + background-color: var(--color-dark-bg-primary); + } + + h1, + h2, + h3, + h4, + h5, + h6 { + font-family: var(--font-heading); + font-weight: 700; + color: #333; + } + + .dark h1, + .dark h2, + .dark h3, + .dark h4, + .dark h5, + .dark h6 { + color: #e5e5e5; + } + + h1 { + font-size: 2.5em; + line-height: 1.2; + } + + /* Nested list styling */ + ol ol, + ul ol { + list-style-type: lower-roman; + } + + ul ul ol, + ul ol ol, + ol ul ol, + ol ol ol { + list-style-type: lower-alpha; + } + + a { + word-break: break-word; + } + + code { + background-color: var(--color-bg-code-inline); + border-radius: 3px; + font-family: var(--font-mono); + font-size: 85%; + margin: 0; + padding: 0.3em 0.4em 0.1em 0.4em; + } + + .dark code { + background-color: var(--color-dark-bg-code-inline); + } + + pre { + background-color: var(--color-bg-code); + border-radius: 3px; + line-height: 1.45; + padding: 16px; + } + + .dark pre { + background-color: var(--color-dark-bg-code); + } + + pre > code { + background-color: transparent !important; + border-radius: 0; + font-size: 90%; + padding: 0; + } +} + +/* Layout transitions */ +@layer components { + #layout, + #menu, + .menu-link { + transition: all 0.2s ease-out; + } +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..b3201d0 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "astro/tsconfigs/strict", + "include": [".astro/types.d.ts", "**/*"], + "exclude": ["dist", "docs"] +}