xansql 1.0.8 → 1.0.9

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.
Files changed (212) hide show
  1. package/core/Xansql.cjs +7 -8
  2. package/core/Xansql.cjs.map +1 -1
  3. package/core/Xansql.d.ts +2 -3
  4. package/core/Xansql.mjs +7 -8
  5. package/core/Xansql.mjs.map +1 -1
  6. package/core/classes/ForeignInfo.cjs +3 -2
  7. package/core/classes/ForeignInfo.cjs.map +1 -1
  8. package/core/classes/ForeignInfo.d.ts +1 -2
  9. package/core/classes/ForeignInfo.mjs +3 -2
  10. package/core/classes/ForeignInfo.mjs.map +1 -1
  11. package/core/classes/Migration/TableMigration.cjs +24 -15
  12. package/core/classes/Migration/TableMigration.cjs.map +1 -1
  13. package/core/classes/Migration/TableMigration.mjs +25 -16
  14. package/core/classes/Migration/TableMigration.mjs.map +1 -1
  15. package/core/classes/Migration/index.cjs +13 -10
  16. package/core/classes/Migration/index.cjs.map +1 -1
  17. package/core/classes/Migration/index.mjs +14 -11
  18. package/core/classes/Migration/index.mjs.map +1 -1
  19. package/core/classes/{ModelFormatter.cjs → ModelFactory.cjs} +82 -56
  20. package/core/classes/ModelFactory.cjs.map +1 -0
  21. package/core/classes/{ModelFormatter.d.ts → ModelFactory.d.ts} +7 -2
  22. package/core/classes/{ModelFormatter.mjs → ModelFactory.mjs} +82 -56
  23. package/core/classes/ModelFactory.mjs.map +1 -0
  24. package/core/types.d.ts +1 -1
  25. package/dialect/MysqlDialect.cjs +7 -4
  26. package/dialect/MysqlDialect.cjs.map +1 -1
  27. package/dialect/MysqlDialect.d.ts +7 -4
  28. package/dialect/MysqlDialect.mjs +7 -4
  29. package/dialect/MysqlDialect.mjs.map +1 -1
  30. package/dialect/PostgresDialect.cjs +5 -2
  31. package/dialect/PostgresDialect.cjs.map +1 -1
  32. package/dialect/PostgresDialect.d.ts +5 -2
  33. package/dialect/PostgresDialect.mjs +5 -2
  34. package/dialect/PostgresDialect.mjs.map +1 -1
  35. package/dialect/SqliteDialect.cjs +3 -2
  36. package/dialect/SqliteDialect.cjs.map +1 -1
  37. package/dialect/SqliteDialect.d.ts +3 -2
  38. package/dialect/SqliteDialect.mjs +3 -2
  39. package/dialect/SqliteDialect.mjs.map +1 -1
  40. package/dialect/XansqlBridge/XansqlBridgeServer.cjs.map +1 -1
  41. package/dialect/XansqlBridge/XansqlBridgeServer.mjs.map +1 -1
  42. package/dialect/XansqlBridge/base.cjs +10 -5
  43. package/dialect/XansqlBridge/base.cjs.map +1 -1
  44. package/dialect/XansqlBridge/base.mjs +10 -5
  45. package/dialect/XansqlBridge/base.mjs.map +1 -1
  46. package/model/Args/WhereArgs.cjs +5 -8
  47. package/model/Args/WhereArgs.cjs.map +1 -1
  48. package/model/Args/WhereArgs.mjs +6 -9
  49. package/model/Args/WhereArgs.mjs.map +1 -1
  50. package/model/Base.cjs +2 -1
  51. package/model/Base.cjs.map +1 -1
  52. package/model/Base.mjs +2 -1
  53. package/model/Base.mjs.map +1 -1
  54. package/model/Executer/Aggregate/SelectArgs.cjs +2 -1
  55. package/model/Executer/Aggregate/SelectArgs.cjs.map +1 -1
  56. package/model/Executer/Aggregate/SelectArgs.mjs +2 -1
  57. package/model/Executer/Aggregate/SelectArgs.mjs.map +1 -1
  58. package/model/Executer/Aggregate/index.cjs +4 -4
  59. package/model/Executer/Aggregate/index.cjs.map +1 -1
  60. package/model/Executer/Aggregate/index.mjs +4 -4
  61. package/model/Executer/Aggregate/index.mjs.map +1 -1
  62. package/model/Executer/Create/CreateDataArgs.cjs +9 -5
  63. package/model/Executer/Create/CreateDataArgs.cjs.map +1 -1
  64. package/model/Executer/Create/CreateDataArgs.mjs +10 -6
  65. package/model/Executer/Create/CreateDataArgs.mjs.map +1 -1
  66. package/model/Executer/Create/index.cjs +1 -1
  67. package/model/Executer/Create/index.cjs.map +1 -1
  68. package/model/Executer/Create/index.mjs +1 -1
  69. package/model/Executer/Create/index.mjs.map +1 -1
  70. package/model/Executer/Delete/index.cjs +2 -1
  71. package/model/Executer/Delete/index.cjs.map +1 -1
  72. package/model/Executer/Delete/index.mjs +2 -1
  73. package/model/Executer/Delete/index.mjs.map +1 -1
  74. package/model/Executer/Find/SelectArgs.cjs +3 -3
  75. package/model/Executer/Find/SelectArgs.cjs.map +1 -1
  76. package/model/Executer/Find/SelectArgs.mjs +3 -3
  77. package/model/Executer/Find/SelectArgs.mjs.map +1 -1
  78. package/model/Executer/Update/UpdateDataArgs.cjs +4 -4
  79. package/model/Executer/Update/UpdateDataArgs.cjs.map +1 -1
  80. package/model/Executer/Update/UpdateDataArgs.mjs +5 -5
  81. package/model/Executer/Update/UpdateDataArgs.mjs.map +1 -1
  82. package/model/Executer/Update/index.cjs +1 -1
  83. package/model/Executer/Update/index.cjs.map +1 -1
  84. package/model/Executer/Update/index.mjs +1 -1
  85. package/model/Executer/Update/index.mjs.map +1 -1
  86. package/model/include/ValueFormatter.cjs +72 -17
  87. package/model/include/ValueFormatter.cjs.map +1 -1
  88. package/model/include/ValueFormatter.d.ts +1 -1
  89. package/model/include/ValueFormatter.mjs +72 -17
  90. package/model/include/ValueFormatter.mjs.map +1 -1
  91. package/model/index.cjs +8 -7
  92. package/model/index.cjs.map +1 -1
  93. package/model/index.mjs +8 -7
  94. package/model/index.mjs.map +1 -1
  95. package/package.json +12 -7
  96. package/utils/index.cjs +5 -2
  97. package/utils/index.cjs.map +1 -1
  98. package/utils/index.d.ts +2 -1
  99. package/utils/index.mjs +5 -3
  100. package/utils/index.mjs.map +1 -1
  101. package/xt/additional/IP.cjs +22 -0
  102. package/xt/additional/IP.cjs.map +1 -0
  103. package/xt/additional/IP.d.ts +6 -0
  104. package/xt/additional/IP.mjs +20 -0
  105. package/xt/additional/IP.mjs.map +1 -0
  106. package/xt/additional/Name.cjs +21 -0
  107. package/xt/additional/Name.cjs.map +1 -0
  108. package/xt/additional/Name.d.ts +6 -0
  109. package/xt/additional/Name.mjs +19 -0
  110. package/xt/additional/Name.mjs.map +1 -0
  111. package/xt/additional/Password.cjs +25 -0
  112. package/xt/additional/Password.cjs.map +1 -0
  113. package/xt/additional/Password.d.ts +6 -0
  114. package/xt/additional/Password.mjs +23 -0
  115. package/xt/additional/Password.mjs.map +1 -0
  116. package/xt/additional/Phone.cjs +21 -0
  117. package/xt/additional/Phone.cjs.map +1 -0
  118. package/xt/additional/Phone.d.ts +6 -0
  119. package/xt/additional/Phone.mjs +19 -0
  120. package/xt/additional/Phone.mjs.map +1 -0
  121. package/xt/additional/Photo.cjs +21 -0
  122. package/xt/additional/Photo.cjs.map +1 -0
  123. package/xt/additional/Photo.d.ts +6 -0
  124. package/xt/additional/Photo.mjs +19 -0
  125. package/xt/additional/Photo.mjs.map +1 -0
  126. package/xt/additional/Slug.cjs +21 -0
  127. package/xt/additional/Slug.cjs.map +1 -0
  128. package/xt/additional/Slug.d.ts +6 -0
  129. package/xt/additional/Slug.mjs +19 -0
  130. package/xt/additional/Slug.mjs.map +1 -0
  131. package/xt/additional/Url.cjs +26 -0
  132. package/xt/additional/Url.cjs.map +1 -0
  133. package/xt/additional/Url.d.ts +6 -0
  134. package/xt/additional/Url.mjs +24 -0
  135. package/xt/additional/Url.mjs.map +1 -0
  136. package/xt/additional/Username.cjs +21 -0
  137. package/xt/additional/Username.cjs.map +1 -0
  138. package/xt/additional/Username.d.ts +6 -0
  139. package/xt/additional/Username.mjs +19 -0
  140. package/xt/additional/Username.mjs.map +1 -0
  141. package/xt/fields/Array.cjs +9 -2
  142. package/xt/fields/Array.cjs.map +1 -1
  143. package/xt/fields/Array.d.ts +2 -0
  144. package/xt/fields/Array.mjs +9 -2
  145. package/xt/fields/Array.mjs.map +1 -1
  146. package/xt/fields/Boolean.cjs +10 -5
  147. package/xt/fields/Boolean.cjs.map +1 -1
  148. package/xt/fields/Boolean.d.ts +2 -0
  149. package/xt/fields/Boolean.mjs +10 -5
  150. package/xt/fields/Boolean.mjs.map +1 -1
  151. package/xt/fields/Date.cjs +12 -12
  152. package/xt/fields/Date.cjs.map +1 -1
  153. package/xt/fields/Date.d.ts +2 -0
  154. package/xt/fields/Date.mjs +12 -12
  155. package/xt/fields/Date.mjs.map +1 -1
  156. package/xt/fields/Enum.cjs +10 -4
  157. package/xt/fields/Enum.cjs.map +1 -1
  158. package/xt/fields/Enum.d.ts +2 -0
  159. package/xt/fields/Enum.mjs +10 -4
  160. package/xt/fields/Enum.mjs.map +1 -1
  161. package/xt/fields/File.cjs +9 -2
  162. package/xt/fields/File.cjs.map +1 -1
  163. package/xt/fields/File.d.ts +2 -0
  164. package/xt/fields/File.mjs +9 -2
  165. package/xt/fields/File.mjs.map +1 -1
  166. package/xt/fields/IDField.cjs +8 -0
  167. package/xt/fields/IDField.cjs.map +1 -1
  168. package/xt/fields/IDField.d.ts +2 -0
  169. package/xt/fields/IDField.mjs +8 -0
  170. package/xt/fields/IDField.mjs.map +1 -1
  171. package/xt/fields/Number.cjs +10 -5
  172. package/xt/fields/Number.cjs.map +1 -1
  173. package/xt/fields/Number.d.ts +2 -0
  174. package/xt/fields/Number.mjs +10 -5
  175. package/xt/fields/Number.mjs.map +1 -1
  176. package/xt/fields/Object.cjs +10 -5
  177. package/xt/fields/Object.cjs.map +1 -1
  178. package/xt/fields/Object.d.ts +2 -0
  179. package/xt/fields/Object.mjs +10 -5
  180. package/xt/fields/Object.mjs.map +1 -1
  181. package/xt/fields/Record.cjs +10 -5
  182. package/xt/fields/Record.cjs.map +1 -1
  183. package/xt/fields/Record.d.ts +2 -0
  184. package/xt/fields/Record.mjs +10 -5
  185. package/xt/fields/Record.mjs.map +1 -1
  186. package/xt/fields/Schema.cjs +12 -1
  187. package/xt/fields/Schema.cjs.map +1 -1
  188. package/xt/fields/Schema.d.ts +4 -1
  189. package/xt/fields/Schema.mjs +12 -1
  190. package/xt/fields/Schema.mjs.map +1 -1
  191. package/xt/fields/String.cjs +12 -9
  192. package/xt/fields/String.cjs.map +1 -1
  193. package/xt/fields/String.d.ts +2 -0
  194. package/xt/fields/String.mjs +12 -9
  195. package/xt/fields/String.mjs.map +1 -1
  196. package/xt/fields/Tuple.cjs +10 -5
  197. package/xt/fields/Tuple.cjs.map +1 -1
  198. package/xt/fields/Tuple.d.ts +2 -0
  199. package/xt/fields/Tuple.mjs +10 -5
  200. package/xt/fields/Tuple.mjs.map +1 -1
  201. package/xt/fields/Union.cjs +10 -5
  202. package/xt/fields/Union.cjs.map +1 -1
  203. package/xt/fields/Union.d.ts +2 -0
  204. package/xt/fields/Union.mjs +10 -5
  205. package/xt/fields/Union.mjs.map +1 -1
  206. package/xt/index.cjs +16 -100
  207. package/xt/index.cjs.map +1 -1
  208. package/xt/index.d.ts +16 -9
  209. package/xt/index.mjs +16 -100
  210. package/xt/index.mjs.map +1 -1
  211. package/core/classes/ModelFormatter.cjs.map +0 -1
  212. package/core/classes/ModelFormatter.mjs.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xansql",
