@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 CHANGED
@@ -39,7 +39,7 @@ npm install @e22m4u/js-repository
39
39
  - *Модель* - описывает структуру документа и связи к другим моделям
40
40
  - *Репозиторий* - выполняет операции чтения и записи документов модели
41
41
 
42
- ![Схема](assets/mermaid-diagram.png "Схема")
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
- <p><img src="assets/mermaid-diagram.png" alt="Схема" title="Схема"></p>
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">&#39;@e22m4u/js-repository&#39;</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">&#39;@e22m4u/js-repository&#39;</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">// определение источника &quot;myMemory&quot;</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">&#39;myMemory&#39;</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">&#39;memory&#39;</span><span class="hl-1">, </span><span class="hl-5">// выбранный адаптер</span><br/><span class="hl-1">});</span><br/><br/><span class="hl-5">// определение модели &quot;country&quot;</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">&#39;country&#39;</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">&#39;myMemory&#39;</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">// тип &quot;string&quot;</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">// тип &quot;number&quot;</span><br/><span class="hl-1"> },</span><br/><span class="hl-1">})</span><br/><br/><span class="hl-5">// получение репозитория для модели &quot;country&quot;</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">&#39;country&#39;</span><span class="hl-1">);</span><br/><br/><span class="hl-5">// добавление нового документа в коллекцию &quot;country&quot;</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">&#39;Russia&#39;</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">// &quot;id&quot;: 1,</span><br/><span class="hl-5">// &quot;name&quot;: &quot;Russia&quot;,</span><br/><span class="hl-5">// &quot;population&quot;: 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">&#39;article&#39;</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">// тип свойства &quot;array&quot; (обязательно)</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">// тип элемента &quot;string&quot;</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">=&gt;</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">// тип свойства &quot;string&quot; (обязательно)</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">=&gt;</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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@e22m4u/js-repository",
3
- "version": "0.1.4",
3
+ "version": "0.1.5",
4
4
  "description": "Модуль для работы с базами данных для Node.js",
5
5
  "type": "module",
6
6
  "main": "src/index.js",
@@ -64,14 +64,9 @@ export class ModelDataValidator extends Service {
64
64
  propValue,
65
65
  );
66
66
  }
67
- // DataType
68
- await this._validatePropertyValueType(
69
- modelName,
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 value type.
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 _validatePropertyValueType(
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._validatePropertyValueType(
137
+ this._validateByPropertyType(
143
138
  modelName,
144
139
  propName,
145
140
  propDef,