diff --git a/modules/.DS_Store b/modules/.DS_Store index ccd5c86..f1e40d5 100644 Binary files a/modules/.DS_Store and b/modules/.DS_Store differ diff --git a/modules/ROOT/.DS_Store b/modules/ROOT/.DS_Store new file mode 100644 index 0000000..ca3c249 Binary files /dev/null and b/modules/ROOT/.DS_Store differ diff --git a/modules/ROOT/pages/index copy.adoc b/modules/ROOT/pages/index copy.adoc new file mode 100644 index 0000000..443c109 --- /dev/null +++ b/modules/ROOT/pages/index copy.adoc @@ -0,0 +1,17 @@ += Red Hat Open Training Contributor Guide +:navtitle: Home + +== Introduction + +This comprehensive guide serves as a reference for anyone interested in developing or contributing training content via the Red Hat Open Training program. + +The Open Training program empowers subject matter experts within the organization to share their knowledge and expertise across the company and beyond. +Read more about the program https://spaces.redhat.com/pages/viewpage.action?pageId=512755273[here,window=_blank]. + +A key goal of this program is to enable "citizen developers" and reduce the time required to build and maintain training content. +Creating training content for such a wide variety of products and technologies with fast product lifecycles to meet the needs of different audiences is impossible to do alone. +It takes more than a single team to do this and Red Hat is the perfect place to solicit content and participation from a large group of highly skilled people that care about each other's success. + +If you are here, you are already interested. +Move on to the xref:start_here:workflow.adoc[Getting Started] section if you are new to this. +Otherwise, use the menu on the left to find a section you need. \ No newline at end of file diff --git a/modules/ROOT/pages/index.adoc b/modules/ROOT/pages/index.adoc index 443c109..f80385c 100644 --- a/modules/ROOT/pages/index.adoc +++ b/modules/ROOT/pages/index.adoc @@ -1,17 +1,34 @@ -= Red Hat Open Training Contributor Guide -:navtitle: Home += Red Hat & NVIDIA AI Factory Content Accelerator +:navtitle: Event Summary -== Introduction +== Welcome to the Hackathon -This comprehensive guide serves as a reference for anyone interested in developing or contributing training content via the Red Hat Open Training program. +We are pleased to invite you to our AI Factory w/ NVIDIA Content Accelerator! This workshop is an intensive session designed to bridge the gap between product knowledge and real-world execution. Together, we will build the "field-opinionated" playbooks and technical blueprints required to deliver Red Hat and NVIDIA AI Factory solutions at scale. -The Open Training program empowers subject matter experts within the organization to share their knowledge and expertise across the company and beyond. -Read more about the program https://spaces.redhat.com/pages/viewpage.action?pageId=512755273[here,window=_blank]. +== The Philosophy: Why Your Experience Matters -A key goal of this program is to enable "citizen developers" and reduce the time required to build and maintain training content. -Creating training content for such a wide variety of products and technologies with fast product lifecycles to meet the needs of different audiences is impossible to do alone. -It takes more than a single team to do this and Red Hat is the perfect place to solicit content and participation from a large group of highly skilled people that care about each other's success. +In a world where AI can quickly shape and generate information, retaining the human aspect of knowledge transfer is critical. AI excels at pattern matching, but it lacks the "hard knocks" of trial and error. It does not inherently understand *why* a specific approach led to results, or why alternative methods might technically work but ultimately fail to achieve the best business outcomes. -If you are here, you are already interested. -Move on to the xref:start_here:workflow.adoc[Getting Started] section if you are new to this. -Otherwise, use the menu on the left to find a section you need. \ No newline at end of file +Your true value lies in sharing the lessons learned through failure and iteration. By sharing your perspective, the nuances of your process, and the "Aha!" moments that crystallized your understanding, you translate raw blobs of information into a powerful enablement tool. You aren't just sharing a skill; you are empowering a co-worker to enable a customer and overcome the same journey in the future. + +== The Open Training Framework + +To capture this knowledge, we are leveraging the Red Hat Open Training framework. Open Training is Red Hat's self-service content development model that empowers subject matter experts to share their knowledge by creating training content. This collaborative approach complements our formal development efforts, ensuring that our materials stay timely, relevant, and grounded in real-world experience. + +By contributing to this accelerator, you help foster a culture of continuous learning at Red Hat. + +== Hackathon Goals & Outcomes + +To maintain focus, our work is divided into five core objectives. These will form the foundation of our new, elite content library: + +* **Production-Ready Deployments:** Develop repeatable Quickstarts, Playbooks, and Blueprints that move beyond basic training to provide a clear path for production-ready deployment. +* **Autonomous Agents:** Build enablement on the Llama Stack API and NVIDIA OpenShell runtime to transition from simple chatbots to autonomous, industrial-scale AI agents. +* **Performance Standards:** Establish hardware and storage benchmarking standards for NVIDIA-Certified Systems and high-performance environments. +* **Security & Regulations:** Integrate STIG-hardened containers and RHEL for NVIDIA best practices to meet the requirements of regulated industries. +* **Broader Field Enablement:** Create a high-impact content library to enable the broader field (Specialists, Consultants, and Partners) via existing enablement initiatives. + +== Next Steps + +Turning your expertise into a structured learning instrument can be challenging. In the following sections, we will outline the logistics of this event and how to use the "docs-as-code" AsciiDoc and Antora toolchain so you can start building immediately. + +--- \ No newline at end of file diff --git a/modules/course_guide/.DS_Store b/modules/course_guide/.DS_Store index d022e6f..08992fc 100644 Binary files a/modules/course_guide/.DS_Store and b/modules/course_guide/.DS_Store differ diff --git a/modules/course_guide/pages/course_structure copy.adoc b/modules/course_guide/pages/course_structure copy.adoc new file mode 100644 index 0000000..0ebae1b --- /dev/null +++ b/modules/course_guide/pages/course_structure copy.adoc @@ -0,0 +1,34 @@ += Course Structure + +image::../qc-structure.jpg[] + +The structure of the course is organized as a hierarchy, so it's helpful to think of the content in terms of chapters, or modules, and then pages, or sections. + +At the top level (course), the antora.yml file defines the overall structure. It has the course title and the links to `nav.adoc` files in each module (aka chapter - they are the same thing here). + +[source] +---- +name: course +title: Course Title +version: 1 +nav: +- modules/ch1/nav.adoc +- modules/ch2/nav.adoc +- modules/ch3/nav.adoc +---- + +It may be clear at this point that we need a `modules` directory, with each module/chapter as a sub-directory. They do not need to be labeled ch1, ch2, etc, but their labels would need to appear in the above antora file. + +Each module/chapter directory should have a 'nav.adoc' file with the following syntax: + +[source] +---- +* xref:index.adoc[] +** xref:section1.adoc[] +** xref:section2.adoc[] +---- + +This is the listing of the adoc files that actually contain the content. These should be placed in a `pages` directory. Any images that need to be referenced go into an `images` directory at the same level as `pages` and the 'nav.adoc' file referenced above. + +See xref:references:asciidocqrg.adoc[Asciidoc quick reference guide] for help with drafting of your content. + diff --git a/modules/course_guide/pages/course_structure.adoc b/modules/course_guide/pages/course_structure.adoc index 0ebae1b..28eed4e 100644 --- a/modules/course_guide/pages/course_structure.adoc +++ b/modules/course_guide/pages/course_structure.adoc @@ -1,34 +1,48 @@ -= Course Structure += Designing Memorable Enablement +:navtitle: Enablement Design Guide -image::../qc-structure.jpg[] +== Introduction: From Architect to Educator -The structure of the course is organized as a hierarchy, so it's helpful to think of the content in terms of chapters, or modules, and then pages, or sections. +You are here because you are an elite technical expert. You design, build, and deploy complex architectures every day. However, building a highly effective learning experience requires a slightly different muscle. -At the top level (course), the antora.yml file defines the overall structure. It has the course title and the links to `nav.adoc` files in each module (aka chapter - they are the same thing here). +It is easy to fall into the trap of simply writing down a list of commands and configurations. But a data dump is not a learning experience. If we want our peers to truly understand how to deploy Red Hat AI Factory with NVIDIA solutions at scale, we have to move beyond just *telling* them what to do. We must *show* them, challenge them, and share the context behind the keystrokes. -[source] ----- -name: course -title: Course Title -version: 1 -nav: -- modules/ch1/nav.adoc -- modules/ch2/nav.adoc -- modules/ch3/nav.adoc ----- +Here is your guide to building enablement that keeps learners engaged and makes the knowledge stick. -It may be clear at this point that we need a `modules` directory, with each module/chapter as a sub-directory. They do not need to be labeled ch1, ch2, etc, but their labels would need to appear in the above antora file. +== 1. Start with the "Why" and the "Aha!" Moment -Each module/chapter directory should have a 'nav.adoc' file with the following syntax: +Learners disengage when they don't understand why a specific task matters. Before you dive into the technical execution, frame the problem. -[source] ----- -* xref:index.adoc[] -** xref:section1.adoc[] -** xref:section2.adoc[] ----- +* **Share the Context:** Briefly explain the business or technical challenge this blueprint solves. +* **Include the "Hard Knocks":** AI can generate code, but it doesn't have the scars of trial and error. Share what *didn't* work for you during your own learning journey. Explain the pitfalls you encountered and the "Aha!" moment that led to your ultimate solution. +* **Keep the Human Element:** Write as if you are sitting next to a co-worker, explaining a new way to accomplish a task. Conversational, professional candor is far more engaging than dry textbook prose. -This is the listing of the adoc files that actually contain the content. These should be placed in a `pages` directory. Any images that need to be referenced go into an `images` directory at the same level as `pages` and the 'nav.adoc' file referenced above. +== 2. Avoid the "Copy-Paste" Trap (Active vs. Passive Learning) -See xref:references:asciidocqrg.adoc[Asciidoc quick reference guide] for help with drafting of your content. +If a learner can complete your entire module just by mindlessly copying and pasting commands into a terminal, they haven't learned anything. You have built a script, not a course. +Force the learner to engage with the environment: + +* **Ask Questions:** Prompt them to run a command, observe the output, and ask them to verify a specific parameter before moving to the next step. +* **Break Things Intentionally:** If you are building a *Break-Fix* scenario, give them a broken environment and a clear set of symptoms. Let them diagnose it like a puzzle rather than handing them the answer key upfront. +* **Use the "How-To" Effectively:** For step-by-step *How-To* guides, ensure you emphasize active participation. Explain *what* the command is doing to the infrastructure before providing the code block. + +== 3. Manage the Cognitive Load + +Technical blueprints are heavy. If you present learners with a massive wall of text and code, their eyes will glaze over. Structure your content for scannability and flow. + +* **Chunk the Information:** Break complex workflows into smaller, digestible pages or sections. +* **Use formatting strategically:** Use bold text to emphasize key parameters. Use the AsciiDoc visual callouts (`NOTE:`, `IMPORTANT:`, `WARNING:`) to break up the visual monotony and draw attention to critical security or STIG requirements. +* **Visualize the Architecture:** Do not explain a complex NVIDIA multi-node deployment with text alone. Use diagrams (placed in your `images/` folder) to anchor the learner's understanding of the topology before they touch the command line. + +== 4. The Anatomy of a Great Enablement Chapter + +When structuring a specific chapter or module in your repository, try following this proven arc: + +. **The Hook (The Problem):** Define the real-world scenario or customer pain point. +. **The Strategy (The Concept):** Explain the architectural approach you are taking to solve it and *why* it is the best method. +. **The Execution (The Lab):** Guide them through the hands-on deployment or troubleshooting steps. +. **The Verification (The Proof):** Show them how to test and validate that their deployment or fix was successful. +. **The Takeaway:** Summarize the core lesson and how it applies to their daily interactions with customers. + +NOTE: Remember, your goal is to empower your colleagues. By shaping your raw knowledge into a structured, engaging instrument, you are building a community of capability around the Red Hat AI Factory. \ No newline at end of file diff --git a/modules/course_guide/pages/dev_spaces copy.adoc b/modules/course_guide/pages/dev_spaces copy.adoc new file mode 100644 index 0000000..cc302ac --- /dev/null +++ b/modules/course_guide/pages/dev_spaces copy.adoc @@ -0,0 +1,79 @@ += Use Devspace (skip if using local system) + +Every Open Training course is developed in public GitHub repositories. +In order to make development as easy as possible, we provide you with the option of using a Dev Spaces instance. +If you're not familiar with this, just think of it as your normal IDE (VSCode in this case) running in the cloud. +It has everything you should need to write asciidoc, render into a preview, and interact with GitHub to push and pull. + +:toc: + +== Set up or Access Dev Spaces Instance + +. After the GitHub repository is created for the course, you will see a `Developer Workspace` button in the README section of the repository. ++ +Click this button to launch the Dev Spaces instance. ++ +image::../click-devspace-button.png[] + +. When prompted, select the `Log in with OpenShift` button and use the credentials that you were provided. ++ +This is usually your Red Hat SSO credential. ++ +image::../click-login-with-openshift.png[] + +. Once you have successfully logged in, select the option to `Open the existing workspace` or `Switch to running workspace` if prompted. ++ +Ignore this step if not prompted for this option. ++ +image::../select-workspace-1.png[] ++ +image::../select-workspace-2.png[] + +. When the VSCode interface loads, click `Yes, I trust the authors`. ++ +image::../trust-authors.png[] ++ +NOTE: Why do I trust them? + +That is it! +You are ready to start writing your content. +The file and folder structure is already in place, so you just need to start filling in blanks and deleting files that you won't need. + +== Render content draft + +NOTE: Make your training content repository is initialized and the changes are committed by the training team before using it in the devspace. + +. Load your content repository in the devspace environment using the steps mentioned in FIXME +. Click on the search bar for Workspace on top and click on Run Task option, then click devfile. ++ +image::../devspace-runtask.png[] ++ +. Click on `0-install` option and wait for it to finish. +. Repeat the earlier step to select devfile and click on `1-watch` option this time. +. Repeat the same steps and select `2-serve` option now. +. Pop-up will be displayed at the bottom of the screen. ++ +image::../devspace-pop-up.png[] + +. Create `Open In New Tab` button. + +. On the next pop-up message: `Do you want VS Code - Open Source to open the external website?` click on `Open` button. + +. Rendered content will now be displayed in another tab. + +. You may continue with your content development in the `vscode` interface provided by devspace. + +. When you save your changes in the content files in devspace interface, the changes will be reflected in the rendered content url as soon as you refresh the url. + +See https://github.com/RedHatQuickCourses/course-starter-template/blob/main/DEVSPACE.md + +== Commit changes to GitHub + +FIXME + +. Step 1 +. Step 2 + +== Next step + +Refer to the xref:section3.adoc[Quick course content format guide] for details on formatting your content layout. diff --git a/modules/course_guide/pages/dev_spaces.adoc b/modules/course_guide/pages/dev_spaces.adoc index cc302ac..f444db4 100644 --- a/modules/course_guide/pages/dev_spaces.adoc +++ b/modules/course_guide/pages/dev_spaces.adoc @@ -1,79 +1,41 @@ -= Use Devspace (skip if using local system) += Red Hat AI Factory with NVIDIA +:navtitle: Hackathon Objectives -Every Open Training course is developed in public GitHub repositories. -In order to make development as easy as possible, we provide you with the option of using a Dev Spaces instance. -If you're not familiar with this, just think of it as your normal IDE (VSCode in this case) running in the cloud. -It has everything you should need to write asciidoc, render into a preview, and interact with GitHub to push and pull. +== Introduction to the AI Factory -:toc: +Before building the blueprints, we must align on the core value of the platform we are enabling. Red Hat AI Factory with NVIDIA is a co-engineered, enterprise-grade AI solution for building, deploying, and managing AI at scale across hybrid cloud environments. -== Set up or Access Dev Spaces Instance +It combines the integrated AI platform capabilities of Red Hat AI Enterprise with NVIDIA's accelerated computing, networking, and NVIDIA AI Enterprise software. The primary goal of this platform is to transform the ad-hoc creation, customization, and deployment of AI models into a repeatable, scalable, and safe-guarded factory process. -. After the GitHub repository is created for the course, you will see a `Developer Workspace` button in the README section of the repository. -+ -Click this button to launch the Dev Spaces instance. -+ -image::../click-devspace-button.png[] +== How Our Hackathon Objectives Drive Business Value -. When prompted, select the `Log in with OpenShift` button and use the credentials that you were provided. -+ -This is usually your Red Hat SSO credential. -+ -image::../click-login-with-openshift.png[] +The five core objectives of this hackathon are not just technical exercises; they directly map to the business outcomes organizations need to move from AI experimentation to industrial-scale, enterprise-wide production. -. Once you have successfully logged in, select the option to `Open the existing workspace` or `Switch to running workspace` if prompted. -+ -Ignore this step if not prompted for this option. -+ -image::../select-workspace-1.png[] -+ -image::../select-workspace-2.png[] +Here is how the blueprints you are building translate to customer success: -. When the VSCode interface loads, click `Yes, I trust the authors`. -+ -image::../trust-authors.png[] -+ -NOTE: Why do I trust them? +=== 1. Production-Ready Deployments +* **The Objective:** Develop repeatable Quickstarts and Playbooks. +* **The AI Factory Value:** We provide predefined blueprints and quickstarts with best practice AI workflow patterns. +* **The Business Outcome:** This configuration and deployment strategy helps customers realize value faster. It accelerates time-to-value by providing streamlined workflows and instant access to pre-configured models, delivered as NVIDIA NIM microservices. -That is it! -You are ready to start writing your content. -The file and folder structure is already in place, so you just need to start filling in blanks and deleting files that you won't need. +=== 2. Autonomous Agents +* **The Objective:** Build enablement on the Llama Stack API and OpenShell to deploy industrial-scale AI agents. +* **The AI Factory Value:** Enterprise AI spending is driven in large part by agentic AI applications. +* **The Business Outcome:** Organizations can successfully shift their strategies toward high-density, agentic workflows and address the resulting demands on AI inference and infrastructure. -== Render content draft +=== 3. Performance Standards +* **The Objective:** Establish hardware and storage benchmarking standards for high-performance environments. +* **The AI Factory Value:** The platform maximizes infrastructure usage and bolsters inference performance with a unified, high-performance serving stack. +* **The Business Outcome:** By tapping into Red Hat AI inference capabilities powered by vLLM, NVIDIA TensorRT-LLM, and NVIDIA Dynamo, organizations can meet strict AI service level objectives and reduce the total cost of ownership (TCO). -NOTE: Make your training content repository is initialized and the changes are committed by the training team before using it in the devspace. +=== 4. Security & Regulations +* **The Objective:** Integrate STIG-hardened containers and RHEL for regulated industries. +* **The AI Factory Value:** Leveraging the flexible and stable foundation of Red Hat Enterprise Linux, organizations benefit from advanced security and compliance capabilities built-in from the start. +* **The Business Outcome:** This delivers a security-hardened foundation for mission-critical AI workloads that require isolation and continuous verification. Furthermore, NVIDIA DOCA microservices build on this foundation to create a zero-trust architecture. -. Load your content repository in the devspace environment using the steps mentioned in FIXME -. Click on the search bar for Workspace on top and click on Run Task option, then click devfile. -+ -image::../devspace-runtask.png[] -+ -. Click on `0-install` option and wait for it to finish. -. Repeat the earlier step to select devfile and click on `1-watch` option this time. -. Repeat the same steps and select `2-serve` option now. -. Pop-up will be displayed at the bottom of the screen. -+ -image::../devspace-pop-up.png[] +=== 5. Broader Field Enablement +* **The Objective:** Create a high-impact content library to enable the broader field. +* **The AI Factory Value:** The platform is supported on AI factory infrastructure from leading systems manufacturers, including Cisco, Dell Technologies, Lenovo and Supermicro. +* **The Business Outcome:** By enabling the field with your blueprints, you empower IT administrators and operations teams to scale and maintain AI deployments with the same operational rigor and predictability as any enterprise workload. -. Create `Open In New Tab` button. - -. On the next pop-up message: `Do you want VS Code - Open Source to open the external website?` click on `Open` button. - -. Rendered content will now be displayed in another tab. - -. You may continue with your content development in the `vscode` interface provided by devspace. - -. When you save your changes in the content files in devspace interface, the changes will be reflected in the rendered content url as soon as you refresh the url. - -See https://github.com/RedHatQuickCourses/course-starter-template/blob/main/DEVSPACE.md - -== Commit changes to GitHub - -FIXME - -. Step 1 -. Step 2 - -== Next step - -Refer to the xref:section3.adoc[Quick course content format guide] for details on formatting your content layout. +--- \ No newline at end of file diff --git a/modules/course_guide/pages/local_system copy.adoc b/modules/course_guide/pages/local_system copy.adoc new file mode 100644 index 0000000..ba98910 --- /dev/null +++ b/modules/course_guide/pages/local_system copy.adoc @@ -0,0 +1,34 @@ += Setup local system (skip if using devspace) +:toc: + +== Get started + +Follow the instructions on xref:starthere:workflow.adoc[Get Started] page and wait for a response from the training team. + +== Install required packages + +=== Linux + +=== Mac + +== Work with git repository + +* Clone +* Git add, commit, push + +== Preview content + +cd $CONTENTREPO + +* npm install +npm install . + +* npm watch +npm run watch:adoc + +* npm serve +npm run serve + +== Next step + +Refer to the xref:section3.adoc[Quick course content format guide] for details on formatting your content layout. diff --git a/modules/course_guide/pages/local_system.adoc b/modules/course_guide/pages/local_system.adoc index ba98910..749ef2e 100644 --- a/modules/course_guide/pages/local_system.adoc +++ b/modules/course_guide/pages/local_system.adoc @@ -1,34 +1,127 @@ -= Setup local system (skip if using devspace) -:toc: += Course Design Document (CDD) Template +:navtitle: AI Assisted Course Design Template -== Get started +== Using This Template with AI -Follow the instructions on xref:starthere:workflow.adoc[Get Started] page and wait for a response from the training team. +As an elite engineer, your time is best spent on technical execution, not formatting documents. You can use this template to accelerate your course design by feeding it into an AI assistant. -== Install required packages +> **AI Prompt to Generate Your CDD:** +> _"You are an expert technical instructional designer. I am going to provide you with a blank Course Design Document (CDD) template, followed by my raw notes, code snippets, and objectives for a new Red Hat AI Factory blueprint. Please fill out the template using my notes. Ensure the tone is highly technical, focusing on production-ready deployments, and heavily emphasizes the 'Break-Fix' and 'How-To' troubleshooting elements."_ -=== Linux +--- -=== Mac +== 1. Course Metadata & Executive Summary -== Work with git repository +* **Course Title:** [Insert Blueprint/Playbook Title] +* **Target Product Versions:** [e.g., Red Hat OpenShift AI 3.4+, Red Hat build of Kueue 1.2+, NVIDIA vGPU 16.x] +* **Estimated Duration:** [e.g., 2 Hours, Half-Day] +* **Format:** [Choose one: How-To (Step-by-step) OR Break-Fix (Troubleshooting)] -* Clone -* Git add, commit, push +**Executive Summary:** +[Provide a 2-3 sentence overview. What is this course? Why does it matter to the business? Example: "This course prepares Platform Engineers to deploy MaaS on RHOAI, maximizing GPU ROI by driving utilization up to 90%."] -== Preview content +**Key Differentiators:** +* [e.g., Hands-on labs with real A100 GPU clusters] +* [e.g., Focuses on Day 2 operational troubleshooting rather than just Day 1 installation] -cd $CONTENTREPO +--- -* npm install -npm install . +== 2. Target Audience & Prerequisites -* npm watch -npm run watch:adoc +**Primary Persona:** * **Role:** [e.g., Platform Engineer, DevOps/SRE] +* **Responsibilities:** [e.g., Designing scheduling queues, managing cluster quotas] -* npm serve -npm run serve +**Prerequisites:** +* [List required prior knowledge. e.g., Deep understanding of Kubernetes ResourceQuotas] +* [List required completed training. e.g., Nvidia GPU Enablement module] -== Next step +--- -Refer to the xref:section3.adoc[Quick course content format guide] for details on formatting your content layout. +== 3. Skill & Task Mapping (The "TL3" Depth Check) + +Before outlining the chapters, map out the core learning objectives (LOs). Every concept must tie directly to a practical task and a troubleshooting scenario. + +[cols="1,1,1,1",options="header"] +|=== +| Learning Objective (LO) +| Core Concept (The "Why") +| Practical Task (The "How") +| Troubleshooting Focus (Day 2) + +| *Example: Deploy Kueue* +| *Why vanilla Kubernetes scheduling limits GPU efficiency.* +| *Deploy ResourceFlavors, ClusterQueues, and LocalQueues.* +| *Diagnosing failed installations due to legacy CRDs.* + +| LO 1: [Insert Objective] +| [Insert Concept] +| [Insert Task] +| [Insert Troubleshooting Scenario] + +| LO 2: [Insert Objective] +| [Insert Concept] +| [Insert Task] +| [Insert Troubleshooting Scenario] +|=== + +--- + +== 4. Course Architecture & Module Breakdown + +Break the blueprint down into logical modules (which will become your AsciiDoc `chapters`). For each module, define the progression. + +=== Module 1: [Module Title] +* **Estimated Time:** [e.g., 60 minutes] +* **Learning Objective:** [Tie back to the LOs defined above] +* **Topics Covered:** +** [Topic 1] +** [Topic 2] +* **Hands-on Lab Scenario:** +** [Describe the specific environment and the task the learner must complete. e.g., "Configure MIG partitioning for 2x 3g.20gb instances."] +* **Validation Checkpoints (How does the learner know they succeeded?):** +** [e.g., ✅ All GPU operator pods in RUNNING state] +** [e.g., ✅ Workloads correctly preempted based on priority] + +=== Module 2: [Module Title] +* **Estimated Time:** [e.g., 90 minutes] +* **Learning Objective:** [Tie back to the LOs defined above] +* **Topics Covered:** +** [Topic 1] +** [Topic 2] +* **Hands-on Lab / Break-Fix Scenario:** +** [Describe the broken state. e.g., "Learner is given an environment where pending RayCluster workloads fail due to insufficient quota."] +* **Validation Checkpoints:** +** [e.g., ✅ Workload resumes and completes successfully] + +--- + +== 5. Lab Infrastructure Requirements + +Define the exact environment the Open Training team (or RHDP) needs to provide for this blueprint to work. + +* **Hardware Requirements:** [e.g., Requires at least 1 worker node equipped with 4 GPUs (e.g., AWS p3.8xlarge instance)] +* **Software/Operators Required:** [e.g., OpenShift Container Platform 4.14+, NVIDIA GPU Operator] +* **Pre-Provisioned State:** [e.g., The NVIDIA GPU Operator must be pre-installed. The GPU worker node must be pre-tainted with `nvidia.com/gpu=Exists:NoSchedule`] +* **External Access:** [e.g., Requires external route access for API Gateway validation] + +--- + +== 6. Open Questions & Technical Decisions + +[Use this section during the Hackathon to flag blockers or design choices you need to finalize with the team.] +* ❓ [e.g., Do we standardize on A10s or require a mix of GPU types for the lab?] +* ❓ [e.g., Should we include OpenShift Logging (EFK/Loki) for the troubleshooting section?] + + + + +cat < +++++ ---- -== MEDIA +.example Arcade embed. +++++ + +++++ + +== Hard Line Breaks -To render an image on the page, copy the required image in `modules/chapterN/images` directory and reference it as below. +Sometimes you need to start a new line without creating a completely new paragraph. You can use a hard line break by placing a plus sign (`+`) at the end of the line. + +[source,asciidoc] ---- -image::sample-image.jpg[] +You may also use hard line breaks like this + +for a new line within the paragraph. ---- -Example: +--- -image::sample-image.png[] +== Links & Cross-References -Audio files also go into the `chapter/images` directory and are referenced as below. ----- -audio::audio-file.wav[] ----- +Connecting your learners to external resources or other parts of your course is crucial for building a cohesive blueprint. -Example: +=== External Links +To link to an external website, include the URL followed by the text in brackets. Use `window=_blank` so it opens in a new tab without losing the course page. -audio::audio-file.wav[] +[source,asciidoc] +---- +Read the https://docs.asciidoctor.org/asciidoc/latest/[official documentation,window=_blank]. +---- -Video files also go into the `chapter/images` directory and are referenced as below. +=== Internal Links (Cross-References) +To link to another page within the same chapter/section, use the `xref:` command. +[source,asciidoc] ---- -video::video-file.mp4[] +Check out the xref:faq.adoc[FAQ page] for more details. ---- -Example: +To link to a page in a completely different section/module, include the module name. +[source,asciidoc] +---- +Review the xref:course_guide:course_structure.adoc[Course Structure guide]. +---- -video::video-file.mp4[] +--- +== Tables -== TABLES +Tables are fantastic for comparing hardware benchmarks, organizing STIG requirements, or mapping out parameters. -Table without header row: +Here is the syntax for a standard table with a header row: -[cols="1,1"] +[source,asciidoc] +...... +[cols="2*",options="header"] |=== -|Cell in column 1, row 1 -|Cell in column 2, row 1 +|Column 1 Header +|Column 2 Header |Cell in column 1, row 2 |Cell in column 2, row 2 |Cell in column 1, row 3 |Cell in column 2, row 3 -|=== +|=== +...... -Table with header row: +--- [cols="2*",options="header"] |=== -|Column 1, header row -|Column 2, header row +|Column 1 Header +|Column 2 Header |Cell in column 1, row 2 |Cell in column 2, row 2 @@ -224,3 +219,29 @@ Table with header row: |Cell in column 1, row 3 |Cell in column 2, row 3 |=== + +--- + +== Local Media & Audio + +If you are uploading local media files rather than linking out to YouTube or external URLs, you must place the files directly into the `modules/chapterN/images` directory. + +*Note: Even audio and video files go into the `images` folder!* + +**To reference an image:** +[source,asciidoc] +---- +image::sample-image.jpg[] +---- + +**To reference local video:** +[source,asciidoc] +---- +video::video-file.mp4[] +---- + +**To reference local audio (great for voiceover explanations):** +[source,asciidoc] +---- +audio::audio-file.wav[] +---- \ No newline at end of file diff --git a/modules/start_here/images/qc-structure.jpg b/modules/start_here/images/qc-structure.jpg new file mode 100644 index 0000000..9395a9a Binary files /dev/null and b/modules/start_here/images/qc-structure.jpg differ diff --git a/modules/start_here/pages/workflow copy.adoc b/modules/start_here/pages/workflow copy.adoc new file mode 100644 index 0000000..5372e11 --- /dev/null +++ b/modules/start_here/pages/workflow copy.adoc @@ -0,0 +1,30 @@ += Getting started + +You don't need to overplan, but you should have a plan. +Follow these high level steps to get started: + +. Make sure you know what kind of training you want to create. +There are a few different types to choose from: +* xref:references:glossary.adoc#Know-It[know-it training] focuses on knowledge content and does not have any lab environments. +Think about this as something closer to a blog. +* xref:references:glossary.adoc#How-To[how-to training] focuses on hands-on labs across a variety of activities from installation to use-cases with Red Hat products. +* xref:references:glossary.adoc#Break-Fix[break-fix training] is a subset of how-to and focuses on on troubleshooting activities in a hands-on lab environment. + +. If you need a learner to have a lab environment, decide which one you want to use: +* xref:references:glossary.adoc#RHDP[Red Hat Demo Platform (RHDP)] is the preferred lab type and should be suitable for all *how-to* and *break-fix* content. +* xref:references:glossary.adoc#ROLE[ROLE] can be used for content that has an established plan for publication on the GLS platform. + +. Submit a https://docs.google.com/forms/d/e/1FAIpQLSepUaRiRdyA3PEzLP8w59reAsKRe19dL3ewpJGvJ7Gbggt-xg/viewform[training request,window=_blank] for type *Open Training*. +This will notify our Learning Product Managers and they will contact you as quickly as possible either with a request for more information or with the next steps, which is usually to connect you with the team that will help get your work going. ++ +NOTE: You may track or update your request in https://issues.redhat.com/secure/RapidBoard.jspa?rapidView=20243[Jira,window=_blank]. + +. Once the request is validated and approved, write the content and work with the PTL team to develop the lab environment. +This is the part that you came here to do and where you should spend most of your time. + +== What Next? + +Once you have completed these steps and are ready to start, you can find more guidance in the following sections: + +* xref:course_guide:index.adoc[Course development] +* xref:lab:index.adoc[Lab development] \ No newline at end of file diff --git a/modules/start_here/pages/workflow.adoc b/modules/start_here/pages/workflow.adoc index 5372e11..66516f5 100644 --- a/modules/start_here/pages/workflow.adoc +++ b/modules/start_here/pages/workflow.adoc @@ -1,30 +1,44 @@ -= Getting started += Execution Strategy & Course Structure +:navtitle: Strategy & Structure -You don't need to overplan, but you should have a plan. -Follow these high level steps to get started: -. Make sure you know what kind of training you want to create. -There are a few different types to choose from: -* xref:references:glossary.adoc#Know-It[know-it training] focuses on knowledge content and does not have any lab environments. -Think about this as something closer to a blog. -* xref:references:glossary.adoc#How-To[how-to training] focuses on hands-on labs across a variety of activities from installation to use-cases with Red Hat products. -* xref:references:glossary.adoc#Break-Fix[break-fix training] is a subset of how-to and focuses on on troubleshooting activities in a hands-on lab environment. +== Content Formats -. If you need a learner to have a lab environment, decide which one you want to use: -* xref:references:glossary.adoc#RHDP[Red Hat Demo Platform (RHDP)] is the preferred lab type and should be suitable for all *how-to* and *break-fix* content. -* xref:references:glossary.adoc#ROLE[ROLE] can be used for content that has an established plan for publication on the GLS platform. +image::../qc-structure.jpg[] -. Submit a https://docs.google.com/forms/d/e/1FAIpQLSepUaRiRdyA3PEzLP8w59reAsKRe19dL3ewpJGvJ7Gbggt-xg/viewform[training request,window=_blank] for type *Open Training*. -This will notify our Learning Product Managers and they will contact you as quickly as possible either with a request for more information or with the next steps, which is usually to connect you with the team that will help get your work going. -+ -NOTE: You may track or update your request in https://issues.redhat.com/secure/RapidBoard.jspa?rapidView=20243[Jira,window=_blank]. +== Understanding the QuickCourse Directory Structure -. Once the request is validated and approved, write the content and work with the PTL team to develop the lab environment. -This is the part that you came here to do and where you should spend most of your time. +The Red Hat QuickCourse toolchain is built on the Antora project. The structure of the course is organized as a hierarchy, so it's helpful to think of the content in terms of chapters, or modules, and then pages, or sections. -== What Next? +When you open your assigned repository, you will see the following key components: -Once you have completed these steps and are ready to start, you can find more guidance in the following sections: +=== 1. The Orchestrator: `antora.yml` +At the top level (course), the `antora.yml` file defines the overall structure. It contains the course title and the links to the `nav.adoc` files in each module. -* xref:course_guide:index.adoc[Course development] -* xref:lab:index.adoc[Lab development] \ No newline at end of file +[source,yaml] +---- +name: course +title: Course Title +version: 1 +nav: +- modules/ch1/nav.adoc +- modules/ch2/nav.adoc +---- + +=== 2. The Chapters: `modules/` +You will see a `modules` directory, with each module/chapter as a sub-directory. They do not need to be labeled ch1, ch2, etc., but their exact folder names must appear in the `antora.yml` file. + +=== 3. The Map: `nav.adoc` +Inside each module/chapter directory, there is a `nav.adoc` file. This is the listing of the `.adoc` files that actually contain your content. + +[source,asciidoc] +---- +* xref:index.adoc[] +** xref:section1.adoc[] +** xref:section2.adoc[] +---- + +=== 4. The Content & Visuals: `pages/` and `images/` +Your written `.adoc` files should be placed in a `pages` directory. Any images that need to be referenced go into an `images` directory at the same level as `pages` and the `nav.adoc` file. + +--- \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 2e9895c..d74a287 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,6 +4,7 @@ "requires": true, "packages": { "": { + "name": "developer-guide", "devDependencies": { "@antora/cli": "3.1.3", "@antora/site-generator": "3.1.3", @@ -376,6 +377,22 @@ "node": ">=8.0.0" } }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -415,22 +432,24 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -494,13 +513,50 @@ } }, "node_modules/call-bind": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", + "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "get-intrinsic": "^1.3.0", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "dev": true, + "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -633,10 +689,11 @@ "dev": true }, "node_modules/convict": { - "version": "6.2.4", - "resolved": "https://registry.npmjs.org/convict/-/convict-6.2.4.tgz", - "integrity": "sha512-qN60BAwdMVdofckX7AlohVJ2x9UvjTNoKVXCL2LxFk1l7757EJqf1nySdMkPQer0bt8kQ5lQiyZ9/2NvrFBuwQ==", + "version": "6.2.5", + "resolved": "https://registry.npmjs.org/convict/-/convict-6.2.5.tgz", + "integrity": "sha512-JtXpxqDqJ8P0UwEHwhxLzCIXQy97vlYBZR222Sbzb1q1Erex9ASrztJ29SyhWFQjod1AeFBaPzEEC8YvtZMIYg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "lodash.clonedeep": "^4.5.0", "yargs-parser": "^20.2.7" @@ -705,6 +762,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/define-properties": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", @@ -727,6 +802,21 @@ "integrity": "sha512-iSq8ngPOt0K53A6eVr4d5Kn6GNrM2nQZtC740pzIriHtn4pOQ2lyzEXQMBeVcWERN0ye7fhBsk9PbLLQOnUx/g==", "dev": true }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/duplexify": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", @@ -748,6 +838,39 @@ "once": "^1.4.0" } }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/event-target-shim": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", @@ -809,10 +932,11 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -855,9 +979,9 @@ } }, "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", "dev": true, "funding": [ { @@ -865,6 +989,7 @@ "url": "https://github.com/sponsors/RubenVerborgh" } ], + "license": "MIT", "engines": { "node": ">=4.0" }, @@ -874,6 +999,22 @@ } } }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/fs-mkdirp-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", @@ -894,26 +1035,54 @@ "dev": true }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "dev": true, + "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/glob": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", @@ -984,6 +1153,19 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -1010,13 +1192,14 @@ } }, "node_modules/handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "version": "4.7.9", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.9.tgz", + "integrity": "sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.2.5", - "neo-async": "^2.6.0", + "neo-async": "^2.6.2", "source-map": "^0.6.1", "wordwrap": "^1.0.0" }, @@ -1030,18 +1213,6 @@ "uglify-js": "^3.1.4" } }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -1052,22 +1223,24 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, + "license": "MIT", "dependencies": { - "get-intrinsic": "^1.1.1" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -1075,11 +1248,15 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, "engines": { "node": ">= 0.4" }, @@ -1087,6 +1264,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hasown": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz", + "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -1107,10 +1297,11 @@ } }, "node_modules/help-me/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -1135,10 +1326,11 @@ } }, "node_modules/help-me/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -1284,6 +1476,19 @@ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -1319,6 +1524,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -1335,6 +1541,22 @@ "node": ">=0.10.0" } }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-unc-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", @@ -1412,10 +1634,11 @@ } }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -1490,10 +1713,11 @@ } }, "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "dev": true, + "license": "MIT" }, "node_modules/lodash.clonedeep": { "version": "4.5.0", @@ -1501,6 +1725,16 @@ "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", "dev": true }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -1547,10 +1781,11 @@ } }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -1634,10 +1869,14 @@ } }, "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -1754,10 +1993,11 @@ "dev": true }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -1881,6 +2121,16 @@ "node": ">= 0.12.0" } }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", @@ -1907,6 +2157,7 @@ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true, + "peer": true, "engines": { "node": ">=0.4.0" } @@ -1933,12 +2184,13 @@ } }, "node_modules/qs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", - "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", + "version": "6.15.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.2.tgz", + "integrity": "sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.4" + "side-channel": "^1.1.0" }, "engines": { "node": ">=0.6" @@ -2087,19 +2339,66 @@ "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==", "dev": true }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", + "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", "dev": true, + "license": "(MIT AND BSD-3-Clause)", "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.0" }, "bin": { "sha.js": "bin.js" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/sha.js/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/should-proxy": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/should-proxy/-/should-proxy-1.0.4.tgz", @@ -2107,14 +2406,76 @@ "dev": true }, "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2323,11 +2684,55 @@ "node": ">=0.10.0" } }, + "node_modules/to-buffer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.2.tgz", + "integrity": "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "isarray": "^2.0.5", + "safe-buffer": "^5.2.1", + "typed-array-buffer": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/to-buffer/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/to-buffer/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -2347,6 +2752,21 @@ "node": ">= 0.10" } }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/uglify-js": { "version": "3.17.4", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", @@ -2611,6 +3031,28 @@ "node": ">=12" } }, + "node_modules/which-typed-array": { + "version": "1.1.20", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz", + "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",