3
- "version": "1.0.8",
3
+ "version": "1.0.9",
4
4
  "main": "./index.js",
5
5
  "module": "./index.js",
6
6
  "types": "./index.d.ts",
@@ -8,7 +8,7 @@
8
8
  "keywords": [],
9
9
  "sideEffects": false,
10
10
  "dependencies": {
11
- "xanv": "^1.1.2"
11
+ "xanv": "^1.1.5"
12
12
  },
13
13
  "devDependencies": {
14
14
  "@faker-js/faker": "^9.7.0",
@@ -26,20 +26,25 @@
26
26
  "pg": "^8.16.3",
27
27
  "react": "^19.1.0",
28
28
  "react-dom": "^19.1.0",
29
- "securequ": "^1.1.7",
29
+ "securequ": "^1.1.9",
30
30
  "tslib": "^2.8.1",
31
31
  "typescript": "^5.9.3"
32
32
  },
33
33
  "exports": {
34
34
  ".": {
35
35
  "import": "./index.mjs",
36
- "require": "./index.js",
37
- "types": "./index.d.ts"
36
+ "require": "./index.js"
38
37
  },
39
38
  "./dialect/*": {
40
39
  "import": "./dialect/*.mjs",
41
- "require": "./dialect/*.js",
42
- "types": "./dialect/*.d.ts"
40
+ "require": "./dialect/*.js"
41
+ }
42
+ },
43
+ "typesVersions": {
44
+ "*": {
45
+ "dialect/*": [
46
+ "./dialect/*.d.ts"
47
+ ]
43
48
  }
44
49
  }
45
50
  }
package/utils/index.cjs CHANGED
@@ -2,7 +2,6 @@
2
2
 
3
3
  const isServer = () => typeof window === 'undefined';
4
4
  const isArray = (v) => Array.isArray(v);
5
- // export const isObject = (v: any) => typeof v === 'object' && v !== null && !isArray(v) && !(v instanceof Date) && !(v instanceof RegExp) && !(v instanceof Buffer) && !(v instanceof Uint8Array) && !(v instanceof ArrayBuffer)
6
5
  const isObject = (v) => Object.prototype.toString.call(v) === '[object Object]';
7
6
  const isString = (v) => typeof v === 'string';
8
7
  const isNumber = (v) => typeof v === 'number' && !isNaN(v);
@@ -11,7 +10,7 @@ const formatValue = (v, xanv) => {
11
10
  if (isArray(v))
12
11
  return v.map((item) => formatValue(item, xanv)).join(',');
13
12
  !!xanv && xanv.parse(v);
14
- if (v instanceof Date)
13
+ if (iof(v, Date))
15
14
  v = v.toISOString();
16
15
  if (isString(v))
17
16
  return `'${escapeSqlValue(v)}'`;
@@ -44,6 +43,9 @@ const freezeObject = (obj) => {
44
43
  });
45
44
  return Object.freeze(obj);
46
45
  };
46
+ const iof = (field, ...instances) => {
47
+ return instances.some(instance => field instanceof instance || (field === null || field === void 0 ? void 0 : field.constructor) === instance.constructor);
48
+ };
47
49
  // export const ErrorWhene = (_if: any, message: string) => {
48
50
  // if (_if) {
49
51
  // throw new Error(message);
