- Build more. Break less. Empower others.
+
diff --git a/app/providers.tsx b/app/providers.tsx
index 01ab9f8..77c11b6 100644
--- a/app/providers.tsx
+++ b/app/providers.tsx
@@ -4,11 +4,11 @@ import { theme } from "./styles/theme";
import { useEffect } from "react";
export function Providers({ children }: { children: React.ReactNode }) {
- useEffect(() => {
- if (window.innerWidth < 768 && !window.location.href.includes("/mobile")) {
- window.location.href = "/mobile";
- }
- }, []);
+ // useEffect(() => {
+ // if (window.innerWidth < 768 && !window.location.href.includes("/mobile")) {
+ // window.location.href = "/mobile";
+ // }
+ // }, []);
return {children} ;
}
diff --git a/app/styles/404.module.css b/app/styles/404.module.css
new file mode 100644
index 0000000..4d02ea0
--- /dev/null
+++ b/app/styles/404.module.css
@@ -0,0 +1,18 @@
+.container {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ height: 100%;
+ gap: 1rem;
+}
+
+.title {
+ font-size: 5rem;
+ font-weight: 900;
+ line-height: 5rem;
+}
+
+.message {
+ font-size: 1em;
+}
diff --git a/app/styles/globals.css b/app/styles/globals.css
index cad5e60..45a27d6 100644
--- a/app/styles/globals.css
+++ b/app/styles/globals.css
@@ -42,7 +42,7 @@ html {
--border-color-dark: var(--text-dark) / 0.2;
--link-color-dark: 240 100% 87%;
--error-dark: 0 100% 50%;
- --success-dark: 120 100% 50%;
+ --success-dark: 120 90% 45%;
}
:root[data-theme="dark"] {
@@ -65,6 +65,7 @@ html {
--primary: var(--primary-light);
--error: var(--error-light);
--success: var(--success-light);
+ --backgroundImage: var(--backgroundImage-light);
}
/* html[data-theme="dark"] svg {
diff --git a/app/styles/icons/HiChevronRightGreen.tsx b/app/styles/icons/HiChevronRightGreen.tsx
index 893c93b..4792471 100644
--- a/app/styles/icons/HiChevronRightGreen.tsx
+++ b/app/styles/icons/HiChevronRightGreen.tsx
@@ -1,10 +1,16 @@
import React from "react";
-function Icon({ colorMode }: { colorMode?: "dark" | "light" }) {
+function Icon({
+ colorMode,
+ color,
+}: {
+ colorMode?: "dark" | "light";
+ color: string;
+}) {
return (
);
diff --git a/app/styles/page.module.css b/app/styles/page.module.css
index 0efd6d4..7b3b959 100644
--- a/app/styles/page.module.css
+++ b/app/styles/page.module.css
@@ -3,7 +3,6 @@
flex-direction: column;
height: inherit;
- justify-content: space-between;
align-items: center;
}
@@ -11,8 +10,20 @@
display: flex;
flex-direction: column;
height: 100%;
- gap: 64px;
- justify-content: center;
+ width: 100%;
+ align-items: center;
+}
+
+.backgroundClipWrapper {
+ display: flex;
+ flex-direction: column;
+ background: hsl(var(--primary));
+ clip-path: polygon(0 0, 0 100%, 0% 100%, 100% 75%, 100% 0);
+ color: white;
+ height: max-content;
+ width: 100%;
+ padding-top: 64px;
+ padding-bottom: 96px;
align-items: center;
}
@@ -20,15 +31,13 @@
display: flex;
flex-direction: column;
gap: 8px;
- margin-right: 5em;
}
.title {
- font-size: 6rem;
+ font-size: 5rem;
font-weight: 900;
display: flex;
flex-direction: column;
gap: 0px;
- text-shadow: 4px 4px 2px rgba(0, 0, 0, 0.25);
}
.title > div {
@@ -36,11 +45,9 @@
letter-spacing: -2px;
}
.jsonSchemaTitle {
- color: hsl(var(--primary));
text-decoration: underline;
text-decoration-thickness: 0.075em;
/* add some gap between the underline and text */
-
text-underline-offset: 0.15em;
}
.subtitle1 {
@@ -52,8 +59,6 @@
}
.subtitle2 {
font-size: 1.3rem;
-
- color: hsl(var(--text) / 0.5);
}
.subtitleWrapper {
display: flex;
@@ -61,30 +66,14 @@
gap: 0px;
justify-content: center;
}
-
-.mainBtn {
- font-weight: 800;
- font-size: 1.4em;
- background-color: hsl(var(--primary));
- color: white;
+.homePageLinksWrapper {
display: flex;
- justify-self: center;
align-items: center;
- gap: 8px;
- padding: 8px 14px;
- border-radius: 8px;
- transition:
- gap 0.2s,
- padding 0.2s;
- box-shadow: 3px 3px 2px rgba(0, 0, 0, 0.25);
- padding-right: 18px;
}
-
-.mainBtn:hover {
- gap: 24px;
- padding: 8px 18px;
+.continueBtnWrapper {
+ position: absolute;
+ margin-left: 500px;
}
-
.footer {
display: flex;
flex-direction: column;
diff --git a/app/styles/theme.ts b/app/styles/theme.ts
index 16427f7..50c053f 100644
--- a/app/styles/theme.ts
+++ b/app/styles/theme.ts
@@ -1,5 +1,4 @@
import { extendTheme } from "@chakra-ui/react";
-import { color } from "framer-motion";
const Button = {
variants: {
@@ -137,9 +136,19 @@ const Popover = {
},
};
+const Modal = {
+ baseStyle: {
+ dialog: {
+ bg: "hsl(var(--background))",
+ color: "hsl(var(--text))",
+ borderRadius: "16px",
+ },
+ },
+};
+
export const theme = extendTheme({
config: {
- initialColorMode: "system",
+ initialColorMode: "light",
useSystemColorMode: true,
},
styles: {
@@ -150,6 +159,6 @@ export const theme = extendTheme({
},
},
},
- components: { Button, Menu, Switch, Drawer, Tooltip, Popover },
+ components: { Button, Menu, Switch, Drawer, Tooltip, Popover, Modal },
fonts: {},
});
diff --git a/content/01-Getting-Started/01-Your-First-Schema/instructions.mdx b/content/01-Getting-Started/01-Your-First-Schema/instructions.mdx
index 73479f6..f2e8b08 100644
--- a/content/01-Getting-Started/01-Your-First-Schema/instructions.mdx
+++ b/content/01-Getting-Started/01-Your-First-Schema/instructions.mdx
@@ -1,12 +1,12 @@
---
title: Your First Schema
-description: Welcome to the JSON Schema Tour! Create your first schema to validate a JSON document.
-keywords: type, properties, integer, string
+description: "JSON Schema is a language used for defining the structure and constraints of a JSON document. A JSON Schema is a JSON document that you can use to validate or document another JSON, which we call a JSON instance. JSON Schema is particularly useful in scenarios where data needs to be validated against a predefined structure. This ensures data consistency and helps prevent errors in applications that consume or produce JSON data. It's also valuable for documenting the expected format of JSON data, making it easier for developers to understand and work with APIs and data structures. JSON Schema supports a wide range of validation rules, including data types, formats, ranges, and dependencies between properties."
+keywords: "type, properties, integer, string, validation, structure, constraints"
---
# JSON Schema Tour
-Welcome to the *JSON Schema* Tour! In this interactive tour you will be introduced to *JSON Schema*. You will learn how to use **JSON Schema [draft](https://json-schema.org/learn/glossary#draft) 2020-12** to validate JSON documents.
+Welcome to the JSON Schema Tour! In this interactive tour you will be introduced to JSON Schema. You will learn how to use **JSON Schema [draft](https://json-schema.org/learn/glossary#draft) 2020-12** to validate JSON documents.
## Are there any prerequisites?
@@ -30,10 +30,6 @@ Consider you have a JSON document of an employee:
- `age` with value `25` (integer)
-You are given an incomplete *schema* for this data on the
-
-Now, try to Add an `age` property to the *schema* and, using the type [keyword](https://json-schema.org/learn/glossary#keyword) and set it `type` to `integer`.
-
-
-
-
+
+### Complete the schema on the
+Define the `age` property and constrain its `type` to be `integer`!
\ No newline at end of file
diff --git a/content/01-Getting-Started/02-Nesting-Objects/instructions.mdx b/content/01-Getting-Started/02-Nesting-Objects/instructions.mdx
index 5aaffcd..4197d0a 100644
--- a/content/01-Getting-Started/02-Nesting-Objects/instructions.mdx
+++ b/content/01-Getting-Started/02-Nesting-Objects/instructions.mdx
@@ -1,14 +1,14 @@
---
title: "Nesting Objects"
-description: "Nest objects within objects to define complex JSON structures."
-keywords: "nesting, string, properties, type, object, subschema"
+description: "Learn how to nest objects within objects using JSON Schema. This lesson covers defining object schemas with properties, creating subschemas, and adding string and integer types for complex data structures."
+keywords: "nesting, string, properties, type, object, subschema, schema, JSON Schema, complex data structures"
---
# Nesting Objects
You have learned to define an object [schema](https://json-schema.org/learn/glossary#schema) with properties using the `properties` [keyword](https://json-schema.org/learn/glossary#keyword), and added properties with `string` and `integer` types .
-In this step, you will learn how to nest objects within objects.
+In this lesson, you will learn how to nest objects within objects.
Let's divide the name property into the three separate components: `firstName`, `lastName`, and `middleName`
```json highlightLineStart={3} highlightLineEnd={5}
@@ -22,9 +22,9 @@ Let's divide the name property into the three separate components: `firstName`,
}
```
-## Defining a Subchema
+## Defining a Subschema
-In *JSON Schema*, A [subschema](https://json-schema.org/learn/glossary#subschema) refers to a schema that is nested within another schema.
+In JSON Schema, A [subschema](https://json-schema.org/learn/glossary#subschema) refers to a schema that is nested within another schema.
To nest objects within objects, you can define a property as an `object` with its own properties. We can call this nested object a subschema.
diff --git a/content/01-Getting-Started/03-Required-Properties/instructions.mdx b/content/01-Getting-Started/03-Required-Properties/instructions.mdx
index 40d4fcb..78c4265 100644
--- a/content/01-Getting-Started/03-Required-Properties/instructions.mdx
+++ b/content/01-Getting-Started/03-Required-Properties/instructions.mdx
@@ -1,7 +1,7 @@
---
title: "Required Properties"
-description: "Define required properties in JSON Schema"
-keywords: "required, properties, object, type, string"
+description: "Learn how to define required properties in JSON Schema. This lesson covers using the required keyword to make properties mandatory in object schemas, ensuring data validity."
+keywords: "required, properties, object, type, string, JSON Schema, mandatory, data validity"
---
# Required Properties
diff --git a/content/01-Getting-Started/04-Enumerated-Values/instructions.mdx b/content/01-Getting-Started/04-Enumerated-Values/instructions.mdx
index 9413741..ba3db60 100644
--- a/content/01-Getting-Started/04-Enumerated-Values/instructions.mdx
+++ b/content/01-Getting-Started/04-Enumerated-Values/instructions.mdx
@@ -1,7 +1,7 @@
---
title: "Enumerated Values"
-description: "Define enumerated values in JSON Schema"
-keywords: "Enums, string, properties, type, object"
+description: "Learn how to constrain a property to a fixed set of values using enumerated values in JSON Schema, with examples."
+keywords: "Enums, string, properties, type, object, JSON Schema"
---
@@ -21,7 +21,7 @@ Consider we add a field `hobbies` to the document. The `hobbies` field can have
}
```
-To define the enumerated values in _JSON Schema_, use the `enum` [keyword](https://json-schema.org/learn/glossary#keyword).
+To define the enumerated values in JSON Schema, use the `enum` [keyword](https://json-schema.org/learn/glossary#keyword).
**Example:**
diff --git a/content/01-Getting-Started/05-Arrays/instructions.mdx b/content/01-Getting-Started/05-Arrays/instructions.mdx
index 5141b57..636a9e0 100644
--- a/content/01-Getting-Started/05-Arrays/instructions.mdx
+++ b/content/01-Getting-Started/05-Arrays/instructions.mdx
@@ -1,7 +1,7 @@
---
title: "Arrays"
-description: "Define arrays in JSON Schema"
-keywords: "array"
+description: "Learn how to define arrays in JSON Schema using the type and items keywords, and convert properties to arrays of strings."
+keywords: "array, JSON Schema, type, items, subschema, strings"
---
# Arrays
@@ -17,7 +17,7 @@ Let's convert the hobbies field to an array of strings.
```
-In _JSON Schema_, defining an array is similar to defining an object. Use the `type` [keyword](https://json-schema.org/learn/glossary#keyword) with the value `array` to define an array.
+In JSON Schema, defining an array is similar to defining an object. Use the `type` [keyword](https://json-schema.org/learn/glossary#keyword) with the value `array` to define an array.
You can use the `items` keyword to define the *schema* of the array elements. The value of items should be a [subschema](https://json-schema.org/learn/glossary#subschema).
diff --git a/content/01-Getting-Started/06-Array-of-Objects/instructions.mdx b/content/01-Getting-Started/06-Array-of-Objects/instructions.mdx
index 4bb71ac..b81b5d1 100644
--- a/content/01-Getting-Started/06-Array-of-Objects/instructions.mdx
+++ b/content/01-Getting-Started/06-Array-of-Objects/instructions.mdx
@@ -1,7 +1,7 @@
---
title: "Array of Objects"
-description: "Define an array of objects with enumerated properties"
-keywords: "items, array, object, properties, type, properties, enum"
+description: "Learn how to define an array of objects with properties name and level, and how to set the items keyword in JSON schema."
+keywords: "array, objects, properties, name, level, items, JSON schema"
---
# Array of Objects
diff --git a/content/02-Primitive-Types/01-Constraining-String-Length/instructions.mdx b/content/02-Primitive-Types/01-Constraining-String-Length/instructions.mdx
index fa4d544..c69ecb5 100644
--- a/content/02-Primitive-Types/01-Constraining-String-Length/instructions.mdx
+++ b/content/02-Primitive-Types/01-Constraining-String-Length/instructions.mdx
@@ -1,7 +1,7 @@
---
title: Constraining String Length
-description: Learn how to constrain the length of a string in JSON Schema.
-keywords: minLength, maxLength, string, JSON Schema
+description: "Learn how to use JSON Schema to constrain string length using minLength and maxLength keywords, with examples for postalCode and phoneNumber fields."
+keywords: "minLength, maxLength, string, JSON Schema, postalCode, phoneNumber"
---
@@ -24,7 +24,7 @@ Let's add two new fields `postalCode` and `phoneNumber` to the JSON object. Now,
### minLength and maxLength
-In *JSON Schema*, you can use the `minLength` and `maxLength` [keywords](https://json-schema.org/learn/glossary#keyword) to define the minimum and maximum length of a string.
+In JSON Schema, you can use the `minLength` and `maxLength` [keywords](https://json-schema.org/learn/glossary#keyword) to define the minimum and maximum length of a string.
**Example**
diff --git a/content/02-Primitive-Types/02-Regular-Expressions-in-Strings/code.ts b/content/02-Primitive-Types/02-Regular-Expressions-in-Strings/code.ts
index 2fe8768..0c607b8 100644
--- a/content/02-Primitive-Types/02-Regular-Expressions-in-Strings/code.ts
+++ b/content/02-Primitive-Types/02-Regular-Expressions-in-Strings/code.ts
@@ -7,8 +7,8 @@ const code: any = {
age: {
type: "integer",
},
- phoneNumber: {},
postalCode: {},
+ phoneNumber: {},
countryCode: {},
},
};
@@ -54,6 +54,16 @@ const testCases = [
},
expected: false,
},
+ {
+ input: {
+ name: "John Doe",
+ age: 30,
+ postalCode: "123456",
+ phoneNumber: "12345678901",
+ countryCode: "IN",
+ },
+ expected: true,
+ },
{
input: {
name: "John Doe",
@@ -139,7 +149,7 @@ const testCases = [
const solution = structuredClone(code);
solution.properties.phoneNumber = {
type: "string",
- pattern: "^[0-9]{10}$",
+ pattern: "^[0-9]{10,}$",
};
solution.properties.postalCode = {
diff --git a/content/02-Primitive-Types/02-Regular-Expressions-in-Strings/instructions.mdx b/content/02-Primitive-Types/02-Regular-Expressions-in-Strings/instructions.mdx
index e5f0883..5c88563 100644
--- a/content/02-Primitive-Types/02-Regular-Expressions-in-Strings/instructions.mdx
+++ b/content/02-Primitive-Types/02-Regular-Expressions-in-Strings/instructions.mdx
@@ -1,7 +1,7 @@
---
title: Regular Expressions in Strings
-description: Learn how to use regular expressions in JSON Schema to validate strings.
-keywords: regular expressions, regex, pattern, string, validation, JSON Schema
+description: "Learn how to use regular expressions in JSON Schema to validate string fields like postalCode, phoneNumber, and countryCode with specific patterns."
+keywords: "regular expressions, regex, pattern, string, validation, JSON Schema, postalCode, phoneNumber, countryCode"
---
# Regular Expressions in Strings
@@ -10,7 +10,7 @@ Regular expressions are a powerful tool for matching patterns in strings. They a
Regular expressions itself are out of scope for this Tour, you can learn more about them in the [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions).
-In this step, we will use regular expressions to validate the format `postalCode`, `phoneNumber` and `countryCode` fields in the JSON object.
+In this lesson, we will use regular expressions to validate the format `postalCode`, `phoneNumber` and `countryCode` fields in the JSON object.
```json highlightLineStart={6}
@@ -25,7 +25,7 @@ In this step, we will use regular expressions to validate the format `postalCode
## pattern Keyword
-In *JSON Schema*, you can use the `pattern` [keyword](https://json-schema.org/learn/glossary#keyword) to define a regular expression pattern that a string value must match.
+In JSON Schema, you can use the `pattern` [keyword](https://json-schema.org/learn/glossary#keyword) to define a regular expression pattern that a string value must match.
**Example**
@@ -48,6 +48,9 @@ Now, try to modify the `postalCode`, `phoneNumber` and `countryCode` fields in t
**Constraints:**
- The `postalCode` should be a string with a length of **exactly 6** characters and should **contain only digits.**
- The `phoneNumber` should be a string with a **minimum length of 10** characters and should **contain only digits**.
-- The `countryCode` should be a string with a **length of exactly 2** characters and should **contain only uppercase alphabets**.
+- The `countryCode` should be a string with a **length of exactly 2** characters and should **contain only uppercase letters**.
-> **Hint:** to only allow uppercase alphabets, you can use the regular expression `[A-Z]` in your regex pattern.
\ No newline at end of file
+> **Hints:**
+> - To only allow uppercase letters, you can use the regular expression `[A-Z]` in your regex pattern.
+> - Use `{n}` to specify that a pattern should match exactly n times.
+> - Use `{n,}` to specify that a pattern should match at least n times. To restrict the number of matches between a minimum and maximum, you can use `{n,m}` for a range of n to m times.
diff --git a/content/02-Primitive-Types/03-Constraining-Number/instructions.mdx b/content/02-Primitive-Types/03-Constraining-Number/instructions.mdx
index b5dc121..2b6f1fb 100644
--- a/content/02-Primitive-Types/03-Constraining-Number/instructions.mdx
+++ b/content/02-Primitive-Types/03-Constraining-Number/instructions.mdx
@@ -1,7 +1,7 @@
---
title: "Constraining Number"
-description: "Constraints on number values, minimum, maximum and range"
-keywords: "minimum, maximum, range"
+description: "Learn how to constrain number values using minimum, maximum, and range constraints in JSON schema, with examples for age and dateOfBirth properties."
+keywords: "minimum, maximum, range, JSON schema, age, dateOfBirth"
---
# Constraining Number
@@ -53,7 +53,7 @@ To apply constraints on number values, you can use the following [keywords](http
"properties": {
"year": {
"type": "integer",
- "minimum": 1954,
+ "minimum": 1964,
"maximum": 2024
},
...
diff --git a/content/02-Primitive-Types/04-Exclusively-Constraining-Number/instructions.mdx b/content/02-Primitive-Types/04-Exclusively-Constraining-Number/instructions.mdx
index 8331bc3..f8c1159 100644
--- a/content/02-Primitive-Types/04-Exclusively-Constraining-Number/instructions.mdx
+++ b/content/02-Primitive-Types/04-Exclusively-Constraining-Number/instructions.mdx
@@ -1,12 +1,12 @@
---
title: "Exclusively Constraining Number"
-description: "Constraints on number values, exclusiveMinimum, exclusiveMaximum and range"
-keywords: "exclusiveMinimum, exclusiveMaximum, range"
+description: "Learn to define exclusive constraints on number values using exclusiveMinimum and exclusiveMaximum keywords in JSON Schema, with examples for age and salary properties."
+keywords: "exclusiveMinimum, exclusiveMaximum, range, JSON Schema, age, salary"
---
# Exclusively Constraining Number
-We have added a new property `salary` to the JSON object. In this step we will define ranges for the `age` and `salary` properties.
+We have added a new property `salary` to the JSON object. In this lesson we will define ranges for the `age` and `salary` properties.
diff --git a/content/02-Primitive-Types/05-Multiple-of-a-Number/instructions.mdx b/content/02-Primitive-Types/05-Multiple-of-a-Number/instructions.mdx
index 2a1f23a..86c3d9e 100644
--- a/content/02-Primitive-Types/05-Multiple-of-a-Number/instructions.mdx
+++ b/content/02-Primitive-Types/05-Multiple-of-a-Number/instructions.mdx
@@ -1,7 +1,7 @@
---
title: Multiple of a Number
-description: Define a number which is a multiple of another number in JSON Schema.
-keywords: integer, JSON Schema, multiple, multipleOf
+description: "Learn how to define a numeric property in JSON Schema that is a multiple of another number using the multipleOf keyword, with constraints on minimum and maximum values."
+keywords: "integer, JSON Schema, multiple, multipleOf, minimum, maximum"
---
# Multiple of a Number
@@ -34,6 +34,6 @@ Now, try to modify the JSON schema given in the such that `hou
**Constraints**
- `hourlyWage` should be a **multiple of 0.25**
-- `hourlyWage` should be a **positive decimal number**
-- `hourlyWage` should have **maximum value of 100**
+- `hourlyWage` should have **minimum value of 0** and **maximum value of 100**
+
diff --git a/content/02-Primitive-Types/06-Decimal-Numbers/instructions.mdx b/content/02-Primitive-Types/06-Decimal-Numbers/instructions.mdx
index e7717b7..876a555 100644
--- a/content/02-Primitive-Types/06-Decimal-Numbers/instructions.mdx
+++ b/content/02-Primitive-Types/06-Decimal-Numbers/instructions.mdx
@@ -1,7 +1,7 @@
---
title: Decimal Numbers
-description: Define decimal numbers and integers in JSON Schema.
-keywords: integer, number, JSON Schema
+description: "Learn how to define decimal numbers and integers in JSON Schema, including setting minimum and maximum values."
+keywords: "integer, number, JSON Schema, decimal, minimum, maximum"
---
# Decimal Numbers
diff --git a/content/02-Primitive-Types/07-Enumerated-Values-II/code.ts b/content/02-Primitive-Types/07-Enumerated-Values-II/code.ts
index 9110f01..16ebf89 100644
--- a/content/02-Primitive-Types/07-Enumerated-Values-II/code.ts
+++ b/content/02-Primitive-Types/07-Enumerated-Values-II/code.ts
@@ -11,7 +11,7 @@ const code: any = {
const solution = structuredClone(code);
solution.properties.performanceRating = {
- enum: [0, 1, 2, 3, 4, 5, null],
+ enum: [1, 2, 3, 4, 5, null],
};
const testCases: any[] = [
@@ -29,7 +29,7 @@ const testCases: any[] = [
age: 23,
performanceRating: 0,
},
- expected: true,
+ expected: false,
},
{
input: {
diff --git a/content/02-Primitive-Types/07-Enumerated-Values-II/instructions.mdx b/content/02-Primitive-Types/07-Enumerated-Values-II/instructions.mdx
index 20d8848..a6d48b0 100644
--- a/content/02-Primitive-Types/07-Enumerated-Values-II/instructions.mdx
+++ b/content/02-Primitive-Types/07-Enumerated-Values-II/instructions.mdx
@@ -1,7 +1,7 @@
---
title: Enumerated Values II
-description: Define numbers and null values as enumerated values in JSON Schema.
-keywords: integer, JSON Schema, enums, enumerated values, null
+description: "Define enumerated values for integers, numbers, and null using the JSON Schema enum keyword while restricting performanceRating to only specific values."
+keywords: "integer, JSON Schema, enums, enumerated values, null, performanceRating"
---
# Enumerated Values II
diff --git a/content/02-Primitive-Types/08-Defining-Constant-Values/instructions.mdx b/content/02-Primitive-Types/08-Defining-Constant-Values/instructions.mdx
index 001e7ec..02941f0 100644
--- a/content/02-Primitive-Types/08-Defining-Constant-Values/instructions.mdx
+++ b/content/02-Primitive-Types/08-Defining-Constant-Values/instructions.mdx
@@ -1,7 +1,7 @@
---
title: Defining Constant Values
-description: Learn to Define constant values in JSON Schema.
-keywords: const, constant, JSON Schema
+description: "Learn to define constant values for properties using the const keyword in JSON Schema, including examples and practice."
+keywords: "const, constant, JSON Schema, property, example, practice"
---
# Constant Values
diff --git a/content/02-Primitive-Types/09-Combining-Types/instructions.mdx b/content/02-Primitive-Types/09-Combining-Types/instructions.mdx
index 2cdafe6..d97b7fb 100644
--- a/content/02-Primitive-Types/09-Combining-Types/instructions.mdx
+++ b/content/02-Primitive-Types/09-Combining-Types/instructions.mdx
@@ -1,12 +1,12 @@
---
title: "Combining Types - Boolean and Null"
-description: "Learn to combine different types of properties in a single property."
-keywords: "types, combining types, object schema, JSON Schema"
+description: "Learn to combine boolean and null types in a single property using JSON Schema."
+keywords: "types, combining types, boolean, null, JSON Schema"
---
# Combining Types - Boolean and Null
-In out previous examples, we have set the types of properties as `string` and `integer`. But **what if you want to combine different types for a single property?**
+In our previous examples, we have set the types of properties as `string` and `integer`. But **what if you want to combine different types for a single property?**
Let's add a new property `hasAgreedToTerms` to the JSON object. This property should be a `boolean` value, but it can also be `null`.
@@ -40,7 +40,7 @@ The `null` type has only one value: `null`. You can define a `null` type as foll
## Defining the Schema
-In _JSON Schema_, you can define multiple types by passing **an array of types** to the `type` field.
+In JSON Schema, you can define multiple types by passing **an array of types** to the `type` field.
**Example:**
```json
@@ -51,4 +51,4 @@ In _JSON Schema_, you can define multiple types by passing **an array of types**
-Now, try to modify the `hasAgreedToTerms` property on the to accept both `boolean` and `null` values.
\ No newline at end of file
+Now, try to modify the `hasAgreedToTerms` property on the to accept both `boolean` and `null` values.
diff --git a/content/03-Objects/01-Pattern-Properties/instructions.mdx b/content/03-Objects/01-Pattern-Properties/instructions.mdx
index 9a3a8db..c4e1226 100644
--- a/content/03-Objects/01-Pattern-Properties/instructions.mdx
+++ b/content/03-Objects/01-Pattern-Properties/instructions.mdx
@@ -1,12 +1,12 @@
---
title: Pattern Properties
-description: Define patterns for object properties in JSON Schema.
-keywords: pattern properties, object, JSON Schema, properties, type, properties, required, properties, object
+description: "Learn how to use patternProperties in JSON Schema to define patterns for object property names and constrain their values using regular expressions."
+keywords: "pattern properties, object, JSON Schema, properties, type, required, regular expressions, pattern, additionalProperties"
---
# Objects
-Welcome to the Objects chapter. In this chapter, you will learn all about the `object` type and constraints that can be applied to it in *JSON Schema*.
+Welcome to the Objects module. In this module, you will learn all about the `object` type and constraints that can be applied to it in JSON Schema.
## Pattern Properties
diff --git a/content/03-Objects/02-Additional-Properties/instructions.mdx b/content/03-Objects/02-Additional-Properties/instructions.mdx
index b3b0f92..93f53c2 100644
--- a/content/03-Objects/02-Additional-Properties/instructions.mdx
+++ b/content/03-Objects/02-Additional-Properties/instructions.mdx
@@ -1,15 +1,14 @@
---
title: Additional Properties
-description: Handle additional properties of an object in JSON Schema.
-keywords: additional properties, object, JSON Schema, properties, type, properties, required, properties, object
+description: "Learn how to handle additional properties in JSON Schema using the additionalProperties keyword, including disallowing extra properties and defining schemas for them."
+keywords: "additional properties, object, JSON Schema, properties, type, required, patternProperties, schema, keyword"
---
-
# Additional Properties
In the previous lesson, we have set `additionalProperties` to `false`. What does it mean?
-So far, we have seen how to define the properties of an object in a [schema](https://json-schema.org/learn/glossary#schema). But **what if you want to specify constrains for the properties which you have not defined in the schema?**
+So far, we have seen how to define the properties of an object in a [schema](https://json-schema.org/learn/glossary#schema). But **what if you want to specify constraints for the properties which you have not defined in the schema?**
The `additionalProperties` [keyword](https://json-schema.org/learn/glossary#keyword) is used to control the handling of extra stuff, that is, properties whose names are not listed in the `properties` keyword or match any of the regular expressions in the `patternProperties` keyword.
@@ -50,4 +49,4 @@ You can also set `additionalProperties` to a schema to define the schema for the
The above schema will allow only `name` and `age` properties in the object. If any other property is present in the object, it should be of type `string`.
-Now, try to modify the schema provided in the on the right to allow any additional properties of type `integer`.
\ No newline at end of file
+Now, try to modify the schema provided in the on the right to allow any additional properties of type `integer`.
diff --git a/content/03-Objects/03-Constraining-Number-of-Properties/instructions.mdx b/content/03-Objects/03-Constraining-Number-of-Properties/instructions.mdx
index 388dc37..20a7632 100644
--- a/content/03-Objects/03-Constraining-Number-of-Properties/instructions.mdx
+++ b/content/03-Objects/03-Constraining-Number-of-Properties/instructions.mdx
@@ -1,10 +1,9 @@
---
title: Constraining Number of Properties
-description: Learn how to set the minimum and maximum number of properties in an object in JSON Schema.
-keywords: minProperties, maxProperties, object, JSON Schema, properties, type, properties, required, properties, object
+description: "Learn how to use JSON Schema keywords minProperties, maxProperties, and additionalProperties to set constraints on the number and type of properties in an object."
+keywords: "minProperties, maxProperties, additionalProperties, JSON Schema, object, properties, type, schema"
---
-
# Constraining Number of Properties
In JSON Schema, you can set constraints on the number of properties an object can have using the `minProperties` and `maxProperties` [keywords](https://json-schema.org/learn/glossary#keyword).
diff --git a/content/03-Objects/04-Applying-Schema-to-Property-Names/code.ts b/content/03-Objects/04-Applying-Schema-to-Property-Names/code.ts
index 0b3a2d6..9dd1081 100644
--- a/content/03-Objects/04-Applying-Schema-to-Property-Names/code.ts
+++ b/content/03-Objects/04-Applying-Schema-to-Property-Names/code.ts
@@ -7,7 +7,7 @@ const solution = {
minProperties: 2,
propertyNames: {
pattern: "^[A-Z]+$",
- minimumLength: 3,
+ minLength: 3,
},
additionalProperties: {
type: ["string", "integer"],
@@ -22,6 +22,13 @@ const testCases = [
},
expected: true,
},
+ {
+ input: {
+ NAME: "JOhN DOE",
+ PH: "97232748274",
+ },
+ expected: false,
+ },
{
input: {
NAME: "JOhN DOE",
diff --git a/content/03-Objects/04-Applying-Schema-to-Property-Names/instructions.mdx b/content/03-Objects/04-Applying-Schema-to-Property-Names/instructions.mdx
index 82b08cf..9857a4e 100644
--- a/content/03-Objects/04-Applying-Schema-to-Property-Names/instructions.mdx
+++ b/content/03-Objects/04-Applying-Schema-to-Property-Names/instructions.mdx
@@ -1,13 +1,13 @@
---
title: Applying Schema to Property Names
-description: Learn how to apply schema to property names in JSON Schema.
-keywords: propertyNames, minProperties, maxProperties
+description: "Learn how to use the propertyNames keyword in JSON Schema to enforce constraints on property names, including patterns, minimum length, and property values."
+keywords: "propertyNames, minProperties, maxProperties, pattern, additionalProperties, JSON Schema"
---
# Applying Schema to Property Names
-In *JSON Schema*, you can apply [schema](https://json-schema.org/learn/glossary#schema) to property names using the `propertyNames` [keyword](https://json-schema.org/learn/glossary#keyword). This keyword allows you to define a schema that restricts the property names of an object.
+In JSON Schema, you can apply [schema](https://json-schema.org/learn/glossary#schema) to property names using the `propertyNames` [keyword](https://json-schema.org/learn/glossary#keyword). This keyword allows you to define a schema that restricts the property names of an object.
## Example
@@ -24,7 +24,7 @@ We want to ensure that each property names are written in capital letters. We ca
}
```
-You are given an empty object schema in the . Modify it ensure that it follows the below constraints:
+You are given an empty object schema in the . Modify it to ensure that it follows the below constraints:
1. The object should have at **least 2 properties**.
2. The **property names** should be written **in capital letters**, and should have **minimum length of 3 characters**.
@@ -33,4 +33,4 @@ You are given an empty object schema in the . Modify it ensure
> **Hints:**
> - For the first constraint, you can use the `minProperties` keyword.
> - For the second constraint, you can use the `propertyNames` keyword with the `pattern` keyword.
-> - For the third constraint, you can use the `additionalProperties` keyword with the `type` keyword.
\ No newline at end of file
+> - For the third constraint, you can use the `additionalProperties` keyword with the `type` keyword.
diff --git a/content/04-Arrays/01-Specifying-Length-of-an-Array/instructions.mdx b/content/04-Arrays/01-Specifying-Length-of-an-Array/instructions.mdx
index 381d01a..887475d 100644
--- a/content/04-Arrays/01-Specifying-Length-of-an-Array/instructions.mdx
+++ b/content/04-Arrays/01-Specifying-Length-of-an-Array/instructions.mdx
@@ -1,13 +1,13 @@
---
title: Specifying Length of an Array
-description: Learn to constrain the number of items in an array using JSON Schema.
-keywords: minItems, maxItems, items, validation, JSON, Schema, JSON Schema
+description: "Learn to use JSON Schema to validate arrays, specify minimum and maximum number of items, and constrain item formats using regular expressions."
+keywords: "minItems, maxItems, items, validation, JSON, Schema, JSON Schema, pattern, regular expression"
---
# Arrays
-**Welcome,** to the Arrays module! In this module, you will learn how to use *JSON Schema* to validate arrays, apply constraints on the array items, and handle additional items in an array.
+**Welcome,** to the Arrays module! In this module, you will learn how to use JSON Schema to validate arrays, apply constraints on the array items, and handle additional items in an array.
## Specifying Length of an Array
@@ -24,7 +24,7 @@ Consider the employee JSON Document, now has a new field: an array of phone numb
### Schema for the Array
-In *JSON Schema*, you can specify the minimum and maximum number of items in an array using the `minItems` and `maxItems` [keywords](https://json-schema.org/learn/glossary#keyword).
+In JSON Schema, you can specify the minimum and maximum number of items in an array using the `minItems` and `maxItems` [keywords](https://json-schema.org/learn/glossary#keyword).
**Example**
diff --git a/content/04-Arrays/02-Unique-Items/instructions.mdx b/content/04-Arrays/02-Unique-Items/instructions.mdx
index 46e4dbe..49f1a4b 100644
--- a/content/04-Arrays/02-Unique-Items/instructions.mdx
+++ b/content/04-Arrays/02-Unique-Items/instructions.mdx
@@ -1,7 +1,7 @@
---
title: Unique Array Items
-description: Validate arrays with unique items using JSON Schema.
-keywords: array, unique items, JSON Schema
+description: "Learn how to validate arrays with unique items using the uniqueItems keyword in JSON Schema."
+keywords: "array, unique items, JSON Schema, uniqueItems, validate"
---
diff --git a/content/04-Arrays/03-Tuple-Validation/code.ts b/content/04-Arrays/03-Tuple-Validation/code.ts
index 114fddc..b114cc2 100644
--- a/content/04-Arrays/03-Tuple-Validation/code.ts
+++ b/content/04-Arrays/03-Tuple-Validation/code.ts
@@ -62,9 +62,57 @@ const testCases = [
input: {
name: "John Doe",
age: 30,
- address: [1600, "Pennsylvania", "A", "NW"],
+ address: [1600, "Pennsylvania", "Avenue", "NW"],
},
- expected: false,
+ expected: true,
+ },
+ {
+ input: {
+ name: "John Doe",
+ age: 30,
+ address: [1600, "Pennsylvania", "Avenue", "NE"],
+ },
+ expected: true,
+ },
+ {
+ input: {
+ name: "John Doe",
+ age: 30,
+ address: [1600, "Pennsylvania", "Avenue", "SW"],
+ },
+ expected: true,
+ },
+ {
+ input: {
+ name: "John Doe",
+ age: 30,
+ address: [1600, "Pennsylvania", "Avenue", "SE"],
+ },
+ expected: true,
+ },
+ {
+ input: {
+ name: "John Doe",
+ age: 30,
+ address: [1600, "Pennsylvania", "Avenue", "SE"],
+ },
+ expected: true,
+ },
+ {
+ input: {
+ name: "John Doe",
+ age: 30,
+ address: [1600, "Pennsylvania", "Street", "SE"],
+ },
+ expected: true,
+ },
+ {
+ input: {
+ name: "John Doe",
+ age: 30,
+ address: [1600, "Pennsylvania", "Boulevard", "SE"],
+ },
+ expected: true,
},
{
input: {
diff --git a/content/04-Arrays/03-Tuple-Validation/instructions.mdx b/content/04-Arrays/03-Tuple-Validation/instructions.mdx
index ab510c3..311be15 100644
--- a/content/04-Arrays/03-Tuple-Validation/instructions.mdx
+++ b/content/04-Arrays/03-Tuple-Validation/instructions.mdx
@@ -1,7 +1,7 @@
---
title: Tuple Validation
-description: Learn to validate tuple arrays in JSON Schema.
-keywords: tuple, array, items, validation, JSON, Schema, JSON Schema
+description: "Learn how to validate tuple arrays in JSON Schema using the prefixItems keyword to define constraints for each element."
+keywords: "tuple, array, items, validation, JSON Schema, prefixItems, constraints"
---
@@ -18,12 +18,12 @@ We want to display the address of a person. The address is represented as an arr
}
```
-each element of the `address` array have constraints of their own:
+each element of the `address` array has constraints of its own:
- `number` should be an integer
- `street_name` should be a string
- `street_type` can have only one value from the list: `["Street", "Avenue", "Boulevard"]`
-- `direction` can have only one value from the list: `["NW", "NW", "SE", "SW"]`
+- `direction` can have only one value from the list: `["NW", "NE", "SE", "SW"]`
## Schema definition
@@ -43,4 +43,4 @@ In such cases, you can use the `prefixItems` [keyword](https://json-schema.org/l
The above schema defines an array in which, the first element should be an `integer` and the second element should be a `string`.
-Now, try to modify the `address` property on the , such that it follows the constraints mentioned above.
\ No newline at end of file
+Now, try to modify the `address` property on the , such that it follows the constraints mentioned above.
diff --git a/content/04-Arrays/04-Additional-Items-in-Tuples/instructions.mdx b/content/04-Arrays/04-Additional-Items-in-Tuples/instructions.mdx
index c2884ed..a1650b3 100644
--- a/content/04-Arrays/04-Additional-Items-in-Tuples/instructions.mdx
+++ b/content/04-Arrays/04-Additional-Items-in-Tuples/instructions.mdx
@@ -1,10 +1,9 @@
---
title: Additional Items in Tuples
-description: Constrain additional items in a tuple array using JSON Schema.
-keywords: tuple, array, items, validation, JSON, Schema, JSON Schema
+description: "Learn how to use the items keyword in JSON Schema to constrain additional items in tuple arrays, with examples and subschema definitions."
+keywords: "tuple, array, items, validation, JSON, Schema, JSON Schema, subschema"
---
-
# Additional Items in Tuples
There is no new [keyword](https://json-schema.org/learn/glossary#keyword) for the additional items in tuple arrays. You can use the `items` keyword to define the schema for the additional items in a tuple array.
diff --git a/content/04-Arrays/05-Enumerated-Array-Items/instructions.mdx b/content/04-Arrays/05-Enumerated-Array-Items/instructions.mdx
index 0510e94..5a0f50e 100644
--- a/content/04-Arrays/05-Enumerated-Array-Items/instructions.mdx
+++ b/content/04-Arrays/05-Enumerated-Array-Items/instructions.mdx
@@ -1,7 +1,7 @@
---
title: Enumerated Array Items
-description: Learn to restrict array items to a specific set of values.
-keywords: enumerated items, array items,
+description: "Learn to restrict array items to specific values using the enum keyword in JSON schema, ensuring unique and case-sensitive items."
+keywords: "enumerated items, array items, enum keyword, JSON schema, unique items, case-sensitive"
---
diff --git a/content/04-Arrays/06-Ensuring-Array-Content-With-Contains/instructions.mdx b/content/04-Arrays/06-Ensuring-Array-Content-With-Contains/instructions.mdx
index 85c9600..c5deca4 100644
--- a/content/04-Arrays/06-Ensuring-Array-Content-With-Contains/instructions.mdx
+++ b/content/04-Arrays/06-Ensuring-Array-Content-With-Contains/instructions.mdx
@@ -1,11 +1,10 @@
---
-title: Ensuring Array Content with the 'contains'
-description: Learn how to use the 'contains' keyword in JSON Schema to ensure that arrays contain specific elements.
-keywords: array, contains, validation, JSON Schema
+title: Ensuring Array Content with the 'contains' keyword
+description: "Learn how to use the 'contains' keyword in JSON Schema to validate arrays, ensuring they contain specific elements like numbers or strings, with examples and tasks."
+keywords: "array, contains, validation, JSON Schema, subschema, keyword, example, task, skills, const"
---
-
-# Ensuring Array Content with the 'contains'
+# Ensuring Array Content with the 'contains' keyword
The `contains` keyword is used to ensure that an array contains **at least one element** that matches the [subschema](https://json-schema.org/learn/glossary#subschema) defined in the `contains` [keyword](https://json-schema.org/learn/glossary#keyword).
@@ -36,4 +35,4 @@ Our employee document has a field called `skills`.
Now, we want to ensure that the `skills` array contains at least one element that is equal to `"JavaScript"`. modify the schema given to you in the to apply this constrain.
-> **Hint:** Use the `const` keyword to specify JavaScript as the required element.
\ No newline at end of file
+> **Hint:** Use the `const` keyword to specify JavaScript as the required element.
diff --git a/content/04-Arrays/07-minContains-and-maxContains/instructions.mdx b/content/04-Arrays/07-minContains-and-maxContains/instructions.mdx
index 96d9932..2407d12 100644
--- a/content/04-Arrays/07-minContains-and-maxContains/instructions.mdx
+++ b/content/04-Arrays/07-minContains-and-maxContains/instructions.mdx
@@ -1,7 +1,7 @@
---
title: minContains and maxContains
-description: Learn how to use the 'minContains' and 'maxContains' keywords in JSON Schema to ensure that arrays contain a specific number of elements.
-keywords: array, minContains, maxContains, validation, JSON Schema
+description: "Learn how to use the 'minContains' and 'maxContains' keywords in JSON Schema to ensure that arrays contain a specific number of elements matching a subschema, with examples and tasks."
+keywords: "array, minContains, maxContains, validation, JSON Schema, subschema, contains"
---
@@ -40,6 +40,6 @@ The following example demonstrates how to use the `minContains` and `maxContains
}
```
-Our employee has field called worked hours. We want to ensure that the `workedHours` array contains **at least 2 elements** that are **greater than or equal to 8 and less than or equal 12**. Modify the schema given to you in the to apply this constraint.
+Our employee has a field called worked hours. We want to ensure that the `workedHours` array contains **at least 2 elements** that are **greater than or equal to 8 and less than or equal 12**. Modify the schema given to you in the to apply this constraint.
diff --git a/content/04-Arrays/08-Unevaluated-Items/code.ts b/content/04-Arrays/08-Unevaluated-Items/code.ts
deleted file mode 100644
index e49c34a..0000000
--- a/content/04-Arrays/08-Unevaluated-Items/code.ts
+++ /dev/null
@@ -1,93 +0,0 @@
-const code: any = {
- type: "object",
- properties: {
- name: {
- type: "string",
- },
- age: {
- type: "integer",
- },
- skills: {
- type: "array",
- },
- },
-};
-
-const solution = structuredClone(code);
-
-solution.properties.skills = {
- ...solution.properties.skills,
- prefixItems: [
- { enum: ["HTML", "CSS", "JavaScript"] },
- { enum: ["HTML", "CSS", "JavaScript"] },
- { enum: ["HTML", "CSS", "JavaScript"] },
- ],
- unevaluatedItems: {
- type: "string",
- },
-};
-
-const testCases = [
- {
- input: {
- name: "John Doe",
- age: 30,
- skills: ["HTML", "CSS", "JavaScript", "TypeScript"],
- },
- expected: true,
- },
- {
- input: {
- name: "John Doe",
- age: 30,
- skills: ["JavaScript", "CSS", "HTML", "TypeScript"],
- },
- expected: true,
- },
- {
- input: {
- name: "John Doe",
- age: 30,
- skills: ["JavaScript", "HTML", "CSS", "TypeScript"],
- },
- expected: true,
- },
- {
- input: {
- name: "John Doe",
- age: 30,
- skills: ["HTML", "CSS", "JavaScript", 123],
- },
- expected: false,
- },
- {
- input: {
- name: "John Doe",
- age: 30,
- skills: ["HTML", "CSS", "JavaScript", "TypeScript", "React"],
- },
- expected: true,
- },
- {
- input: {
- name: "John Doe",
- age: 30,
- skills: ["React", "Java", "Vue.js"],
- },
- expected: false,
- },
- {
- input: {
- name: "John Doe",
- age: 30,
- skills: ["HTML", "JavaScript", "TypeScript", "React", "Vue"],
- },
- expected: false,
- },
-];
-
-module.exports = {
- code,
- solution,
- testCases,
-};
diff --git a/content/04-Arrays/08-Unevaluated-Items/instructions.mdx b/content/04-Arrays/08-Unevaluated-Items/instructions.mdx
deleted file mode 100644
index ba19a19..0000000
--- a/content/04-Arrays/08-Unevaluated-Items/instructions.mdx
+++ /dev/null
@@ -1,56 +0,0 @@
----
-title: Unevaluated Items
-description: Learn to handle unevaluated array items in JSON Schema.
-keywords: unevaluatedItems, array, validation, JSON Schema, additionalItems
----
-
-
-# Unevaluated Items
-
-**What are Unevaluated Items?**
-
-So far, we have used `items`, `prefixItems` and `contains` [keywords](https://json-schema.org/learn/glossary#keyword) to define [subschemas](https://json-schema.org/learn/glossary#subschema) for the elements of an array. However, sometimes you many want to handle the items that are unevaluated by these keywords.
-
-In such cases, you can use the `unevaluatedItems` keyword to define a subschema for the unevaluated items in the array.
-
-- By definition, the `unevaluatedItems` subschema is always applied after `prefixItems`, `items`, and `contains` subschemas.
-- As its name implies, `unevaluatedItems` applies to any array index that has not been previously evaluated.
-
-
-
-## Example
-
-Consider, we have defined array items with `prefixItems`. When you have items more than the defined `prefixItems`, you can use `unevaluatedItems` to define a subschemas for the remaining items.
-
-
-```json
-{
- "type": "array",
- "prefixItems": [
- { "type": "number" },
- { "type": "string" }
- ],
- "unevaluatedItems": { "type": "number" }
-}
-```
-
-In this case, first two items are evaluated by `prefixItems` and the remaining items are evaluated by `unevaluatedItems`.
-
-
-## Task
-
-```json
-{
- "name": "John Doe",
- "age": 30,
- "skills": ["HTML", "CSS", "JavaScript", "React", "Node.js"]
-}
-```
-
-Modify the `skills` property of the given [schema](https://json-schema.org/learn/glossary#schema) on the such that,
-- First three elements can have only "HTML", "CSS" and "JavaScript" as values (in any order), not anything else.
-- The remaining elements are of type string.
-
-> **Hints:**
-> - For the first constrain use `prefixItems` combined with `enum` keyword.
-> - For the second constrain use `unevaluatedItems` keyword.
\ No newline at end of file
diff --git a/content/05-Conditional-Validation/01-Ensuring-Conditional-Property-Presence/instructions.mdx b/content/05-Conditional-Validation/01-Ensuring-Conditional-Property-Presence/instructions.mdx
index 00e02fd..ab56724 100644
--- a/content/05-Conditional-Validation/01-Ensuring-Conditional-Property-Presence/instructions.mdx
+++ b/content/05-Conditional-Validation/01-Ensuring-Conditional-Property-Presence/instructions.mdx
@@ -1,12 +1,12 @@
---
title: Ensuring Conditional Property Presence
-description: Learn how to make properties dependent on each other in JSON Schema using dependentRequired keyword.
-keywords: dependentRequired, conditional validation, JSON Schema
+description: "Learn how to apply conditional validation in JSON Schema using dependentRequired, dependentSchemas, if-then-else, and implications keywords to make properties dependent on each other."
+keywords: "dependentRequired, conditional validation, JSON Schema, dependentSchemas, if-then-else, implications"
---
# Conditional Validation
-Congratulations! You have made so far. We will learn about conditional validation in module
+Congratulations! You have made it so far. We will learn about conditional validation in this module
## What is Conditional Validation?
@@ -45,12 +45,14 @@ To achieve this, you can use the `dependentRequired` [keyword](https://json-sche
"type": "object",
"properties": {...},
"dependentRequired": {
- "age": ["name"]
+ "name": ["age"]
}
}
```
-In the above [schema](https://json-schema.org/learn/glossary#schema), the `age` property is required if the `name` property is present. If the `name` property is not present, the `age` property is not required.
+In the above [schema](https://json-schema.org/learn/glossary#schema), we specify that if the `name` property is present, then the `age` property must also be present.
+
+The value of the `dependentRequired` keyword is an object. Each entry in the object maps from the name of a property, *p*, to an array of strings listing properties that are required if *p* is present.
## Task
@@ -63,4 +65,4 @@ In the above [schema](https://json-schema.org/learn/glossary#schema), the `age`
}
```
-You are given a *Schema* for the above JSON document in the . Update the schema to make sure that if the `creditCardNumber` property is present, then the `address` property must also be present.
\ No newline at end of file
+You are given a *Schema* for the above JSON document in the . Update the schema to make sure that if the `creditCardNumber` property is present, then the `address` property must also be present.
diff --git a/content/05-Conditional-Validation/02-Ensuring-Mutual-Dependency/instructions.mdx b/content/05-Conditional-Validation/02-Ensuring-Mutual-Dependency/instructions.mdx
index aeb1e21..1a4a9a8 100644
--- a/content/05-Conditional-Validation/02-Ensuring-Mutual-Dependency/instructions.mdx
+++ b/content/05-Conditional-Validation/02-Ensuring-Mutual-Dependency/instructions.mdx
@@ -1,7 +1,7 @@
---
title: Ensuring Mutual Dependency
-description: Learn how to make properties dependent on each other in JSON Schema using dependentRequired keyword.
-keywords: dependentRequired, conditional validation, JSON Schema
+description: "Learn how to make properties dependent on each other in JSON Schema using the dependentRequired keyword to enforce mutual dependency."
+keywords: "dependentRequired, conditional validation, JSON Schema, mutual dependency, keyword"
---
diff --git a/content/05-Conditional-Validation/03-Conditionally-Apply-a-Subschema/instructions.mdx b/content/05-Conditional-Validation/03-Conditionally-Apply-a-Subschema/instructions.mdx
index 8dc65e0..e60be6b 100644
--- a/content/05-Conditional-Validation/03-Conditionally-Apply-a-Subschema/instructions.mdx
+++ b/content/05-Conditional-Validation/03-Conditionally-Apply-a-Subschema/instructions.mdx
@@ -1,7 +1,7 @@
---
title: Conditionally Apply a Subschema
-description: Learn how to conditionally apply a subschema in JSON Schema using the dependentSchemas keyword.
-keywords: dependentSchemas, conditional validation, JSON Schema
+description: "Learn how to conditionally apply a subschema in JSON Schema using the dependentSchemas keyword based on the presence or absence of a property."
+keywords: "dependentSchemas, conditional validation, JSON Schema, subschema, keyword"
---
diff --git a/content/05-Conditional-Validation/05-implications/code.ts b/content/05-Conditional-Validation/04-if-then-keyword/code.ts
similarity index 91%
rename from content/05-Conditional-Validation/05-implications/code.ts
rename to content/05-Conditional-Validation/04-if-then-keyword/code.ts
index cf0fffb..8e04220 100644
--- a/content/05-Conditional-Validation/05-implications/code.ts
+++ b/content/05-Conditional-Validation/04-if-then-keyword/code.ts
@@ -24,6 +24,7 @@ solution = {
const: true,
},
},
+ required: ["isStudent"],
},
then: {
required: ["age"],
@@ -69,6 +70,12 @@ const testCases = [
},
expected: true,
},
+ {
+ input: {
+ name: "John Doe",
+ },
+ expected: true,
+ },
];
module.exports = {
diff --git a/content/05-Conditional-Validation/05-implications/instructions.mdx b/content/05-Conditional-Validation/04-if-then-keyword/instructions.mdx
similarity index 75%
rename from content/05-Conditional-Validation/05-implications/instructions.mdx
rename to content/05-Conditional-Validation/04-if-then-keyword/instructions.mdx
index 5f422f9..a0fcec4 100644
--- a/content/05-Conditional-Validation/05-implications/instructions.mdx
+++ b/content/05-Conditional-Validation/04-if-then-keyword/instructions.mdx
@@ -1,11 +1,11 @@
---
-title: Implication
-description: Learn how to use the `if-then` keyword to enforce Implication in JSON Schema.
-keywords: If-Then, Implication, conditional validation, JSON Schema
+title: If-Then Keyword
+description: "Learn how to use the if-then keyword in JSON Schema to enforce conditional validation and implication, ensuring fields like salary and age are present based on conditions like isFullTime and isStudent."
+keywords: "if-then, Implication, conditional validation, JSON Schema, isFullTime, salary, isStudent, age"
---
-# Implication using if-then keyword
+# if-then keyword
**Implication** is a logical operation that states that **if** condition `A` is true, **then** condition `B` must also be true. or in other words **A -> B** (pronounced, A implies B)
@@ -47,4 +47,4 @@ You can use the `if-then` keyword to enforce this condition.
You are given the [schema](https://json-schema.org/learn/glossary#schema) for the same JSON document in the . Modify the schema to enforce the below condition:
-- **If** `isStudent` is true, **then** the `age` field must be present.
+- **If** `isStudent` is true, **then** the `age` field must be present.
diff --git a/content/05-Conditional-Validation/04-if-then-else/code.ts b/content/05-Conditional-Validation/05-if-then-else/code.ts
similarity index 97%
rename from content/05-Conditional-Validation/04-if-then-else/code.ts
rename to content/05-Conditional-Validation/05-if-then-else/code.ts
index ef6c04c..dba2bf7 100644
--- a/content/05-Conditional-Validation/04-if-then-else/code.ts
+++ b/content/05-Conditional-Validation/05-if-then-else/code.ts
@@ -17,7 +17,7 @@ const code: any = {
},
},
- required: ["name"],
+ required: ["name", "isStudent"],
};
let solution = structuredClone(code);
diff --git a/content/05-Conditional-Validation/04-if-then-else/instructions.mdx b/content/05-Conditional-Validation/05-if-then-else/instructions.mdx
similarity index 81%
rename from content/05-Conditional-Validation/04-if-then-else/instructions.mdx
rename to content/05-Conditional-Validation/05-if-then-else/instructions.mdx
index c71a88f..5ed8272 100644
--- a/content/05-Conditional-Validation/04-if-then-else/instructions.mdx
+++ b/content/05-Conditional-Validation/05-if-then-else/instructions.mdx
@@ -1,7 +1,7 @@
---
title: If-Then-Else
-description: Use the if-then-else keyword to apply conditional validation.
-keywords: conditional validation, JSON Schema, If-Then-Else
+description: "Learn how to use the if-then-else keyword in JSON Schema to apply conditional validation based on the value of a property."
+keywords: "if-then-else, conditional validation, JSON Schema, subschema, keyword"
---
@@ -35,7 +35,8 @@ You can use the `if-then-else` [keyword](https://json-schema.org/learn/glossary#
},
"if": {"properties": {"isFullTime": {"const": true}}},
"then": {"required": ["salary"]},
- "else": {"required": ["hourlyRate"] }
+ "else": {"required": ["hourlyRate"] },
+ "required": ["isFullTime"]
}
```
diff --git a/content/05-Conditional-Validation/06-Expanding-If-then-else/code.ts b/content/05-Conditional-Validation/06-Expanding-If-then-else/code.ts
new file mode 100644
index 0000000..e250fc4
--- /dev/null
+++ b/content/05-Conditional-Validation/06-Expanding-If-then-else/code.ts
@@ -0,0 +1,128 @@
+const code: any = {
+ type: "object",
+ properties: {
+ name: {
+ type: "string",
+ },
+ age: {
+ type: "integer",
+ },
+ grade: {
+ type: "number",
+ minimum: 0,
+ maximum: 10,
+ },
+ recommendationLetter: {
+ type: "string",
+ },
+ personalStatement: {
+ type: "string",
+ },
+ },
+ required: ["name", "grade"],
+};
+
+let solution = structuredClone(code);
+solution = {
+ ...solution,
+ if: {
+ properties: {
+ grade: {
+ minimum: 8,
+ },
+ },
+ },
+ then: {
+ required: ["recommendationLetter"],
+ not: { required: ["personalStatement"] },
+ },
+ else: {
+ required: ["personalStatement"],
+ not: { required: ["recommendationLetter"] },
+ },
+};
+const testCases = [
+ {
+ input: {
+ name: "John Doe",
+ age: 20,
+ grade: 8,
+ recommendationLetter: "Dr. Smith's letter",
+ },
+ expected: true,
+ },
+ {
+ input: {
+ name: "John Doe",
+ age: 20,
+ grade: 5,
+ personalStatement: "I love engineering..",
+ },
+ expected: true,
+ },
+ {
+ input: {
+ name: "John Doe",
+ grade: 5,
+ personalStatement: "",
+ },
+ expected: true,
+ },
+ {
+ input: {
+ name: "John Doe",
+ age: 20,
+ grade: 9,
+ },
+ expected: false,
+ },
+ {
+ input: {
+ name: "John Doe",
+ age: 20,
+ grade: 5,
+ },
+ expected: false,
+ },
+ {
+ input: {
+ name: "John Doe",
+ age: 20,
+ grade: 5,
+ recommendationLetter: "",
+ personalStatement: "",
+ },
+ expected: false,
+ },
+ {
+ input: {
+ name: "John Doe",
+ age: 20,
+ grade: 8,
+ recommendationLetter: "",
+ personalStatement: "",
+ },
+ expected: false,
+ },
+ {
+ input: {
+ name: "John Doe",
+ age: 20,
+ recommendationLetter: "",
+ },
+ expected: false,
+ },
+ {
+ input: {
+ age: 20,
+ grade: 8,
+ },
+ expected: false,
+ },
+];
+
+module.exports = {
+ code,
+ solution,
+ testCases,
+};
diff --git a/content/05-Conditional-Validation/06-Expanding-If-then-else/instructions.mdx b/content/05-Conditional-Validation/06-Expanding-If-then-else/instructions.mdx
new file mode 100644
index 0000000..2742d68
--- /dev/null
+++ b/content/05-Conditional-Validation/06-Expanding-If-then-else/instructions.mdx
@@ -0,0 +1,73 @@
+---
+title: "Expanding If-Then-Else"
+description: "Learn how to use the if-then-else keyword in JSON Schema to apply conditional validation using more than just constants."
+keywords: "if-then-else, conditional validation, JSON Schema, not, minimum, subschema"
+---
+
+# Expanding If-Then-Else
+So far, you've learned how to use if-then-else for conditionals. This lesson will show how they can be combined with different validation rules, not just constants!
+
+## Using with not Keyword
+The `not` keyword allows you to negate a condition (or any schema rule), meaning a property must not match a specified type or constraint. For example, the following schema ensures that the name property can be anything except a string:
+```json highlightLineStart={5} highlightLineEnd={5}
+{
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": {"not": {"type": "string"}}
+ }
+ }
+}
+```
+
+Using the `not` keyword with the `if-else` keyword can look something like this:
+
+**Example Schema**
+```json highlightLineStart={15} highlightLineEnd={23}
+{
+ "type": "object",
+ "properties": {
+ "status": {
+ "type": "string",
+ "enum": ["employed", "unemployed"]
+ },
+ "salary": {
+ "type": "number"
+ },
+ "unemploymentBenefits": {
+ "type": "number"
+ }
+ },
+ "if": {
+ "properties": {
+ "status": { "const": "employed" }
+ }
+ },
+ "then": {
+ "not": { "required": ["unemploymentBenefits"]
+ }
+ }
+}
+```
+- If `status` is `"employed"`, the `unemploymentBenefits` field **must not** be present.
+- If `status` is `"unemployed"`, `unemploymentBenefits` field can be present.
+
+This demonstrates that conditionals in JSON Schema can be combined with various keywords, allowing for more flexible validation rules.
+
+## Task
+
+```json
+{
+ "name": "John Doe",
+ "age": 20,
+ "grade": 8,
+ "recommendationLetter": "Dr. Smith's letter",
+}
+```
+
+You are given the [schema](https://json-schema.org/learn/glossary#schema) for the same JSON document in the . Modify the schema to enforce the below condition using `if-then-else`:
+
+- **If** `grade` is **greater that or equal to 8**, **then** the `recommendationLetter` field must be present, and the `personalStatement` field must **NOT** be present.
+- Else if `grade` is **lower than 8**, **then** the `personalStatement` field must be present, and the `recommendationLetter` field must **NOT** be present..
+
+> **Hint:** Use the `minimum` keyword to specify the constraint of greater than or equal to 8.
\ No newline at end of file
diff --git a/content/06-Combining-Schemas/index.mdx b/content/06-Combining-Schemas/index.mdx
deleted file mode 100644
index cacede5..0000000
--- a/content/06-Combining-Schemas/index.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-title: Combining Schemas
----
\ No newline at end of file
diff --git a/content/06-Combining-Schemas/01-Reusing-and-Referencing-with-defs-and-ref/code.ts b/content/06-Combining-Subschemas/01-Reusing-and-Referencing-with-defs-and-ref/code.ts
similarity index 100%
rename from content/06-Combining-Schemas/01-Reusing-and-Referencing-with-defs-and-ref/code.ts
rename to content/06-Combining-Subschemas/01-Reusing-and-Referencing-with-defs-and-ref/code.ts
diff --git a/content/06-Combining-Schemas/01-Reusing-and-Referencing-with-defs-and-ref/instructions.mdx b/content/06-Combining-Subschemas/01-Reusing-and-Referencing-with-defs-and-ref/instructions.mdx
similarity index 62%
rename from content/06-Combining-Schemas/01-Reusing-and-Referencing-with-defs-and-ref/instructions.mdx
rename to content/06-Combining-Subschemas/01-Reusing-and-Referencing-with-defs-and-ref/instructions.mdx
index f86f9ab..b71041d 100644
--- a/content/06-Combining-Schemas/01-Reusing-and-Referencing-with-defs-and-ref/instructions.mdx
+++ b/content/06-Combining-Subschemas/01-Reusing-and-Referencing-with-defs-and-ref/instructions.mdx
@@ -1,13 +1,16 @@
---
title: Reusing and Referencing with $defs and $ref
-description: Defining Subschemas with $defs and then referencing them with $ref
-keywords: $defs, $ref, JSON Schema, subschemas,
+description: "Define subschemas with $defs and reference them with $ref in JSON Schema to create modular and maintainable schemas."
+keywords: "$defs, $ref, JSON Schema, subschemas, modular schemas, maintainable schemas"
---
+# Combining Subschemas
+
+In this module, you will learn how to **combine multiple subschemas** to create more complex JSON Schemas. You will learn about the following keywords: `allOf`, `anyOf`, `oneOf`, `not`, `$defs`,`$ref` and recursive schemas.
# $defs and $ref
-In *JSON Schema*, the `$defs` [keyword](https://json-schema.org/learn/glossary#keyword) allows you to **define reusable [subschemas](https://json-schema.org/learn/glossary#subschema)**. You can then reference these subschemas using the `$ref` keyword.
+In JSON Schema, the `$defs` [keyword](https://json-schema.org/learn/glossary#keyword) allows you to **define reusable [subschemas](https://json-schema.org/learn/glossary#subschema)**. You can then reference these subschemas using the `$ref` keyword.
To define a subschema with `$defs`, you can use the following syntax:
diff --git a/content/06-Combining-Schemas/02-id-and-schema/code.ts b/content/06-Combining-Subschemas/02-id-and-schema/code.ts
similarity index 100%
rename from content/06-Combining-Schemas/02-id-and-schema/code.ts
rename to content/06-Combining-Subschemas/02-id-and-schema/code.ts
diff --git a/content/06-Combining-Schemas/02-id-and-schema/instructions.mdx b/content/06-Combining-Subschemas/02-id-and-schema/instructions.mdx
similarity index 81%
rename from content/06-Combining-Schemas/02-id-and-schema/instructions.mdx
rename to content/06-Combining-Subschemas/02-id-and-schema/instructions.mdx
index 8481c28..7b1cb3f 100644
--- a/content/06-Combining-Schemas/02-id-and-schema/instructions.mdx
+++ b/content/06-Combining-Subschemas/02-id-and-schema/instructions.mdx
@@ -1,7 +1,7 @@
---
title: $id and $schema
-description: Learn how to use the $id and $schema keywords in JSON Schema
-keywords: $id, $schema, JSON Schema
+description: "Learn how to use the $id and $schema keywords in JSON Schema to define the URI and version of the schema."
+keywords: "$id, $schema, JSON Schema, URI, version, keywords"
---
# $schema
@@ -23,7 +23,7 @@ The `$id` [keyword](https://json-schema.org/learn/glossary#keyword) is a **strin
```json
{
- "$id": "https://example.com/person.schema.json",
+ "$id": "https://example.com/person",
"type": "object",
"properties": {
"name": {
@@ -33,12 +33,12 @@ The `$id` [keyword](https://json-schema.org/learn/glossary#keyword) is a **strin
}
```
-In the above example, the schema is given a URI of `https://example.com/person.schema.json`.
+In the above example, the schema is given a URI of `https://example.com/person`.
The schema URI can be used to reference the schema from other schemas using the `$ref` keyword.
```json
{
- "$ref": "https://example.com/person.schema.json"
+ "$ref": "https://example.com/person"
}
```
diff --git a/content/06-Combining-Schemas/03-Valid-Against-allOf-the-Subschemas(AND)/code.ts b/content/06-Combining-Subschemas/03-Valid-Against-allOf-the-Subschemas(AND)/code.ts
similarity index 100%
rename from content/06-Combining-Schemas/03-Valid-Against-allOf-the-Subschemas(AND)/code.ts
rename to content/06-Combining-Subschemas/03-Valid-Against-allOf-the-Subschemas(AND)/code.ts
diff --git a/content/06-Combining-Schemas/03-Valid-Against-allOf-the-Subschemas(AND)/instructions.mdx b/content/06-Combining-Subschemas/03-Valid-Against-allOf-the-Subschemas(AND)/instructions.mdx
similarity index 89%
rename from content/06-Combining-Schemas/03-Valid-Against-allOf-the-Subschemas(AND)/instructions.mdx
rename to content/06-Combining-Subschemas/03-Valid-Against-allOf-the-Subschemas(AND)/instructions.mdx
index d157bc5..87d49c1 100644
--- a/content/06-Combining-Schemas/03-Valid-Against-allOf-the-Subschemas(AND)/instructions.mdx
+++ b/content/06-Combining-Subschemas/03-Valid-Against-allOf-the-Subschemas(AND)/instructions.mdx
@@ -1,7 +1,7 @@
---
title: Valid Against allOf the Subschemas (AND)
-description: Defining Subschemas with $defs and then referencing them with $ref
-keywords: $defs, $ref, JSON Schema, subschemas,
+description: "Define subschemas with $defs and reference them with $ref in JSON Schema to ensure an instance is valid against all of the subschemas."
+keywords: "$defs, $ref, JSON Schema, subschemas, allOf keyword, AND operation"
---
diff --git a/content/06-Combining-Schemas/04-Valid-Against-oneOf-the-Subschemas(XOR)/code.ts b/content/06-Combining-Subschemas/04-Valid-Against-oneOf-the-Subschemas(XOR)/code.ts
similarity index 100%
rename from content/06-Combining-Schemas/04-Valid-Against-oneOf-the-Subschemas(XOR)/code.ts
rename to content/06-Combining-Subschemas/04-Valid-Against-oneOf-the-Subschemas(XOR)/code.ts
diff --git a/content/06-Combining-Schemas/04-Valid-Against-oneOf-the-Subschemas(XOR)/instructions.mdx b/content/06-Combining-Subschemas/04-Valid-Against-oneOf-the-Subschemas(XOR)/instructions.mdx
similarity index 91%
rename from content/06-Combining-Schemas/04-Valid-Against-oneOf-the-Subschemas(XOR)/instructions.mdx
rename to content/06-Combining-Subschemas/04-Valid-Against-oneOf-the-Subschemas(XOR)/instructions.mdx
index 1c4f2c7..dc8e686 100644
--- a/content/06-Combining-Schemas/04-Valid-Against-oneOf-the-Subschemas(XOR)/instructions.mdx
+++ b/content/06-Combining-Subschemas/04-Valid-Against-oneOf-the-Subschemas(XOR)/instructions.mdx
@@ -1,7 +1,7 @@
---
title: "Valid Against oneOf the Subschemas (XOR)"
-description: "Define properties with oneOf keyword to apply conditional validation."
-keywords: "oneOf, properties, conditional validation"
+description: "Use oneOf keyword in JSON Schema to ensure an instance is valid against exactly one of the subschemas."
+keywords: "oneOf keyword, JSON Schema, conditional validation, properties, subschemas, XOR operation"
---
# Valid Against oneOf the Subschemas (XOR)
diff --git a/content/06-Combining-Schemas/05-Valid-Against-anyOf-the-Subschemas(OR)/code.ts b/content/06-Combining-Subschemas/05-Valid-Against-anyOf-the-Subschemas(OR)/code.ts
similarity index 100%
rename from content/06-Combining-Schemas/05-Valid-Against-anyOf-the-Subschemas(OR)/code.ts
rename to content/06-Combining-Subschemas/05-Valid-Against-anyOf-the-Subschemas(OR)/code.ts
diff --git a/content/06-Combining-Schemas/05-Valid-Against-anyOf-the-Subschemas(OR)/instructions.mdx b/content/06-Combining-Subschemas/05-Valid-Against-anyOf-the-Subschemas(OR)/instructions.mdx
similarity index 69%
rename from content/06-Combining-Schemas/05-Valid-Against-anyOf-the-Subschemas(OR)/instructions.mdx
rename to content/06-Combining-Subschemas/05-Valid-Against-anyOf-the-Subschemas(OR)/instructions.mdx
index afa23d2..a0b8ce5 100644
--- a/content/06-Combining-Schemas/05-Valid-Against-anyOf-the-Subschemas(OR)/instructions.mdx
+++ b/content/06-Combining-Subschemas/05-Valid-Against-anyOf-the-Subschemas(OR)/instructions.mdx
@@ -1,12 +1,12 @@
---
title: Valid Against anyOf the Subschemas (OR)
-description: Define properties with anyOf keyword to apply conditional validation.
-keywords: anyOf, properties, conditional validation
+description: "Define properties with anyOf keyword in JSON Schema to apply conditional validation using multiple subschemas."
+keywords: "anyOf keyword, JSON Schema, conditional validation, properties, subschemas"
---
# Valid Against anyOf the Subschemas (OR)
-`anyOf` [keyword](https://json-schema.org/learn/glossary#keyword) is used to define multiple [subschemas](https://json-schema.org/learn/glossary#subschema). If the [_instance_](https://json-schema.org/learn/glossary#instance) is valid against **any one** of the subschemas, the document is considered valid.
+`anyOf` [keyword](https://json-schema.org/learn/glossary#keyword) is used to define multiple [subschemas](https://json-schema.org/learn/glossary#subschema). If the [instance](https://json-schema.org/learn/glossary#instance) is valid against **any one** of the subschemas, the document is considered valid.
You can think of `anyOf` as an **OR** operation. If the instance is valid against **any one** of the subschemas, the document is considered valid.
@@ -47,8 +47,7 @@ Create a JSON schema that validates the following document.
```
-Modify the [schema](https://json-schema.org/learn/glossary#schema) given to you in the to ensure that the document is valid if
-- It has either `salary` or `hourlyRate` property.
-- It has both `employeeType` and `salary` properties.
-
+Modify the [schema](https://json-schema.org/learn/glossary#schema) given to you in the to ensure that the document is valid if:
+- It has either `salary` **or** `hourlyRate` property.
+- It has both `salary` and `hourlyRate` properties.
diff --git a/content/06-Combining-Schemas/06-inverting-validation-with-not/code.ts b/content/06-Combining-Subschemas/06-inverting-validation-with-not/code.ts
similarity index 100%
rename from content/06-Combining-Schemas/06-inverting-validation-with-not/code.ts
rename to content/06-Combining-Subschemas/06-inverting-validation-with-not/code.ts
diff --git a/content/06-Combining-Schemas/06-inverting-validation-with-not/instructions.mdx b/content/06-Combining-Subschemas/06-inverting-validation-with-not/instructions.mdx
similarity index 64%
rename from content/06-Combining-Schemas/06-inverting-validation-with-not/instructions.mdx
rename to content/06-Combining-Subschemas/06-inverting-validation-with-not/instructions.mdx
index c4452e3..f60e707 100644
--- a/content/06-Combining-Schemas/06-inverting-validation-with-not/instructions.mdx
+++ b/content/06-Combining-Subschemas/06-inverting-validation-with-not/instructions.mdx
@@ -1,13 +1,13 @@
---
title: Inverting Validation with not
-description: Invert the validation with the not keyword in JSON Schema.
-keywords: not, properties, conditional validation
+description: "Invert validation in JSON Schema using the not keyword to define conditional validation rules."
+keywords: "not keyword, JSON Schema, conditional validation, properties, instance, subschemas"
---
# Inverting Validation with not
-`not` [keyword](https://json-schema.org/learn/glossary#subschema) is used to invert the validation. If the [_instance_](https://json-schema.org/learn/glossary#instance) is **not** valid against the [subschemas](https://json-schema.org/learn/glossary#subschema), the document is considered valid.
+`not` [keyword](https://json-schema.org/learn/glossary#subschema) is used to invert the validation. If the [instance](https://json-schema.org/learn/glossary#instance) is **not** valid against the [subschemas](https://json-schema.org/learn/glossary#subschema), the document is considered valid.
```json
diff --git a/content/06-Combining-Schemas/07-Recursive-Schemas/code.ts b/content/06-Combining-Subschemas/07-Recursive-Schemas/code.ts
similarity index 100%
rename from content/06-Combining-Schemas/07-Recursive-Schemas/code.ts
rename to content/06-Combining-Subschemas/07-Recursive-Schemas/code.ts
diff --git a/content/06-Combining-Schemas/07-Recursive-Schemas/instructions.mdx b/content/06-Combining-Subschemas/07-Recursive-Schemas/instructions.mdx
similarity index 88%
rename from content/06-Combining-Schemas/07-Recursive-Schemas/instructions.mdx
rename to content/06-Combining-Subschemas/07-Recursive-Schemas/instructions.mdx
index 699178e..0da1b40 100644
--- a/content/06-Combining-Schemas/07-Recursive-Schemas/instructions.mdx
+++ b/content/06-Combining-Subschemas/07-Recursive-Schemas/instructions.mdx
@@ -1,7 +1,7 @@
---
title: Recursive Schemas
-description: Learn how to define recursive schemas in JSON Schema.
-keywords: defs, ref, recursive, schemas, JSON, JSON Schema
+description: "Learn how to define recursive schemas in JSON Schema using $ref and $defs keywords to model hierarchical and recursive relationships."
+keywords: "recursive schemas, JSON Schema, $ref, $defs, hierarchical data, recursive relationships"
---
# Recursive Schemas
diff --git a/content/06-Combining-Subschemas/index.mdx b/content/06-Combining-Subschemas/index.mdx
new file mode 100644
index 0000000..86e3fab
--- /dev/null
+++ b/content/06-Combining-Subschemas/index.mdx
@@ -0,0 +1,3 @@
+---
+title: Combining Subschemas
+---
\ No newline at end of file
diff --git a/content/07-Miscellaneous/01-Extending-Closed-Schemas-with-unevaluatedProperties/instructions.mdx b/content/07-Miscellaneous/01-Extending-Closed-Schemas-with-unevaluatedProperties/instructions.mdx
index e1561ba..36cb03c 100644
--- a/content/07-Miscellaneous/01-Extending-Closed-Schemas-with-unevaluatedProperties/instructions.mdx
+++ b/content/07-Miscellaneous/01-Extending-Closed-Schemas-with-unevaluatedProperties/instructions.mdx
@@ -1,7 +1,7 @@
---
title: Extending Closed Schemas with unevaluatedProperties
-description: Extending Closed Schemas in JSON Schema Objects using the unevaluatedProperties keyword
-keywords: extending closed schemas,unevaluatedProperties , JSON Schema, JSON Schema objects
+description: "Learn how to extend closed schemas in JSON Schema objects using the unevaluatedProperties keyword to allow additional properties, overcoming the limitations of additionalProperties in subschemas."
+keywords: "extending closed schemas, unevaluatedProperties, JSON Schema, JSON Schema objects, additionalProperties, subschemas, allOf, combining keywords"
---
@@ -60,5 +60,5 @@ The challenge we saw with `additionalProperties` can be solved using the `uneval
## Task
-You are give the same schema in the . Add `unevaluatedProperties` to the schema to allow the only `number` as an additional property.
+You are give the same schema in the . Add `unevaluatedProperties` to the schema to allow the only `number` as an additional property.
diff --git a/content/08-Annotating-JSON-Schemas/01-Title-and-Description/code.ts b/content/08-Annotating-JSON-Schemas/01-title-and-description/code.ts
similarity index 100%
rename from content/08-Annotating-JSON-Schemas/01-Title-and-Description/code.ts
rename to content/08-Annotating-JSON-Schemas/01-title-and-description/code.ts
diff --git a/content/08-Annotating-JSON-Schemas/01-Title-and-Description/instructions.mdx b/content/08-Annotating-JSON-Schemas/01-title-and-description/instructions.mdx
similarity index 81%
rename from content/08-Annotating-JSON-Schemas/01-Title-and-Description/instructions.mdx
rename to content/08-Annotating-JSON-Schemas/01-title-and-description/instructions.mdx
index 11c8d66..e3a0999 100644
--- a/content/08-Annotating-JSON-Schemas/01-Title-and-Description/instructions.mdx
+++ b/content/08-Annotating-JSON-Schemas/01-title-and-description/instructions.mdx
@@ -1,7 +1,7 @@
---
-title: Title and Description
-description: Learn how to add a title and description to your JSON Schema.
-keywords: JSON Schema, title, description, annotations
+title: title and description
+description: "Learn how to add a title and description to your JSON Schema to make it self-documenting and provide more information about the schema."
+keywords: "JSON Schema, title, description, annotations, self-documenting"
---
diff --git a/content/08-Annotating-JSON-Schemas/02-deprecated-readOnly-and-writeOnly/instructions.mdx b/content/08-Annotating-JSON-Schemas/02-deprecated-readOnly-and-writeOnly/instructions.mdx
index dd3f9ee..edf577b 100644
--- a/content/08-Annotating-JSON-Schemas/02-deprecated-readOnly-and-writeOnly/instructions.mdx
+++ b/content/08-Annotating-JSON-Schemas/02-deprecated-readOnly-and-writeOnly/instructions.mdx
@@ -1,7 +1,7 @@
---
title: deprecated, readOnly, and writeOnly
-description: Learn how to use the deprecated, readOnly, and writeOnly keywords in JSON Schema
-keywords: deprecated, readOnly, writeOnly, JSON Schema
+description: "Learn how to use the deprecated, readOnly, and writeOnly keywords in JSON Schema to indicate deprecated values, read-only properties, and write-only properties."
+keywords: "deprecated, readOnly, writeOnly, JSON Schema, deprecated values, read-only properties, write-only properties"
---
# Deprecated, readOnly, and writeOnly
diff --git a/content/08-Annotating-JSON-Schemas/03-comment-and-default/instructions.mdx b/content/08-Annotating-JSON-Schemas/03-comment-and-default/instructions.mdx
index 72cbf9f..496f5d7 100644
--- a/content/08-Annotating-JSON-Schemas/03-comment-and-default/instructions.mdx
+++ b/content/08-Annotating-JSON-Schemas/03-comment-and-default/instructions.mdx
@@ -1,7 +1,7 @@
---
title: comment and default
-description: Learn how to use the comment and default keywords in JSON Schema
-keywords: comment, default, JSON Schema
+description: "Learn how to use the comment and default keywords in JSON Schema to add comments and set default values for properties."
+keywords: "comment, default, JSON Schema, add comments, set default values"
---
# Comment
diff --git a/content/08-Annotating-JSON-Schemas/04-format-and-examples/instructions.mdx b/content/08-Annotating-JSON-Schemas/04-format-and-examples/instructions.mdx
index 46aeb96..c831650 100644
--- a/content/08-Annotating-JSON-Schemas/04-format-and-examples/instructions.mdx
+++ b/content/08-Annotating-JSON-Schemas/04-format-and-examples/instructions.mdx
@@ -1,7 +1,7 @@
---
title: format and examples
-description: Learn to use the examples and format keywords in JSON Schema
-keywords: examples, format, JSON Schema
+description: "Learn to use the examples and format keywords in JSON Schema, including date-time, email, hostname, IP address, and resource identifier formats."
+keywords: "examples, format, JSON Schema, date-time, email, hostname, IP address, resource identifier"
---
# Format
@@ -47,4 +47,4 @@ The `examples` keyword is used to provide an array of example values that are va
You are given a schema of the above JSON object in the .
- Add a `format` to the `email` property.
-- Add `example` to the `email` property.
+- Add `examples` to the `email` property.
diff --git a/lib/client-functions.ts b/lib/client-functions.ts
index 03fe1d0..cdb97b9 100644
--- a/lib/client-functions.ts
+++ b/lib/client-functions.ts
@@ -6,6 +6,8 @@ import {
import { OutputReducerAction } from "./reducers";
import { CodeFile, TestCaseResult } from "./types";
import { hyperjumpCheckAnnotations, hyperjumpValidate } from "./validators";
+import { sendGAEvent } from "@next/third-parties/google";
+import { contentManager } from "./contentManager";
export async function validateCode(
codeString: string,
@@ -58,6 +60,9 @@ export async function validateCode(
if (validationStatus === "valid") {
dispatchOutput({ type: "valid", payload: {} });
completeStep(chapterIndex, stepIndex);
+ sendGAEvent("event", "validation", {
+ validation_result: "passed",
+ });
} else {
const sortedResults = testCaseResults.sort((a, b) => {
if (a.passed === b.passed) {
@@ -69,6 +74,9 @@ export async function validateCode(
type: "invalid",
payload: { testCaseResults: sortedResults, totalTestCases },
});
+ sendGAEvent("event", "validation", {
+ validation_result: "failed",
+ });
}
} catch (e) {
if ((e as Error).message === "Invalid Schema") {
@@ -76,11 +84,17 @@ export async function validateCode(
type: "invalidSchema",
payload: { errors: e as InvalidSchemaError },
});
+ sendGAEvent("event", "validation", {
+ validation_result: "failed - invalid schema",
+ });
} else {
dispatchOutput({
type: "syntaxError",
payload: { errors: (e as Error).message },
});
+ sendGAEvent("event", "validation", {
+ validation_result: "failed - syntax error",
+ });
}
}
}
@@ -123,6 +137,18 @@ export function isChapterCompleted(chapterIndex: number, totalSteps: number) {
return true;
}
+export function isTheTourCompleted() {
+ const totalStepsForAllChapters =
+ contentManager.getNumberOfStepsFromAllChapters();
+ if (!localStorage.getItem("progress")) {
+ return false;
+ }
+ const completedSteps = Object.keys(
+ JSON.parse(localStorage.getItem("progress")!),
+ ).length;
+ return totalStepsForAllChapters === completedSteps;
+}
+
export function hasNestedProperty(obj: any, path: string) {
console.log(obj, path);
const keys = path.split(".");
@@ -142,3 +168,18 @@ export function hasNestedProperty(obj: any, path: string) {
// If we've made it through all the keys, the property exists
return true;
}
+export async function tryFormattingCode(
+ editorRef: any,
+ setCodeString: (code: string) => void,
+) {
+ try {
+ if (!editorRef.current) return;
+ const currentCode = editorRef.current.getValue();
+ JSON.parse(currentCode);
+ await editorRef.current.getAction("editor.action.formatDocument").run();
+ setCodeString(editorRef.current.getValue());
+ } catch (e) {
+ // If invalid JSON, do nothing
+ return;
+ }
+}
diff --git a/lib/contentManager.ts b/lib/contentManager.ts
index 04815af..a3d1239 100644
--- a/lib/contentManager.ts
+++ b/lib/contentManager.ts
@@ -101,6 +101,16 @@ export default class ContentManager {
public getTotalSteps(chapterIndex: number) {
return this.getOutline()[chapterIndex].steps.length;
}
+
+ public getNumberOfStepsFromAllChapters() {
+ let totalSteps = 0;
+ let totalChapters = this.getTotalChapters();
+ for (let i = 0; i < totalChapters; i++) {
+ totalSteps += this.getTotalSteps(i);
+ }
+ return totalSteps;
+ }
+
public getInstructionsFilePath(urlPath: string) {
return `${contentFolderName}/${urlPath}/${instructionsFileName}`;
}
diff --git a/lib/contentVariables.ts b/lib/contentVariables.ts
index fd14e58..7842acf 100644
--- a/lib/contentVariables.ts
+++ b/lib/contentVariables.ts
@@ -1,6 +1,9 @@
// variables to generate the outline.json and iterate through the content
export const contentFolderPath: string = "./content";
+
export const contentFolderName: string = contentFolderPath.replace("./", "");
export const indexFileName = "index.mdx";
export const instructionsFileName = "instructions.mdx";
+export const googleSheetAPIRoute =
+ "https://script.google.com/macros/s/AKfycbxjH778iyBlZ8_oY946fTLW6H0HcfByaNk0collEgIwERwnpeErkaYEuKjWxAQ2qg/exec";
diff --git a/lib/progressSaving.ts b/lib/progressSaving.ts
new file mode 100644
index 0000000..6f139a7
--- /dev/null
+++ b/lib/progressSaving.ts
@@ -0,0 +1,17 @@
+export function setCheckpoint(path: string) {
+ if (typeof window === "undefined") return false;
+ const checkpoint = path;
+
+ localStorage.setItem("checkPoint", JSON.stringify(checkpoint));
+}
+
+export function getCheckPoint() {
+ if (typeof window === "undefined") return false;
+
+ const checkpoint = localStorage.getItem("checkPoint");
+
+ if (checkpoint) {
+ return JSON.parse(checkpoint);
+ }
+ return null;
+}
diff --git a/lib/stores.ts b/lib/stores.ts
index b6f6e2b..e141b60 100644
--- a/lib/stores.ts
+++ b/lib/stores.ts
@@ -13,3 +13,57 @@ export const useEditorStore = create()((set) => ({
setEditor: (editor) => set({ editor }),
setMonaco: (monaco) => set({ monaco }),
}));
+
+type UserSolutionsByLesson = {
+ [key: string]: string | null;
+};
+
+type UserSolutionStore = {
+ userSolutionsByLesson: UserSolutionsByLesson;
+ saveUserSolutionForLesson: (
+ chapter: number,
+ lesson: number,
+ code: string,
+ ) => void;
+ getSavedUserSolutionByLesson: (
+ chapter: number,
+ lesson: number,
+ ) => string | null;
+ clearAllCode: () => void;
+};
+
+export const useUserSolutionStore = create()((set, get) => ({
+ userSolutionsByLesson:
+ typeof window !== "undefined"
+ ? JSON.parse(localStorage.getItem("codeData") ?? "{}")
+ : {},
+
+ saveUserSolutionForLesson: (
+ chapter: number,
+ lesson: number,
+ code: string,
+ ) => {
+ const key = `${chapter}.${lesson}`;
+ set((state) => {
+ const NewUserSolutionsByLesson = {
+ ...state.userSolutionsByLesson,
+ [key]: code,
+ };
+ localStorage.setItem(
+ "codeData",
+ JSON.stringify(NewUserSolutionsByLesson),
+ );
+ return { userSolutionsByLesson: NewUserSolutionsByLesson };
+ });
+ },
+
+ getSavedUserSolutionByLesson: (chapter: number, lesson: number) => {
+ const key = `${chapter}.${lesson}`;
+ return get().userSolutionsByLesson[key] ?? null;
+ },
+
+ clearAllCode: () => {
+ localStorage.removeItem("codeData");
+ set({ userSolutionsByLesson: {} });
+ },
+}));
diff --git a/package.json b/package.json
index 62bc7c1..74fa25b 100644
--- a/package.json
+++ b/package.json
@@ -26,6 +26,7 @@
"@mdx-js/react": "^3.0.1",
"@monaco-editor/react": "^4.6.0",
"@next/mdx": "^14.2.3",
+ "@next/third-parties": "^14.2.5",
"@types/mdx": "^2.0.13",
"ajv": "^8.13.0",
"better-ajv-errors": "^1.2.0",
@@ -34,7 +35,7 @@
"framer-motion": "^11.1.9",
"geist": "^1.3.0",
"gray-matter": "^4.0.3",
- "next": "^14.2.5",
+ "next": "^14.2.10",
"next-mdx-remote": "^4.4.1",
"prettier": "^3.3.3",
"react": "^18",
@@ -62,5 +63,6 @@
"nodemon": "^3.1.0",
"typescript": "^5",
"vitest": "^1.6.0"
- }
+ },
+ "packageManager": "pnpm@9.7.1+sha512.faf344af2d6ca65c4c5c8c2224ea77a81a5e8859cbc4e06b1511ddce2f0151512431dd19e6aff31f2c6a8f5f2aced9bd2273e1fed7dd4de1868984059d2c4247"
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 28c52e5..6ad8a83 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -13,7 +13,7 @@ importers:
version: 2.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/next-js':
specifier: ^2.2.0
- version: 2.2.0(@chakra-ui/react@2.8.2(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(framer-motion@11.3.19(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(next@14.2.5(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)
+ version: 2.2.0(@chakra-ui/react@2.8.2(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(framer-motion@11.3.19(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(next@14.2.10(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/react':
specifier: ^2.8.2
version: 2.8.2(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(framer-motion@11.3.19(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -44,6 +44,9 @@ importers:
'@next/mdx':
specifier: ^14.2.3
version: 14.2.5(@mdx-js/loader@3.0.1(webpack@5.93.0))(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))
+ '@next/third-parties':
+ specifier: ^14.2.5
+ version: 14.2.5(next@14.2.10(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@types/mdx':
specifier: ^2.0.13
version: 2.0.13
@@ -64,13 +67,13 @@ importers:
version: 11.3.19(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
geist:
specifier: ^1.3.0
- version: 1.3.1(next@14.2.5(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ version: 1.3.1(next@14.2.10(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
gray-matter:
specifier: ^4.0.3
version: 4.0.3
next:
- specifier: ^14.2.5
- version: 14.2.5(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ specifier: ^14.2.10
+ version: 14.2.10(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
next-mdx-remote:
specifier: ^4.4.1
version: 4.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -1159,8 +1162,8 @@ packages:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
- '@next/env@14.2.5':
- resolution: {integrity: sha512-/zZGkrTOsraVfYjGP8uM0p6r0BDT6xWpkjdVbcz66PJVSpwXX3yNiRycxAuDfBKGWBrZBXRuK/YVlkNgxHGwmA==}
+ '@next/env@14.2.10':
+ resolution: {integrity: sha512-dZIu93Bf5LUtluBXIv4woQw2cZVZ2DJTjax5/5DOs3lzEOeKLy7GxRSr4caK9/SCPdaW6bCgpye6+n4Dh9oJPw==}
'@next/eslint-plugin-next@14.2.3':
resolution: {integrity: sha512-L3oDricIIjgj1AVnRdRor21gI7mShlSwU/1ZGHmqM3LzHhXXhdkrfeNY5zif25Bi5Dd7fiJHsbhoZCHfXYvlAw==}
@@ -1176,60 +1179,66 @@ packages:
'@mdx-js/react':
optional: true
- '@next/swc-darwin-arm64@14.2.5':
- resolution: {integrity: sha512-/9zVxJ+K9lrzSGli1///ujyRfon/ZneeZ+v4ptpiPoOU+GKZnm8Wj8ELWU1Pm7GHltYRBklmXMTUqM/DqQ99FQ==}
+ '@next/swc-darwin-arm64@14.2.10':
+ resolution: {integrity: sha512-V3z10NV+cvMAfxQUMhKgfQnPbjw+Ew3cnr64b0lr8MDiBJs3eLnM6RpGC46nhfMZsiXgQngCJKWGTC/yDcgrDQ==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [darwin]
- '@next/swc-darwin-x64@14.2.5':
- resolution: {integrity: sha512-vXHOPCwfDe9qLDuq7U1OYM2wUY+KQ4Ex6ozwsKxp26BlJ6XXbHleOUldenM67JRyBfVjv371oneEvYd3H2gNSA==}
+ '@next/swc-darwin-x64@14.2.10':
+ resolution: {integrity: sha512-Y0TC+FXbFUQ2MQgimJ/7Ina2mXIKhE7F+GUe1SgnzRmwFY3hX2z8nyVCxE82I2RicspdkZnSWMn4oTjIKz4uzA==}
engines: {node: '>= 10'}
cpu: [x64]
os: [darwin]
- '@next/swc-linux-arm64-gnu@14.2.5':
- resolution: {integrity: sha512-vlhB8wI+lj8q1ExFW8lbWutA4M2ZazQNvMWuEDqZcuJJc78iUnLdPPunBPX8rC4IgT6lIx/adB+Cwrl99MzNaA==}
+ '@next/swc-linux-arm64-gnu@14.2.10':
+ resolution: {integrity: sha512-ZfQ7yOy5zyskSj9rFpa0Yd7gkrBnJTkYVSya95hX3zeBG9E55Z6OTNPn1j2BTFWvOVVj65C3T+qsjOyVI9DQpA==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
- '@next/swc-linux-arm64-musl@14.2.5':
- resolution: {integrity: sha512-NpDB9NUR2t0hXzJJwQSGu1IAOYybsfeB+LxpGsXrRIb7QOrYmidJz3shzY8cM6+rO4Aojuef0N/PEaX18pi9OA==}
+ '@next/swc-linux-arm64-musl@14.2.10':
+ resolution: {integrity: sha512-n2i5o3y2jpBfXFRxDREr342BGIQCJbdAUi/K4q6Env3aSx8erM9VuKXHw5KNROK9ejFSPf0LhoSkU/ZiNdacpQ==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
- '@next/swc-linux-x64-gnu@14.2.5':
- resolution: {integrity: sha512-8XFikMSxWleYNryWIjiCX+gU201YS+erTUidKdyOVYi5qUQo/gRxv/3N1oZFCgqpesN6FPeqGM72Zve+nReVXQ==}
+ '@next/swc-linux-x64-gnu@14.2.10':
+ resolution: {integrity: sha512-GXvajAWh2woTT0GKEDlkVhFNxhJS/XdDmrVHrPOA83pLzlGPQnixqxD8u3bBB9oATBKB//5e4vpACnx5Vaxdqg==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
- '@next/swc-linux-x64-musl@14.2.5':
- resolution: {integrity: sha512-6QLwi7RaYiQDcRDSU/os40r5o06b5ue7Jsk5JgdRBGGp8l37RZEh9JsLSM8QF0YDsgcosSeHjglgqi25+m04IQ==}
+ '@next/swc-linux-x64-musl@14.2.10':
+ resolution: {integrity: sha512-opFFN5B0SnO+HTz4Wq4HaylXGFV+iHrVxd3YvREUX9K+xfc4ePbRrxqOuPOFjtSuiVouwe6uLeDtabjEIbkmDA==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
- '@next/swc-win32-arm64-msvc@14.2.5':
- resolution: {integrity: sha512-1GpG2VhbspO+aYoMOQPQiqc/tG3LzmsdBH0LhnDS3JrtDx2QmzXe0B6mSZZiN3Bq7IOMXxv1nlsjzoS1+9mzZw==}
+ '@next/swc-win32-arm64-msvc@14.2.10':
+ resolution: {integrity: sha512-9NUzZuR8WiXTvv+EiU/MXdcQ1XUvFixbLIMNQiVHuzs7ZIFrJDLJDaOF1KaqttoTujpcxljM/RNAOmw1GhPPQQ==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [win32]
- '@next/swc-win32-ia32-msvc@14.2.5':
- resolution: {integrity: sha512-Igh9ZlxwvCDsu6438FXlQTHlRno4gFpJzqPjSIBZooD22tKeI4fE/YMRoHVJHmrQ2P5YL1DoZ0qaOKkbeFWeMg==}
+ '@next/swc-win32-ia32-msvc@14.2.10':
+ resolution: {integrity: sha512-fr3aEbSd1GeW3YUMBkWAu4hcdjZ6g4NBl1uku4gAn661tcxd1bHs1THWYzdsbTRLcCKLjrDZlNp6j2HTfrw+Bg==}
engines: {node: '>= 10'}
cpu: [ia32]
os: [win32]
- '@next/swc-win32-x64-msvc@14.2.5':
- resolution: {integrity: sha512-tEQ7oinq1/CjSG9uSTerca3v4AZ+dFa+4Yu6ihaG8Ud8ddqLQgFGcnwYls13H5X5CPDPZJdYxyeMui6muOLd4g==}
+ '@next/swc-win32-x64-msvc@14.2.10':
+ resolution: {integrity: sha512-UjeVoRGKNL2zfbcQ6fscmgjBAS/inHBh63mjIlfPg/NG8Yn2ztqylXt5qilYb6hoHIwaU2ogHknHWWmahJjgZQ==}
engines: {node: '>= 10'}
cpu: [x64]
os: [win32]
+ '@next/third-parties@14.2.5':
+ resolution: {integrity: sha512-PDRJm8RZ3rnGNporHKjcdCeZqoW8iJ5uP0clo1Z08TqJiQzuntJ66zrGYCJyqTakx62UJNOp73YsQCFo6kbYYg==}
+ peerDependencies:
+ next: ^13.0.0 || ^14.0.0
+ react: ^18.2.0
+
'@nodelib/fs.scandir@2.1.5':
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
engines: {node: '>= 8'}
@@ -1249,83 +1258,93 @@ packages:
'@popperjs/core@2.11.8':
resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==}
- '@rollup/rollup-android-arm-eabi@4.19.1':
- resolution: {integrity: sha512-XzqSg714++M+FXhHfXpS1tDnNZNpgxxuGZWlRG/jSj+VEPmZ0yg6jV4E0AL3uyBKxO8mO3xtOsP5mQ+XLfrlww==}
+ '@rollup/rollup-android-arm-eabi@4.27.4':
+ resolution: {integrity: sha512-2Y3JT6f5MrQkICUyRVCw4oa0sutfAsgaSsb0Lmmy1Wi2y7X5vT9Euqw4gOsCyy0YfKURBg35nhUKZS4mDcfULw==}
cpu: [arm]
os: [android]
- '@rollup/rollup-android-arm64@4.19.1':
- resolution: {integrity: sha512-thFUbkHteM20BGShD6P08aungq4irbIZKUNbG70LN8RkO7YztcGPiKTTGZS7Kw+x5h8hOXs0i4OaHwFxlpQN6A==}
+ '@rollup/rollup-android-arm64@4.27.4':
+ resolution: {integrity: sha512-wzKRQXISyi9UdCVRqEd0H4cMpzvHYt1f/C3CoIjES6cG++RHKhrBj2+29nPF0IB5kpy9MS71vs07fvrNGAl/iA==}
cpu: [arm64]
os: [android]
- '@rollup/rollup-darwin-arm64@4.19.1':
- resolution: {integrity: sha512-8o6eqeFZzVLia2hKPUZk4jdE3zW7LCcZr+MD18tXkgBBid3lssGVAYuox8x6YHoEPDdDa9ixTaStcmx88lio5Q==}
+ '@rollup/rollup-darwin-arm64@4.27.4':
+ resolution: {integrity: sha512-PlNiRQapift4LNS8DPUHuDX/IdXiLjf8mc5vdEmUR0fF/pyy2qWwzdLjB+iZquGr8LuN4LnUoSEvKRwjSVYz3Q==}
cpu: [arm64]
os: [darwin]
- '@rollup/rollup-darwin-x64@4.19.1':
- resolution: {integrity: sha512-4T42heKsnbjkn7ovYiAdDVRRWZLU9Kmhdt6HafZxFcUdpjlBlxj4wDrt1yFWLk7G4+E+8p2C9tcmSu0KA6auGA==}
+ '@rollup/rollup-darwin-x64@4.27.4':
+ resolution: {integrity: sha512-o9bH2dbdgBDJaXWJCDTNDYa171ACUdzpxSZt+u/AAeQ20Nk5x+IhA+zsGmrQtpkLiumRJEYef68gcpn2ooXhSQ==}
cpu: [x64]
os: [darwin]
- '@rollup/rollup-linux-arm-gnueabihf@4.19.1':
- resolution: {integrity: sha512-MXg1xp+e5GhZ3Vit1gGEyoC+dyQUBy2JgVQ+3hUrD9wZMkUw/ywgkpK7oZgnB6kPpGrxJ41clkPPnsknuD6M2Q==}
+ '@rollup/rollup-freebsd-arm64@4.27.4':
+ resolution: {integrity: sha512-NBI2/i2hT9Q+HySSHTBh52da7isru4aAAo6qC3I7QFVsuhxi2gM8t/EI9EVcILiHLj1vfi+VGGPaLOUENn7pmw==}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@rollup/rollup-freebsd-x64@4.27.4':
+ resolution: {integrity: sha512-wYcC5ycW2zvqtDYrE7deary2P2UFmSh85PUpAx+dwTCO9uw3sgzD6Gv9n5X4vLaQKsrfTSZZ7Z7uynQozPVvWA==}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.27.4':
+ resolution: {integrity: sha512-9OwUnK/xKw6DyRlgx8UizeqRFOfi9mf5TYCw1uolDaJSbUmBxP85DE6T4ouCMoN6pXw8ZoTeZCSEfSaYo+/s1w==}
cpu: [arm]
os: [linux]
- '@rollup/rollup-linux-arm-musleabihf@4.19.1':
- resolution: {integrity: sha512-DZNLwIY4ftPSRVkJEaxYkq7u2zel7aah57HESuNkUnz+3bZHxwkCUkrfS2IWC1sxK6F2QNIR0Qr/YXw7nkF3Pw==}
+ '@rollup/rollup-linux-arm-musleabihf@4.27.4':
+ resolution: {integrity: sha512-Vgdo4fpuphS9V24WOV+KwkCVJ72u7idTgQaBoLRD0UxBAWTF9GWurJO9YD9yh00BzbkhpeXtm6na+MvJU7Z73A==}
cpu: [arm]
os: [linux]
- '@rollup/rollup-linux-arm64-gnu@4.19.1':
- resolution: {integrity: sha512-C7evongnjyxdngSDRRSQv5GvyfISizgtk9RM+z2biV5kY6S/NF/wta7K+DanmktC5DkuaJQgoKGf7KUDmA7RUw==}
+ '@rollup/rollup-linux-arm64-gnu@4.27.4':
+ resolution: {integrity: sha512-pleyNgyd1kkBkw2kOqlBx+0atfIIkkExOTiifoODo6qKDSpnc6WzUY5RhHdmTdIJXBdSnh6JknnYTtmQyobrVg==}
cpu: [arm64]
os: [linux]
- '@rollup/rollup-linux-arm64-musl@4.19.1':
- resolution: {integrity: sha512-89tFWqxfxLLHkAthAcrTs9etAoBFRduNfWdl2xUs/yLV+7XDrJ5yuXMHptNqf1Zw0UCA3cAutkAiAokYCkaPtw==}
+ '@rollup/rollup-linux-arm64-musl@4.27.4':
+ resolution: {integrity: sha512-caluiUXvUuVyCHr5DxL8ohaaFFzPGmgmMvwmqAITMpV/Q+tPoaHZ/PWa3t8B2WyoRcIIuu1hkaW5KkeTDNSnMA==}
cpu: [arm64]
os: [linux]
- '@rollup/rollup-linux-powerpc64le-gnu@4.19.1':
- resolution: {integrity: sha512-PromGeV50sq+YfaisG8W3fd+Cl6mnOOiNv2qKKqKCpiiEke2KiKVyDqG/Mb9GWKbYMHj5a01fq/qlUR28PFhCQ==}
+ '@rollup/rollup-linux-powerpc64le-gnu@4.27.4':
+ resolution: {integrity: sha512-FScrpHrO60hARyHh7s1zHE97u0KlT/RECzCKAdmI+LEoC1eDh/RDji9JgFqyO+wPDb86Oa/sXkily1+oi4FzJQ==}
cpu: [ppc64]
os: [linux]
- '@rollup/rollup-linux-riscv64-gnu@4.19.1':
- resolution: {integrity: sha512-/1BmHYh+iz0cNCP0oHCuF8CSiNj0JOGf0jRlSo3L/FAyZyG2rGBuKpkZVH9YF+x58r1jgWxvm1aRg3DHrLDt6A==}
+ '@rollup/rollup-linux-riscv64-gnu@4.27.4':
+ resolution: {integrity: sha512-qyyprhyGb7+RBfMPeww9FlHwKkCXdKHeGgSqmIXw9VSUtvyFZ6WZRtnxgbuz76FK7LyoN8t/eINRbPUcvXB5fw==}
cpu: [riscv64]
os: [linux]
- '@rollup/rollup-linux-s390x-gnu@4.19.1':
- resolution: {integrity: sha512-0cYP5rGkQWRZKy9/HtsWVStLXzCF3cCBTRI+qRL8Z+wkYlqN7zrSYm6FuY5Kd5ysS5aH0q5lVgb/WbG4jqXN1Q==}
+ '@rollup/rollup-linux-s390x-gnu@4.27.4':
+ resolution: {integrity: sha512-PFz+y2kb6tbh7m3A7nA9++eInGcDVZUACulf/KzDtovvdTizHpZaJty7Gp0lFwSQcrnebHOqxF1MaKZd7psVRg==}
cpu: [s390x]
os: [linux]
- '@rollup/rollup-linux-x64-gnu@4.19.1':
- resolution: {integrity: sha512-XUXeI9eM8rMP8aGvii/aOOiMvTs7xlCosq9xCjcqI9+5hBxtjDpD+7Abm1ZhVIFE1J2h2VIg0t2DX/gjespC2Q==}
+ '@rollup/rollup-linux-x64-gnu@4.27.4':
+ resolution: {integrity: sha512-Ni8mMtfo+o/G7DVtweXXV/Ol2TFf63KYjTtoZ5f078AUgJTmaIJnj4JFU7TK/9SVWTaSJGxPi5zMDgK4w+Ez7Q==}
cpu: [x64]
os: [linux]
- '@rollup/rollup-linux-x64-musl@4.19.1':
- resolution: {integrity: sha512-V7cBw/cKXMfEVhpSvVZhC+iGifD6U1zJ4tbibjjN+Xi3blSXaj/rJynAkCFFQfoG6VZrAiP7uGVzL440Q6Me2Q==}
+ '@rollup/rollup-linux-x64-musl@4.27.4':
+ resolution: {integrity: sha512-5AeeAF1PB9TUzD+3cROzFTnAJAcVUGLuR8ng0E0WXGkYhp6RD6L+6szYVX+64Rs0r72019KHZS1ka1q+zU/wUw==}
cpu: [x64]
os: [linux]
- '@rollup/rollup-win32-arm64-msvc@4.19.1':
- resolution: {integrity: sha512-88brja2vldW/76jWATlBqHEoGjJLRnP0WOEKAUbMcXaAZnemNhlAHSyj4jIwMoP2T750LE9lblvD4e2jXleZsA==}
+ '@rollup/rollup-win32-arm64-msvc@4.27.4':
+ resolution: {integrity: sha512-yOpVsA4K5qVwu2CaS3hHxluWIK5HQTjNV4tWjQXluMiiiu4pJj4BN98CvxohNCpcjMeTXk/ZMJBRbgRg8HBB6A==}
cpu: [arm64]
os: [win32]
- '@rollup/rollup-win32-ia32-msvc@4.19.1':
- resolution: {integrity: sha512-LdxxcqRVSXi6k6JUrTah1rHuaupoeuiv38du8Mt4r4IPer3kwlTo+RuvfE8KzZ/tL6BhaPlzJ3835i6CxrFIRQ==}
+ '@rollup/rollup-win32-ia32-msvc@4.27.4':
+ resolution: {integrity: sha512-KtwEJOaHAVJlxV92rNYiG9JQwQAdhBlrjNRp7P9L8Cb4Rer3in+0A+IPhJC9y68WAi9H0sX4AiG2NTsVlmqJeQ==}
cpu: [ia32]
os: [win32]
- '@rollup/rollup-win32-x64-msvc@4.19.1':
- resolution: {integrity: sha512-2bIrL28PcK3YCqD9anGxDxamxdiJAxA+l7fWIwM5o8UqNy1t3d1NdAweO2XhA0KTDJ5aH1FsuiT5+7VhtHliXg==}
+ '@rollup/rollup-win32-x64-msvc@4.27.4':
+ resolution: {integrity: sha512-3j4jx1TppORdTAoBJRd+/wJRGCPC0ETWkXOecJ6PPZLj6SptXkrXcNqdj0oclbKML6FkQltdz7bBA3rUSirZug==}
cpu: [x64]
os: [win32]
@@ -1389,6 +1408,9 @@ packages:
'@types/estree@1.0.5':
resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
+ '@types/estree@1.0.6':
+ resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
+
'@types/hast@2.3.10':
resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==}
@@ -1887,8 +1909,8 @@ packages:
resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==}
engines: {node: '>=10'}
- cross-spawn@7.0.3:
- resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
+ cross-spawn@7.0.6:
+ resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
engines: {node: '>= 8'}
css-box-model@1.2.1:
@@ -2171,6 +2193,7 @@ packages:
eslint@8.57.0:
resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options.
hasBin: true
espree@9.6.1:
@@ -3131,8 +3154,8 @@ packages:
micromark@4.0.0:
resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==}
- micromatch@4.0.7:
- resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==}
+ micromatch@4.0.8:
+ resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
engines: {node: '>=8.6'}
mime-db@1.52.0:
@@ -3199,8 +3222,8 @@ packages:
react: '>=16.x <=18.x'
react-dom: '>=16.x <=18.x'
- next@14.2.5:
- resolution: {integrity: sha512-0f8aRfBVL+mpzfBjYfQuLWh2WyAwtJXCRfkPF4UJ5qd2YwrHczsrSzXU4tRMV0OAxR8ZJZWPFn6uhSC56UTsLA==}
+ next@14.2.10:
+ resolution: {integrity: sha512-sDDExXnh33cY3RkS9JuFEKaS4HmlWmDKP1VJioucCG6z5KuA008DPsDZOzi8UfqEk3Ii+2NCQSJrfbEWtZZfww==}
engines: {node: '>=18.17.0'}
hasBin: true
peerDependencies:
@@ -3580,8 +3603,8 @@ packages:
deprecated: Rimraf versions prior to v4 are no longer supported
hasBin: true
- rollup@4.19.1:
- resolution: {integrity: sha512-K5vziVlg7hTpYfFBI+91zHBEMo6jafYXpkMlqZjg7/zhIG9iHqazBf4xz9AVdjS9BruRn280ROqLI7G3OFRIlw==}
+ rollup@4.27.4:
+ resolution: {integrity: sha512-RLKxqHEMjh/RGLsDxAEsaLO3mWgyoU6x9w6n1ikAzet4B3gI2/3yP6PWY2p9QzRTh6MfEIXB3MwsOY0Iv3vNrw==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
@@ -3866,6 +3889,9 @@ packages:
text-table@0.2.0:
resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
+ third-party-capital@1.0.20:
+ resolution: {integrity: sha512-oB7yIimd8SuGptespDAZnNkzIz+NWaJCu2RMsbs4Wmp9zSDUM8Nhi3s2OOcqYuv3mN4hitXc8DVx+LyUmbUDiA==}
+
tiny-invariant@1.3.3:
resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==}
@@ -4695,12 +4721,12 @@ snapshots:
transitivePeerDependencies:
- '@types/react'
- '@chakra-ui/next-js@2.2.0(@chakra-ui/react@2.8.2(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(framer-motion@11.3.19(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(next@14.2.5(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)':
+ '@chakra-ui/next-js@2.2.0(@chakra-ui/react@2.8.2(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(framer-motion@11.3.19(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(next@14.2.10(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)':
dependencies:
'@chakra-ui/react': 2.8.2(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(framer-motion@11.3.19(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@emotion/cache': 11.13.1
'@emotion/react': 11.13.0(@types/react@18.3.3)(react@18.3.1)
- next: 14.2.5(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ next: 14.2.10(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react: 18.3.1
'@chakra-ui/number-input@2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.0(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1))(react@18.3.1)':
@@ -5570,7 +5596,7 @@ snapshots:
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
- '@next/env@14.2.5': {}
+ '@next/env@14.2.10': {}
'@next/eslint-plugin-next@14.2.3':
dependencies:
@@ -5583,33 +5609,39 @@ snapshots:
'@mdx-js/loader': 3.0.1(webpack@5.93.0)
'@mdx-js/react': 3.0.1(@types/react@18.3.3)(react@18.3.1)
- '@next/swc-darwin-arm64@14.2.5':
+ '@next/swc-darwin-arm64@14.2.10':
optional: true
- '@next/swc-darwin-x64@14.2.5':
+ '@next/swc-darwin-x64@14.2.10':
optional: true
- '@next/swc-linux-arm64-gnu@14.2.5':
+ '@next/swc-linux-arm64-gnu@14.2.10':
optional: true
- '@next/swc-linux-arm64-musl@14.2.5':
+ '@next/swc-linux-arm64-musl@14.2.10':
optional: true
- '@next/swc-linux-x64-gnu@14.2.5':
+ '@next/swc-linux-x64-gnu@14.2.10':
optional: true
- '@next/swc-linux-x64-musl@14.2.5':
+ '@next/swc-linux-x64-musl@14.2.10':
optional: true
- '@next/swc-win32-arm64-msvc@14.2.5':
+ '@next/swc-win32-arm64-msvc@14.2.10':
optional: true
- '@next/swc-win32-ia32-msvc@14.2.5':
+ '@next/swc-win32-ia32-msvc@14.2.10':
optional: true
- '@next/swc-win32-x64-msvc@14.2.5':
+ '@next/swc-win32-x64-msvc@14.2.10':
optional: true
+ '@next/third-parties@14.2.5(next@14.2.10(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ next: 14.2.10(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ third-party-capital: 1.0.20
+
'@nodelib/fs.scandir@2.1.5':
dependencies:
'@nodelib/fs.stat': 2.0.5
@@ -5627,52 +5659,58 @@ snapshots:
'@popperjs/core@2.11.8': {}
- '@rollup/rollup-android-arm-eabi@4.19.1':
+ '@rollup/rollup-android-arm-eabi@4.27.4':
+ optional: true
+
+ '@rollup/rollup-android-arm64@4.27.4':
+ optional: true
+
+ '@rollup/rollup-darwin-arm64@4.27.4':
optional: true
- '@rollup/rollup-android-arm64@4.19.1':
+ '@rollup/rollup-darwin-x64@4.27.4':
optional: true
- '@rollup/rollup-darwin-arm64@4.19.1':
+ '@rollup/rollup-freebsd-arm64@4.27.4':
optional: true
- '@rollup/rollup-darwin-x64@4.19.1':
+ '@rollup/rollup-freebsd-x64@4.27.4':
optional: true
- '@rollup/rollup-linux-arm-gnueabihf@4.19.1':
+ '@rollup/rollup-linux-arm-gnueabihf@4.27.4':
optional: true
- '@rollup/rollup-linux-arm-musleabihf@4.19.1':
+ '@rollup/rollup-linux-arm-musleabihf@4.27.4':
optional: true
- '@rollup/rollup-linux-arm64-gnu@4.19.1':
+ '@rollup/rollup-linux-arm64-gnu@4.27.4':
optional: true
- '@rollup/rollup-linux-arm64-musl@4.19.1':
+ '@rollup/rollup-linux-arm64-musl@4.27.4':
optional: true
- '@rollup/rollup-linux-powerpc64le-gnu@4.19.1':
+ '@rollup/rollup-linux-powerpc64le-gnu@4.27.4':
optional: true
- '@rollup/rollup-linux-riscv64-gnu@4.19.1':
+ '@rollup/rollup-linux-riscv64-gnu@4.27.4':
optional: true
- '@rollup/rollup-linux-s390x-gnu@4.19.1':
+ '@rollup/rollup-linux-s390x-gnu@4.27.4':
optional: true
- '@rollup/rollup-linux-x64-gnu@4.19.1':
+ '@rollup/rollup-linux-x64-gnu@4.27.4':
optional: true
- '@rollup/rollup-linux-x64-musl@4.19.1':
+ '@rollup/rollup-linux-x64-musl@4.27.4':
optional: true
- '@rollup/rollup-win32-arm64-msvc@4.19.1':
+ '@rollup/rollup-win32-arm64-msvc@4.27.4':
optional: true
- '@rollup/rollup-win32-ia32-msvc@4.19.1':
+ '@rollup/rollup-win32-ia32-msvc@4.27.4':
optional: true
- '@rollup/rollup-win32-x64-msvc@4.19.1':
+ '@rollup/rollup-win32-x64-msvc@4.27.4':
optional: true
'@rushstack/eslint-patch@1.10.4': {}
@@ -5741,11 +5779,11 @@ snapshots:
'@types/eslint-scope@3.7.7':
dependencies:
'@types/eslint': 9.6.0
- '@types/estree': 1.0.5
+ '@types/estree': 1.0.6
'@types/eslint@9.6.0':
dependencies:
- '@types/estree': 1.0.5
+ '@types/estree': 1.0.6
'@types/json-schema': 7.0.15
'@types/estree-jsx@1.0.5':
@@ -5754,6 +5792,8 @@ snapshots:
'@types/estree@1.0.5': {}
+ '@types/estree@1.0.6': {}
+
'@types/hast@2.3.10':
dependencies:
'@types/unist': 2.0.10
@@ -6343,7 +6383,7 @@ snapshots:
path-type: 4.0.0
yaml: 1.10.2
- cross-spawn@7.0.3:
+ cross-spawn@7.0.6:
dependencies:
path-key: 3.1.1
shebang-command: 2.0.0
@@ -6783,7 +6823,7 @@ snapshots:
'@ungap/structured-clone': 1.2.0
ajv: 6.12.6
chalk: 4.1.2
- cross-spawn: 7.0.3
+ cross-spawn: 7.0.6
debug: 4.3.6(supports-color@5.5.0)
doctrine: 3.0.0
escape-string-regexp: 4.0.0
@@ -6895,7 +6935,7 @@ snapshots:
execa@8.0.1:
dependencies:
- cross-spawn: 7.0.3
+ cross-spawn: 7.0.6
get-stream: 8.0.1
human-signals: 5.0.0
is-stream: 3.0.0
@@ -6919,7 +6959,7 @@ snapshots:
'@nodelib/fs.walk': 1.2.8
glob-parent: 5.1.2
merge2: 1.4.1
- micromatch: 4.0.7
+ micromatch: 4.0.8
fast-json-stable-stringify@2.1.0: {}
@@ -6972,7 +7012,7 @@ snapshots:
foreground-child@3.2.1:
dependencies:
- cross-spawn: 7.0.3
+ cross-spawn: 7.0.6
signal-exit: 4.1.0
form-data@4.0.0:
@@ -7011,9 +7051,9 @@ snapshots:
functions-have-names@1.2.3: {}
- geist@1.3.1(next@14.2.5(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)):
+ geist@1.3.1(next@14.2.10(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)):
dependencies:
- next: 14.2.5(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ next: 14.2.10(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
gensync@1.0.0-beta.2: {}
@@ -8229,7 +8269,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- micromatch@4.0.7:
+ micromatch@4.0.8:
dependencies:
braces: 3.0.3
picomatch: 2.3.1
@@ -8290,9 +8330,9 @@ snapshots:
transitivePeerDependencies:
- supports-color
- next@14.2.5(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ next@14.2.10(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
- '@next/env': 14.2.5
+ '@next/env': 14.2.10
'@swc/helpers': 0.5.5
busboy: 1.6.0
caniuse-lite: 1.0.30001645
@@ -8302,15 +8342,15 @@ snapshots:
react-dom: 18.3.1(react@18.3.1)
styled-jsx: 5.1.1(@babel/core@7.25.2)(react@18.3.1)
optionalDependencies:
- '@next/swc-darwin-arm64': 14.2.5
- '@next/swc-darwin-x64': 14.2.5
- '@next/swc-linux-arm64-gnu': 14.2.5
- '@next/swc-linux-arm64-musl': 14.2.5
- '@next/swc-linux-x64-gnu': 14.2.5
- '@next/swc-linux-x64-musl': 14.2.5
- '@next/swc-win32-arm64-msvc': 14.2.5
- '@next/swc-win32-ia32-msvc': 14.2.5
- '@next/swc-win32-x64-msvc': 14.2.5
+ '@next/swc-darwin-arm64': 14.2.10
+ '@next/swc-darwin-x64': 14.2.10
+ '@next/swc-linux-arm64-gnu': 14.2.10
+ '@next/swc-linux-arm64-musl': 14.2.10
+ '@next/swc-linux-x64-gnu': 14.2.10
+ '@next/swc-linux-x64-musl': 14.2.10
+ '@next/swc-win32-arm64-msvc': 14.2.10
+ '@next/swc-win32-ia32-msvc': 14.2.10
+ '@next/swc-win32-x64-msvc': 14.2.10
transitivePeerDependencies:
- '@babel/core'
- babel-plugin-macros
@@ -8758,26 +8798,28 @@ snapshots:
dependencies:
glob: 7.2.3
- rollup@4.19.1:
+ rollup@4.27.4:
dependencies:
- '@types/estree': 1.0.5
+ '@types/estree': 1.0.6
optionalDependencies:
- '@rollup/rollup-android-arm-eabi': 4.19.1
- '@rollup/rollup-android-arm64': 4.19.1
- '@rollup/rollup-darwin-arm64': 4.19.1
- '@rollup/rollup-darwin-x64': 4.19.1
- '@rollup/rollup-linux-arm-gnueabihf': 4.19.1
- '@rollup/rollup-linux-arm-musleabihf': 4.19.1
- '@rollup/rollup-linux-arm64-gnu': 4.19.1
- '@rollup/rollup-linux-arm64-musl': 4.19.1
- '@rollup/rollup-linux-powerpc64le-gnu': 4.19.1
- '@rollup/rollup-linux-riscv64-gnu': 4.19.1
- '@rollup/rollup-linux-s390x-gnu': 4.19.1
- '@rollup/rollup-linux-x64-gnu': 4.19.1
- '@rollup/rollup-linux-x64-musl': 4.19.1
- '@rollup/rollup-win32-arm64-msvc': 4.19.1
- '@rollup/rollup-win32-ia32-msvc': 4.19.1
- '@rollup/rollup-win32-x64-msvc': 4.19.1
+ '@rollup/rollup-android-arm-eabi': 4.27.4
+ '@rollup/rollup-android-arm64': 4.27.4
+ '@rollup/rollup-darwin-arm64': 4.27.4
+ '@rollup/rollup-darwin-x64': 4.27.4
+ '@rollup/rollup-freebsd-arm64': 4.27.4
+ '@rollup/rollup-freebsd-x64': 4.27.4
+ '@rollup/rollup-linux-arm-gnueabihf': 4.27.4
+ '@rollup/rollup-linux-arm-musleabihf': 4.27.4
+ '@rollup/rollup-linux-arm64-gnu': 4.27.4
+ '@rollup/rollup-linux-arm64-musl': 4.27.4
+ '@rollup/rollup-linux-powerpc64le-gnu': 4.27.4
+ '@rollup/rollup-linux-riscv64-gnu': 4.27.4
+ '@rollup/rollup-linux-s390x-gnu': 4.27.4
+ '@rollup/rollup-linux-x64-gnu': 4.27.4
+ '@rollup/rollup-linux-x64-musl': 4.27.4
+ '@rollup/rollup-win32-arm64-msvc': 4.27.4
+ '@rollup/rollup-win32-ia32-msvc': 4.27.4
+ '@rollup/rollup-win32-x64-msvc': 4.27.4
fsevents: 2.3.3
rrweb-cssom@0.6.0: {}
@@ -9082,6 +9124,8 @@ snapshots:
text-table@0.2.0: {}
+ third-party-capital@1.0.20: {}
+
tiny-invariant@1.3.3: {}
tinybench@2.8.0: {}
@@ -9377,7 +9421,7 @@ snapshots:
dependencies:
esbuild: 0.21.5
postcss: 8.4.40
- rollup: 4.19.1
+ rollup: 4.27.4
optionalDependencies:
'@types/node': 20.14.13
fsevents: 2.3.3
@@ -9433,7 +9477,7 @@ snapshots:
webpack@5.93.0:
dependencies:
'@types/eslint-scope': 3.7.7
- '@types/estree': 1.0.5
+ '@types/estree': 1.0.6
'@webassemblyjs/ast': 1.12.1
'@webassemblyjs/wasm-edit': 1.12.1
'@webassemblyjs/wasm-parser': 1.12.1
@@ -9574,4 +9618,4 @@ snapshots:
'@types/react': 18.3.3
react: 18.3.1
- zwitch@2.0.4: {}
+ zwitch@2.0.4: {}
\ No newline at end of file
diff --git a/public/google1bc477ba2237a8bb.html b/public/google1bc477ba2237a8bb.html
new file mode 100644
index 0000000..9e80b58
--- /dev/null
+++ b/public/google1bc477ba2237a8bb.html
@@ -0,0 +1 @@
+google-site-verification: google1bc477ba2237a8bb.html
\ No newline at end of file
diff --git a/public/logos/metaicon.png b/public/logos/metaicon.png
new file mode 100644
index 0000000..147b8ab
Binary files /dev/null and b/public/logos/metaicon.png differ
diff --git a/public/robots.txt b/public/robots.txt
index 3c2583f..6fa8504 100644
--- a/public/robots.txt
+++ b/public/robots.txt
@@ -4,4 +4,5 @@ Disallow: /nogooglebot/
User-agent: *
Allow: /
+
Sitemap: https://tour.json-schema.org/content/sitemap.xml
\ No newline at end of file