@mlagie/sql-connector 1.4.4 → 1.4.6

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
@@ -1,6 +1,6 @@
1
1
  # sql-connector
2
- <img src="https://api.visitorbadge.io/api/VisitorHit?user=lagie-marin&repo=sql-connector-badge&countColor=%237B1E7A" height="20px"/> ![GitHub package.json version](https://img.shields.io/github/package-json/v/lagie-marin/sql-connector?color=#008000) ![NPM Downloads](https://img.shields.io/npm/d18m/%40mlagie%2Fsql-connector?color=#008000) ![NPM Downloads](https://img.shields.io/npm/dw/%40mlagie%2Fsql-connector?color=#008000) ![GitHub followers](https://img.shields.io/github/followers/lagie-marin?style=plastic&color=color%3D%23008000) ![GitHub repo size](https://img.shields.io/github/repo-size/lagie-marin/sql-connector?color=%green)
3
- ![GitHub last commit](https://img.shields.io/github/last-commit/lagie-marin/sql-connector) ![GitHub forks](https://img.shields.io/github/forks/lagie-marin/sql-connector?style=plastic&color=%green)
2
+ ![GitHub package.json version](https://img.shields.io/github/package-json/v/lagie-marin/sql-connector?color=#008000) ![NPM Downloads](https://img.shields.io/npm/d18m/%40mlagie%2Fsql-connector?color=#008000) ![NPM Downloads](https://img.shields.io/npm/dw/%40mlagie%2Fsql-connector?color=#008000) ![GitHub followers](https://img.shields.io/github/followers/lagie-marin?style=plastic&color=color%3D%23008000) ![GitHub repo size](https://img.shields.io/github/repo-size/lagie-marin/sql-connector?color=%green)
3
+ ![GitHub last commit](https://img.shields.io/github/last-commit/lagie-marin/sql-connector)
4
4
 
5
5
  # Documentation du module `sql-connector`
6
6
 
@@ -9,7 +9,7 @@ Le module `sql-connector` permet de gérer les connexions à une base de donnée
9
9
  ## Importation du module
10
10
 
11
11
  ```javascript
12
- const { Schema, connect, logout, Model, client, sqlType } = require('sql-connector');
12
+ const { Schema, connect, logout, Model, client, sqlTypeMap } = require('sql-connector');
13
13
  ```
14
14
 
15
15
  ### Fonctions
@@ -244,7 +244,7 @@ await userInstance.updateOne({ mdp: 'newpassword' });
244
244
  await userInstance.delete({ token: 'abc123' });
245
245
  ```
246
246
  # Types SQL
247
- Le module fournit également une map des types SQL courants via `sqlType`.
247
+ Le module fournit une map des types SQL courants via `sqlTypeMap`.
248
248
  ## Type
249
249
  * String
250
250
  * Number
@@ -258,7 +258,6 @@ Le module fournit également une map des types SQL courants via `sqlType`.
258
258
  * Timestamp
259
259
  * ### Exemple
260
260
  ```javascript
261
- console.log(sqlType.String); // "String"
262
261
  console.log(sqlTypeMap.String); // "VARCHAR"
263
262
  ```
264
263
  ## Conclusion
package/index.d.ts CHANGED
@@ -248,4 +248,4 @@ export class ModelInstance {
248
248
  }
249
249
 
250
250
  export const client: Record<string, any>;
251
- export const sqlType: Record<string, SqlType>;
251
+ export const sqlTypeMap: Record<SqlType, string>;
package/index.js CHANGED
@@ -2,9 +2,8 @@ const { Model } = require("./src/models/Model");
2
2
  const { ModelInstance } = require("./src/models/ModelInstance");
3
3
  const { connect, logout } = require("./src/db/connect");
4
4
  const {Schema} = require("./src/models/Schema");
5
- const { sqlType } = require("./src/utils/sqlType");
6
5
  const { sqlTypeMap } = require("./src/utils/sqlTypeMap");
7
6
 
8
7
  let client = {};
9
8
 
10
- module.exports = { client, connect, logout, Schema, Model, ModelInstance, sqlType, sqlTypeMap }
9
+ module.exports = { client, connect, logout, Schema, Model, ModelInstance, sqlTypeMap }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mlagie/sql-connector",
3
- "version": "1.4.4",
3
+ "version": "1.4.6",
4
4
  "description": "Le module sql-connector permet de gérer les connexions à une base de données MySQL, de définir des schémas de tables, et d'interagir avec les données de manière simple et efficace.",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -12,7 +12,19 @@
12
12
  },
13
13
  "keywords": [
14
14
  "sql",
15
- "schema"
15
+ "schema",
16
+ "database",
17
+ "orm",
18
+ "model",
19
+ "query",
20
+ "connector",
21
+ "mysql2",
22
+ "sync",
23
+ "migration",
24
+ "builder",
25
+ "pool",
26
+ "mariadb",
27
+ "rdbms"
16
28
  ],
17
29
  "author": "lagie-marin",
18
30
  "license": "MIT",
@@ -19,6 +19,70 @@ function getFieldType(field) {
19
19
  }
20
20
  }
21
21
 
22
+ function isDateLikeType(fieldType) {
23
+ const normalizedType = String(fieldType ?? "").toLowerCase();
24
+ return ["date", "datetime", "timestamp", "now"].includes(normalizedType);
25
+ }
26
+
27
+ function isSqlTemporalDefault(defaultValue) {
28
+ if (typeof defaultValue !== "string") return false;
29
+
30
+ const normalizedValue = defaultValue.trim().toUpperCase();
31
+ return ["CURRENT_TIMESTAMP", "CURRENT_TIMESTAMP()", "NOW()"].includes(normalizedValue);
32
+ }
33
+
34
+ function formatDefaultSql(defaultValue, fieldType) {
35
+ if (defaultValue === undefined) return null;
36
+ if (defaultValue === null) return "DEFAULT NULL";
37
+
38
+ if (typeof defaultValue === "function") {
39
+ if (isDateLikeType(fieldType)) return "DEFAULT CURRENT_TIMESTAMP";
40
+ return formatDefaultSql(defaultValue(), fieldType);
41
+ }
42
+
43
+ if (defaultValue instanceof Date) {
44
+ const formattedDate = defaultValue.toISOString().slice(0, 19).replace("T", " ");
45
+ return `DEFAULT "${formattedDate}"`;
46
+ }
47
+
48
+ if (isSqlTemporalDefault(defaultValue)) return "DEFAULT CURRENT_TIMESTAMP";
49
+ if (typeof defaultValue === "string") return `DEFAULT "${defaultValue.replace(/"/g, '\\"')}"`;
50
+ if (typeof defaultValue === "number" || typeof defaultValue === "bigint") return `DEFAULT ${defaultValue}`;
51
+ if (typeof defaultValue === "boolean") return `DEFAULT ${defaultValue ? 1 : 0}`;
52
+ if (typeof defaultValue === "object") return `DEFAULT "${JSON.stringify(defaultValue).replace(/"/g, '\\"')}"`;
53
+
54
+ return `DEFAULT "${String(defaultValue).replace(/"/g, '\\"')}"`;
55
+ }
56
+
57
+ function normalizeDefaultValue(defaultValue, fieldType) {
58
+ if (defaultValue === undefined) return null;
59
+ if (defaultValue === null) return "null";
60
+
61
+ if (typeof defaultValue === "function") {
62
+ if (isDateLikeType(fieldType)) return "current_timestamp";
63
+ return normalizeDefaultValue(defaultValue(), fieldType);
64
+ }
65
+
66
+ if (defaultValue instanceof Date) {
67
+ return defaultValue.toISOString().slice(0, 19).replace("T", " ");
68
+ }
69
+
70
+ if (isSqlTemporalDefault(defaultValue)) return "current_timestamp";
71
+ if (typeof defaultValue === "boolean") return defaultValue ? "1" : "0";
72
+ if (typeof defaultValue === "object") return JSON.stringify(defaultValue);
73
+
74
+ return String(defaultValue);
75
+ }
76
+
77
+ function normalizeDbDefaultValue(defaultValue) {
78
+ if (defaultValue === null || defaultValue === undefined) return null;
79
+
80
+ const normalizedValue = String(defaultValue).trim();
81
+ if (/^current_timestamp(\(\))?$/i.test(normalizedValue)) return "current_timestamp";
82
+ if (/^now\(\)$/i.test(normalizedValue)) return "current_timestamp";
83
+ return normalizedValue;
84
+ }
85
+
22
86
  function generateValueSQL(value) {
23
87
  return value.map(item => {
24
88
  if (item === null) return 'NULL';
@@ -67,8 +131,8 @@ function getColumnDefinition(fieldName, field) {
67
131
  colDef = `${sqlTypeMap[fieldType]}${(sqlTypeMap[fieldType] == "VARCHAR" || sqlTypeMap[fieldType] == "INT") ? `(${field.length > 0 ? field.length : 255})` : ""}`;
68
132
  }
69
133
  if (field.required) colDef += ' NOT NULL';
70
- if (field.default !== undefined && field.default != null) colDef += ` DEFAULT "${field.default}"`;
71
- if (field.default === null) colDef += ` DEFAULT NULL`;
134
+ const defaultDefinition = formatDefaultSql(field.default, fieldType);
135
+ if (defaultDefinition !== null) colDef += ` ${defaultDefinition}`;
72
136
  if (field.unique) colDef += ' UNIQUE';
73
137
  if (field.auto_increment) colDef += ' AUTO_INCREMENT';
74
138
  if (field.primary_key) colDef += ' PRIMARY KEY';
@@ -294,8 +358,8 @@ class Model {
294
358
  }
295
359
 
296
360
  // --- Vérification DEFAULT VALUE ---
297
- const expectedDefault = field.default !== undefined ? field.default : null;
298
- const currentDefault = currentCol.Default;
361
+ const expectedDefault = normalizeDefaultValue(field.default, fieldType);
362
+ const currentDefault = normalizeDbDefaultValue(currentCol.Default);
299
363
 
300
364
  // Gestion spéciale pour les valeurs par défaut
301
365
  if (expectedDefault !== null && currentDefault === null) {
@@ -10,6 +10,7 @@ const sqlTypeMap = {
10
10
  Text: 'TEXT',
11
11
  DateTime: "DATETIME",
12
12
  Timestamp: "TIMESTAMP",
13
+ CurrentTimestamp: "CURRENT_TIMESTAMP"
13
14
  };
14
15
 
15
16
  module.exports = {sqlTypeMap}
@@ -1,15 +0,0 @@
1
- const sqlType = {
2
- String: "String",
3
- Number: "Number",
4
- Boolean: "Boolean",
5
- Date: "Date",
6
- Object: "Object",
7
- Array: "Array",
8
- Now: "Now",
9
- Float: "Float",
10
- Text: "Text",
11
- DateTime: "DateTime",
12
- Timestamp: "Timestamp",
13
- };
14
-
15
- module.exports = { sqlType }