@@ -97,6 +99,7 @@ exports.escapeSqlValue = escapeSqlValue;
97
99
  exports.formatValue = formatValue;
98
100
  exports.freezeObject = freezeObject;
99
101
  exports.hash = hash;
102
+ exports.iof = iof;
100
103
  exports.isArray = isArray;
101
104
  exports.isBoolean = isBoolean;
102
105
  exports.isNumber = isNumber;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../src/utils/index.ts"],"sourcesContent":["import XanvType from \"xanv/XanvType\"\nimport { XansqlDialectEngine } from \"../core/types\";\n\n\nexport const isServer = () => typeof window === 'undefined'\nexport const isArray = (v: any) => Array.isArray(v)\n// export const isObject = (v: any) => typeof v === 'object' && v !== null && !isArray(v) && !(v instanceof Date) && !(v instanceof RegExp) && !(v instanceof Buffer) && !(v instanceof Uint8Array) && !(v instanceof ArrayBuffer)\nexport const isObject = (v: any) => Object.prototype.toString.call(v) === '[object Object]';\nexport const isString = (v: any) => typeof v === 'string'\nexport const isNumber = (v: any) => typeof v === 'number' && !isNaN(v)\nexport const isBoolean = (v: any) => typeof v === 'boolean'\n\nexport const formatValue = (v: any, xanv?: XanvType<any, any>): any => {\n if (isArray(v)) return v.map((item) => formatValue(item, xanv)).join(',')\n !!xanv && xanv.parse(v);\n if (v instanceof Date) v = v.toISOString()\n if (isString(v)) return `'${escapeSqlValue(v)}'`\n if (isNumber(v)) return v\n if (isBoolean(v)) return v ? 'TRUE' : 'FALSE'\n if (v === null) return 'NULL'\n if (v === undefined) return 'NULL'\n}\n\nexport const arrayMove = (arr: any[], fromIndex: number, toIndex: number) => {\n const newArr = [...arr];\n const item = newArr.splice(fromIndex, 1)[0];\n newArr.splice(toIndex, 0, item);\n return newArr;\n}\n\nexport const escapeSqlValue = (value: string): string => {\n return value\n .replace(/'/g, \"''\") // Escape single quote\n .replace(/\\x00/g, '\\\\0'); // Escape null byte (rare but can break SQL)\n}\n\n\nexport const freezeObject = (obj: any) => {\n Object.getOwnPropertyNames(obj).forEach((prop) => {\n const value = obj[prop];\n if (value && typeof value === \"object\") {\n freezeObject(value); // recursively freeze\n }\n });\n return Object.freeze(obj);\n}\n\n\n\n// export const ErrorWhene = (_if: any, message: string) => {\n// if (_if) {\n// throw new Error(message);\n// }\n// }\n\nexport const quote = (engine: XansqlDialectEngine, identifier: string) => {\n if (engine === 'mysql') return `\\`${identifier}\\``;\n if (engine === 'postgresql' || engine === 'sqlite') return `\"${identifier}\"`;\n return identifier;\n}\n\nexport const uid = (str: string, length = 28): string => {\n let h1 = 0x811c9dc5;\n let h2 = 0x811c9dc5 ^ str.length;\n\n // Simple dual-hash loop\n for (let i = 0; i < str.length; i++) {\n const c = str.charCodeAt(i);\n h1 = Math.imul(h1 ^ c, 0x1000193);\n h2 = Math.imul(h2 ^ (c + i * 17), 0x85ebca6b);\n }\n\n // Base36 mix gives letters + digits\n let base = (h1 >>> 0).toString(36) + (h2 >>> 0).toString(36);\n\n // Add derived chars from original string to strengthen variety\n for (let i = 0; i < str.length; i++) {\n const code = str.charCodeAt(i);\n base += ((code * (i + 31)) % 36).toString(36);\n }\n\n // Scramble characters deterministically based on input\n const arr = base.split('');\n for (let i = arr.length - 1; i > 0; i--) {\n const j = (str.charCodeAt(i % str.length) + i * 19) % arr.length;\n [arr[i], arr[j]] = [arr[j], arr[i]];\n }\n\n // Ensure letters are mixed in\n const mixed = arr\n .map((c, i) =>\n i % 3 === 0 ? String.fromCharCode(97 + (c.charCodeAt(0) % 26)) : c\n )\n .join('');\n\n return mixed.slice(0, length);\n}\n\nexport function hash(length = 16): string {\n let result = '';\n while (result.length < length) {\n result += Math.random().toString(36).slice(2);\n }\n return result.slice(0, length);\n}\n\n"],"names":[],"mappings":";;AAIO,MAAM,QAAQ,GAAG,MAAM,OAAO,MAAM,KAAK;AACzC,MAAM,OAAO,GAAG,CAAC,CAAM,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC;AAClD;MACa,QAAQ,GAAG,CAAC,CAAM,KAAK,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK;AACnE,MAAM,QAAQ,GAAG,CAAC,CAAM,KAAK,OAAO,CAAC,KAAK;AAC1C,MAAM,QAAQ,GAAG,CAAC,CAAM,KAAK,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9D,MAAM,SAAS,GAAG,CAAC,CAAM,KAAK,OAAO,CAAC,KAAK;MAErC,WAAW,GAAG,CAAC,CAAM,EAAE,IAAyB,KAAS;IACnE,IAAI,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;IACzE,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACvB,IAAI,CAAC,YAAY,IAAI;AAAE,QAAA,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE;IAC1C,IAAI,QAAQ,CAAC,CAAC,CAAC;AAAE,QAAA,OAAO,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG;IAChD,IAAI,QAAQ,CAAC,CAAC,CAAC;AAAE,QAAA,OAAO,CAAC;IACzB,IAAI,SAAS,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,GAAG,MAAM,GAAG,OAAO;IAC7C,IAAI,CAAC,KAAK,IAAI;AAAE,QAAA,OAAO,MAAM;IAC7B,IAAI,CAAC,KAAK,SAAS;AAAE,QAAA,OAAO,MAAM;AACrC;AAEO,MAAM,SAAS,GAAG,CAAC,GAAU,EAAE,SAAiB,EAAE,OAAe,KAAI;AACzE,IAAA,MAAM,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC;AACvB,IAAA,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC;AAC/B,IAAA,OAAO,MAAM;AAChB;AAEO,MAAM,cAAc,GAAG,CAAC,KAAa,KAAY;AACrD,IAAA,OAAO;AACH,SAAA,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;AACnB,SAAA,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAC/B;AAGO,MAAM,YAAY,GAAG,CAAC,GAAQ,KAAI;IACtC,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC9C,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC;AACvB,QAAA,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACrC,YAAA,YAAY,CAAC,KAAK,CAAC,CAAC;QACvB;AACH,IAAA,CAAC,CAAC;AACF,IAAA,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;AAC5B;AAIA;AACA;AACA;AACA;AACA;MAEa,KAAK,GAAG,CAAC,MAA2B,EAAE,UAAkB,KAAI;IACtE,IAAI,MAAM,KAAK,OAAO;QAAE,OAAO,CAAA,EAAA,EAAK,UAAU,CAAA,EAAA,CAAI;AAClD,IAAA,IAAI,MAAM,KAAK,YAAY,IAAI,MAAM,KAAK,QAAQ;QAAE,OAAO,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA,CAAG;AAC5E,IAAA,OAAO,UAAU;AACpB;AAEO,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,MAAM,GAAG,EAAE,KAAY;IACrD,IAAI,EAAE,GAAG,UAAU;AACnB,IAAA,IAAI,EAAE,GAAG,UAAU,GAAG,GAAG,CAAC,MAAM;;AAGhC,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAClC,MAAM,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;QAC3B,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,SAAS,CAAC;AACjC,QAAA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,UAAU,CAAC;IAChD;;IAGA,IAAI,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC;;AAG5D,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAClC,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;AAC9B,QAAA,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC;IAChD;;IAGA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;AAC1B,IAAA,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;QACtC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC,MAAM;QAChE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IACtC;;IAGA,MAAM,KAAK,GAAG;AACV,SAAA,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KACP,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC;SAEpE,IAAI,CAAC,EAAE,CAAC;IAEZ,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC;AAChC;AAEM,SAAU,IAAI,CAAC,MAAM,GAAG,EAAE,EAAA;IAC7B,IAAI,MAAM,GAAG,EAAE;AACf,IAAA,OAAO,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE;AAC5B,QAAA,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAChD;IACA,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC;AACjC;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":["../../src/utils/index.ts"],"sourcesContent":["import XanvType from \"xanv/XanvType\"\nimport { XansqlDialectEngine } from \"../core/types\";\n\nexport const isServer = () => typeof window === 'undefined'\nexport const isArray = (v: any) => Array.isArray(v)\nexport const isObject = (v: any) => Object.prototype.toString.call(v) === '[object Object]';\nexport const isString = (v: any) => typeof v === 'string'\nexport const isNumber = (v: any) => typeof v === 'number' && !isNaN(v)\nexport const isBoolean = (v: any) => typeof v === 'boolean'\n\nexport const formatValue = (v: any, xanv?: XanvType<any>): any => {\n if (isArray(v)) return v.map((item) => formatValue(item, xanv)).join(',')\n !!xanv && xanv.parse(v);\n if (iof(v, Date)) v = v.toISOString()\n if (isString(v)) return `'${escapeSqlValue(v)}'`\n if (isNumber(v)) return v\n if (isBoolean(v)) return v ? 'TRUE' : 'FALSE'\n if (v === null) return 'NULL'\n if (v === undefined) return 'NULL'\n}\n\nexport const arrayMove = (arr: any[], fromIndex: number, toIndex: number) => {\n const newArr = [...arr];\n const item = newArr.splice(fromIndex, 1)[0];\n newArr.splice(toIndex, 0, item);\n return newArr;\n}\n\nexport const escapeSqlValue = (value: string): string => {\n return value\n .replace(/'/g, \"''\") // Escape single quote\n .replace(/\\x00/g, '\\\\0'); // Escape null byte (rare but can break SQL)\n}\n\n\nexport const freezeObject = (obj: any) => {\n Object.getOwnPropertyNames(obj).forEach((prop) => {\n const value = obj[prop];\n if (value && typeof value === \"object\") {\n freezeObject(value); // recursively freeze\n }\n });\n return Object.freeze(obj);\n}\n\n\nexport const iof = (field: any, ...instances: any[]) => {\n return instances.some(instance => field instanceof instance || field?.constructor === instance.constructor);\n}\n\n\n\n// export const ErrorWhene = (_if: any, message: string) => {\n// if (_if) {\n// throw new Error(message);\n// }\n// }\n\nexport const quote = (engine: XansqlDialectEngine, identifier: string) => {\n if (engine === 'mysql') return `\\`${identifier}\\``;\n if (engine === 'postgresql' || engine === 'sqlite') return `\"${identifier}\"`;\n return identifier;\n}\n\nexport const uid = (str: string, length = 28): string => {\n let h1 = 0x811c9dc5;\n let h2 = 0x811c9dc5 ^ str.length;\n\n // Simple dual-hash loop\n for (let i = 0; i < str.length; i++) {\n const c = str.charCodeAt(i);\n h1 = Math.imul(h1 ^ c, 0x1000193);\n h2 = Math.imul(h2 ^ (c + i * 17), 0x85ebca6b);\n }\n\n // Base36 mix gives letters + digits\n let base = (h1 >>> 0).toString(36) + (h2 >>> 0).toString(36);\n\n // Add derived chars from original string to strengthen variety\n for (let i = 0; i < str.length; i++) {\n const code = str.charCodeAt(i);\n base += ((code * (i + 31)) % 36).toString(36);\n }\n\n // Scramble characters deterministically based on input\n const arr = base.split('');\n for (let i = arr.length - 1; i > 0; i--) {\n const j = (str.charCodeAt(i % str.length) + i * 19) % arr.length;\n [arr[i], arr[j]] = [arr[j], arr[i]];\n }\n\n // Ensure letters are mixed in\n const mixed = arr\n .map((c, i) =>\n i % 3 === 0 ? String.fromCharCode(97 + (c.charCodeAt(0) % 26)) : c\n )\n .join('');\n\n return mixed.slice(0, length);\n}\n\nexport function hash(length = 16): string {\n let result = '';\n while (result.length < length) {\n result += Math.random().toString(36).slice(2);\n }\n return result.slice(0, length);\n}\n\n"],"names":[],"mappings":"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"}
