@e22m4u/js-repository 0.1.4 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -2
- package/docs/index.html +4 -2
- package/package.json +1 -1
- package/src/definition/model/model-data-validator.js +6 -11
- package/src/definition/model/model-data-validator.spec.js +1485 -1483
- package/src/definition/model/properties/property-validator/builtin/index.d.ts +1 -0
- package/src/definition/model/properties/property-validator/builtin/index.js +1 -0
- package/src/definition/model/properties/property-validator/builtin/max-length-validator.spec.js +29 -1
- package/src/definition/model/properties/property-validator/builtin/min-length-validator.spec.js +29 -1
- package/src/definition/model/properties/property-validator/builtin/regexp-validator.d.ts +6 -0
- package/src/definition/model/properties/property-validator/builtin/regexp-validator.js +30 -0
- package/src/definition/model/properties/property-validator/builtin/regexp-validator.spec.js +95 -0
- package/src/definition/model/properties/property-validator/property-validator-registry.js +2 -0
package/README.md
CHANGED
|
@@ -39,7 +39,7 @@ npm install @e22m4u/js-repository
|
|
|
39
39
|
- *Модель* - описывает структуру документа и связи к другим моделям
|
|
40
40
|
- *Репозиторий* - выполняет операции чтения и записи документов модели
|
|
41
41
|
|
|
42
|
-
|
|
42
|
+
<img alt="Схема" src="https://gitflic.ru/project/e22m4u/js-repository/blob/raw?file=assets%2Fmermaid-diagram.png&commit=39e53768b4ea62cafe60522e14d1fa9ddd42ebd5">
|
|
43
43
|
|
|
44
44
|
## Пример
|
|
45
45
|
|
|
@@ -278,11 +278,12 @@ schema.defineModel({
|
|
|
278
278
|
|
|
279
279
|
## Валидаторы
|
|
280
280
|
|
|
281
|
-
Кроме проверки типа,
|
|
281
|
+
Кроме базовой проверки типа, дополнительные условия можно задать с помощью
|
|
282
282
|
валидаторов, через которые будет проходить значение перед записью в базу.
|
|
283
283
|
|
|
284
284
|
- `minLength: number` минимальная длинна строки или массива
|
|
285
285
|
- `maxLength: number` максимальная длинна строки или массива
|
|
286
|
+
- `regexp: string | RegExp` проверка по регулярному выражению
|
|
286
287
|
|
|
287
288
|
**Пример**
|
|
288
289
|
|
package/docs/index.html
CHANGED
|
@@ -41,7 +41,8 @@
|
|
|
41
41
|
<li><em>Модель</em> - описывает структуру документа и связи к другим моделям</li>
|
|
42
42
|
<li><em>Репозиторий</em> - выполняет операции чтения и записи документов модели</li>
|
|
43
43
|
</ul>
|
|
44
|
-
<
|
|
44
|
+
<img alt="Схема" src="https://gitflic.ru/project/e22m4u/js-repository/blob/raw?file=assets%2Fmermaid-diagram.png&commit=39e53768b4ea62cafe60522e14d1fa9ddd42ebd5">
|
|
45
|
+
|
|
45
46
|
<a id="md:пример" class="tsd-anchor"></a><h2><a href="#md:пример">Пример</a></h2><p>Определение источника данных, модели и добавление нового документа в коллекцию.</p>
|
|
46
47
|
<pre><code class="language-js"><span class="hl-3">import</span><span class="hl-1"> {</span><span class="hl-4">Schema</span><span class="hl-1">} </span><span class="hl-3">from</span><span class="hl-1"> </span><span class="hl-2">'@e22m4u/js-repository'</span><span class="hl-1">;</span><br/><span class="hl-3">import</span><span class="hl-1"> {</span><span class="hl-4">DataType</span><span class="hl-1">} </span><span class="hl-3">from</span><span class="hl-1"> </span><span class="hl-2">'@e22m4u/js-repository'</span><span class="hl-1">;</span><br/><br/><span class="hl-5">// создание экземпляра Schema</span><br/><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">schema</span><span class="hl-1"> = </span><span class="hl-6">new</span><span class="hl-1"> </span><span class="hl-0">Schema</span><span class="hl-1">();</span><br/><br/><span class="hl-5">// определение источника "myMemory"</span><br/><span class="hl-4">schema</span><span class="hl-1">.</span><span class="hl-0">defineDatasource</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-4">name:</span><span class="hl-1"> </span><span class="hl-2">'myMemory'</span><span class="hl-1">, </span><span class="hl-5">// название нового источника</span><br/><span class="hl-1"> </span><span class="hl-4">adapter:</span><span class="hl-1"> </span><span class="hl-2">'memory'</span><span class="hl-1">, </span><span class="hl-5">// выбранный адаптер</span><br/><span class="hl-1">});</span><br/><br/><span class="hl-5">// определение модели "country"</span><br/><span class="hl-4">schema</span><span class="hl-1">.</span><span class="hl-0">defineModel</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-4">name:</span><span class="hl-1"> </span><span class="hl-2">'country'</span><span class="hl-1">, </span><span class="hl-5">// название новой модели</span><br/><span class="hl-1"> </span><span class="hl-4">datasource:</span><span class="hl-1"> </span><span class="hl-2">'myMemory'</span><span class="hl-1">, </span><span class="hl-5">// выбранный источник</span><br/><span class="hl-1"> </span><span class="hl-4">properties:</span><span class="hl-1"> { </span><span class="hl-5">// свойства модели</span><br/><span class="hl-1"> </span><span class="hl-4">name:</span><span class="hl-1"> </span><span class="hl-4">DataType</span><span class="hl-1">.</span><span class="hl-7">STRING</span><span class="hl-1">, </span><span class="hl-5">// тип "string"</span><br/><span class="hl-1"> </span><span class="hl-4">population:</span><span class="hl-1"> </span><span class="hl-4">DataType</span><span class="hl-1">.</span><span class="hl-7">NUMBER</span><span class="hl-1">, </span><span class="hl-5">// тип "number"</span><br/><span class="hl-1"> },</span><br/><span class="hl-1">})</span><br/><br/><span class="hl-5">// получение репозитория для модели "country"</span><br/><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">countryRep</span><span class="hl-1"> = </span><span class="hl-4">schema</span><span class="hl-1">.</span><span class="hl-0">getRepository</span><span class="hl-1">(</span><span class="hl-2">'country'</span><span class="hl-1">);</span><br/><br/><span class="hl-5">// добавление нового документа в коллекцию "country"</span><br/><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">country</span><span class="hl-1"> = </span><span class="hl-3">await</span><span class="hl-1"> </span><span class="hl-4">countryRep</span><span class="hl-1">.</span><span class="hl-0">create</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-4">name:</span><span class="hl-1"> </span><span class="hl-2">'Russia'</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-4">population:</span><span class="hl-1"> </span><span class="hl-8">143400000</span><span class="hl-1">,</span><br/><span class="hl-1">});</span><br/><br/><span class="hl-5">// вывод результата</span><br/><span class="hl-4">console</span><span class="hl-1">.</span><span class="hl-0">log</span><span class="hl-1">(</span><span class="hl-4">country</span><span class="hl-1">);</span><br/><span class="hl-5">// {</span><br/><span class="hl-5">// "id": 1,</span><br/><span class="hl-5">// "name": "Russia",</span><br/><span class="hl-5">// "population": 143400000,</span><br/><span class="hl-5">// }</span>
|
|
47
48
|
</code><button>Copy</button></pre>
|
|
@@ -130,11 +131,12 @@
|
|
|
130
131
|
определено в момент записи документа.</p>
|
|
131
132
|
<pre><code class="language-js"><span class="hl-4">schema</span><span class="hl-1">.</span><span class="hl-0">defineModel</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-4">name:</span><span class="hl-1"> </span><span class="hl-2">'article'</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-4">properties:</span><span class="hl-1"> { </span><span class="hl-5">// свойства модели</span><br/><span class="hl-1"> </span><span class="hl-4">tags:</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-4">type:</span><span class="hl-1"> </span><span class="hl-4">DataType</span><span class="hl-1">.</span><span class="hl-7">ARRAY</span><span class="hl-1">, </span><span class="hl-5">// тип свойства "array" (обязательно)</span><br/><span class="hl-1"> </span><span class="hl-4">itemType:</span><span class="hl-1"> </span><span class="hl-4">DataType</span><span class="hl-1">.</span><span class="hl-7">STRING</span><span class="hl-1">, </span><span class="hl-5">// тип элемента "string"</span><br/><span class="hl-1"> </span><span class="hl-0">default</span><span class="hl-4">:</span><span class="hl-1"> () </span><span class="hl-6">=></span><span class="hl-1"> [], </span><span class="hl-5">// фабричное значение</span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> </span><span class="hl-4">createdAt:</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-4">type:</span><span class="hl-1"> </span><span class="hl-4">DataType</span><span class="hl-1">.</span><span class="hl-7">STRING</span><span class="hl-1">, </span><span class="hl-5">// тип свойства "string" (обязательно)</span><br/><span class="hl-1"> </span><span class="hl-0">default</span><span class="hl-4">:</span><span class="hl-1"> () </span><span class="hl-6">=></span><span class="hl-1"> </span><span class="hl-6">new</span><span class="hl-1"> </span><span class="hl-0">Date</span><span class="hl-1">().</span><span class="hl-0">toISOString</span><span class="hl-1">(), </span><span class="hl-5">// фабричное значение</span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> },</span><br/><span class="hl-1">});</span>
|
|
132
133
|
</code><button>Copy</button></pre>
|
|
133
|
-
<a id="md:валидаторы" class="tsd-anchor"></a><h2><a href="#md:валидаторы">Валидаторы</a></h2><p>Кроме проверки типа,
|
|
134
|
+
<a id="md:валидаторы" class="tsd-anchor"></a><h2><a href="#md:валидаторы">Валидаторы</a></h2><p>Кроме базовой проверки типа, дополнительные условия можно задать с помощью
|
|
134
135
|
валидаторов, через которые будет проходить значение перед записью в базу.</p>
|
|
135
136
|
<ul>
|
|
136
137
|
<li><code>minLength: number</code> минимальная длинна строки или массива</li>
|
|
137
138
|
<li><code>maxLength: number</code> максимальная длинна строки или массива</li>
|
|
139
|
+
<li><code>regexp: string | RegExp</code> проверка по регулярному выражению</li>
|
|
138
140
|
</ul>
|
|
139
141
|
<p><strong>Пример</strong></p>
|
|
140
142
|
<p>Валидаторы указываются в объявлении свойства модели параметром
|
package/package.json
CHANGED
|
@@ -64,14 +64,9 @@ export class ModelDataValidator extends Service {
|
|
|
64
64
|
propValue,
|
|
65
65
|
);
|
|
66
66
|
}
|
|
67
|
-
//
|
|
68
|
-
await this.
|
|
69
|
-
|
|
70
|
-
propName,
|
|
71
|
-
propDef,
|
|
72
|
-
propValue,
|
|
73
|
-
);
|
|
74
|
-
// PropertyValidators
|
|
67
|
+
// Property type.
|
|
68
|
+
await this._validateByPropertyType(modelName, propName, propDef, propValue);
|
|
69
|
+
// Property validators.
|
|
75
70
|
await this._validateByPropertyValidators(
|
|
76
71
|
modelName,
|
|
77
72
|
propName,
|
|
@@ -81,7 +76,7 @@ export class ModelDataValidator extends Service {
|
|
|
81
76
|
}
|
|
82
77
|
|
|
83
78
|
/**
|
|
84
|
-
* Validate
|
|
79
|
+
* Validate by property type.
|
|
85
80
|
*
|
|
86
81
|
* @param {string} modelName
|
|
87
82
|
* @param {string} propName
|
|
@@ -90,7 +85,7 @@ export class ModelDataValidator extends Service {
|
|
|
90
85
|
* @param {boolean} isArrayValue
|
|
91
86
|
* @returns {Promise<void>}
|
|
92
87
|
*/
|
|
93
|
-
async
|
|
88
|
+
async _validateByPropertyType(
|
|
94
89
|
modelName,
|
|
95
90
|
propName,
|
|
96
91
|
propDef,
|
|
@@ -139,7 +134,7 @@ export class ModelDataValidator extends Service {
|
|
|
139
134
|
case DataType.ARRAY:
|
|
140
135
|
if (!Array.isArray(propValue)) throw createError('an Array');
|
|
141
136
|
const arrayItemsValidationPromises = propValue.map(async value =>
|
|
142
|
-
this.
|
|
137
|
+
this._validateByPropertyType(
|
|
143
138
|
modelName,
|
|
144
139
|
propName,
|
|
145
140
|
propDef,
|