datakeen-session-react 1.1.140-dev.97 → 1.1.140-dev.99

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"es.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -348,7 +348,8 @@ var language_selection = {
348
348
  select_language: "Sélectionnez votre langue",
349
349
  language: "Langue",
350
350
  en: "Anglais",
351
- fr: "Français"
351
+ fr: "Français",
352
+ es: "Espagnol"
352
353
  };
353
354
  var jdi = {
354
355
  pre_introduction: {
@@ -1 +1 @@
1
- {"version":3,"file":"fr.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"fr.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -3,6 +3,7 @@ import { createInstance } from 'i18next';
3
3
  import { initReactI18next } from 'react-i18next';
4
4
  import frTranslations from './fr.json.js';
5
5
  import enTranslations from './en.json.js';
6
+ import esTranslations from './es.json.js';
6
7
  import documentsEn from './documents/documents.en.json.js';
7
8
  import documentsFr from './documents/documents.fr.json.js';
8
9
  import countryFr from './country/country.fr.json.js';
@@ -18,13 +19,16 @@ var resources = {
18
19
  },
19
20
  en: {
20
21
  translation: __assign(__assign(__assign(__assign({}, enTranslations), documentsEn), countryEn), countryISOEn)
22
+ },
23
+ es: {
24
+ translation: __assign(__assign(__assign(__assign({}, esTranslations), documentsEn), countryEn), countryISOEn)
21
25
  }
22
26
  };
23
27
  // Get initial language from localStorage or default to 'fr'
24
28
  var getInitialLanguage = function () {
25
29
  try {
26
30
  var savedLanguage = localStorage.getItem('datakeen-sdk-language');
27
- return savedLanguage && (savedLanguage === 'fr' || savedLanguage === 'en') ? savedLanguage : 'fr';
31
+ return savedLanguage && ['fr', 'en', 'es'].includes(savedLanguage) ? savedLanguage : 'fr';
28
32
  }
29
33
  catch (error) {
30
34
  console.warn('Failed to read language from localStorage:', error);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/i18n/index.ts"],"sourcesContent":["import { createInstance } from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nimport frTranslations from './fr.json';\nimport enTranslations from './en.json';\n\nimport documentsEn from './documents/documents.en.json';\nimport documentsFr from './documents/documents.fr.json';\n\nimport countryFr from './country/country.fr.json';\nimport countryEn from './country/country.en.json';\nimport countryISOFr from './country/country.iso2.fr.json';\nimport countryISOEn from './country/country.iso2.en.json';\n\n// Créer une instance i18next complètement séparée pour le SDK\nconst sdkI18n = createInstance();\n\nconst resources = {\n fr: {\n translation: {\n ...frTranslations,\n // Documents\n ...documentsFr,\n // Pays\n ...countryFr,\n ...countryISOFr\n }\n },\n en: {\n translation: {\n ...enTranslations,\n // Documents\n ...documentsEn,\n // Pays\n ...countryEn,\n ...countryISOEn\n }\n }\n};\n\n// Get initial language from localStorage or default to 'fr'\nconst getInitialLanguage = (): string => {\n try {\n const savedLanguage = localStorage.getItem('datakeen-sdk-language');\n return savedLanguage && (savedLanguage === 'fr' || savedLanguage === 'en') ? savedLanguage : 'fr';\n } catch (error) {\n console.warn('Failed to read language from localStorage:', error);\n return 'fr';\n }\n};\n\n// Initialiser l'instance SDK de manière indépendante\nsdkI18n\n .use(initReactI18next)\n .init({\n resources,\n lng: getInitialLanguage(),\n fallbackLng: 'fr',\n debug: false,\n interpolation: {\n escapeValue: false\n }\n });\n\nexport default sdkI18n;\n"],"names":["countryISOFr"],"mappings":";;;;;;;;;;;;AAaA;AACA,IAAM,OAAO,GAAG,cAAc;AAE9B,IAAM,SAAS,GAAG;AAChB,IAAA,EAAE,EAAE;QACF,WAAW,EAAA,QAAA,CAAA,QAAA,CAAA,QAAA,CAAA,QAAA,CAAA,EAAA,EACN,cAAc,CAAA,EAEd,WAAW,GAEX,SAAS,CAAA,EACTA,UAAY;AAElB,KAAA;AACD,IAAA,EAAE,EAAE;QACF,WAAW,EAAA,QAAA,CAAA,QAAA,CAAA,QAAA,CAAA,QAAA,CAAA,EAAA,EACN,cAAc,CAAA,EAEd,WAAW,GAEX,SAAS,CAAA,EACT,YAAY;AAElB;CACF;AAED;AACA,IAAM,kBAAkB,GAAG,YAAA;AACzB,IAAA,IAAI;QACF,IAAM,aAAa,GAAG,YAAY,CAAC,OAAO,CAAC,uBAAuB,CAAC;AACnE,QAAA,OAAO,aAAa,KAAK,aAAa,KAAK,IAAI,IAAI,aAAa,KAAK,IAAI,CAAC,GAAG,aAAa,GAAG,IAAI;IACnG;IAAE,OAAO,KAAK,EAAE;AACd,QAAA,OAAO,CAAC,IAAI,CAAC,4CAA4C,EAAE,KAAK,CAAC;AACjE,QAAA,OAAO,IAAI;IACb;AACF,CAAC;AAED;AACA;KACG,GAAG,CAAC,gBAAgB;AACpB,KAAA,IAAI,CAAC;AACJ,IAAA,SAAS,EAAA,SAAA;IACT,GAAG,EAAE,kBAAkB,EAAE;AACzB,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,KAAK,EAAE,KAAK;AACZ,IAAA,aAAa,EAAE;AACb,QAAA,WAAW,EAAE;AACd;AACF,CAAA,CAAC;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/i18n/index.ts"],"sourcesContent":["import { createInstance } from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nimport frTranslations from './fr.json';\nimport enTranslations from './en.json';\nimport esTranslations from './es.json';\n\nimport documentsEn from './documents/documents.en.json';\nimport documentsFr from './documents/documents.fr.json';\n\nimport countryFr from './country/country.fr.json';\nimport countryEn from './country/country.en.json';\nimport countryISOFr from './country/country.iso2.fr.json';\nimport countryISOEn from './country/country.iso2.en.json';\n\n// Créer une instance i18next complètement séparée pour le SDK\nconst sdkI18n = createInstance();\n\nconst resources = {\n fr: {\n translation: {\n ...frTranslations,\n // Documents\n ...documentsFr,\n // Pays\n ...countryFr,\n ...countryISOFr\n }\n },\n en: {\n translation: {\n ...enTranslations,\n // Documents\n ...documentsEn,\n // Pays\n ...countryEn,\n ...countryISOEn\n }\n },\n es: {\n translation: {\n ...esTranslations,\n // Documents\n ...documentsEn,\n // Pays\n ...countryEn,\n ...countryISOEn\n }\n }\n};\n\n// Get initial language from localStorage or default to 'fr'\nconst getInitialLanguage = (): string => {\n try {\n const savedLanguage = localStorage.getItem('datakeen-sdk-language');\n return savedLanguage && ['fr', 'en', 'es'].includes(savedLanguage) ? savedLanguage : 'fr';\n } catch (error) {\n console.warn('Failed to read language from localStorage:', error);\n return 'fr';\n }\n};\n\n// Initialiser l'instance SDK de manière indépendante\nsdkI18n\n .use(initReactI18next)\n .init({\n resources,\n lng: getInitialLanguage(),\n fallbackLng: 'fr',\n debug: false,\n interpolation: {\n escapeValue: false\n }\n });\n\nexport default sdkI18n;\n"],"names":["countryISOFr"],"mappings":";;;;;;;;;;;;;AAcA;AACA,IAAM,OAAO,GAAG,cAAc;AAE9B,IAAM,SAAS,GAAG;AAChB,IAAA,EAAE,EAAE;QACF,WAAW,EAAA,QAAA,CAAA,QAAA,CAAA,QAAA,CAAA,QAAA,CAAA,EAAA,EACN,cAAc,CAAA,EAEd,WAAW,GAEX,SAAS,CAAA,EACTA,UAAY;AAElB,KAAA;AACD,IAAA,EAAE,EAAE;QACF,WAAW,EAAA,QAAA,CAAA,QAAA,CAAA,QAAA,CAAA,QAAA,CAAA,EAAA,EACN,cAAc,CAAA,EAEd,WAAW,GAEX,SAAS,CAAA,EACT,YAAY;AAElB,KAAA;AACD,IAAA,EAAE,EAAE;QACF,WAAW,EAAA,QAAA,CAAA,QAAA,CAAA,QAAA,CAAA,QAAA,CAAA,EAAA,EACN,cAAc,CAAA,EAEd,WAAW,GAEX,SAAS,CAAA,EACT,YAAY;AAElB;CACF;AAED;AACA,IAAM,kBAAkB,GAAG,YAAA;AACzB,IAAA,IAAI;QACF,IAAM,aAAa,GAAG,YAAY,CAAC,OAAO,CAAC,uBAAuB,CAAC;QACnE,OAAO,aAAa,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,aAAa,GAAG,IAAI;IAC3F;IAAE,OAAO,KAAK,EAAE;AACd,QAAA,OAAO,CAAC,IAAI,CAAC,4CAA4C,EAAE,KAAK,CAAC;AACjE,QAAA,OAAO,IAAI;IACb;AACF,CAAC;AAED;AACA;KACG,GAAG,CAAC,gBAAgB;AACpB,KAAA,IAAI,CAAC;AACJ,IAAA,SAAS,EAAA,SAAA;IACT,GAAG,EAAE,kBAAkB,EAAE;AACzB,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,KAAK,EAAE,KAAK;AACZ,IAAA,aAAa,EAAE;AACb,QAAA,WAAW,EAAE;AACd;AACF,CAAA,CAAC;;;;"}
@@ -215,7 +215,8 @@ var resolveTokenValue = function (token, context) {
215
215
  }
216
216
  };
217
217
  var FIELD_ALIASES = {
218
- nom: ["lastName", "companyName"],
218
+ nom: ["lastName"],
219
+ denomination_sociale: ["companyName"],
219
220
  prenom: ["firstName"],
220
221
  email: ["email"],
221
222
  sms: ["phoneNumber"],
@@ -1 +1 @@
1
- {"version":3,"file":"conditionEvaluator.js","sources":["../../../../src/utils/conditionEvaluator.ts"],"sourcesContent":["import type { ConditionToken, ConditionTokenType, SessionData } from \"../types/session\";\nimport type { UserInput } from \"../types/userInput\";\nimport type { ContactInfo } from \"../types/contactInfo\";\n\nexport interface ConditionEvaluationContext {\n session: SessionData;\n userInput?: UserInput | Record<string, unknown>;\n contactInfo?: ContactInfo | Record<string, unknown>;\n}\n\nconst LOGICAL_OPERATORS = new Set([\"&&\", \"||\"]);\nconst COMPARISON_OPERATORS = new Set([\"==\", \"===\", \"!=\", \"!==\", \">\", \">=\", \"<\", \"<=\"]);\n\n// Valeurs sentinelles reconnues comme opérande droite pour tester la présence d'une valeur.\n// Syntaxe builder : « variable == isEmpty » ou « variable != isEmpty »\nconst PRESENCE_SENTINELS = new Set([\"isEmpty\", \"isNotEmpty\"]);\n\ninterface ComparisonTerm {\n left?: ConditionToken;\n operator?: string;\n right?: ConditionToken;\n}\n\nexport const parseConditionExpression = (expression?: string): ConditionToken[] => {\n if (!expression) {\n return [];\n }\n\n const cleanedExpression = expression.replace(/\\s+/g, \" \").trim();\n if (!cleanedExpression) {\n return [];\n }\n\n const regex = /(===|!==|==|!=|<=|>=|&&|\\|\\||<|>)|(\"(?:[^\"\\\\]|\\\\.)*\")|([^\\s]+)/g;\n const tokens: ConditionToken[] = [];\n let match: RegExpExecArray | null;\n while ((match = regex.exec(cleanedExpression)) !== null) {\n const value = match[0];\n\n if (LOGICAL_OPERATORS.has(value) || COMPARISON_OPERATORS.has(value)) {\n tokens.push({ type: \"operator\", value });\n } else {\n const isQuoted = value.startsWith(\"\\\"\") && value.endsWith(\"\\\"\");\n const literal = isQuoted ? value.slice(1, -1) : value;\n const tokenType: ConditionTokenType = isQuoted\n ? \"input\"\n : determineOperandType(literal);\n tokens.push({ type: tokenType, value: literal });\n }\n }\n\n return tokens;\n};\n\nexport const evaluateConditionTokens = (\n tokens: ConditionToken[] = [],\n context: ConditionEvaluationContext\n): boolean => {\n if (!tokens || tokens.length === 0) {\n console.warn(\"[ConditionEvaluator] No tokens provided\");\n return false;\n }\n\n const { terms, logicalOperators } = buildComparisonTerms(tokens);\n\n if (terms.length === 0) {\n console.warn(\"[ConditionEvaluator] No comparison terms built\");\n return false;\n }\n\n const termResults = terms.map((term) => evaluateComparison(term, context));\n\n if (termResults.length === 1) {\n return termResults[0];\n }\n\n const finalResult = termResults.reduce((acc, result, index) => {\n if (index === 0) {\n return result;\n }\n const logicalOperator = logicalOperators[index - 1] || \"&&\";\n return logicalOperator === \"||\" ? acc || result : acc && result;\n }, true);\n\n return finalResult;\n};\n\nconst buildComparisonTerms = (tokens: ConditionToken[]) => {\n const terms: ComparisonTerm[] = [];\n const logicalOperators: string[] = [];\n let currentTerm: ComparisonTerm = {};\n\n tokens.forEach((token) => {\n if (token.type === \"operator\") {\n if (LOGICAL_OPERATORS.has(token.value)) {\n // If we have a left operand without comparison operator, treat it as a boolean term\n if (currentTerm.left && !currentTerm.operator) {\n terms.push({ left: currentTerm.left, operator: \"truthy\", right: undefined });\n logicalOperators.push(token.value);\n currentTerm = {};\n } else if (currentTerm.left && currentTerm.operator && currentTerm.right) {\n terms.push(currentTerm);\n logicalOperators.push(token.value);\n currentTerm = {};\n }\n } else if (COMPARISON_OPERATORS.has(token.value)) {\n currentTerm.operator = token.value;\n }\n } else {\n if (!currentTerm.left) {\n currentTerm.left = token;\n } else if (!currentTerm.right) {\n currentTerm.right = token;\n } else {\n currentTerm = { left: token };\n }\n }\n });\n\n // Handle the last term\n if (currentTerm.left) {\n if (!currentTerm.operator) {\n terms.push({ left: currentTerm.left, operator: \"truthy\", right: undefined });\n } else if (currentTerm.right) {\n terms.push(currentTerm);\n }\n }\n\n return { terms, logicalOperators };\n};\n\nconst evaluateComparison = (\n term: ComparisonTerm,\n context: ConditionEvaluationContext\n): boolean => {\n if (!term.left || !term.operator) {\n console.warn(\"[EvaluateComparison] Incomplete term - missing left or operator\");\n return false;\n }\n\n // Handle boolean/truthy evaluation (no right operand)\n if (term.operator === \"truthy\") {\n const leftValue = resolveTokenValue(term.left, context);\n return isTruthy(leftValue);\n }\n\n // Standard comparison requires both operands\n if (!term.right) {\n console.warn(\"[EvaluateComparison] Comparison operator requires right operand\");\n return false;\n }\n\n const leftValue = resolveTokenValue(term.left, context);\n\n // Sentinel « isEmpty » / « isNotEmpty » en opérande droite — teste la présence de la valeur gauche.\n // Syntaxe : « variable == isEmpty » → vide ; « variable != isEmpty » → non vide.\n // De même avec « variable == isNotEmpty » / « variable != isNotEmpty » (sens inversé).\n if (term.right && PRESENCE_SENTINELS.has(term.right.value)) {\n const empty = isEmptyValue(leftValue);\n const sentinelMeansEmpty = term.right.value === \"isEmpty\";\n if (term.operator === \"==\" || term.operator === \"===\") {\n return sentinelMeansEmpty ? empty : !empty;\n }\n if (term.operator === \"!=\" || term.operator === \"!==\") {\n return sentinelMeansEmpty ? !empty : empty;\n }\n }\n\n const rightValue = resolveTokenValue(term.right, context);\n\n if (leftValue === undefined || rightValue === undefined) {\n console.warn(\"[EvaluateComparison] Undefined value - left:\", leftValue, \"right:\", rightValue);\n return false;\n }\n\n const trimIfString = (v: unknown) =>\n typeof v === \"string\" ? v.trim() : v;\n\n const leftComparable = trimIfString(coerceValue(leftValue));\n const rightComparable = trimIfString(coerceValue(rightValue));\n\n console.log(\"[EvaluateComparison]\", leftComparable, term.operator, rightComparable);\n\n let result: boolean;\n switch (term.operator) {\n case \"==\":\n result = leftComparable == rightComparable; // eslint-disable-line eqeqeq\n break;\n case \"===\":\n result = leftComparable === rightComparable;\n break;\n case \"!=\":\n result = leftComparable != rightComparable; // eslint-disable-line eqeqeq\n break;\n case \"!==\":\n result = leftComparable !== rightComparable;\n break;\n case \">\":\n result = compareValues(leftComparable, rightComparable, (a, b) => a > b);\n break;\n case \">=\":\n result = compareValues(leftComparable, rightComparable, (a, b) => a >= b);\n break;\n case \"<\":\n result = compareValues(leftComparable, rightComparable, (a, b) => a < b);\n break;\n case \"<=\":\n result = compareValues(leftComparable, rightComparable, (a, b) => a <= b);\n break;\n default:\n console.warn(\"[EvaluateComparison] Unknown operator:\", term.operator);\n result = false;\n }\n\n console.log(\"[EvaluateComparison] Result:\", result);\n return result;\n};\n\nconst isTruthy = (value: unknown): boolean => {\n if (typeof value === \"boolean\") return value;\n if (typeof value === \"string\") {\n const lower = value.toLowerCase();\n if (lower === \"true\") return true;\n if (lower === \"false\") return false;\n }\n if (typeof value === \"number\") return value !== 0;\n if (value === null || value === undefined) return false;\n if (value === \"\") return false;\n return true;\n};\n\nconst isEmptyValue = (value: unknown): boolean => {\n if (value === null || value === undefined) return true;\n if (typeof value === \"string\") return value.trim() === \"\";\n if (Array.isArray(value)) return value.length === 0;\n return false;\n};\n\nconst resolveTokenValue = (\n token: ConditionToken,\n context: ConditionEvaluationContext\n): unknown => {\n switch (token.type) {\n case \"input\":\n return parseLiteral(token.value);\n case \"variable\":\n case \"control\":\n return resolvePathValue(token.value, context, token.sourceNodeId);\n default:\n console.warn(\"[ResolveTokenValue] Unknown token type:\", token.type);\n return undefined;\n }\n};\n\nconst FIELD_ALIASES: Record<string, string[]> = {\n nom: [\"lastName\", \"companyName\"],\n prenom: [\"firstName\"],\n email: [\"email\"],\n sms: [\"phoneNumber\"],\n date_naissance: [\"birthDate\"],\n adresse: [\"addressLine1\"],\n ville: [\"city\"],\n code_postal: [\"postalCode\"],\n pays: [\"countryCode\", \"country\"],\n nationalite: [\"nationality\"],\n};\n\nconst resolvePathValue = (\n path: string,\n context: ConditionEvaluationContext,\n sourceNodeId?: string\n): unknown => {\n if (!path) {\n console.warn(\"[ResolvePathValue] Empty path provided\");\n return undefined;\n }\n\n const segments = path.split(\".\").filter(Boolean);\n\n if (segments.length === 0) {\n console.warn(\"[ResolvePathValue] No segments after splitting path\");\n return undefined;\n }\n\n const sources: Array<Record<string, unknown> | undefined> = [\n context.session?.result as Record<string, unknown>,\n context.session?.userInput as Record<string, unknown>,\n context.session?.contactInfo as Record<string, unknown>,\n context.userInput as Record<string, unknown>,\n context.contactInfo as Record<string, unknown>,\n context.session as unknown as Record<string, unknown>,\n ];\n\n // Helper to resolve aliases\n const getPossibleKeys = (key: string): string[] => {\n return [key, ...(FIELD_ALIASES[key] || [])];\n };\n\n // 1. Try direct/nested resolution with alias support for the last segment\n for (const source of sources) {\n if (!source) continue;\n\n const parentPath = segments.slice(0, -1);\n const lastSegment = segments[segments.length - 1];\n const parent = parentPath.length > 0 ? getNestedValue(source, parentPath) : source;\n\n if (parent && typeof parent === \"object\") {\n for (const key of getPossibleKeys(lastSegment)) {\n const value = (parent as Record<string, unknown>)[key];\n if (value !== undefined) {\n console.log(`[ResolvePathValue] Found ${path} (as ${key}) in direct sources`);\n return extractValue(value);\n }\n }\n }\n }\n\n // 2. Handle nodeId prefixes and fallbacks\n if (segments.length > 1) {\n const [root, ...rest] = segments;\n const lastSegment = segments[segments.length - 1];\n\n // Check in contextual userInput (structured by node or flat)\n if (context.userInput && typeof context.userInput === \"object\") {\n const userInput = context.userInput as Record<string, unknown>;\n\n // A. Try structured by nodeId\n const nodeData = userInput[root];\n if (nodeData && typeof nodeData === \"object\") {\n const value = getNestedValue(nodeData as Record<string, unknown>, rest);\n if (value !== undefined) {\n console.log(`[ResolvePathValue] Found ${path} in contextual userInput (nested)`);\n return extractValue(value);\n }\n }\n\n // B. Flat fallback: search for the property directly if it's a node-ID.property\n for (const key of getPossibleKeys(lastSegment)) {\n if (userInput[key] !== undefined) {\n console.log(`[ResolvePathValue] Found ${lastSegment} (as ${key}) in flat userInput`);\n return extractValue(userInput[key]);\n }\n\n // C. Check in customFormData\n const customFormData = userInput[\"customFormData\"] as Record<string, unknown> | undefined;\n if (customFormData && customFormData[key] !== undefined) {\n console.log(`[ResolvePathValue] Found ${lastSegment} (as ${key}) in customFormData`);\n return extractValue(customFormData[key]);\n }\n }\n }\n\n const analysisEntries = Array.isArray(context.session?.analysis)\n ? (context.session.analysis as Array<Record<string, unknown>>)\n : [];\n\n // If sourceNodeId is provided, use it to find the relevant analysis entry\n if (sourceNodeId || segments.length > 1) {\n const targetNodeId = sourceNodeId || root;\n const relevantEntries = analysisEntries.filter((entry) => {\n const entryRecord = entry as Record<string, unknown>;\n return entryRecord[\"nodeId\"] === targetNodeId || entryRecord[\"id\"] === targetNodeId;\n });\n\n if (relevantEntries.length > 0) {\n // Use the most recent entry (last one in array)\n const targetEntry = relevantEntries[relevantEntries.length - 1];\n\n // Check if the first segment is a hash/identifier that should be skipped\n const isHashLikeId = /^[a-f0-9]{24}$/i.test(root);\n const pathToResolve = isHashLikeId ? rest : [root, ...rest];\n\n // For control tokens, look in the documents array associated with this analysis entry\n if (pathToResolve.length > 0) {\n const propertyName = pathToResolve[pathToResolve.length - 1];\n const propertyKeys = getPossibleKeys(propertyName);\n\n const documents = Array.isArray(context.session?.documents)\n ? (context.session.documents as Array<Record<string, unknown>>)\n : [];\n\n if (documents.length > 0) {\n const analysisId = targetEntry[\"id\"] as string;\n const relevantDocs = documents.filter((doc) => doc[\"analysisId\"] === analysisId);\n\n if (relevantDocs.length > 0) {\n const doc = relevantDocs[0];\n\n // Look in controlCategories for control properties\n const controlCategories = doc[\"controlCategories\"] as Record<string, unknown> | undefined;\n if (controlCategories) {\n for (const categoryData of Object.values(controlCategories)) {\n const category = categoryData as Record<string, unknown>;\n const controls = category[\"controls\"] as Record<string, unknown> | undefined;\n\n if (controls) {\n for (const key of propertyKeys) {\n if (key in controls) {\n const control = controls[key] as Record<string, unknown>;\n return extractValue(control[\"value\"]);\n }\n }\n }\n }\n }\n\n // Also check in extractedInformations\n const extractedInformations = doc[\"extractedInformations\"] as Record<string, unknown> | undefined;\n if (extractedInformations) {\n for (const key of propertyKeys) {\n const valueFromExtracted = getNestedValue(extractedInformations, [key]);\n if (valueFromExtracted !== undefined) {\n return extractValue(valueFromExtracted);\n }\n }\n }\n }\n }\n }\n\n // Try direct access on analysis entry with aliases\n const propertyName = segments[segments.length - 1];\n for (const key of getPossibleKeys(propertyName)) {\n const valueFromEntry = (targetEntry as Record<string, unknown>)[key];\n if (valueFromEntry !== undefined) {\n return extractValue(valueFromEntry);\n }\n\n const extractedInfo = (targetEntry as Record<string, unknown>)[\n \"extractedInformation\"\n ] as Record<string, unknown> | undefined;\n if (extractedInfo && extractedInfo[key] !== undefined) {\n return extractValue(extractedInfo[key]);\n }\n\n const resultInfo = (targetEntry as Record<string, unknown>)[\n \"result\"\n ] as Record<string, unknown> | undefined;\n if (resultInfo && resultInfo[key] !== undefined) {\n return extractValue(resultInfo[key]);\n }\n }\n }\n }\n }\n\n console.warn(\"⚠️ [ResolvePathValue] Could not resolve path:\", path);\n return undefined;\n};\n\n/**\n * Extracts the actual value from objects with {confidence, value} structure.\n * This is common in extractedInformations from the API.\n */\nconst extractValue = (value: unknown): unknown => {\n // If it's an object with both 'value' and 'confidence' properties, extract the value\n if (\n value &&\n typeof value === \"object\" &&\n \"value\" in value &&\n \"confidence\" in value\n ) {\n return (value as Record<string, unknown>)[\"value\"];\n }\n return value;\n};\n\nconst getNestedValue = (\n source: Record<string, unknown> | undefined,\n path: string[]\n): unknown => {\n if (!source) {\n return undefined;\n }\n\n return path.reduce<unknown>((acc, key) => {\n if (acc === undefined || acc === null) {\n return undefined;\n }\n if (Array.isArray(acc)) {\n const index = Number(key);\n if (Number.isNaN(index)) {\n return undefined;\n }\n return acc[index];\n }\n if (typeof acc === \"object\") {\n return (acc as Record<string, unknown>)[key];\n }\n return undefined;\n }, source);\n};\n\nconst parseLiteral = (value: string): unknown => {\n const trimmed = value?.trim();\n if (!trimmed) {\n return \"\";\n }\n\n if (trimmed.toLowerCase() === \"true\") {\n return true;\n }\n if (trimmed.toLowerCase() === \"false\") {\n return false;\n }\n\n const numericValue = Number(trimmed);\n if (!Number.isNaN(numericValue)) {\n return numericValue;\n }\n\n const timestamp = Date.parse(trimmed);\n if (!Number.isNaN(timestamp)) {\n return new Date(timestamp).getTime();\n }\n return trimmed.replace(/\"/g, '');\n};\n\nconst coerceValue = (value: unknown): unknown => {\n if (value instanceof Date) {\n return value.getTime();\n }\n if (typeof value === \"string\") {\n const literal = parseLiteral(value);\n if (literal !== value) {\n return literal;\n }\n }\n return value;\n};\n\nconst compareValues = (\n left: unknown,\n right: unknown,\n comparator: (a: number | string, b: number | string) => boolean\n): boolean => {\n if (typeof left === \"number\" && typeof right === \"number\") {\n return comparator(left, right);\n }\n\n if (typeof left === \"string\" && typeof right === \"string\") {\n // Normalize case for better string matching\n return comparator(left.trim().toLowerCase(), right.trim().toLowerCase());\n }\n\n console.warn(`[CompareValues] Type mismatch: left=${typeof left}, right=${typeof right}`);\n return false;\n};\n\nconst determineOperandType = (value: string): ConditionTokenType => {\n if (isBooleanLiteral(value) || isNumericLiteral(value) || PRESENCE_SENTINELS.has(value)) {\n return \"input\";\n }\n\n return \"variable\";\n};\n\nconst isNumericLiteral = (value: string): boolean => {\n return /^-?\\d+(?:\\.\\d+)?$/.test(value);\n};\n\nconst isBooleanLiteral = (value: string): boolean => {\n return value.toLowerCase() === \"true\" || value.toLowerCase() === \"false\";\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"conditionEvaluator.js","sources":["../../../../src/utils/conditionEvaluator.ts"],"sourcesContent":["import type { ConditionToken, ConditionTokenType, SessionData } from \"../types/session\";\nimport type { UserInput } from \"../types/userInput\";\nimport type { ContactInfo } from \"../types/contactInfo\";\n\nexport interface ConditionEvaluationContext {\n session: SessionData;\n userInput?: UserInput | Record<string, unknown>;\n contactInfo?: ContactInfo | Record<string, unknown>;\n}\n\nconst LOGICAL_OPERATORS = new Set([\"&&\", \"||\"]);\nconst COMPARISON_OPERATORS = new Set([\"==\", \"===\", \"!=\", \"!==\", \">\", \">=\", \"<\", \"<=\"]);\n\n// Valeurs sentinelles reconnues comme opérande droite pour tester la présence d'une valeur.\n// Syntaxe builder : « variable == isEmpty » ou « variable != isEmpty »\nconst PRESENCE_SENTINELS = new Set([\"isEmpty\", \"isNotEmpty\"]);\n\ninterface ComparisonTerm {\n left?: ConditionToken;\n operator?: string;\n right?: ConditionToken;\n}\n\nexport const parseConditionExpression = (expression?: string): ConditionToken[] => {\n if (!expression) {\n return [];\n }\n\n const cleanedExpression = expression.replace(/\\s+/g, \" \").trim();\n if (!cleanedExpression) {\n return [];\n }\n\n const regex = /(===|!==|==|!=|<=|>=|&&|\\|\\||<|>)|(\"(?:[^\"\\\\]|\\\\.)*\")|([^\\s]+)/g;\n const tokens: ConditionToken[] = [];\n let match: RegExpExecArray | null;\n while ((match = regex.exec(cleanedExpression)) !== null) {\n const value = match[0];\n\n if (LOGICAL_OPERATORS.has(value) || COMPARISON_OPERATORS.has(value)) {\n tokens.push({ type: \"operator\", value });\n } else {\n const isQuoted = value.startsWith(\"\\\"\") && value.endsWith(\"\\\"\");\n const literal = isQuoted ? value.slice(1, -1) : value;\n const tokenType: ConditionTokenType = isQuoted\n ? \"input\"\n : determineOperandType(literal);\n tokens.push({ type: tokenType, value: literal });\n }\n }\n\n return tokens;\n};\n\nexport const evaluateConditionTokens = (\n tokens: ConditionToken[] = [],\n context: ConditionEvaluationContext\n): boolean => {\n if (!tokens || tokens.length === 0) {\n console.warn(\"[ConditionEvaluator] No tokens provided\");\n return false;\n }\n\n const { terms, logicalOperators } = buildComparisonTerms(tokens);\n\n if (terms.length === 0) {\n console.warn(\"[ConditionEvaluator] No comparison terms built\");\n return false;\n }\n\n const termResults = terms.map((term) => evaluateComparison(term, context));\n\n if (termResults.length === 1) {\n return termResults[0];\n }\n\n const finalResult = termResults.reduce((acc, result, index) => {\n if (index === 0) {\n return result;\n }\n const logicalOperator = logicalOperators[index - 1] || \"&&\";\n return logicalOperator === \"||\" ? acc || result : acc && result;\n }, true);\n\n return finalResult;\n};\n\nconst buildComparisonTerms = (tokens: ConditionToken[]) => {\n const terms: ComparisonTerm[] = [];\n const logicalOperators: string[] = [];\n let currentTerm: ComparisonTerm = {};\n\n tokens.forEach((token) => {\n if (token.type === \"operator\") {\n if (LOGICAL_OPERATORS.has(token.value)) {\n // If we have a left operand without comparison operator, treat it as a boolean term\n if (currentTerm.left && !currentTerm.operator) {\n terms.push({ left: currentTerm.left, operator: \"truthy\", right: undefined });\n logicalOperators.push(token.value);\n currentTerm = {};\n } else if (currentTerm.left && currentTerm.operator && currentTerm.right) {\n terms.push(currentTerm);\n logicalOperators.push(token.value);\n currentTerm = {};\n }\n } else if (COMPARISON_OPERATORS.has(token.value)) {\n currentTerm.operator = token.value;\n }\n } else {\n if (!currentTerm.left) {\n currentTerm.left = token;\n } else if (!currentTerm.right) {\n currentTerm.right = token;\n } else {\n currentTerm = { left: token };\n }\n }\n });\n\n // Handle the last term\n if (currentTerm.left) {\n if (!currentTerm.operator) {\n terms.push({ left: currentTerm.left, operator: \"truthy\", right: undefined });\n } else if (currentTerm.right) {\n terms.push(currentTerm);\n }\n }\n\n return { terms, logicalOperators };\n};\n\nconst evaluateComparison = (\n term: ComparisonTerm,\n context: ConditionEvaluationContext\n): boolean => {\n if (!term.left || !term.operator) {\n console.warn(\"[EvaluateComparison] Incomplete term - missing left or operator\");\n return false;\n }\n\n // Handle boolean/truthy evaluation (no right operand)\n if (term.operator === \"truthy\") {\n const leftValue = resolveTokenValue(term.left, context);\n return isTruthy(leftValue);\n }\n\n // Standard comparison requires both operands\n if (!term.right) {\n console.warn(\"[EvaluateComparison] Comparison operator requires right operand\");\n return false;\n }\n\n const leftValue = resolveTokenValue(term.left, context);\n\n // Sentinel « isEmpty » / « isNotEmpty » en opérande droite — teste la présence de la valeur gauche.\n // Syntaxe : « variable == isEmpty » → vide ; « variable != isEmpty » → non vide.\n // De même avec « variable == isNotEmpty » / « variable != isNotEmpty » (sens inversé).\n if (term.right && PRESENCE_SENTINELS.has(term.right.value)) {\n const empty = isEmptyValue(leftValue);\n const sentinelMeansEmpty = term.right.value === \"isEmpty\";\n if (term.operator === \"==\" || term.operator === \"===\") {\n return sentinelMeansEmpty ? empty : !empty;\n }\n if (term.operator === \"!=\" || term.operator === \"!==\") {\n return sentinelMeansEmpty ? !empty : empty;\n }\n }\n\n const rightValue = resolveTokenValue(term.right, context);\n\n if (leftValue === undefined || rightValue === undefined) {\n console.warn(\"[EvaluateComparison] Undefined value - left:\", leftValue, \"right:\", rightValue);\n return false;\n }\n\n const trimIfString = (v: unknown) =>\n typeof v === \"string\" ? v.trim() : v;\n\n const leftComparable = trimIfString(coerceValue(leftValue));\n const rightComparable = trimIfString(coerceValue(rightValue));\n\n console.log(\"[EvaluateComparison]\", leftComparable, term.operator, rightComparable);\n\n let result: boolean;\n switch (term.operator) {\n case \"==\":\n result = leftComparable == rightComparable; // eslint-disable-line eqeqeq\n break;\n case \"===\":\n result = leftComparable === rightComparable;\n break;\n case \"!=\":\n result = leftComparable != rightComparable; // eslint-disable-line eqeqeq\n break;\n case \"!==\":\n result = leftComparable !== rightComparable;\n break;\n case \">\":\n result = compareValues(leftComparable, rightComparable, (a, b) => a > b);\n break;\n case \">=\":\n result = compareValues(leftComparable, rightComparable, (a, b) => a >= b);\n break;\n case \"<\":\n result = compareValues(leftComparable, rightComparable, (a, b) => a < b);\n break;\n case \"<=\":\n result = compareValues(leftComparable, rightComparable, (a, b) => a <= b);\n break;\n default:\n console.warn(\"[EvaluateComparison] Unknown operator:\", term.operator);\n result = false;\n }\n\n console.log(\"[EvaluateComparison] Result:\", result);\n return result;\n};\n\nconst isTruthy = (value: unknown): boolean => {\n if (typeof value === \"boolean\") return value;\n if (typeof value === \"string\") {\n const lower = value.toLowerCase();\n if (lower === \"true\") return true;\n if (lower === \"false\") return false;\n }\n if (typeof value === \"number\") return value !== 0;\n if (value === null || value === undefined) return false;\n if (value === \"\") return false;\n return true;\n};\n\nconst isEmptyValue = (value: unknown): boolean => {\n if (value === null || value === undefined) return true;\n if (typeof value === \"string\") return value.trim() === \"\";\n if (Array.isArray(value)) return value.length === 0;\n return false;\n};\n\nconst resolveTokenValue = (\n token: ConditionToken,\n context: ConditionEvaluationContext\n): unknown => {\n switch (token.type) {\n case \"input\":\n return parseLiteral(token.value);\n case \"variable\":\n case \"control\":\n return resolvePathValue(token.value, context, token.sourceNodeId);\n default:\n console.warn(\"[ResolveTokenValue] Unknown token type:\", token.type);\n return undefined;\n }\n};\n\nconst FIELD_ALIASES: Record<string, string[]> = {\n nom: [\"lastName\"],\n denomination_sociale: [\"companyName\"],\n prenom: [\"firstName\"],\n email: [\"email\"],\n sms: [\"phoneNumber\"],\n date_naissance: [\"birthDate\"],\n adresse: [\"addressLine1\"],\n ville: [\"city\"],\n code_postal: [\"postalCode\"],\n pays: [\"countryCode\", \"country\"],\n nationalite: [\"nationality\"],\n};\n\nconst resolvePathValue = (\n path: string,\n context: ConditionEvaluationContext,\n sourceNodeId?: string\n): unknown => {\n if (!path) {\n console.warn(\"[ResolvePathValue] Empty path provided\");\n return undefined;\n }\n\n const segments = path.split(\".\").filter(Boolean);\n\n if (segments.length === 0) {\n console.warn(\"[ResolvePathValue] No segments after splitting path\");\n return undefined;\n }\n\n const sources: Array<Record<string, unknown> | undefined> = [\n context.session?.result as Record<string, unknown>,\n context.session?.userInput as Record<string, unknown>,\n context.session?.contactInfo as Record<string, unknown>,\n context.userInput as Record<string, unknown>,\n context.contactInfo as Record<string, unknown>,\n context.session as unknown as Record<string, unknown>,\n ];\n\n // Helper to resolve aliases\n const getPossibleKeys = (key: string): string[] => {\n return [key, ...(FIELD_ALIASES[key] || [])];\n };\n\n // 1. Try direct/nested resolution with alias support for the last segment\n for (const source of sources) {\n if (!source) continue;\n\n const parentPath = segments.slice(0, -1);\n const lastSegment = segments[segments.length - 1];\n const parent = parentPath.length > 0 ? getNestedValue(source, parentPath) : source;\n\n if (parent && typeof parent === \"object\") {\n for (const key of getPossibleKeys(lastSegment)) {\n const value = (parent as Record<string, unknown>)[key];\n if (value !== undefined) {\n console.log(`[ResolvePathValue] Found ${path} (as ${key}) in direct sources`);\n return extractValue(value);\n }\n }\n }\n }\n\n // 2. Handle nodeId prefixes and fallbacks\n if (segments.length > 1) {\n const [root, ...rest] = segments;\n const lastSegment = segments[segments.length - 1];\n\n // Check in contextual userInput (structured by node or flat)\n if (context.userInput && typeof context.userInput === \"object\") {\n const userInput = context.userInput as Record<string, unknown>;\n\n // A. Try structured by nodeId\n const nodeData = userInput[root];\n if (nodeData && typeof nodeData === \"object\") {\n const value = getNestedValue(nodeData as Record<string, unknown>, rest);\n if (value !== undefined) {\n console.log(`[ResolvePathValue] Found ${path} in contextual userInput (nested)`);\n return extractValue(value);\n }\n }\n\n // B. Flat fallback: search for the property directly if it's a node-ID.property\n for (const key of getPossibleKeys(lastSegment)) {\n if (userInput[key] !== undefined) {\n console.log(`[ResolvePathValue] Found ${lastSegment} (as ${key}) in flat userInput`);\n return extractValue(userInput[key]);\n }\n\n // C. Check in customFormData\n const customFormData = userInput[\"customFormData\"] as Record<string, unknown> | undefined;\n if (customFormData && customFormData[key] !== undefined) {\n console.log(`[ResolvePathValue] Found ${lastSegment} (as ${key}) in customFormData`);\n return extractValue(customFormData[key]);\n }\n }\n }\n\n const analysisEntries = Array.isArray(context.session?.analysis)\n ? (context.session.analysis as Array<Record<string, unknown>>)\n : [];\n\n // If sourceNodeId is provided, use it to find the relevant analysis entry\n if (sourceNodeId || segments.length > 1) {\n const targetNodeId = sourceNodeId || root;\n const relevantEntries = analysisEntries.filter((entry) => {\n const entryRecord = entry as Record<string, unknown>;\n return entryRecord[\"nodeId\"] === targetNodeId || entryRecord[\"id\"] === targetNodeId;\n });\n\n if (relevantEntries.length > 0) {\n // Use the most recent entry (last one in array)\n const targetEntry = relevantEntries[relevantEntries.length - 1];\n\n // Check if the first segment is a hash/identifier that should be skipped\n const isHashLikeId = /^[a-f0-9]{24}$/i.test(root);\n const pathToResolve = isHashLikeId ? rest : [root, ...rest];\n\n // For control tokens, look in the documents array associated with this analysis entry\n if (pathToResolve.length > 0) {\n const propertyName = pathToResolve[pathToResolve.length - 1];\n const propertyKeys = getPossibleKeys(propertyName);\n\n const documents = Array.isArray(context.session?.documents)\n ? (context.session.documents as Array<Record<string, unknown>>)\n : [];\n\n if (documents.length > 0) {\n const analysisId = targetEntry[\"id\"] as string;\n const relevantDocs = documents.filter((doc) => doc[\"analysisId\"] === analysisId);\n\n if (relevantDocs.length > 0) {\n const doc = relevantDocs[0];\n\n // Look in controlCategories for control properties\n const controlCategories = doc[\"controlCategories\"] as Record<string, unknown> | undefined;\n if (controlCategories) {\n for (const categoryData of Object.values(controlCategories)) {\n const category = categoryData as Record<string, unknown>;\n const controls = category[\"controls\"] as Record<string, unknown> | undefined;\n\n if (controls) {\n for (const key of propertyKeys) {\n if (key in controls) {\n const control = controls[key] as Record<string, unknown>;\n return extractValue(control[\"value\"]);\n }\n }\n }\n }\n }\n\n // Also check in extractedInformations\n const extractedInformations = doc[\"extractedInformations\"] as Record<string, unknown> | undefined;\n if (extractedInformations) {\n for (const key of propertyKeys) {\n const valueFromExtracted = getNestedValue(extractedInformations, [key]);\n if (valueFromExtracted !== undefined) {\n return extractValue(valueFromExtracted);\n }\n }\n }\n }\n }\n }\n\n // Try direct access on analysis entry with aliases\n const propertyName = segments[segments.length - 1];\n for (const key of getPossibleKeys(propertyName)) {\n const valueFromEntry = (targetEntry as Record<string, unknown>)[key];\n if (valueFromEntry !== undefined) {\n return extractValue(valueFromEntry);\n }\n\n const extractedInfo = (targetEntry as Record<string, unknown>)[\n \"extractedInformation\"\n ] as Record<string, unknown> | undefined;\n if (extractedInfo && extractedInfo[key] !== undefined) {\n return extractValue(extractedInfo[key]);\n }\n\n const resultInfo = (targetEntry as Record<string, unknown>)[\n \"result\"\n ] as Record<string, unknown> | undefined;\n if (resultInfo && resultInfo[key] !== undefined) {\n return extractValue(resultInfo[key]);\n }\n }\n }\n }\n }\n\n console.warn(\"⚠️ [ResolvePathValue] Could not resolve path:\", path);\n return undefined;\n};\n\n/**\n * Extracts the actual value from objects with {confidence, value} structure.\n * This is common in extractedInformations from the API.\n */\nconst extractValue = (value: unknown): unknown => {\n // If it's an object with both 'value' and 'confidence' properties, extract the value\n if (\n value &&\n typeof value === \"object\" &&\n \"value\" in value &&\n \"confidence\" in value\n ) {\n return (value as Record<string, unknown>)[\"value\"];\n }\n return value;\n};\n\nconst getNestedValue = (\n source: Record<string, unknown> | undefined,\n path: string[]\n): unknown => {\n if (!source) {\n return undefined;\n }\n\n return path.reduce<unknown>((acc, key) => {\n if (acc === undefined || acc === null) {\n return undefined;\n }\n if (Array.isArray(acc)) {\n const index = Number(key);\n if (Number.isNaN(index)) {\n return undefined;\n }\n return acc[index];\n }\n if (typeof acc === \"object\") {\n return (acc as Record<string, unknown>)[key];\n }\n return undefined;\n }, source);\n};\n\nconst parseLiteral = (value: string): unknown => {\n const trimmed = value?.trim();\n if (!trimmed) {\n return \"\";\n }\n\n if (trimmed.toLowerCase() === \"true\") {\n return true;\n }\n if (trimmed.toLowerCase() === \"false\") {\n return false;\n }\n\n const numericValue = Number(trimmed);\n if (!Number.isNaN(numericValue)) {\n return numericValue;\n }\n\n const timestamp = Date.parse(trimmed);\n if (!Number.isNaN(timestamp)) {\n return new Date(timestamp).getTime();\n }\n return trimmed.replace(/\"/g, '');\n};\n\nconst coerceValue = (value: unknown): unknown => {\n if (value instanceof Date) {\n return value.getTime();\n }\n if (typeof value === \"string\") {\n const literal = parseLiteral(value);\n if (literal !== value) {\n return literal;\n }\n }\n return value;\n};\n\nconst compareValues = (\n left: unknown,\n right: unknown,\n comparator: (a: number | string, b: number | string) => boolean\n): boolean => {\n if (typeof left === \"number\" && typeof right === \"number\") {\n return comparator(left, right);\n }\n\n if (typeof left === \"string\" && typeof right === \"string\") {\n // Normalize case for better string matching\n return comparator(left.trim().toLowerCase(), right.trim().toLowerCase());\n }\n\n console.warn(`[CompareValues] Type mismatch: left=${typeof left}, right=${typeof right}`);\n return false;\n};\n\nconst determineOperandType = (value: string): ConditionTokenType => {\n if (isBooleanLiteral(value) || isNumericLiteral(value) || PRESENCE_SENTINELS.has(value)) {\n return \"input\";\n }\n\n return \"variable\";\n};\n\nconst isNumericLiteral = (value: string): boolean => {\n return /^-?\\d+(?:\\.\\d+)?$/.test(value);\n};\n\nconst isBooleanLiteral = (value: string): boolean => {\n return value.toLowerCase() === \"true\" || value.toLowerCase() === \"false\";\n};\n"],"names":[],"mappings":"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"}
@@ -13,6 +13,12 @@ var LANGUAGE_FLAGS = {
13
13
  name: 'English',
14
14
  alpha2: 'gb',
15
15
  nativeName: 'English'
16
+ },
17
+ es: {
18
+ code: 'es',
19
+ name: 'Spanish',
20
+ alpha2: 'es',
21
+ nativeName: 'Español'
16
22
  }
17
23
  };
18
24
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"languageFlags.js","sources":["../../../../src/utils/languageFlags.ts"],"sourcesContent":["/**\n * Language flag mapping utility\n * Maps language codes to their corresponding country flags\n */\nexport interface LanguageFlag {\n code: string;\n name: string;\n alpha2: string;\n nativeName: string;\n}\n\n/**\n * Mapping of language codes to country flags and names\n */\nexport const LANGUAGE_FLAGS: Record<string, LanguageFlag> = {\n fr: {\n code: 'fr',\n name: 'French',\n alpha2: 'fr',\n nativeName: 'Français'\n },\n en: {\n code: 'en',\n name: 'English',\n alpha2: 'gb',\n nativeName: 'English'\n }\n};\n\n/**\n * Get flag for a language code\n * @param languageCode - The language code (e.g., 'fr', 'en')\n * @returns The flag emoji or empty string if not found\n*/\nexport const getLanguageAlpha2 = (languageCode: string): string | null => {\n return LANGUAGE_FLAGS[languageCode]?.alpha2;\n};\n\n/**\n * Get language info for a language code\n * @param languageCode - The language code (e.g., 'fr', 'en')\n * @returns The language flag info or null if not found\n */\nexport const getLanguageInfo = (languageCode: string): LanguageFlag | null => {\n return LANGUAGE_FLAGS[languageCode] || null;\n};\n\n/**\n * Get all supported languages with their flags\n * @returns Array of all supported language flags\n */\nexport const getSupportedLanguages = (): LanguageFlag[] => {\n return Object.values(LANGUAGE_FLAGS);\n};\n\n/**\n * Check if a language code is supported\n * @param languageCode - The language code to check\n * @returns True if the language is supported\n */\nexport const isLanguageSupported = (languageCode: string): boolean => {\n return languageCode in LANGUAGE_FLAGS;\n};"],"names":[],"mappings":"AAWA;;AAEG;AACI,IAAM,cAAc,GAAiC;AAC1D,IAAA,EAAE,EAAE;AACF,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,UAAU,EAAE;AACb,KAAA;AACD,IAAA,EAAE,EAAE;AACF,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,UAAU,EAAE;AACb;;AAGH;;;;AAIE;AACK,IAAM,iBAAiB,GAAG,UAAC,YAAoB,EAAA;;AAClD,IAAA,OAAO,MAAA,cAAc,CAAC,YAAY,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,MAAM;AAC/C;AAWA;;;AAGG;AACI,IAAM,qBAAqB,GAAG,YAAA;AACnC,IAAA,OAAO,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC;AACtC;;;;"}
1
+ {"version":3,"file":"languageFlags.js","sources":["../../../../src/utils/languageFlags.ts"],"sourcesContent":["/**\n * Language flag mapping utility\n * Maps language codes to their corresponding country flags\n */\nexport interface LanguageFlag {\n code: string;\n name: string;\n alpha2: string;\n nativeName: string;\n}\n\n/**\n * Mapping of language codes to country flags and names\n */\nexport const LANGUAGE_FLAGS: Record<string, LanguageFlag> = {\n fr: {\n code: 'fr',\n name: 'French',\n alpha2: 'fr',\n nativeName: 'Français'\n },\n en: {\n code: 'en',\n name: 'English',\n alpha2: 'gb',\n nativeName: 'English'\n },\n es: {\n code: 'es',\n name: 'Spanish',\n alpha2: 'es',\n nativeName: 'Español'\n }\n};\n\n/**\n * Get flag for a language code\n * @param languageCode - The language code (e.g., 'fr', 'en')\n * @returns The flag emoji or empty string if not found\n*/\nexport const getLanguageAlpha2 = (languageCode: string): string | null => {\n return LANGUAGE_FLAGS[languageCode]?.alpha2;\n};\n\n/**\n * Get language info for a language code\n * @param languageCode - The language code (e.g., 'fr', 'en')\n * @returns The language flag info or null if not found\n */\nexport const getLanguageInfo = (languageCode: string): LanguageFlag | null => {\n return LANGUAGE_FLAGS[languageCode] || null;\n};\n\n/**\n * Get all supported languages with their flags\n * @returns Array of all supported language flags\n */\nexport const getSupportedLanguages = (): LanguageFlag[] => {\n return Object.values(LANGUAGE_FLAGS);\n};\n\n/**\n * Check if a language code is supported\n * @param languageCode - The language code to check\n * @returns True if the language is supported\n */\nexport const isLanguageSupported = (languageCode: string): boolean => {\n return languageCode in LANGUAGE_FLAGS;\n};\n"],"names":[],"mappings":"AAWA;;AAEG;AACI,IAAM,cAAc,GAAiC;AAC1D,IAAA,EAAE,EAAE;AACF,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,UAAU,EAAE;AACb,KAAA;AACD,IAAA,EAAE,EAAE;AACF,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,UAAU,EAAE;AACb,KAAA;AACD,IAAA,EAAE,EAAE;AACF,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,UAAU,EAAE;AACb;;AAGH;;;;AAIE;AACK,IAAM,iBAAiB,GAAG,UAAC,YAAoB,EAAA;;AAClD,IAAA,OAAO,MAAA,cAAc,CAAC,YAAY,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,MAAM;AAC/C;AAWA;;;AAGG;AACI,IAAM,qBAAqB,GAAG,YAAA;AACnC,IAAA,OAAO,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC;AACtC;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "datakeen-session-react",
3
- "version": "1.1.140-dev.97",
3
+ "version": "1.1.140-dev.99",
4
4
  "description": "React SDK component to manage and render Datakeen session experiences easily.",
5
5
  "publishConfig": {
6
6
  "access": "public",