package/utils/index.d.ts CHANGED
@@ -6,10 +6,11 @@ export declare const isObject: (v: any) => boolean;
6
6
  export declare const isString: (v: any) => v is string;
7
7
  export declare const isNumber: (v: any) => boolean;
8
8
  export declare const isBoolean: (v: any) => v is boolean;
9
- export declare const formatValue: (v: any, xanv?: XanvType<any, any>) => any;
9
+ export declare const formatValue: (v: any, xanv?: XanvType<any>) => any;
10
10
  export declare const arrayMove: (arr: any[], fromIndex: number, toIndex: number) => any[];
11
11
  export declare const escapeSqlValue: (value: string) => string;
12
12
  export declare const freezeObject: (obj: any) => any;
13
+ export declare const iof: (field: any, ...instances: any[]) => boolean;
13
14
  export declare const quote: (engine: XansqlDialectEngine, identifier: string) => string;
14
15
  export declare const uid: (str: string, length?: number) => string;
15
16
  export declare function hash(length?: number): string;
package/utils/index.mjs CHANGED
@@ -1,6 +1,5 @@
1
1
  const isServer = () => typeof window === 'undefined';
2
2
  const isArray = (v) => Array.isArray(v);
3
- // export const isObject = (v: any) => typeof v === 'object' && v !== null && !isArray(v) && !(v instanceof Date) && !(v instanceof RegExp) && !(v instanceof Buffer) && !(v instanceof Uint8Array) && !(v instanceof ArrayBuffer)
4
3
  const isObject = (v) => Object.prototype.toString.call(v) === '[object Object]';
5
4
  const isString = (v) => typeof v === 'string';
6
5
  const isNumber = (v) => typeof v === 'number' && !isNaN(v);
@@ -9,7 +8,7 @@ const formatValue = (v, xanv) => {
9
8
  if (isArray(v))
10
9
  return v.map((item) => formatValue(item, xanv)).join(',');
11
10
  !!xanv && xanv.parse(v);
12
- if (v instanceof Date)
11
+ if (iof(v, Date))
13
12
  v = v.toISOString();
14
13
  if (isString(v))
15
14
  return `'${escapeSqlValue(v)}'`;
@@ -42,6 +41,9 @@ const freezeObject = (obj) => {
42
41
  });
43
42
  return Object.freeze(obj);
44
43
  };
44
+ const iof = (field, ...instances) => {
45
+ return instances.some(instance => field instanceof instance || (field === null || field === void 0 ? void 0 : field.constructor) === instance.constructor);
46
+ };
45
47
  // export const ErrorWhene = (_if: any, message: string) => {
46
48
  // if (_if) {
47
49
  // throw new Error(message);
@@ -90,5 +92,5 @@ function hash(length = 16) {
90
92
  return result.slice(0, length);
91
93
  }
92
94
 
