diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..83beb31
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,2 @@
+# Set default behavior to automatically convert line endings
+* text=auto eol=lf
\ No newline at end of file
diff --git a/.github/test.yml b/.github/test.yml
new file mode 100644
index 0000000..fce3203
--- /dev/null
+++ b/.github/test.yml
@@ -0,0 +1,32 @@
+name: Run Tests
+
+on: [push, pull_request]
+
+permissions:
+ contents: read
+
+jobs:
+ test:
+ name: Test
+ runs-on: ${{ matrix.os }}
+
+ strategy:
+ matrix:
+ node-version: [18.x, 20.x]
+ os: [ubuntu-latest, windows-latest, macOS-latest]
+
+ steps:
+ - uses: actions/checkout@v3
+
+ - name: Use Node.js ${{ matrix.node-version }}
+ uses: actions/setup-node@v3
+ with:
+ node-version: ${{ matrix.node-version }}
+
+ - name: Install
+ run: |
+ npm install
+
+ - name: Test
+ run: |
+ npm run test
diff --git a/.npmrc b/.npmrc
new file mode 100644
index 0000000..9cf9495
--- /dev/null
+++ b/.npmrc
@@ -0,0 +1 @@
+package-lock=false
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..8c37d71
--- /dev/null
+++ b/README.md
@@ -0,0 +1,115 @@
+# merge-json-schema
+
+__merge-json-schema__ is a javascript library that build a logical product (AND) for multiple [JSON schemas](https://json-schema.org/draft/2020-12/json-schema-core#name-introduction).
+
+- [Installation](#installation)
+- [Usage](#usage)
+- [API](#api)
+ - [mergeSchemas(schemas, options)](#mergeschemasschemas-options)
+ - [resolvers](#resolvers)
+ - [defaultResolver](#defaultresolver)
+- [License](#license)
+
+
+
+## Installation
+
+```bash
+npm install merge-json-schema
+```
+
+
+
+## Usage
+
+```javascript
+const assert = require('node:assert')
+const { mergeSchemas } = require('merge-json-schema')
+
+const schema1 = {
+ $id: 'schema1',
+ type: 'object',
+ properties: {
+ foo: { type: 'string', enum: ['foo1', 'foo2'] },
+ bar: { type: 'string', minLength: 3 }
+ }
+}
+
+const schema2 = {
+ $id: 'schema1',
+ type: 'object',
+ properties: {
+ foo: { type: 'string', enum: ['foo1', 'foo3'] },
+ bar: { type: 'string', minLength: 5 }
+ },
+ required: ['foo']
+}
+
+const mergedSchema = mergeSchemas([schema1, schema2])
+assert.deepStrictEqual(mergedSchema, {
+ $id: 'schema1',
+ type: 'object',
+ properties: {
+ foo: { type: 'string', enum: ['foo1'] },
+ bar: { type: 'string', minLength: 5 }
+ },
+ required: ['foo']
+})
+```
+
+
+
+## API
+
+
+
+#### mergeSchemas(schemas, options)
+
+Builds a logical conjunction (AND) of multiple [JSON schemas](https://json-schema.org/draft/2020-12/json-schema-core#name-introduction).
+
+- `schemas` __\__ - list of JSON schemas to merge.
+- `options` __\