@lyxa.ai/core 1.3.0 → 1.3.2

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.
@@ -22,7 +22,7 @@ Perfect for sharing types between frontend and backend applications.
22
22
 
23
23
  ## Version
24
24
 
25
- Version: 1.3.0
25
+ Version: 1.3.2
26
26
 
27
27
  ## Dependencies
28
28
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lyxa.ai/types",
3
- "version": "1.3.0",
3
+ "version": "1.3.2",
4
4
  "description": "Lyxa type definitions and validation schemas for both frontend and backend",
5
5
  "author": "elie <42282499+Internalizable@users.noreply.github.com>",
6
6
  "license": "MIT",
@@ -5,7 +5,9 @@ const enum_1 = require("./enum");
5
5
  function groupRidersByLanguage(riderAssignments, assignRiders) {
6
6
  const englishRiders = [];
7
7
  const arabicRiders = [];
8
- const rejectedRiderIds = new Set(riderAssignments.filter(a => a.status === enum_1.RiderAssignmentStatus.REJECTED).map(a => a.rider.toString()));
8
+ const rejectedRiderIds = new Set(riderAssignments
9
+ .filter(a => [enum_1.RiderAssignmentStatus.REJECTED, enum_1.RiderAssignmentStatus.CANCELLED].includes(a.status))
10
+ .map(a => a.rider.toString()));
9
11
  for (const { _id, language } of assignRiders) {
10
12
  if (!_id || rejectedRiderIds.has(_id.toString()))
11
13
  continue;
@@ -1 +1 @@
1
- {"version":3,"file":"group-rider.js","sourceRoot":"/","sources":["utilities/group-rider.ts"],"names":[],"mappings":";;AAQA,sDAoBC;AA3BD,iCAAyD;AAOzD,SAAgB,qBAAqB,CACpC,gBAAqF,EACrF,YAA8B;IAE9B,MAAM,aAAa,GAA8B,EAAE,CAAC;IACpD,MAAM,YAAY,GAA8B,EAAE,CAAC;IAEnD,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAC/B,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,4BAAqB,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CACtG,CAAC;IAEF,KAAK,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,YAAY,EAAE,CAAC;QAE9C,IAAI,CAAC,GAAG,IAAI,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YAAE,SAAS;QAG3D,CAAC,QAAQ,KAAK,eAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrE,CAAC;IAED,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC;AACxC,CAAC","sourcesContent":["import { mongoose } from '@typegoose/typegoose';\nimport { Language, RiderAssignmentStatus } from './enum';\nimport { AssignRiderDTO } from './validation';\n\n/**\n * Groups riders by their preferred language (English / Arabic),\n * excluding those who have rejected the assignment.\n */\nexport function groupRidersByLanguage(\n\triderAssignments: { rider: mongoose.Types.ObjectId; status: RiderAssignmentStatus }[],\n\tassignRiders: AssignRiderDTO[]\n) {\n\tconst englishRiders: mongoose.Types.ObjectId[] = [];\n\tconst arabicRiders: mongoose.Types.ObjectId[] = [];\n\n\tconst rejectedRiderIds = new Set(\n\t\triderAssignments.filter(a => a.status === RiderAssignmentStatus.REJECTED).map(a => a.rider.toString())\n\t);\n\n\tfor (const { _id, language } of assignRiders) {\n\t\t// Skip riders who have rejected\n\t\tif (!_id || rejectedRiderIds.has(_id.toString())) continue;\n\n\t\t// Group by language\n\t\t(language === Language.AR ? arabicRiders : englishRiders).push(_id);\n\t}\n\n\treturn { englishRiders, arabicRiders };\n}\n"]}
1
+ {"version":3,"file":"group-rider.js","sourceRoot":"/","sources":["utilities/group-rider.ts"],"names":[],"mappings":";;AAQA,sDAsBC;AA7BD,iCAAyD;AAOzD,SAAgB,qBAAqB,CACpC,gBAAqF,EACrF,YAA8B;IAE9B,MAAM,aAAa,GAA8B,EAAE,CAAC;IACpD,MAAM,YAAY,GAA8B,EAAE,CAAC;IAEnD,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAC/B,gBAAgB;SACd,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,4BAAqB,CAAC,QAAQ,EAAE,4BAAqB,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;SACjG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAC9B,CAAC;IAEF,KAAK,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,YAAY,EAAE,CAAC;QAE9C,IAAI,CAAC,GAAG,IAAI,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YAAE,SAAS;QAG3D,CAAC,QAAQ,KAAK,eAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrE,CAAC;IAED,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC;AACxC,CAAC","sourcesContent":["import { mongoose } from '@typegoose/typegoose';\nimport { Language, RiderAssignmentStatus } from './enum';\nimport { AssignRiderDTO } from './validation';\n\n/**\n * Groups riders by their preferred language (English / Arabic),\n * excluding those who have rejected the assignment.\n */\nexport function groupRidersByLanguage(\n\triderAssignments: { rider: mongoose.Types.ObjectId; status: RiderAssignmentStatus }[],\n\tassignRiders: AssignRiderDTO[]\n) {\n\tconst englishRiders: mongoose.Types.ObjectId[] = [];\n\tconst arabicRiders: mongoose.Types.ObjectId[] = [];\n\n\tconst rejectedRiderIds = new Set(\n\t\triderAssignments\n\t\t\t.filter(a => [RiderAssignmentStatus.REJECTED, RiderAssignmentStatus.CANCELLED].includes(a.status))\n\t\t\t.map(a => a.rider.toString())\n\t);\n\n\tfor (const { _id, language } of assignRiders) {\n\t\t// Skip riders who have rejected\n\t\tif (!_id || rejectedRiderIds.has(_id.toString())) continue;\n\n\t\t// Group by language\n\t\t(language === Language.AR ? arabicRiders : englishRiders).push(_id);\n\t}\n\n\treturn { englishRiders, arabicRiders };\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export declare function convertAndValidateTime(timeString: string): string;
2
+ export declare function convertFromHHmmToTime(timeString: string): string;
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.convertAndValidateTime = convertAndValidateTime;
4
+ exports.convertFromHHmmToTime = convertFromHHmmToTime;
5
+ function convertAndValidateTime(timeString) {
6
+ timeString = timeString.trim();
7
+ const parts = timeString.split(':');
8
+ if (parts.length !== 2) {
9
+ throw new Error(`Invalid time format: ${timeString}. Expected format HH:MM or H:MM`);
10
+ }
11
+ let [hours, minutes] = parts;
12
+ const hoursNum = parseInt(hours, 10);
13
+ if (isNaN(hoursNum) || hoursNum < 0 || hoursNum > 23) {
14
+ throw new Error(`Invalid hours: ${hours}. Must be between 0 and 23`);
15
+ }
16
+ hours = hoursNum.toString().padStart(2, '0');
17
+ const minutesNum = parseInt(minutes, 10);
18
+ if (isNaN(minutesNum) || minutesNum < 0 || minutesNum > 59) {
19
+ throw new Error(`Invalid minutes: ${minutes}. Must be between 0 and 59`);
20
+ }
21
+ minutes = minutesNum.toString().padStart(2, '0');
22
+ return `${hours}${minutes}`;
23
+ }
24
+ function convertFromHHmmToTime(timeString) {
25
+ timeString = timeString.trim();
26
+ if (timeString.length !== 4) {
27
+ throw new Error(`Invalid time format: ${timeString}. Expected format HHmm (4 digits)`);
28
+ }
29
+ if (!/^\d{4}$/.test(timeString)) {
30
+ throw new Error(`Invalid time format: ${timeString}. Must contain only digits`);
31
+ }
32
+ const hours = timeString.substring(0, 2);
33
+ const minutes = timeString.substring(2, 4);
34
+ const hoursNum = parseInt(hours, 10);
35
+ if (hoursNum < 0 || hoursNum > 23) {
36
+ throw new Error(`Invalid hours: ${hours}. Must be between 00 and 23`);
37
+ }
38
+ const minutesNum = parseInt(minutes, 10);
39
+ if (minutesNum < 0 || minutesNum > 59) {
40
+ throw new Error(`Invalid minutes: ${minutes}. Must be between 00 and 59`);
41
+ }
42
+ return `${hours}:${minutes}`;
43
+ }
44
+ //# sourceMappingURL=time-conversion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time-conversion.js","sourceRoot":"/","sources":["utilities/time-conversion.ts"],"names":[],"mappings":";;AAAA,wDA6BC;AAED,sDAgCC;AA/DD,SAAgB,sBAAsB,CAAC,UAAkB;IAErD,UAAU,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;IAG/B,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEpC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,wBAAwB,UAAU,iCAAiC,CAAC,CAAC;IACzF,CAAC;IAED,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC;IAG7B,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,GAAG,EAAE,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,kBAAkB,KAAK,4BAA4B,CAAC,CAAC;IACzE,CAAC;IACD,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAG7C,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACzC,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,CAAC,IAAI,UAAU,GAAG,EAAE,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,4BAA4B,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAGjD,OAAO,GAAG,KAAK,GAAG,OAAO,EAAE,CAAC;AAChC,CAAC;AAED,SAAgB,qBAAqB,CAAC,UAAkB;IAEpD,UAAU,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;IAG/B,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,wBAAwB,UAAU,mCAAmC,CAAC,CAAC;IAC3F,CAAC;IAGD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,wBAAwB,UAAU,4BAA4B,CAAC,CAAC;IACpF,CAAC;IAGD,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAG3C,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,GAAG,EAAE,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,kBAAkB,KAAK,6BAA6B,CAAC,CAAC;IAC1E,CAAC;IAGD,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACzC,IAAI,UAAU,GAAG,CAAC,IAAI,UAAU,GAAG,EAAE,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,6BAA6B,CAAC,CAAC;IAC9E,CAAC;IAGD,OAAO,GAAG,KAAK,IAAI,OAAO,EAAE,CAAC;AACjC,CAAC","sourcesContent":["export function convertAndValidateTime(timeString: string): string {\n // Remove any whitespace\n timeString = timeString.trim();\n\n // Split by colon\n const parts = timeString.split(':');\n\n if (parts.length !== 2) {\n throw new Error(`Invalid time format: ${timeString}. Expected format HH:MM or H:MM`);\n }\n\n let [hours, minutes] = parts;\n\n // Validate and pad hours (should be 0-23)\n const hoursNum = parseInt(hours, 10);\n if (isNaN(hoursNum) || hoursNum < 0 || hoursNum > 23) {\n throw new Error(`Invalid hours: ${hours}. Must be between 0 and 23`);\n }\n hours = hoursNum.toString().padStart(2, '0');\n\n // Validate and pad minutes (should be 0-59)\n const minutesNum = parseInt(minutes, 10);\n if (isNaN(minutesNum) || minutesNum < 0 || minutesNum > 59) {\n throw new Error(`Invalid minutes: ${minutes}. Must be between 0 and 59`);\n } \n minutes = minutesNum.toString().padStart(2, '0');\n\n // Return in HHmm format\n return `${hours}${minutes}`;\n}\n\nexport function convertFromHHmmToTime(timeString: string): string {\n // Remove any whitespace\n timeString = timeString.trim();\n\n // Validate length\n if (timeString.length !== 4) {\n throw new Error(`Invalid time format: ${timeString}. Expected format HHmm (4 digits)`);\n }\n\n // Validate that it's all digits\n if (!/^\\d{4}$/.test(timeString)) {\n throw new Error(`Invalid time format: ${timeString}. Must contain only digits`);\n }\n\n // Extract hours and minutes\n const hours = timeString.substring(0, 2);\n const minutes = timeString.substring(2, 4);\n\n // Validate hours (00-23)\n const hoursNum = parseInt(hours, 10);\n if (hoursNum < 0 || hoursNum > 23) {\n throw new Error(`Invalid hours: ${hours}. Must be between 00 and 23`);\n }\n\n // Validate minutes (00-59)\n const minutesNum = parseInt(minutes, 10);\n if (minutesNum < 0 || minutesNum > 59) {\n throw new Error(`Invalid minutes: ${minutes}. Must be between 00 and 59`);\n }\n\n // Return in HH:MM format\n return `${hours}:${minutes}`;\n}\n\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lyxa.ai/core",
3
- "version": "1.3.0",
3
+ "version": "1.3.2",
4
4
  "description": "The Core system of the Lyxa services.",
5
5
  "author": "elie <42282499+Internalizable@users.noreply.github.com>",
6
6
  "license": "MIT",