93
- export { arrayMove, escapeSqlValue, formatValue, freezeObject, hash, isArray, isBoolean, isNumber, isObject, isServer, isString, quote, uid };
95
+ export { arrayMove, escapeSqlValue, formatValue, freezeObject, hash, iof, isArray, isBoolean, isNumber, isObject, isServer, isString, quote, uid };
94
96
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../src/utils/index.ts"],"sourcesContent":["import XanvType from \"xanv/XanvType\"\nimport { XansqlDialectEngine } from \"../core/types\";\n\n\nexport const isServer = () => typeof window === 'undefined'\nexport const isArray = (v: any) => Array.isArray(v)\n// export const isObject = (v: any) => typeof v === 'object' && v !== null && !isArray(v) && !(v instanceof Date) && !(v instanceof RegExp) && !(v instanceof Buffer) && !(v instanceof Uint8Array) && !(v instanceof ArrayBuffer)\nexport const isObject = (v: any) => Object.prototype.toString.call(v) === '[object Object]';\nexport const isString = (v: any) => typeof v === 'string'\nexport const isNumber = (v: any) => typeof v === 'number' && !isNaN(v)\nexport const isBoolean = (v: any) => typeof v === 'boolean'\n\nexport const formatValue = (v: any, xanv?: XanvType<any, any>): any => {\n if (isArray(v)) return v.map((item) => formatValue(item, xanv)).join(',')\n !!xanv && xanv.parse(v);\n if (v instanceof Date) v = v.toISOString()\n if (isString(v)) return `'${escapeSqlValue(v)}'`\n if (isNumber(v)) return v\n if (isBoolean(v)) return v ? 'TRUE' : 'FALSE'\n if (v === null) return 'NULL'\n if (v === undefined) return 'NULL'\n}\n\nexport const arrayMove = (arr: any[], fromIndex: number, toIndex: number) => {\n const newArr = [...arr];\n const item = newArr.splice(fromIndex, 1)[0];\n newArr.splice(toIndex, 0, item);\n return newArr;\n}\n\nexport const escapeSqlValue = (value: string): string => {\n return value\n .replace(/'/g, \"''\") // Escape single quote\n .replace(/\\x00/g, '\\\\0'); // Escape null byte (rare but can break SQL)\n}\n\n\nexport const freezeObject = (obj: any) => {\n Object.getOwnPropertyNames(obj).forEach((prop) => {\n const value = obj[prop];\n if (value && typeof value === \"object\") {\n freezeObject(value); // recursively freeze\n }\n });\n return Object.freeze(obj);\n}\n\n\n\n// export const ErrorWhene = (_if: any, message: string) => {\n// if (_if) {\n// throw new Error(message);\n// }\n// }\n\nexport const quote = (engine: XansqlDialectEngine, identifier: string) => {\n if (engine === 'mysql') return `\\`${identifier}\\``;\n if (engine === 'postgresql' || engine === 'sqlite') return `\"${identifier}\"`;\n return identifier;\n}\n\nexport const uid = (str: string, length = 28): string => {\n let h1 = 0x811c9dc5;\n let h2 = 0x811c9dc5 ^ str.length;\n\n // Simple dual-hash loop\n for (let i = 0; i < str.length; i++) {\n const c = str.charCodeAt(i);\n h1 = Math.imul(h1 ^ c, 0x1000193);\n h2 = Math.imul(h2 ^ (c + i * 17), 0x85ebca6b);\n }\n\n // Base36 mix gives letters + digits\n let base = (h1 >>> 0).toString(36) + (h2 >>> 0).toString(36);\n\n // Add derived chars from original string to strengthen variety\n for (let i = 0; i < str.length; i++) {\n const code = str.charCodeAt(i);\n base += ((code * (i + 31)) % 36).toString(36);\n }\n\n // Scramble characters deterministically based on input\n const arr = base.split('');\n for (let i = arr.length - 1; i > 0; i--) {\n const j = (str.charCodeAt(i % str.length) + i * 19) % arr.length;\n [arr[i], arr[j]] = [arr[j], arr[i]];\n }\n\n // Ensure letters are mixed in\n const mixed = arr\n .map((c, i) =>\n i % 3 === 0 ? String.fromCharCode(97 + (c.charCodeAt(0) % 26)) : c\n )\n .join('');\n\n return mixed.slice(0, length);\n}\n\nexport function hash(length = 16): string {\n let result = '';\n while (result.length < length) {\n result += Math.random().toString(36).slice(2);\n }\n return result.slice(0, length);\n}\n\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../src/utils/index.ts"],"sourcesContent":["import XanvType from \"xanv/XanvType\"\nimport { XansqlDialectEngine } from \"../core/types\";\n\nexport const isServer = () => typeof window === 'undefined'\nexport const isArray = (v: any) => Array.isArray(v)\nexport const isObject = (v: any) => Object.prototype.toString.call(v) === '[object Object]';\nexport const isString = (v: any) => typeof v === 'string'\nexport const isNumber = (v: any) => typeof v === 'number' && !isNaN(v)\nexport const isBoolean = (v: any) => typeof v === 'boolean'\n\nexport const formatValue = (v: any, xanv?: XanvType<any>): any => {\n if (isArray(v)) return v.map((item) => formatValue(item, xanv)).join(',')\n !!xanv && xanv.parse(v);\n if (iof(v, Date)) v = v.toISOString()\n if (isString(v)) return `'${escapeSqlValue(v)}'`\n if (isNumber(v)) return v\n if (isBoolean(v)) return v ? 'TRUE' : 'FALSE'\n if (v === null) return 'NULL'\n if (v === undefined) return 'NULL'\n}\n\nexport const arrayMove = (arr: any[], fromIndex: number, toIndex: number) => {\n const newArr = [...arr];\n const item = newArr.splice(fromIndex, 1)[0];\n newArr.splice(toIndex, 0, item);\n return newArr;\n}\n\nexport const escapeSqlValue = (value: string): string => {\n return value\n .replace(/'/g, \"''\") // Escape single quote\n .replace(/\\x00/g, '\\\\0'); // Escape null byte (rare but can break SQL)\n}\n\n\nexport const freezeObject = (obj: any) => {\n Object.getOwnPropertyNames(obj).forEach((prop) => {\n const value = obj[prop];\n if (value && typeof value === \"object\") {\n freezeObject(value); // recursively freeze\n }\n });\n return Object.freeze(obj);\n}\n\n\nexport const iof = (field: any, ...instances: any[]) => {\n return instances.some(instance => field instanceof instance || field?.constructor === instance.constructor);\n}\n\n\n\n// export const ErrorWhene = (_if: any, message: string) => {\n// if (_if) {\n// throw new Error(message);\n// }\n// }\n\nexport const quote = (engine: XansqlDialectEngine, identifier: string) => {\n if (engine === 'mysql') return `\\`${identifier}\\``;\n if (engine === 'postgresql' || engine === 'sqlite') return `\"${identifier}\"`;\n return identifier;\n}\n\nexport const uid = (str: string, length = 28): string => {\n let h1 = 0x811c9dc5;\n let h2 = 0x811c9dc5 ^ str.length;\n\n // Simple dual-hash loop\n for (let i = 0; i < str.length; i++) {\n const c = str.charCodeAt(i);\n h1 = Math.imul(h1 ^ c, 0x1000193);\n h2 = Math.imul(h2 ^ (c + i * 17), 0x85ebca6b);\n }\n\n // Base36 mix gives letters + digits\n let base = (h1 >>> 0).toString(36) + (h2 >>> 0).toString(36);\n\n // Add derived chars from original string to strengthen variety\n for (let i = 0; i < str.length; i++) {\n const code = str.charCodeAt(i);\n base += ((code * (i + 31)) % 36).toString(36);\n }\n\n // Scramble characters deterministically based on input\n const arr = base.split('');\n for (let i = arr.length - 1; i > 0; i--) {\n const j = (str.charCodeAt(i % str.length) + i * 19) % arr.length;\n [arr[i], arr[j]] = [arr[j], arr[i]];\n }\n\n // Ensure letters are mixed in\n const mixed = arr\n .map((c, i) =>\n i % 3 === 0 ? String.fromCharCode(97 + (c.charCodeAt(0) % 26)) : c\n )\n .join('');\n\n return mixed.slice(0, length);\n}\n\nexport function hash(length = 16): string {\n let result = '';\n while (result.length < length) {\n result += Math.random().toString(36).slice(2);\n }\n return result.slice(0, length);\n}\n\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ 'use strict';
2
+
3
+ var xt_fields_String = require('../fields/String.cjs');
4
+
5
+ class XqlIP extends xt_fields_String {
6
+ constructor() {
7
+ super();
8
+ this.min(7).max(45);
9
+ }
10
+ ip() {
11
+ return this.set("ip", (v) => {
12
+ const ipv4Regex = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;
13
+ const ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7}([0-9a-fA-F]{1,4}|:)|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9]))$/;
14
+ if (!ipv4Regex.test(v) && !ipv6Regex.test(v)) {
15
+ throw new Error("Invalid IP address format.");
16
+ }
17
+ });
18
+ }
19
+ }
20
+
21
+ module.exports = XqlIP;
22
+ //# sourceMappingURL=IP.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IP.cjs","sources":["../../../src/xt/additional/IP.ts"],"sourcesContent":["import XqlString from \"../fields/String\";\n\nclass XqlIP extends XqlString {\n constructor() {\n super();\n this.min(7).max(45)\n }\n\n ip() {\n return this.set(\"ip\" as any, (v: any) => {\n const ipv4Regex = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;\n const ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7}([0-9a-fA-F]{1,4}|:)|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9]))$/;\n if (!ipv4Regex.test(v) && !ipv6Regex.test(v)) {\n throw new Error(\"Invalid IP address format.\");\n }\n });\n }\n\n}\n\nexport default XqlIP;"],"names":["XqlString"],"mappings":";;;;AAEA,MAAM,KAAM,SAAQA,gBAAS,CAAA;AAC1B,IAAA,WAAA,GAAA;AACG,QAAA,KAAK,EAAE;QACP,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;IACtB;IAEA,EAAE,GAAA;QACC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAW,EAAE,CAAC,CAAM,KAAI;YACrC,MAAM,SAAS,GAAG,kKAAkK;YACpL,MAAM,SAAS,GAAG,yoBAAyoB;AAC3pB,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;AAC3C,gBAAA,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC;YAChD;AACH,QAAA,CAAC,CAAC;IACL;AAEF;;;;"}
@@ -0,0 +1,6 @@
1
+ import XqlString from "../fields/String";
2
+ declare class XqlIP extends XqlString {
3
+ constructor();
4
+ ip(): this;
5
+ }
6
+ export default XqlIP;
@@ -0,0 +1,20 @@
1
+ import XqlString from '../fields/String.mjs';
2
+
3
+ class XqlIP extends XqlString {
4
+ constructor() {
5
+ super();
6
+ this.min(7).max(45);
7
+ }
8
+ ip() {
9
+ return this.set("ip", (v) => {
10
+ const ipv4Regex = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;
11
+ const ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7}([0-9a-fA-F]{1,4}|:)|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9]))$/;
12
+ if (!ipv4Regex.test(v) && !ipv6Regex.test(v)) {
13
+ throw new Error("Invalid IP address format.");
14
+ }
15
+ });
16
+ }
17
+ }
18
+
19
+ export { XqlIP as default };
20
+ //# sourceMappingURL=IP.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IP.mjs","sources":["../../../src/xt/additional/IP.ts"],"sourcesContent":["import XqlString from \"../fields/String\";\n\nclass XqlIP extends XqlString {\n constructor() {\n super();\n this.min(7).max(45)\n }\n\n ip() {\n return this.set(\"ip\" as any, (v: any) => {\n const ipv4Regex = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;\n const ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7}([0-9a-fA-F]{1,4}|:)|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]|)[0-9]))$/;\n if (!ipv4Regex.test(v) && !ipv6Regex.test(v)) {\n throw new Error(\"Invalid IP address format.\");\n }\n });\n }\n\n}\n\nexport default XqlIP;"],"names":[],"mappings":";;AAEA,MAAM,KAAM,SAAQ,SAAS,CAAA;AAC1B,IAAA,WAAA,GAAA;AACG,QAAA,KAAK,EAAE;QACP,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;IACtB;IAEA,EAAE,GAAA;QACC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAW,EAAE,CAAC,CAAM,KAAI;YACrC,MAAM,SAAS,GAAG,kKAAkK;YACpL,MAAM,SAAS,GAAG,yoBAAyoB;AAC3pB,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;AAC3C,gBAAA,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC;YAChD;AACH,QAAA,CAAC,CAAC;IACL;AAEF;;;;"}
@@ -0,0 +1,21 @@
1
+ 'use strict';
2
+
3
+ var xt_fields_String = require('../fields/String.cjs');
4
+
5
+ class XqlName extends xt_fields_String {
6
+ constructor() {
7
+ super();
8
+ this.min(1).max(100);
9
+ }
10
+ name() {
11
+ return this.set("name", (v) => {
12
+ const nameRegex = /^[a-zA-Z\s'-]+$/;
13
+ if (!nameRegex.test(v)) {
14
+ throw new Error("Invalid name format.");
15
+ }
16
+ });
17
+ }
18
+ }
19
+
20
+ module.exports = XqlName;
21
+ //# sourceMappingURL=Name.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Name.cjs","sources":["../../../src/xt/additional/Name.ts"],"sourcesContent":["import XqlString from \"../fields/String\";\n\nclass XqlName extends XqlString {\n constructor() {\n super();\n this.min(1).max(100)\n }\n\n name() {\n return this.set(\"name\", (v: any) => {\n const nameRegex = /^[a-zA-Z\\s'-]+$/;\n if (!nameRegex.test(v)) {\n throw new Error(\"Invalid name format.\");\n }\n });\n }\n}\n\nexport default XqlName;"],"names":["XqlString"],"mappings":";;;;AAEA,MAAM,OAAQ,SAAQA,gBAAS,CAAA;AAC5B,IAAA,WAAA,GAAA;AACG,QAAA,KAAK,EAAE;QACP,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACvB;IAEA,IAAI,GAAA;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAM,KAAI;YAChC,MAAM,SAAS,GAAG,iBAAiB;YACnC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;AACrB,gBAAA,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC;YAC1C;AACH,QAAA,CAAC,CAAC;IACL;AACF;;;;"}
@@ -0,0 +1,6 @@
1
+ import XqlString from "../fields/String";
2
+ declare class XqlName extends XqlString {
3
+ constructor();
4
+ name(): this;
5
+ }
6
+ export default XqlName;
@@ -0,0 +1,19 @@
1
+ import XqlString from '../fields/String.mjs';
2
+
3
+ class XqlName extends XqlString {
4
+ constructor() {
5
+ super();
6
+ this.min(1).max(100);
7
+ }
8
+ name() {
9
+ return this.set("name", (v) => {
10
+ const nameRegex = /^[a-zA-Z\s'-]+$/;
11
+ if (!nameRegex.test(v)) {
12
+ throw new Error("Invalid name format.");
13
+ }
14
+ });
15
+ }
16
+ }
17
+
18
+ export { XqlName as default };
19
+ //# sourceMappingURL=Name.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Name.mjs","sources":["../../../src/xt/additional/Name.ts"],"sourcesContent":["import XqlString from \"../fields/String\";\n\nclass XqlName extends XqlString {\n constructor() {\n super();\n this.min(1).max(100)\n }\n\n name() {\n return this.set(\"name\", (v: any) => {\n const nameRegex = /^[a-zA-Z\\s'-]+$/;\n if (!nameRegex.test(v)) {\n throw new Error(\"Invalid name format.\");\n }\n });\n }\n}\n\nexport default XqlName;"],"names":[],"mappings":";;AAEA,MAAM,OAAQ,SAAQ,SAAS,CAAA;AAC5B,IAAA,WAAA,GAAA;AACG,QAAA,KAAK,EAAE;QACP,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACvB;IAEA,IAAI,GAAA;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAM,KAAI;YAChC,MAAM,SAAS,GAAG,iBAAiB;YACnC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;AACrB,gBAAA,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC;YAC1C;AACH,QAAA,CAAC,CAAC;IACL;AACF;;;;"}
@@ -0,0 +1,25 @@
1
+ 'use strict';
2
+
3
+ var utils_sha256 = require('../../utils/sha256.cjs');
4
+ var xt_fields_String = require('../fields/String.cjs');
5
+
6
+ class XqlPassword extends xt_fields_String {
7
+ constructor() {
8
+ super();
9
+ this.min(8).max(64).index().transform(v => utils_sha256(v).slice(0, 64));
10
+ }
11
+ strong() {
12
+ return this.set("strong", (v) => {
13
+ const hasUpperCase = /[A-Z]/.test(v);
14
+ const hasLowerCase = /[a-z]/.test(v);
15
+ const hasNumber = /[0-9]/.test(v);
16
+ const hasSpecialChar = /[!@#$%^&*(),.?":{}|<>]/.test(v);
17
+ if (!hasUpperCase || !hasLowerCase || !hasNumber || !hasSpecialChar) {
18
+ throw new Error('Password should contain at least one uppercase letter, one lowercase letter, one number, and one special character');
19
+ }
20
+ });
21
+ }
22
+ }
23
+
24
+ module.exports = XqlPassword;
25
+ //# sourceMappingURL=Password.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Password.cjs","sources":["../../../src/xt/additional/Password.ts"],"sourcesContent":["import sha256 from \"../../utils/sha256\";\nimport XqlString from \"../fields/String\";\n\nclass XqlPassword extends XqlString {\n constructor() {\n super();\n this.min(8).max(64).index().transform(v => sha256(v).slice(0, 64))\n }\n\n strong() {\n return this.set(\"strong\", (v: any) => {\n const hasUpperCase = /[A-Z]/.test(v);\n const hasLowerCase = /[a-z]/.test(v);\n const hasNumber = /[0-9]/.test(v);\n const hasSpecialChar = /[!@#$%^&*(),.?\":{}|<>]/.test(v);\n if (!hasUpperCase || !hasLowerCase || !hasNumber || !hasSpecialChar) {\n throw new Error('Password should contain at least one uppercase letter, one lowercase letter, one number, and one special character');\n }\n });\n }\n}\n\nexport default XqlPassword;"],"names":["XqlString","sha256"],"mappings":";;;;;AAGA,MAAM,WAAY,SAAQA,gBAAS,CAAA;AAChC,IAAA,WAAA,GAAA;AACG,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,IAAIC,YAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrE;IAEA,MAAM,GAAA;QACH,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAM,KAAI;YAClC,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YACpC,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YACpC,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YACjC,MAAM,cAAc,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC;AACvD,YAAA,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,IAAI,CAAC,SAAS,IAAI,CAAC,cAAc,EAAE;AAClE,gBAAA,MAAM,IAAI,KAAK,CAAC,oHAAoH,CAAC;YACxI;AACH,QAAA,CAAC,CAAC;IACL;AACF;;;;"}
@@ -0,0 +1,6 @@
1
+ import XqlString from "../fields/String";
2
+ declare class XqlPassword extends XqlString {
3
+ constructor();
4
+ strong(): this;
5
+ }
6
+ export default XqlPassword;
@@ -0,0 +1,23 @@
1
+ import sha256 from '../../utils/sha256.mjs';
2
+ import XqlString from '../fields/String.mjs';
3
+
4
+ class XqlPassword extends XqlString {
5
+ constructor() {
6
+ super();
7
+ this.min(8).max(64).index().transform(v => sha256(v).slice(0, 64));
8
+ }
9
+ strong() {
10
+ return this.set("strong", (v) => {
11
+ const hasUpperCase = /[A-Z]/.test(v);
12
+ const hasLowerCase = /[a-z]/.test(v);
13
+ const hasNumber = /[0-9]/.test(v);
14
+ const hasSpecialChar = /[!@#$%^&*(),.?":{}|<>]/.test(v);
15
+ if (!hasUpperCase || !hasLowerCase || !hasNumber || !hasSpecialChar) {
16
+ throw new Error('Password should contain at least one uppercase letter, one lowercase letter, one number, and one special character');
17
+ }
18
+ });
19
+ }
20
+ }
21
+
22
+ export { XqlPassword as default };
23
+ //# sourceMappingURL=Password.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Password.mjs","sources":["../../../src/xt/additional/Password.ts"],"sourcesContent":["import sha256 from \"../../utils/sha256\";\nimport XqlString from \"../fields/String\";\n\nclass XqlPassword extends XqlString {\n constructor() {\n super();\n this.min(8).max(64).index().transform(v => sha256(v).slice(0, 64))\n }\n\n strong() {\n return this.set(\"strong\", (v: any) => {\n const hasUpperCase = /[A-Z]/.test(v);\n const hasLowerCase = /[a-z]/.test(v);\n const hasNumber = /[0-9]/.test(v);\n const hasSpecialChar = /[!@#$%^&*(),.?\":{}|<>]/.test(v);\n if (!hasUpperCase || !hasLowerCase || !hasNumber || !hasSpecialChar) {\n throw new Error('Password should contain at least one uppercase letter, one lowercase letter, one number, and one special character');\n }\n });\n }\n}\n\nexport default XqlPassword;"],"names":[],"mappings":";;;AAGA,MAAM,WAAY,SAAQ,SAAS,CAAA;AAChC,IAAA,WAAA,GAAA;AACG,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrE;IAEA,MAAM,GAAA;QACH,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAM,KAAI;YAClC,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YACpC,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YACpC,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YACjC,MAAM,cAAc,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC;AACvD,YAAA,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,IAAI,CAAC,SAAS,IAAI,CAAC,cAAc,EAAE;AAClE,gBAAA,MAAM,IAAI,KAAK,CAAC,oHAAoH,CAAC;YACxI;AACH,QAAA,CAAC,CAAC;IACL;AACF;;;;"}
@@ -0,0 +1,21 @@
1
+ 'use strict';
2
+
3
+ var xt_fields_String = require('../fields/String.cjs');
4
+
5
+ class XqlPhone extends xt_fields_String {
6
+ constructor() {
7
+ super();
8
+ this.min(7).max(15);
9
+ }
10
+ phone() {
11
+ return this.set("phone", (v) => {
12
+ const phoneRegex = /^\+?[0-9]{7,15}$/;
13
+ if (!phoneRegex.test(v)) {
14
+ throw new Error("Invalid phone number format.");
15
+ }
16
+ });
17
+ }
18
+ }
19
+
20
+ module.exports = XqlPhone;
21
+ //# sourceMappingURL=Phone.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Phone.cjs","sources":["../../../src/xt/additional/Phone.ts"],"sourcesContent":["import XqlString from \"../fields/String\";\n\nclass XqlPhone extends XqlString {\n constructor() {\n super();\n this.min(7).max(15)\n }\n\n phone() {\n return this.set(\"phone\", (v: any) => {\n const phoneRegex = /^\\+?[0-9]{7,15}$/;\n if (!phoneRegex.test(v)) {\n throw new Error(\"Invalid phone number format.\");\n }\n });\n }\n\n}\n\nexport default XqlPhone;"],"names":["XqlString"],"mappings":";;;;AAEA,MAAM,QAAS,SAAQA,gBAAS,CAAA;AAC7B,IAAA,WAAA,GAAA;AACG,QAAA,KAAK,EAAE;QACP,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;IACtB;IAEA,KAAK,GAAA;QACF,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAM,KAAI;YACjC,MAAM,UAAU,GAAG,kBAAkB;YACrC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;AACtB,gBAAA,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC;YAClD;AACH,QAAA,CAAC,CAAC;IACL;AAEF;;;;"}
@@ -0,0 +1,6 @@
1
+ import XqlString from "../fields/String";
2
+ declare class XqlPhone extends XqlString {
3
+ constructor();
4
+ phone(): this;
5
+ }
6
+ export default XqlPhone;
@@ -0,0 +1,19 @@
1
+ import XqlString from '../fields/String.mjs';
2
+
3
+ class XqlPhone extends XqlString {
4
+ constructor() {
5
+ super();
6
+ this.min(7).max(15);
7
+ }
8
+ phone() {
9
+ return this.set("phone", (v) => {
10
+ const phoneRegex = /^\+?[0-9]{7,15}$/;
11
+ if (!phoneRegex.test(v)) {
12
+ throw new Error("Invalid phone number format.");
13
+ }
14
+ });
15
+ }
16
+ }
17
+
18
+ export { XqlPhone as default };
19
+ //# sourceMappingURL=Phone.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Phone.mjs","sources":["../../../src/xt/additional/Phone.ts"],"sourcesContent":["import XqlString from \"../fields/String\";\n\nclass XqlPhone extends XqlString {\n constructor() {\n super();\n this.min(7).max(15)\n }\n\n phone() {\n return this.set(\"phone\", (v: any) => {\n const phoneRegex = /^\\+?[0-9]{7,15}$/;\n if (!phoneRegex.test(v)) {\n throw new Error(\"Invalid phone number format.\");\n }\n });\n }\n\n}\n\nexport default XqlPhone;"],"names":[],"mappings":";;AAEA,MAAM,QAAS,SAAQ,SAAS,CAAA;AAC7B,IAAA,WAAA,GAAA;AACG,QAAA,KAAK,EAAE;QACP,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;IACtB;IAEA,KAAK,GAAA;QACF,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAM,KAAI;YACjC,MAAM,UAAU,GAAG,kBAAkB;YACrC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;AACtB,gBAAA,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC;YAClD;AACH,QAAA,CAAC,CAAC;IACL;AAEF;;;;"}
@@ -0,0 +1,21 @@
1
+ 'use strict';
2
+
3
+ var xt_fields_File = require('../fields/File.cjs');
4
+
5
+ class XqlPhoto extends xt_fields_File {
6
+ constructor() {
7
+ super();
8
+ this.maxsize(2 * 1024 * 1024); // 2 MB
9
+ }
10
+ photo() {
11
+ return this.set("photo", (v) => {
12
+ const allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];
13
+ if (!allowedTypes.includes(v.type)) {
14
+ throw new Error("Invalid photo file type.");
15
+ }
16
+ });
17
+ }
18
+ }
19
+
20
+ module.exports = XqlPhoto;
21
+ //# sourceMappingURL=Photo.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Photo.cjs","sources":["../../../src/xt/additional/Photo.ts"],"sourcesContent":["import XqlFile from \"../fields/File\";\n\nclass XqlPhoto extends XqlFile {\n constructor() {\n super();\n this.maxsize(2 * 1024 * 1024) // 2 MB\n }\n\n photo() {\n return this.set(\"photo\", (v: any) => {\n const allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];\n if (!allowedTypes.includes(v.type)) {\n throw new Error(\"Invalid photo file type.\");\n }\n });\n }\n}\n\nexport default XqlPhoto;"],"names":["XqlFile"],"mappings":";;;;AAEA,MAAM,QAAS,SAAQA,cAAO,CAAA;AAC3B,IAAA,WAAA,GAAA;AACG,QAAA,KAAK,EAAE;QACP,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAA;IAChC;IAEA,KAAK,GAAA;QACF,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAM,KAAI;YACjC,MAAM,YAAY,GAAG,CAAC,YAAY,EAAE,WAAW,EAAE,WAAW,CAAC;YAC7D,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;AACjC,gBAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC;YAC9C;AACH,QAAA,CAAC,CAAC;IACL;AACF;;;;"}
@@ -0,0 +1,6 @@
1
+ import XqlFile from "../fields/File";
2
+ declare class XqlPhoto extends XqlFile {
3
+ constructor();
4
+ photo(): this;
5
+ }
6
+ export default XqlPhoto;
@@ -0,0 +1,19 @@
1
+ import XqlFile from '../fields/File.mjs';
2
+
3
+ class XqlPhoto extends XqlFile {
4
+ constructor() {
5
+ super();
6
+ this.maxsize(2 * 1024 * 1024); // 2 MB
7
+ }
8
+ photo() {
9
+ return this.set("photo", (v) => {
10
+ const allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];
11
+ if (!allowedTypes.includes(v.type)) {
12
+ throw new Error("Invalid photo file type.");
13
+ }
14
+ });
15
+ }
16
+ }
17
+
18
+ export { XqlPhoto as default };
19
+ //# sourceMappingURL=Photo.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Photo.mjs","sources":["../../../src/xt/additional/Photo.ts"],"sourcesContent":["import XqlFile from \"../fields/File\";\n\nclass XqlPhoto extends XqlFile {\n constructor() {\n super();\n this.maxsize(2 * 1024 * 1024) // 2 MB\n }\n\n photo() {\n return this.set(\"photo\", (v: any) => {\n const allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];\n if (!allowedTypes.includes(v.type)) {\n throw new Error(\"Invalid photo file type.\");\n }\n });\n }\n}\n\nexport default XqlPhoto;"],"names":[],"mappings":";;AAEA,MAAM,QAAS,SAAQ,OAAO,CAAA;AAC3B,IAAA,WAAA,GAAA;AACG,QAAA,KAAK,EAAE;QACP,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAA;IAChC;IAEA,KAAK,GAAA;QACF,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAM,KAAI;YACjC,MAAM,YAAY,GAAG,CAAC,YAAY,EAAE,WAAW,EAAE,WAAW,CAAC;YAC7D,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;AACjC,gBAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC;YAC9C;AACH,QAAA,CAAC,CAAC;IACL;AACF;;;;"}
@@ -0,0 +1,21 @@
1
+ 'use strict';
2
+
3
+ var xt_fields_String = require('../fields/String.cjs');
4
+
5
+ class XqlSlug extends xt_fields_String {
6
+ constructor() {
7
+ super();
8
+ this.index().min(3).max(255);
9
+ }
10
+ slug() {
11
+ return this.set("slug", (v) => {
12
+ const slugRegex = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
13
+ if (!slugRegex.test(v)) {
14
+ throw new Error("Invalid slug format.");
15
+ }
16
+ });
17
+ }
18
+ }
19
+
20
+ module.exports = XqlSlug;
21
+ //# sourceMappingURL=Slug.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Slug.cjs","sources":["../../../src/xt/additional/Slug.ts"],"sourcesContent":["import XqlString from \"../fields/String\";\n\nclass XqlSlug extends XqlString {\n constructor() {\n super();\n this.index().min(3).max(255)\n }\n\n slug() {\n return this.set(\"slug\", (v: any) => {\n const slugRegex = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;\n if (!slugRegex.test(v)) {\n throw new Error(\"Invalid slug format.\");\n }\n });\n }\n}\n\nexport default XqlSlug;"],"names":["XqlString"],"mappings":";;;;AAEA,MAAM,OAAQ,SAAQA,gBAAS,CAAA;AAC5B,IAAA,WAAA,GAAA;AACG,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAC/B;IAEA,IAAI,GAAA;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAM,KAAI;YAChC,MAAM,SAAS,GAAG,4BAA4B;YAC9C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;AACrB,gBAAA,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC;YAC1C;AACH,QAAA,CAAC,CAAC;IACL;AACF;;;;"}
@@ -0,0 +1,6 @@
1
+ import XqlString from "../fields/String";
2
+ declare class XqlSlug extends XqlString {
3
+ constructor();
4
+ slug(): this;
5
+ }
6
+ export default XqlSlug;
@@ -0,0 +1,19 @@
1
+ import XqlString from '../fields/String.mjs';
2
+
3
+ class XqlSlug extends XqlString {
4
+ constructor() {
5
+ super();
6
+ this.index().min(3).max(255);
7
+ }
8
+ slug() {
9
+ return this.set("slug", (v) => {
10
+ const slugRegex = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
11
+ if (!slugRegex.test(v)) {
12
+ throw new Error("Invalid slug format.");
13
+ }
14
+ });
15
+ }
16
+ }
17
+
18
+ export { XqlSlug as default };
19
+ //# sourceMappingURL=Slug.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Slug.mjs","sources":["../../../src/xt/additional/Slug.ts"],"sourcesContent":["import XqlString from \"../fields/String\";\n\nclass XqlSlug extends XqlString {\n constructor() {\n super();\n this.index().min(3).max(255)\n }\n\n slug() {\n return this.set(\"slug\", (v: any) => {\n const slugRegex = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;\n if (!slugRegex.test(v)) {\n throw new Error(\"Invalid slug format.\");\n }\n });\n }\n}\n\nexport default XqlSlug;"],"names":[],"mappings":";;AAEA,MAAM,OAAQ,SAAQ,SAAS,CAAA;AAC5B,IAAA,WAAA,GAAA;AACG,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAC/B;IAEA,IAAI,GAAA;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAM,KAAI;YAChC,MAAM,SAAS,GAAG,4BAA4B;YAC9C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;AACrB,gBAAA,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC;YAC1C;AACH,QAAA,CAAC,CAAC;IACL;AACF;;;;"}
@@ -0,0 +1,26 @@
1
+ 'use strict';
2
+
3
+ var xt_fields_String = require('../fields/String.cjs');
4
+
5
+ class XqlUrl extends xt_fields_String {
6
+ constructor() {
7
+ super();
8
+ this.max(2048).min(10);
9
+ }
10
+ url() {
11
+ return this.set("url", (v) => {
12
+ try {
13
+ const url = new URL(v);
14
+ if (!['http:', 'https:'].includes(url.protocol)) {
15
+ throw new Error("URL must start with http:// or https://");
16
+ }
17
+ }
18
+ catch (e) {
19
+ throw new Error("Invalid URL format.");
20
+ }
21
+ });
22
+ }
23
+ }
24
+
25
+ module.exports = XqlUrl;
26
+ //# sourceMappingURL=Url.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Url.cjs","sources":["../../../src/xt/additional/Url.ts"],"sourcesContent":["import XqlString from \"../fields/String\";\n\nclass XqlUrl extends XqlString {\n constructor() {\n super();\n this.max(2048).min(10)\n }\n\n url() {\n return this.set(\"url\", (v: any) => {\n try {\n const url = new URL(v);\n if (!['http:', 'https:'].includes(url.protocol)) {\n throw new Error(\"URL must start with http:// or https://\");\n }\n } catch (e) {\n throw new Error(\"Invalid URL format.\");\n }\n });\n }\n}\n\nexport default XqlUrl;"],"names":["XqlString"],"mappings":";;;;AAEA,MAAM,MAAO,SAAQA,gBAAS,CAAA;AAC3B,IAAA,WAAA,GAAA;AACG,QAAA,KAAK,EAAE;QACP,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;IACzB;IAEA,GAAG,GAAA;QACA,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAM,KAAI;AAC/B,YAAA,IAAI;AACD,gBAAA,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;AACtB,gBAAA,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AAC9C,oBAAA,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC;gBAC7D;YACH;YAAE,OAAO,CAAC,EAAE;AACT,gBAAA,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC;YACzC;AACH,QAAA,CAAC,CAAC;IACL;AACF;;;;"}