Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
665 changes: 665 additions & 0 deletions MIGRATION-GUIDE.he.md

Large diffs are not rendered by default.

738 changes: 738 additions & 0 deletions MIGRATION-GUIDE.md

Large diffs are not rendered by default.

355 changes: 355 additions & 0 deletions README.he.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,355 @@
<div dir="rtl" lang="he">

# ื‘ื•ื ื” JSON Schema

[![image](https://github.com/user-attachments/assets/6be1cecf-e0d9-4597-ab04-7124e37e332d)](https://json.ophir.dev)

ืขื•ืจืš ื•ื™ื–ื•ืืœื™ ืžื•ื“ืจื ื™ ืžื‘ื•ืกืก <span dir="ltr">React</span> ืœื™ืฆื™ืจื” ื•ืขืจื™ื›ื” ืฉืœ ื”ื’ื“ืจื•ืช <span dir="ltr">JSON Schema</span> ืขื ืžืžืฉืง ืื™ื ื˜ื•ืื™ื˜ื™ื‘ื™.

**ื ืกื” ื‘ืื™ื ื˜ืจื ื˜**: <span dir="ltr">https://json.ophir.dev</span>

## ืชื›ื•ื ื•ืช

- **ืขื•ืจืš Schema ื•ื™ื–ื•ืืœื™**: ืขืฆื‘ ืืช ื”-<span dir="ltr">JSON Schema</span> ืฉืœืš ื“ืจืš ืžืžืฉืง ืื™ื ื˜ื•ืื™ื˜ื™ื‘ื™ ืžื‘ืœื™ ืœื›ืชื•ื‘ <span dir="ltr">JSON</span> ื™ื“ื ื™ืช
- **ืชืฆื•ื’ืช JSON ื‘ื–ืžืŸ ืืžืช**: ืจืื” ืืช ื”-<span dir="ltr">schema</span> ืฉืœืš ื‘ืคื•ืจืžื˜ <span dir="ltr">JSON</span> ื‘ื–ืžืŸ ืฉืืชื” ื‘ื•ื ื” ืื•ืชื• ื•ื™ื–ื•ืืœื™ืช
- **ื”ื™ืกืง Schema**: ืฆื•ืจ <span dir="ltr">schemas</span> ืื•ื˜ื•ืžื˜ื™ืช ืžื ืชื•ื ื™ <span dir="ltr">JSON</span> ืงื™ื™ืžื™ื
- **ืื™ืžื•ืช JSON**: ื‘ื“ื•ืง ื ืชื•ื ื™ <span dir="ltr">JSON</span> ืžื•ืœ ื”-<span dir="ltr">schema</span> ืฉืœืš ืขื ืžืฉื•ื‘ ืžืคื•ืจื˜
- **ืขื™ืฆื•ื‘ ืจืกืคื•ื ืกื™ื‘ื™**: ืžืžืฉืง ืžืœื ืจืกืคื•ื ืกื™ื‘ื™ ืฉืขื•ื‘ื“ ืขืœ <span dir="ltr">desktop</span> ื•-<span dir="ltr">mobile</span>
- **๐Ÿ†• ืชืžื™ื›ื” ื‘-<span dir="ltr">JSON Schema Draft 2020-12</span>**: ืชืžื™ื›ื” ืžืœืื” ื‘ืžืคืจื˜ ื”-<span dir="ltr">JSON Schema</span> ื”ืขื“ื›ื ื™ ื‘ื™ื•ืชืจ
- **๐Ÿ†• ืชืžื™ื›ื” ืžืจื•ื‘ืช ื’ืจืกืื•ืช**: ืžืขื‘ืจ ื‘ื™ืŸ <span dir="ltr">Draft-07, 2019-09,</span> ื•-<span dir="ltr">2020-12</span>
- **๐Ÿ†• <span dir="ltr">keywords</span> ืžืชืงื“ืžื™ื**: ืขื•ืจื›ื™ื ื•ื™ื–ื•ืืœื™ื™ื ืœืื™ืžื•ืช ืžื•ืชื ื”, ื”ืจื›ื‘ื”, ื”ืคื ื™ื•ืช ื“ื™ื ืžื™ื•ืช ื•ืขื•ื“
- **๐ŸŒ ื‘ื™ื ืœืื•ืžื™ื•ืช**: ืชืžื™ื›ื” ื‘ืื ื’ืœื™ืช, ืขื‘ืจื™ืช, ื’ืจืžื ื™ืช, ืฆืจืคืชื™ืช ื•ืจื•ืกื™ืช

## ืชืžื™ื›ื” ื‘-<span dir="ltr">JSON Schema Draft 2020-12</span>

<span dir="ltr">fork</span> ื–ื” ื›ื•ืœืœ ืชืžื™ื›ื” ืžืœืื” ื‘-<span dir="ltr">JSON Schema Draft 2020-12</span>, ื”ืžืคืจื˜ ื”ืขื“ื›ื ื™ ื‘ื™ื•ืชืจ.

### ืชื›ื•ื ื•ืช ื—ื“ืฉื•ืช ื‘-<span dir="ltr">2020-12</span>

#### โœจ ืื™ืžื•ืช <span dir="ltr">Tuple</span> ืขื `prefixItems`

ื”ื’ื“ืจ <span dir="ltr">schemas</span> ืœืžื™ืงื•ืžื™ื ืกืคืฆื™ืคื™ื™ื ื‘ืžืขืจืš:

<div dir="ltr">

```json
{
"type": "array",
"prefixItems": [
{ "type": "string" },
{ "type": "number" },
{ "type": "boolean" }
],
"items": false
}
```

</div>

#### โœจ ื”ืคื ื™ื•ืช ื“ื™ื ืžื™ื•ืช (<span dir="ltr">`$dynamicRef` & `$dynamicAnchor`</span>)

ืฆื•ืจ <span dir="ltr">schemas</span> ื”ื ื™ืชื ื™ื ืœื”ืจื—ื‘ื” ืขื ื”ืจื›ื‘ื” ื“ื™ื ืžื™ืช:

<div dir="ltr">

```json
{
"$dynamicAnchor": "node",
"type": "object",
"properties": {
"children": {
"type": "array",
"items": { "$dynamicRef": "#node" }
}
}
}
```

</div>

#### โœจ `unevaluatedProperties` ืžืฉื•ืคืจ

ืขื•ื‘ื“ ื ื›ื•ืŸ ืขื ื”ืจื›ื‘ืช <span dir="ltr">schema</span> (<span dir="ltr">allOf/anyOf/oneOf</span>):

<div dir="ltr">

```json
{
"properties": { "name": { "type": "string" } },
"allOf": [
{ "properties": { "age": { "type": "number" } } }
],
"unevaluatedProperties": false
}
```

</div>

#### โœจ ืื™ืžื•ืช ืžื•ืชื ื” (<span dir="ltr">if/then/else</span>)

<div dir="ltr">

```json
{
"if": { "properties": { "country": { "const": "Israel" } } },
"then": { "properties": { "postal_code": { "pattern": "^[0-9]{7}$" } } },
"else": { "properties": { "postal_code": { "minLength": 4 } } }
}
```

</div>

### ื’ืจืกืื•ืช ื ืชืžื›ื•ืช

- **<span dir="ltr">Draft-07 (2018)</span>** - ื‘ืกื™ืก ื™ืฆื™ื‘ ืขื <span dir="ltr">if/then/else</span>
- **<span dir="ltr">Draft 2019-09</span>** - ืžื•ืกื™ืฃ <span dir="ltr">dependentSchemas</span> ื•ืชืžื™ื›ื” ื‘ืกื™ืกื™ืช ื‘-<span dir="ltr">unevaluated</span>
- **<span dir="ltr">Draft 2020-12</span> (ืื—ืจื•ืŸ)** - ืžืขืจืš ืชื›ื•ื ื•ืช ืžืœื ื›ื•ืœืœ <span dir="ltr">prefixItems</span> ื•ื”ืคื ื™ื•ืช ื“ื™ื ืžื™ื•ืช

ืขื‘ื•ืจ ื‘ื™ืŸ ื’ืจืกืื•ืช ื‘ืืžืฆืขื•ืช ื”-<span dir="ltr">selector</span> ื‘ื›ื•ืชืจืช ื”ืขื•ืจืš.

### ืžื“ืจื™ื›ื™ ืžืขื‘ืจ

- ๐Ÿ“„ <span dir="ltr">[English Migration Guide](./MIGRATION-GUIDE.md)</span>
- ๐Ÿ“„ <span dir="ltr">[ืžื“ืจื™ืš ืžืขื‘ืจ ื‘ืขื‘ืจื™ืช](./MIGRATION-GUIDE.he.md)</span>

### ืขื•ืจื›ื™ื ื•ื™ื–ื•ืืœื™ื™ื ืœ-<span dir="ltr">keywords</span> ืžืชืงื“ืžื™ื

- **ืื™ืžื•ืช ืžื•ืชื ื”** - ืขื•ืจืš <span dir="ltr">if/then/else</span>
- **ื”ืจื›ื‘ืช <span dir="ltr">Schema</span>** - ืขื•ืจืš <span dir="ltr">allOf/anyOf/oneOf/not</span>
- **ืื™ืžื•ืช <span dir="ltr">Tuple</span>** - ืขื•ืจืš <span dir="ltr">prefixItems (2020-12)</span>
- **ื”ืคื ื™ื•ืช ื“ื™ื ืžื™ื•ืช** - ืขื•ืจืš <span dir="ltr">$dynamicRef/$dynamicAnchor (2020-12)</span>
- **<span dir="ltr">Schemas</span> ืชืœื•ื™ื™ื** - ืื™ืžื•ืช ืชืœื•ื™-<span dir="ltr">property (2019-09+)</span>
- **<span dir="ltr">Properties/Items</span> ืœื ืžื•ืขืจื›ื™ื** - ื‘ืงืจืช ืื™ืžื•ืช ืžืชืงื“ืžืช <span dir="ltr">(2019-09+)</span>

ื›ืœ ื”ืขื•ืจื›ื™ื ื”ืžืชืงื“ืžื™ื ืชื•ืžื›ื™ื ื‘ืžืฆื‘ื™ ืขืจื™ื›ื” <span dir="ltr">Visual</span> ื•ื’ื <span dir="ltr">JSON</span>.

## ื”ืชื—ืœืช ืขื‘ื•ื“ื”

### ื”ืชืงื ื”

<div dir="ltr">

```bash
npm install jsonjoy-builder
```

</div>

ื”ืชืงืŸ ื’ื <span dir="ltr">react</span> ืื ืขื“ื™ื™ืŸ ืœื ืขืฉื™ืช ื–ืืช.

ืื– ื”ืฉืชืžืฉ ื›ืš:

<div dir="ltr">

```jsx
import "jsonjoy-builder/styles.css";
import { type JSONSchema, SchemaVisualEditor } from "jsonjoy-builder";
import { useState } from "react";

export function App() {
const [schema, setSchema] = useState<JSONSchema>({});
return (
<div>
<h1>JSONJoy Builder</h1>
<SchemaVisualEditor schema={schema} onChange={setSchema}/>
</div>
);
}
```

</div>

### ืขื™ืฆื•ื‘

ืœืขื™ืฆื•ื‘ ื”ืงื•ืžืคื•ื ื ื˜ื”, ื”ื•ืกืฃ <span dir="ltr">CSS</span> ืžื•ืชืื ืื™ืฉื™ืช. ืœืขื™ืฆื•ื‘ ื‘ืกื™ืกื™, ื™ืฉ <span dir="ltr">properties</span> ืฉืœ <span dir="ltr">CSS</span> ("ืžืฉืชื ื™ื") ืฉื ื™ืชืŸ ืœื”ื’ื“ื™ืจ:

<div dir="ltr">

```css
.jsonjoy {
--jsonjoy-background: #f8fafc;
--jsonjoy-foreground: #020817;
--jsonjoy-card: #fff;
--jsonjoy-primary: #0080ff;
/* ... */
}
.jsonjoy.dark {
/* ืื•ืชื ืžืฉืชื ื™ื, ืื‘ืœ ืœืžืฆื‘ dark */
}
```

</div>

### ืœื•ืงืœื™ื–ืฆื™ื”

ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, ื”ืขื•ืจืš ืžืฉืชืžืฉ ื‘ืื ื’ืœื™ืช. ืœืœื•ืงืœื™ื–ืฆื™ื”, ืขืœื™ืš ืœื”ื’ื“ื™ืจ ืฉืคื” ื“ืจืš <span dir="ltr">`TranslationContext`</span>:

<div dir="ltr">

```jsx
import "jsonjoy-builder/styles.css";
import { type JSONSchema, SchemaVisualEditor, TranslationContext, he } from "jsonjoy-builder";
import { useState } from "react";

export function App() {
const [schema, setSchema] = useState<JSONSchema>({});
return (
<TranslationContext value={he}>
<SchemaVisualEditor schema={schema} onChange={setSchema}/>
</TranslationContext>
);
}
```

</div>

ื›ืจื’ืข ื™ืฉ ืœื ื• ืœื•ืงืœื™ื–ืฆื™ื•ืช ืขื‘ื•ืจ:
- ๐Ÿ‡ฌ๐Ÿ‡ง ืื ื’ืœื™ืช <span dir="ltr">(en) - English</span>
- ๐Ÿ‡ฎ๐Ÿ‡ฑ ืขื‘ืจื™ืช <span dir="ltr">(he) - Hebrew</span>
- ๐Ÿ‡ฉ๐Ÿ‡ช ื’ืจืžื ื™ืช <span dir="ltr">(de) - Deutsch</span>
- ๐Ÿ‡ซ๐Ÿ‡ท ืฆืจืคืชื™ืช <span dir="ltr">(fr) - Franรงais</span>
- ๐Ÿ‡ท๐Ÿ‡บ ืจื•ืกื™ืช <span dir="ltr">(ru) - ะ ัƒััะบะธะน</span>

ื ื™ืชืŸ ืœื”ื’ื“ื™ืจ ืชืจื’ื•ื ืžืฉืœืš ื›ืš. ืื ืชืขืฉื” ื–ืืช, ืฉืงื•ืœ ืœืคืชื•ื— <span dir="ltr">PR</span> ืขื ื”ืชืจื’ื•ืžื™ื!

<div dir="ltr">

```ts
import { type Translation } from "jsonjoy-builder";

const es: Translation = {
// ื”ื•ืกืฃ ืชืจื’ื•ืžื™ื ื›ืืŸ (ืจืื” type Translation ืœืžืคืชื—ื•ืช ื”ื–ืžื™ื ื™ื ื•ืขืจื›ื™ ื‘ืจื™ืจืช ื”ืžื—ื“ืœ)
};
```

</div>

ืจืื” ื’ื ืืช <span dir="ltr">[ืงื•ื‘ืฅ ื”ืœื•ืงืœื™ื–ืฆื™ื” ื”ืื ื’ืœื™ืช](https://github.com/lovasoa/jsonjoy-builder/blob/main/src/i18n/locales/en.ts)</span> ืœืœื•ืงืœื™ื–ืฆื™ื•ืช ื‘ืจื™ืจืช ื”ืžื—ื“ืœ.

### ืคื™ืชื•ื—

<div dir="ltr">

```bash
git clone https://github.com/lovasoa/jsonjoy-builder.git
cd jsonjoy-builder
npm install
```

</div>

ื”ืคืขืœ ืืช ืฉืจืช ื”ืคื™ืชื•ื—:

<div dir="ltr">

```bash
npm run dev
```

</div>

ืืคืœื™ืงืฆื™ื™ืช ื”ื“ืžื• ืชื”ื™ื” ื–ืžื™ื ื” ื‘-<span dir="ltr">http://localhost:5173</span>

### ื‘ื ื™ื™ื” ืœืคืจื•ื“ืงืฉืŸ

ื‘ื ื” ืกืคืจื™ื™ื” ื–ื• ืœืคืจื•ื“ืงืฉืŸ:

<div dir="ltr">

```bash
npm run build
```

</div>

ื”ืงื‘ืฆื™ื ื”ื‘ื ื•ื™ื™ื ื™ื”ื™ื• ื–ืžื™ื ื™ื ื‘ืชื™ืงื™ื™ืช <span dir="ltr">`dist`</span>.

## ืืจื›ื™ื˜ืงื˜ื•ืจืช ื”ืคืจื•ื™ืงื˜

### ืงื•ืžืคื•ื ื ื˜ื•ืช ืœื™ื‘ื”

- **<span dir="ltr">JsonSchemaEditor</span>**: ื”ืงื•ืžืคื•ื ื ื˜ื” ื”ืจืืฉื™ืช ื”ืžืกืคืงืช <span dir="ltr">tabs</span> ืœืžืขื‘ืจ ื‘ื™ืŸ ืชืฆื•ื’ื•ืช ื•ื™ื–ื•ืืœื™ ื•-<span dir="ltr">JSON</span>
- **<span dir="ltr">SchemaVisualEditor</span>**: ืžื˜ืคืœ ื‘ื™ื™ืฆื•ื’ ื•ืขืจื™ื›ื” ื•ื™ื–ื•ืืœื™ืช ืฉืœ <span dir="ltr">schemas</span>
- **<span dir="ltr">JsonSchemaVisualizer</span>**: ืžืกืคืง ืชืฆื•ื’ืช <span dir="ltr">JSON</span> ืขื ืขื•ืจืš <span dir="ltr">Monaco</span> ืœืขืจื™ื›ื” ื™ืฉื™ืจื” ืฉืœ <span dir="ltr">schema</span>
- **<span dir="ltr">SchemaInferencer</span>**: ืงื•ืžืคื•ื ื ื˜ืช ื“ื™ืืœื•ื’ ืœื™ืฆื™ืจืช <span dir="ltr">schemas</span> ืžื ืชื•ื ื™ <span dir="ltr">JSON</span>
- **<span dir="ltr">JsonValidator</span>**: ืงื•ืžืคื•ื ื ื˜ืช ื“ื™ืืœื•ื’ ืœืื™ืžื•ืช <span dir="ltr">JSON</span> ืžื•ืœ ื”-<span dir="ltr">schema</span> ื”ื ื•ื›ื—ื™

### ืชื›ื•ื ื•ืช ืžืจื›ื–ื™ื•ืช

#### ื”ื™ืกืง Schema

ืงื•ืžืคื•ื ื ื˜ืช <span dir="ltr">`SchemaInferencer`</span> ื™ื›ื•ืœื” ืœื™ืฆื•ืจ ืื•ื˜ื•ืžื˜ื™ืช ื”ื’ื“ืจื•ืช <span dir="ltr">JSON Schema</span> ืžื ืชื•ื ื™ <span dir="ltr">JSON</span> ืงื™ื™ืžื™ื. ืชื›ื•ื ื” ื–ื• ืžืฉืชืžืฉืช ื‘ืžืขืจื›ืช ื”ื™ืกืง ืžื‘ื•ืกืกืช ืจืงื•ืจืกื™ื” ืœื–ื™ื”ื•ื™:

- ืžื‘ื ื™ <span dir="ltr">object</span> ื•-<span dir="ltr">properties</span>
- ืกื•ื’ื™ <span dir="ltr">array</span> ื•-<span dir="ltr">schemas</span> ืฉืœ ื”ืคืจื™ื˜ื™ื ืฉืœื”ื
- ืคื•ืจืžื˜ื™ื ืฉืœ <span dir="ltr">string</span> (ืชืืจื™ื›ื™ื, <span dir="ltr">emails</span>, <span dir="ltr">URIs</span>)
- ืกื•ื’ื™ื ืžืกืคืจื™ื™ื (<span dir="ltr">integers</span> ืžื•ืœ <span dir="ltr">floats</span>)
- ืฉื“ื•ืช ื—ื•ื‘ื”

#### ืื™ืžื•ืช JSON

ืืžืช ื›ืœ ืžืกืžืš <span dir="ltr">JSON</span> ืžื•ืœ ื”-<span dir="ltr">schema</span> ืฉืœืš ืขื:
- ืžืฉื•ื‘ ื‘ื–ืžืŸ ืืžืช
- ื“ื™ื•ื•ื— ืฉื’ื™ืื•ืช ืžืคื•ืจื˜
- ืื™ืžื•ืช <span dir="ltr">format</span> ืขื‘ื•ืจ <span dir="ltr">emails</span>, ืชืืจื™ื›ื™ื ื•ืคื•ืจืžื˜ื™ื ืžื™ื•ื—ื“ื™ื ืื—ืจื™ื

## ืžื—ืกื ื™ืช ื˜ื›ื ื•ืœื•ื’ื™ืช

- **<span dir="ltr">React</span>**: <span dir="ltr">framework UI</span>
- **<span dir="ltr">TypeScript</span>**: ืคื™ืชื•ื— <span dir="ltr">type-safe</span>
- **<span dir="ltr">Rsbuild / Rslib</span>**: ื›ืœื™ <span dir="ltr">build</span> ื•ืฉืจืช ืคื™ืชื•ื—
- **<span dir="ltr">ShadCN UI</span>**: ืกืคืจื™ื™ืช ืงื•ืžืคื•ื ื ื˜ื•ืช
- **<span dir="ltr">Monaco Editor</span>**: ืขื•ืจืš ืงื•ื“ ืœืฆืคื™ื™ื”/ืขืจื™ื›ื” ืฉืœ <span dir="ltr">JSON</span>
- **<span dir="ltr">Ajv</span>**: ืื™ืžื•ืช <span dir="ltr">JSON Schema</span>
- **<span dir="ltr">Zod</span>**: ื ื™ืชื•ื— <span dir="ltr">json type-safe</span> ื‘-<span dir="ltr">ts</span>
- **<span dir="ltr">Lucide Icons</span>**: ืกืคืจื™ื™ืช ืื™ื™ืงื•ื ื™ื
- **<span dir="ltr">Node.js Test Runner</span>**: ื‘ื“ื™ืงื•ืช ืžื•ื‘ื ื•ืช ืคืฉื•ื˜ื•ืช

## ืกืงืจื™ืคื˜ื™ื ืœืคื™ืชื•ื—

| ืคืงื•ื“ื” | ืชื™ืื•ืจ |
|---------|-------------|
| <span dir="ltr">`npm run dev`</span> | ื”ืคืขืœ ืฉืจืช ืคื™ืชื•ื— |
| <span dir="ltr">`npm run build`</span> | ื‘ื ื” ืœืคืจื•ื“ืงืฉืŸ |
| <span dir="ltr">`npm run build:dev`</span> | ื‘ื ื” ืขื ื”ื’ื“ืจื•ืช ืคื™ืชื•ื— |
| <span dir="ltr">`npm run lint`</span> | ื”ืจืฅ <span dir="ltr">linter</span> |
| <span dir="ltr">`npm run format`</span> | ืคืจืžื˜ ืงื•ื“ |
| <span dir="ltr">`npm run check`</span> | ื‘ื“ื™ืงืช <span dir="ltr">type</span> ืฉืœ ื”ืคืจื•ื™ืงื˜ |
| <span dir="ltr">`npm run fix`</span> | ืชืงืŸ ื‘ืขื™ื•ืช <span dir="ltr">linting</span> |
| <span dir="ltr">`npm run typecheck`</span> | ื‘ื“ื™ืงืช <span dir="ltr">type</span> ืขื <span dir="ltr">TypeScript</span> |
| <span dir="ltr">`npm run preview`</span> | ืชืฆื•ื’ื” ืžืงื“ื™ืžื” ืฉืœ <span dir="ltr">build</span> ืคืจื•ื“ืงืฉืŸ |
| <span dir="ltr">`npm run test`</span> | ื”ืจืฅ ื‘ื“ื™ืงื•ืช |

## ืชื™ืขื•ื“

- ๐Ÿ“– <span dir="ltr">[English README](./README.md)</span>
- ๐Ÿ“– <span dir="ltr">[Hebrew README - ืงืจื ืื•ืชื™ ื‘ืขื‘ืจื™ืช](./README.he.md)</span> (ืงื•ื‘ืฅ ื–ื”)
- ๐Ÿ“„ <span dir="ltr">[Migration Guide (English)](./MIGRATION-GUIDE.md)</span>
- ๐Ÿ“„ <span dir="ltr">[ืžื“ืจื™ืš ืžืขื‘ืจ (Hebrew)](./MIGRATION-GUIDE.he.md)</span>
- ๐Ÿ“„ <span dir="ltr">[Feature Documentation](./README-features.md)</span>

## ืชืจื•ืžื”

ืชืจื•ืžื•ืช ื™ืชืงื‘ืœื• ื‘ื‘ืจื›ื”! ืื ื ืืœ ืชื”ืกืก ืœื”ื’ื™ืฉ <span dir="ltr">Pull Request</span>.

## ืžื—ื‘ืจื™ื

**ืžื—ื‘ืจ ืžืงื•ืจื™**: <span dir="ltr">[@ophir.dev](https://ophir.dev) - [lovasoa/jsonjoy-builder](https://github.com/lovasoa/jsonjoy-builder)</span>

**<span dir="ltr">fork</span> ืžืฉื•ืคืจ ืขื ืชืžื™ื›ื” ื‘-<span dir="ltr">JSON Schema 2020-12</span>**: <span dir="ltr">[@usercourses63](https://github.com/usercourses63) - [usercourses63/jsonjoy-builder](https://github.com/usercourses63/jsonjoy-builder)</span>

### ืชื›ื•ื ื•ืช ื”-<span dir="ltr">fork</span> ื”ืžืฉื•ืคืจ
- โœ… ืชืžื™ื›ื” ืžืœืื” ื‘-<span dir="ltr">JSON Schema Draft 2020-12</span>
- โœ… ืื™ืžื•ืช ืจื‘-ื’ืจืกืื•ืช (<span dir="ltr">Draft-07, 2019-09, 2020-12</span>)
- โœ… 7 ืขื•ืจื›ื™ <span dir="ltr">keywords</span> ืžืชืงื“ืžื™ื ืขื ืžืขื‘ืจ <span dir="ltr">Visual/JSON</span>
- โœ… ืชืฆื•ื’ื” ืžื•ืชื ื™ืช ืœืคื™ ื’ืจืกืช <span dir="ltr">draft</span>
- โœ… ื‘ื™ื ืœืื•ืžื™ื•ืช ืžืœืื” (5 ืฉืคื•ืช)
- โœ… ืžื“ืจื™ื›ื™ ืžืขื‘ืจ ืžืงื™ืคื™ื (ืื ื’ืœื™ืช + ืขื‘ืจื™ืช)
- โœ… ื™ืจื•ืฉืช <span dir="ltr">draft prop</span> ืœ-<span dir="ltr">schemas</span> ืžืงื•ื ื ื™ื
- โœ… ืžืฆื‘ ืขืจื™ื›ื” ื•ื™ื–ื•ืืœื™ ืœื›ืœ ื”-<span dir="ltr">schemas</span> ื”ืžืงื•ื ื ื™ื

## ืจื™ืฉื™ื•ืŸ

ืคืจื•ื™ืงื˜ ื–ื” ืžื•ืจืฉื” ืชื—ืช ืจื™ืฉื™ื•ืŸ <span dir="ltr">MIT</span> - ืจืื” ืืช ืงื•ื‘ืฅ <span dir="ltr">LICENSE</span> ืœืคืจื˜ื™ื.

</div>
Loading
Loading