quantible 0.1.0-alpha

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 (102) hide show
  1. package/README.md +97 -0
  2. package/dist/cjs/config/default.js +395 -0
  3. package/dist/cjs/config/default.js.map +1 -0
  4. package/dist/cjs/converters/convertCurrencyToSpokenWord.js +28 -0
  5. package/dist/cjs/converters/convertCurrencyToSpokenWord.js.map +1 -0
  6. package/dist/cjs/converters/convertNumberToSpokenWord.js +32 -0
  7. package/dist/cjs/converters/convertNumberToSpokenWord.js.map +1 -0
  8. package/dist/cjs/converters/convertNumericUnitToSpokenWord.js +48 -0
  9. package/dist/cjs/converters/convertNumericUnitToSpokenWord.js.map +1 -0
  10. package/dist/cjs/converters/convertOperatorToSpokenWord.js +17 -0
  11. package/dist/cjs/converters/convertOperatorToSpokenWord.js.map +1 -0
  12. package/dist/cjs/converters/convertScientificExpressionToSpokenWord.js +35 -0
  13. package/dist/cjs/converters/convertScientificExpressionToSpokenWord.js.map +1 -0
  14. package/dist/cjs/converters/convertUnitOnlyToSpokenWord.js +27 -0
  15. package/dist/cjs/converters/convertUnitOnlyToSpokenWord.js.map +1 -0
  16. package/dist/cjs/index.js +116 -0
  17. package/dist/cjs/index.js.map +1 -0
  18. package/dist/cjs/interfaces/configurations/default.js +3 -0
  19. package/dist/cjs/interfaces/configurations/default.js.map +1 -0
  20. package/dist/cjs/interfaces/definitions.js +3 -0
  21. package/dist/cjs/interfaces/definitions.js.map +1 -0
  22. package/dist/cjs/utils/extraction/patternExtractor.js +96 -0
  23. package/dist/cjs/utils/extraction/patternExtractor.js.map +1 -0
  24. package/dist/cjs/utils/extraction/regexPatterns.js +65 -0
  25. package/dist/cjs/utils/extraction/regexPatterns.js.map +1 -0
  26. package/dist/cjs/utils/parseSuperscript.js +33 -0
  27. package/dist/cjs/utils/parseSuperscript.js.map +1 -0
  28. package/dist/cjs/utils/stringBuilding/exponent.js +21 -0
  29. package/dist/cjs/utils/stringBuilding/exponent.js.map +1 -0
  30. package/dist/cjs/utils/stringBuilding/negative.js +8 -0
  31. package/dist/cjs/utils/stringBuilding/negative.js.map +1 -0
  32. package/dist/cjs/utils/stringBuilding/perDigit.js +18 -0
  33. package/dist/cjs/utils/stringBuilding/perDigit.js.map +1 -0
  34. package/dist/cjs/utils/stringBuilding/positiveInteger.js +31 -0
  35. package/dist/cjs/utils/stringBuilding/positiveInteger.js.map +1 -0
  36. package/dist/cjs/utils/stringBuilding/twoDigits.js +18 -0
  37. package/dist/cjs/utils/stringBuilding/twoDigits.js.map +1 -0
  38. package/dist/cjs/utils/stringBuilding/zeroTo999.js +37 -0
  39. package/dist/cjs/utils/stringBuilding/zeroTo999.js.map +1 -0
  40. package/dist/cjs/utils/validateExtractionResultObject.js +206 -0
  41. package/dist/cjs/utils/validateExtractionResultObject.js.map +1 -0
  42. package/dist/esm/config/default.js +392 -0
  43. package/dist/esm/config/default.js.map +1 -0
  44. package/dist/esm/converters/convertCurrencyToSpokenWord.js +25 -0
  45. package/dist/esm/converters/convertCurrencyToSpokenWord.js.map +1 -0
  46. package/dist/esm/converters/convertNumberToSpokenWord.js +29 -0
  47. package/dist/esm/converters/convertNumberToSpokenWord.js.map +1 -0
  48. package/dist/esm/converters/convertNumericUnitToSpokenWord.js +45 -0
  49. package/dist/esm/converters/convertNumericUnitToSpokenWord.js.map +1 -0
  50. package/dist/esm/converters/convertOperatorToSpokenWord.js +14 -0
  51. package/dist/esm/converters/convertOperatorToSpokenWord.js.map +1 -0
  52. package/dist/esm/converters/convertScientificExpressionToSpokenWord.js +32 -0
  53. package/dist/esm/converters/convertScientificExpressionToSpokenWord.js.map +1 -0
  54. package/dist/esm/converters/convertUnitOnlyToSpokenWord.js +24 -0
  55. package/dist/esm/converters/convertUnitOnlyToSpokenWord.js.map +1 -0
  56. package/dist/esm/index.js +111 -0
  57. package/dist/esm/index.js.map +1 -0
  58. package/dist/esm/interfaces/configurations/default.js +2 -0
  59. package/dist/esm/interfaces/configurations/default.js.map +1 -0
  60. package/dist/esm/interfaces/definitions.js +2 -0
  61. package/dist/esm/interfaces/definitions.js.map +1 -0
  62. package/dist/esm/utils/extraction/patternExtractor.js +92 -0
  63. package/dist/esm/utils/extraction/patternExtractor.js.map +1 -0
  64. package/dist/esm/utils/extraction/regexPatterns.js +62 -0
  65. package/dist/esm/utils/extraction/regexPatterns.js.map +1 -0
  66. package/dist/esm/utils/parseSuperscript.js +30 -0
  67. package/dist/esm/utils/parseSuperscript.js.map +1 -0
  68. package/dist/esm/utils/stringBuilding/exponent.js +18 -0
  69. package/dist/esm/utils/stringBuilding/exponent.js.map +1 -0
  70. package/dist/esm/utils/stringBuilding/negative.js +4 -0
  71. package/dist/esm/utils/stringBuilding/negative.js.map +1 -0
  72. package/dist/esm/utils/stringBuilding/perDigit.js +15 -0
  73. package/dist/esm/utils/stringBuilding/perDigit.js.map +1 -0
  74. package/dist/esm/utils/stringBuilding/positiveInteger.js +28 -0
  75. package/dist/esm/utils/stringBuilding/positiveInteger.js.map +1 -0
  76. package/dist/esm/utils/stringBuilding/twoDigits.js +15 -0
  77. package/dist/esm/utils/stringBuilding/twoDigits.js.map +1 -0
  78. package/dist/esm/utils/stringBuilding/zeroTo999.js +34 -0
  79. package/dist/esm/utils/stringBuilding/zeroTo999.js.map +1 -0
  80. package/dist/esm/utils/validateExtractionResultObject.js +203 -0
  81. package/dist/esm/utils/validateExtractionResultObject.js.map +1 -0
  82. package/dist/types/config/default.d.ts +39 -0
  83. package/dist/types/converters/convertCurrencyToSpokenWord.d.ts +7 -0
  84. package/dist/types/converters/convertNumberToSpokenWord.d.ts +7 -0
  85. package/dist/types/converters/convertNumericUnitToSpokenWord.d.ts +7 -0
  86. package/dist/types/converters/convertOperatorToSpokenWord.d.ts +7 -0
  87. package/dist/types/converters/convertScientificExpressionToSpokenWord.d.ts +7 -0
  88. package/dist/types/converters/convertUnitOnlyToSpokenWord.d.ts +7 -0
  89. package/dist/types/index.d.ts +58 -0
  90. package/dist/types/interfaces/configurations/default.d.ts +22 -0
  91. package/dist/types/interfaces/definitions.d.ts +100 -0
  92. package/dist/types/utils/extraction/patternExtractor.d.ts +21 -0
  93. package/dist/types/utils/extraction/regexPatterns.d.ts +2 -0
  94. package/dist/types/utils/parseSuperscript.d.ts +6 -0
  95. package/dist/types/utils/stringBuilding/exponent.d.ts +2 -0
  96. package/dist/types/utils/stringBuilding/negative.d.ts +1 -0
  97. package/dist/types/utils/stringBuilding/perDigit.d.ts +7 -0
  98. package/dist/types/utils/stringBuilding/positiveInteger.d.ts +6 -0
  99. package/dist/types/utils/stringBuilding/twoDigits.d.ts +6 -0
  100. package/dist/types/utils/stringBuilding/zeroTo999.d.ts +6 -0
  101. package/dist/types/utils/validateExtractionResultObject.d.ts +12 -0
  102. package/package.json +61 -0
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.convertOperatorToSpokenWord = convertOperatorToSpokenWord;
4
+ const default_1 = require("../config/default");
5
+ /**
6
+ * Converts an operator object into its spoken word representation.
7
+ * @param {baseOperator} operatorObject - The operator object to convert.
8
+ * @returns {string} The spoken word representation of the operator.
9
+ */
10
+ function convertOperatorToSpokenWord(operatorObject) {
11
+ const { input } = operatorObject;
12
+ if (input === undefined) {
13
+ return "";
14
+ }
15
+ return default_1.math[input];
16
+ }
17
+ //# sourceMappingURL=convertOperatorToSpokenWord.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convertOperatorToSpokenWord.js","sourceRoot":"","sources":["../../../src/converters/convertOperatorToSpokenWord.ts"],"names":[],"mappings":";;AAQA,kEAMC;AAdD,+CAAyC;AAGzC;;;;GAIG;AACH,SAAgB,2BAA2B,CAAC,cAA4B;IACtE,MAAM,EAAE,KAAK,EAAE,GAAG,cAAc,CAAC;IACjC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,cAAI,CAAC,KAA0B,CAAC,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.convertScientificExpressionToSpokenWord = convertScientificExpressionToSpokenWord;
4
+ const convertNumberToSpokenWord_1 = require("./convertNumberToSpokenWord");
5
+ const parseSuperscript_1 = require("../utils/parseSuperscript");
6
+ /**
7
+ * Converts a scientific expression object into its spoken word representation.
8
+ * @param {baseScientific} expression - The scientific expression object to convert.
9
+ * @returns {string} The spoken word representation of the scientific expression.
10
+ */
11
+ function convertScientificExpressionToSpokenWord(expression) {
12
+ const { integer, decimal, exponent, negativeInt } = expression;
13
+ const isNegativeExponent = exponent.startsWith("-") || exponent.startsWith("⁻");
14
+ let E = "times ten to the power of ";
15
+ let sentence = (0, convertNumberToSpokenWord_1.convertNumberToSpokenWord)({
16
+ integer,
17
+ decimal,
18
+ negativeInt,
19
+ matchType: "number",
20
+ input: "",
21
+ index: 0,
22
+ }) +
23
+ " " +
24
+ E +
25
+ (0, convertNumberToSpokenWord_1.convertNumberToSpokenWord)({
26
+ decimal: undefined,
27
+ negativeInt: isNegativeExponent,
28
+ integer: (0, parseSuperscript_1.toRegularInteger)(isNegativeExponent ? exponent.slice(1) : exponent),
29
+ matchType: "number",
30
+ input: "",
31
+ index: 0,
32
+ });
33
+ return sentence.trim();
34
+ }
35
+ //# sourceMappingURL=convertScientificExpressionToSpokenWord.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convertScientificExpressionToSpokenWord.js","sourceRoot":"","sources":["../../../src/converters/convertScientificExpressionToSpokenWord.ts"],"names":[],"mappings":";;AASA,0FA8BC;AAvCD,2EAAwE;AACxE,gEAA6D;AAG7D;;;;GAIG;AACH,SAAgB,uCAAuC,CAAC,UAA0B;IAChF,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,UAAU,CAAC;IAE/D,MAAM,kBAAkB,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAEhF,IAAI,CAAC,GAAG,4BAA4B,CAAC;IAErC,IAAI,QAAQ,GACV,IAAA,qDAAyB,EAAC;QACxB,OAAO;QACP,OAAO;QACP,WAAW;QACX,SAAS,EAAE,QAAQ;QACnB,KAAK,EAAE,EAAE;QACT,KAAK,EAAE,CAAC;KAET,CAAC;QACF,GAAG;QACH,CAAC;QACD,IAAA,qDAAyB,EAAC;YACxB,OAAO,EAAE,SAAS;YAClB,WAAW,EAAE,kBAAkB;YAC/B,OAAO,EAAE,IAAA,mCAAgB,EAAC,kBAAkB,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC5E,SAAS,EAAE,QAAQ;YACnB,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,CAAC;SAET,CAAC,CAAC;IAEL,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;AACzB,CAAC"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.convertUnitOnlyToSpokenWord = convertUnitOnlyToSpokenWord;
4
+ const default_1 = require("../config/default");
5
+ const exponent_1 = require("../utils/stringBuilding/exponent");
6
+ /**
7
+ * Converts a unit-only object into its spoken word representation.
8
+ * @param {baseUnitOnly} unitOnlyObject - The unit-only object to convert.
9
+ * @returns {string} The spoken word representation of the unit.
10
+ */
11
+ function convertUnitOnlyToSpokenWord(unitOnlyObject) {
12
+ const { unit, unitExponent } = unitOnlyObject;
13
+ let spokenUnit;
14
+ spokenUnit = default_1.units[unit];
15
+ let result = "";
16
+ if (spokenUnit === undefined) {
17
+ return "";
18
+ }
19
+ if (unitExponent !== undefined) {
20
+ result = spokenUnit.singular + " " + (0, exponent_1.exponentSpokenWord)(unitExponent);
21
+ }
22
+ else {
23
+ result = spokenUnit.singular;
24
+ }
25
+ return result;
26
+ }
27
+ //# sourceMappingURL=convertUnitOnlyToSpokenWord.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convertUnitOnlyToSpokenWord.js","sourceRoot":"","sources":["../../../src/converters/convertUnitOnlyToSpokenWord.ts"],"names":[],"mappings":";;AAUA,kEAkBC;AA5BD,+CAA0C;AAE1C,+DAAsE;AAGtE;;;;GAIG;AACH,SAAgB,2BAA2B,CAAC,cAA4B;IACtE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,cAAc,CAAC;IAE9C,IAAI,UAAgB,CAAC;IAErB,UAAU,GAAG,eAAK,CAAC,IAAI,CAAC,CAAC;IAEzB,IAAI,MAAM,GAAW,EAAE,CAAC;IACxB,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,GAAG,UAAU,CAAC,QAAQ,GAAG,GAAG,GAAG,IAAA,6BAAkB,EAAC,YAAY,CAAC,CAAC;IACxE,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC;IAC/B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateExtractionResult = exports.extractQuantities = exports.convertQuantities = void 0;
4
+ const patternExtractor_1 = require("./utils/extraction/patternExtractor");
5
+ const convertCurrencyToSpokenWord_1 = require("./converters/convertCurrencyToSpokenWord");
6
+ const convertNumberToSpokenWord_1 = require("./converters/convertNumberToSpokenWord");
7
+ const convertNumericUnitToSpokenWord_1 = require("./converters/convertNumericUnitToSpokenWord");
8
+ const convertOperatorToSpokenWord_1 = require("./converters/convertOperatorToSpokenWord");
9
+ const convertScientificExpressionToSpokenWord_1 = require("./converters/convertScientificExpressionToSpokenWord");
10
+ const convertUnitOnlyToSpokenWord_1 = require("./converters/convertUnitOnlyToSpokenWord");
11
+ const validateExtractionResultObject_1 = require("./utils/validateExtractionResultObject");
12
+ Object.defineProperty(exports, "validateExtractionResult", { enumerable: true, get: function () { return validateExtractionResultObject_1.validateExtractionResult; } });
13
+ /**
14
+ * @namespace extractQuantities
15
+ * @description Contains functions for extracting numeric data from a string.
16
+ */
17
+ const extractQuantities = {
18
+ /**
19
+ * Extracts the first match (number || currency || unit || operator || scientific expression) from the input string.
20
+ * @param {string} input - The string to extract from.
21
+ * @returns {ExtractionResult | null} The extracted data or null if no match is found.
22
+ */
23
+ firstMatch: patternExtractor_1.extractFirstMatch,
24
+ /**
25
+ * Extracts all matches (number || currency || unit || operator || scientific expression) from the input string.
26
+ * @param {string} input - The string to extract from.
27
+ * @returns {ExtractionResult[]} The extracted data.
28
+ */
29
+ allMatches: patternExtractor_1.extractAllMatches,
30
+ };
31
+ exports.extractQuantities = extractQuantities;
32
+ /**
33
+ * @namespace convertQuantities
34
+ * @description Contains functions for converting (number || currency || unit || operator || scientific expression) data from a string or object to spoken word.
35
+ */
36
+ const convertQuantities = {
37
+ /**
38
+ * Translates an ExtractionResult object (number || currency || unit || operator || scientific expression) into its spoken word equivalent.
39
+ *
40
+ * @param {ExtractionResult} extractionResult - The ExtractionResult object to translate.
41
+ * @returns {string} The spoken word equivalent of the ExtractionResult.
42
+ */
43
+ /**
44
+ * Translates an ExtractionResult object (number || currency || unit || operator || scientific expression) into its spoken word equivalent.
45
+ *
46
+ * @param {ExtractionResult} extractionResult - The ExtractionResult object to translate.
47
+ * @returns {string} The spoken word equivalent of the ExtractionResult.
48
+ */
49
+ translateMatch: (extractionResult) => {
50
+ let result = "";
51
+ switch (extractionResult.matchType) {
52
+ case "number":
53
+ result = (0, convertNumberToSpokenWord_1.convertNumberToSpokenWord)(extractionResult);
54
+ break;
55
+ case "symbolCurrency":
56
+ result = (0, convertCurrencyToSpokenWord_1.convertCurrencyToSpokenWord)(extractionResult);
57
+ break;
58
+ case "codeCurrency":
59
+ result = (0, convertCurrencyToSpokenWord_1.convertCurrencyToSpokenWord)(extractionResult);
60
+ break;
61
+ case "unit":
62
+ result = (0, convertNumericUnitToSpokenWord_1.convertNumericUnitToSpokenWord)(extractionResult);
63
+ break;
64
+ case "unitOnly":
65
+ result = (0, convertUnitOnlyToSpokenWord_1.convertUnitOnlyToSpokenWord)(extractionResult);
66
+ break;
67
+ case "operator":
68
+ result = (0, convertOperatorToSpokenWord_1.convertOperatorToSpokenWord)(extractionResult);
69
+ break;
70
+ case "scientific":
71
+ result = (0, convertScientificExpressionToSpokenWord_1.convertScientificExpressionToSpokenWord)(extractionResult);
72
+ break;
73
+ default:
74
+ break;
75
+ }
76
+ return result;
77
+ },
78
+ /**
79
+ * Extracts the first match (number || currency || unit || operator || scientific expression) from the input string
80
+ * and translates it to its spoken word equivalent.
81
+ *
82
+ * @param {string} input - The string to extract and translate from.
83
+ * @returns {string} The input string with the first match replaced by its spoken word equivalent,
84
+ * or an empty string if no match is found.
85
+ */
86
+ autoReplaceFirstMatch: (input) => {
87
+ const match = (0, patternExtractor_1.extractFirstMatch)(input);
88
+ if (!match)
89
+ return "";
90
+ return input.replace(match.input, convertQuantities.translateMatch(match));
91
+ },
92
+ /**
93
+ * Extracts all matches (number || currency || unit || operator || scientific expression) from the input string
94
+ * and translates them to their spoken word equivalents.
95
+ *
96
+ * @param {string} input - The string to extract and translate from.
97
+ * @returns {string} The input string with all matches replaced by their spoken word equivalents. Returns the original string if no matches are found.
98
+ */
99
+ autoReplaceAllMatches: (input) => {
100
+ const matches = (0, patternExtractor_1.extractAllMatches)(input);
101
+ if (matches.length === 0) {
102
+ return input;
103
+ }
104
+ let output = "";
105
+ let lastIndex = 0;
106
+ for (const match of matches) {
107
+ output += input.substring(lastIndex, match.index);
108
+ output += convertQuantities.translateMatch(match);
109
+ lastIndex = match.index + match.input.length;
110
+ }
111
+ output += input.substring(lastIndex);
112
+ return output.replace(/\s+/g, " ").trim();
113
+ },
114
+ };
115
+ exports.convertQuantities = convertQuantities;
116
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,0EAA2F;AAC3F,0FAAuF;AACvF,sFAAmF;AACnF,gGAA6F;AAC7F,0FAAuF;AACvF,kHAA+G;AAC/G,0FAAuF;AAYvF,2FAAkF;AAiHlC,yGAjHvC,yDAAwB,OAiHuC;AA/GxE;;;GAGG;AACH,MAAM,iBAAiB,GAAG;IACxB;;;;OAIG;IACH,UAAU,EAAE,oCAAiB;IAC7B;;;;OAIG;IACH,UAAU,EAAE,oCAAiB;CAC9B,CAAC;AA8F2B,8CAAiB;AA5F9C;;;GAGG;AACH,MAAM,iBAAiB,GAAG;IACxB;;;;;OAKG;IACH;;;;;OAKG;IACH,cAAc,EAAE,CAAC,gBAAkC,EAAU,EAAE;QAC7D,IAAI,MAAM,GAAW,EAAE,CAAC;QAExB,QAAQ,gBAAgB,CAAC,SAAS,EAAE,CAAC;YACnC,KAAK,QAAQ;gBACX,MAAM,GAAG,IAAA,qDAAyB,EAAC,gBAA8B,CAAC,CAAC;gBACnE,MAAM;YAER,KAAK,gBAAgB;gBACnB,MAAM,GAAG,IAAA,yDAA2B,EAAC,gBAAgC,CAAC,CAAC;gBACvE,MAAM;YACR,KAAK,cAAc;gBACjB,MAAM,GAAG,IAAA,yDAA2B,EAAC,gBAAgC,CAAC,CAAC;gBACvE,MAAM;YACR,KAAK,MAAM;gBACT,MAAM,GAAG,IAAA,+DAA8B,EAAC,gBAAkC,CAAC,CAAC;gBAC5E,MAAM;YACR,KAAK,UAAU;gBACb,MAAM,GAAG,IAAA,yDAA2B,EAAC,gBAAgC,CAAC,CAAC;gBACvE,MAAM;YACR,KAAK,UAAU;gBACb,MAAM,GAAG,IAAA,yDAA2B,EAAC,gBAAgC,CAAC,CAAC;gBACvE,MAAM;YACR,KAAK,YAAY;gBACf,MAAM,GAAG,IAAA,iFAAuC,EAAC,gBAAkC,CAAC,CAAC;gBACrF,MAAM;YAER;gBACE,MAAM;QACV,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;;;OAOG;IACH,qBAAqB,EAAE,CAAC,KAAa,EAAU,EAAE;QAC/C,MAAM,KAAK,GAAG,IAAA,oCAAiB,EAAC,KAAK,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,iBAAiB,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED;;;;;;OAMG;IACH,qBAAqB,EAAE,CAAC,KAAa,EAAU,EAAE;QAC/C,MAAM,OAAO,GAAG,IAAA,oCAAiB,EAAC,KAAK,CAAC,CAAC;QAEzC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAClD,MAAM,IAAI,iBAAiB,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YAClD,SAAS,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;QAC/C,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACrC,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5C,CAAC;CACF,CAAC;AAEO,8CAAiB"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=default.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default.js","sourceRoot":"","sources":["../../../../src/interfaces/configurations/default.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=definitions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../../src/interfaces/definitions.ts"],"names":[],"mappings":""}
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extractFirstMatch = extractFirstMatch;
4
+ exports.extractAllMatches = extractAllMatches;
5
+ const regexPatterns_1 = require("./regexPatterns");
6
+ /**
7
+ * Returns the first match of a number, currency, unit, or exponent in the given string.
8
+ * The returned object contains the extracted groups and additional information such as
9
+ * the type of match and the index of the match in the string.
10
+ *
11
+ * @param {string} input - The string to search for matches
12
+ * @returns {patternExtraction | null} - The extracted groups and additional information, or null if no match is found
13
+ */
14
+ function extractFirstMatch(input) {
15
+ const match = input.match(regexPatterns_1.regexMatches);
16
+ if (match && match.groups && match.index !== undefined) {
17
+ const matchedGroup = Object.fromEntries(Object.entries(match.groups).filter(([_, value]) => value !== undefined));
18
+ let matchType = Object.keys(matchedGroup)[0];
19
+ const extractedGroup = {};
20
+ switch (matchType) {
21
+ case "symbolCurrency":
22
+ extractedGroup.integer = matchedGroup["symbolInt"];
23
+ extractedGroup.decimal = matchedGroup["symbolDec"];
24
+ extractedGroup.negativeInt = matchedGroup["negativeSignSymbol"] !== undefined;
25
+ extractedGroup.currency = matchedGroup["currencySymbol"];
26
+ break;
27
+ case "codeCurrency":
28
+ extractedGroup.integer = matchedGroup["codeInt"];
29
+ extractedGroup.decimal = matchedGroup["codeDec"];
30
+ extractedGroup.negativeInt = matchedGroup["negativeSignCode"] !== undefined;
31
+ extractedGroup.currency = matchedGroup["currencyCode"];
32
+ break;
33
+ case "scientific":
34
+ extractedGroup.integer = matchedGroup["scientificInt"];
35
+ extractedGroup.decimal = matchedGroup["scientificDec"];
36
+ extractedGroup.negativeInt = matchedGroup["negativeSignScientific"] !== undefined;
37
+ extractedGroup.exponent = matchedGroup["scientificExponent"];
38
+ break;
39
+ case "unit":
40
+ extractedGroup.integer = matchedGroup["unitInt"];
41
+ extractedGroup.decimal = matchedGroup["unitDec"];
42
+ extractedGroup.negativeInt = matchedGroup["negativeSignUnit"] !== undefined;
43
+ extractedGroup.unit = matchedGroup["unitName"];
44
+ extractedGroup.exponent = matchedGroup["unitCaretExponentPre"] || matchedGroup["unitSuperExponentPre"];
45
+ extractedGroup.unitExponent = matchedGroup["unitCaretExponentPost"] || matchedGroup["unitSuperExponentPost"];
46
+ break;
47
+ case "unitOnly":
48
+ extractedGroup.unit = matchedGroup["unitNameOnly"];
49
+ extractedGroup.unitExponent = matchedGroup["unitOnlyCaretExponent"] || matchedGroup["unitOnlySuperExponent"];
50
+ break;
51
+ case "operator":
52
+ break;
53
+ case "number":
54
+ extractedGroup.integer = matchedGroup["integerInt"];
55
+ extractedGroup.decimal = matchedGroup["integerDec"];
56
+ extractedGroup.exponent = matchedGroup["integerSuperExponent"] || matchedGroup["integerCaretExponent"];
57
+ extractedGroup.negativeInt = matchedGroup["negativeSignInteger"] !== undefined;
58
+ break;
59
+ default:
60
+ break;
61
+ }
62
+ extractedGroup.matchType = matchType;
63
+ extractedGroup.input = matchedGroup[matchType];
64
+ extractedGroup.index = match.index;
65
+ if (matchType !== "operator" && matchType !== "scientific" && matchType !== "unitOnly")
66
+ extractedGroup.integer = extractedGroup.integer !== undefined ? extractedGroup.integer.replace(/,/g, "") : "0";
67
+ return extractedGroup;
68
+ }
69
+ return null;
70
+ }
71
+ /**
72
+ * Extracts all matches of a number, currency, unit, or exponent in the given string
73
+ * and returns an array of the extracted groups and additional information such as
74
+ * the type of match and the index of the match in the string.
75
+ *
76
+ * If the input string contains no matches, an empty array is returned.
77
+ *
78
+ * @param {string} input - The string to search for matches
79
+ * @returns {patternExtraction[]} - The extracted groups and additional information, or an empty array if no match is found
80
+ */
81
+ function extractAllMatches(input) {
82
+ const results = [];
83
+ let remainingInput = input;
84
+ let currentExtraction = extractFirstMatch(remainingInput);
85
+ while (currentExtraction !== null && currentExtraction.input) {
86
+ const remainingLength = input.length - remainingInput.length;
87
+ if (results.length > 0) {
88
+ currentExtraction.index = remainingInput.indexOf(currentExtraction.input) + remainingLength;
89
+ }
90
+ results.push(currentExtraction);
91
+ remainingInput = remainingInput.substring(remainingInput.indexOf(currentExtraction.input) + currentExtraction.input.length);
92
+ currentExtraction = extractFirstMatch(remainingInput);
93
+ }
94
+ return results;
95
+ }
96
+ //# sourceMappingURL=patternExtractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patternExtractor.js","sourceRoot":"","sources":["../../../../src/utils/extraction/patternExtractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.regexMatches = void 0;
4
+ const default_1 = require("../../config/default");
5
+ const sanitizeString = (str) => {
6
+ return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
7
+ };
8
+ // Dynamic pattern generation from config
9
+ const currencySymbolsSanitized = Object.keys(default_1.currencySymbols)
10
+ .map((key) => sanitizeString(key)) // Escape special regex characters
11
+ .join("|");
12
+ const currencyCodesSanitized = Object.keys(default_1.currencyCodes).join("|");
13
+ const allUnits = Object.keys(default_1.units)
14
+ .map((key) => sanitizeString(key))
15
+ .sort((a, b) => b.length - a.length)
16
+ .join("|");
17
+ const operatorSymbols = Object.keys(default_1.math)
18
+ .map((operator) => sanitizeString(operator))
19
+ .join("|");
20
+ const regexMatches = new RegExp([
21
+ // Currency Matching (Highest Priority)
22
+ `(?<=^|\\s)(?:` + // Ensures the match is at the beginning of the string or preceded by whitespace
23
+ `(?<symbolCurrency>(?<negativeSignSymbol>-)?(?<currencySymbol>${currencySymbolsSanitized})\\s*(?<symbolInt>(?:\\d{1,3}(?:,\\d{3})*|\\d+))(?:\\.(?<symbolDec>\\d+))?)` + // Matches currency with symbols
24
+ `|` + // OR
25
+ `(?<codeCurrency>(?<negativeSignCode>-)?(?<codeInt>(?:\\d{1,3}(?:,\\d{3})*|\\d+))(?:\\.(?<codeDec>\\d+))?[ \\t]*(?<currencyCode>${currencyCodesSanitized}))` + // Matches currency with codes
26
+ `)` + // End of currency matching group
27
+ `(?=(?:\\s|$|(?:\\.(?!\\d))|[^\\d.]))`, // Ensures the match is followed by whitespace, end of string, or non-numeric characters
28
+ // Scientific Notation 5e-10, 5e10, 5.5e10, 5.5e-10
29
+ `|(?<scientific>` + // Group for scientific notation
30
+ `(?<negativeSignScientific>-)?(?<scientificInt>\\d+)(?:\\.(?<scientificDec>\\d+))?(?:[eE])(?<scientificExponent>[+-]?\\d+)` + // Matches scientific notation format
31
+ `)(?=(?:\\s|$|(?:\\.(?!\\d))|[^\\d.]))`, // Ensures the match is followed by whitespace, end of string, or non-numeric characters
32
+ // Numeric Units 5km, 10m/s, 10m/s^2, 10m/s², 10m²/s, 10m²/s²
33
+ `|(?<unit>` + // Group for units
34
+ `(?<negativeSignUnit>-)?(?<unitInt>(?:\\d{1,3}(?:,\\d{3})*|\\d+))(?:\\.(?<unitDec>\\d+))?` + // Matches the number part of the unit
35
+ `\\s*` + // Matches optional whitespace
36
+ `(?:` + // Group for handling exponents (caret or superscript)
37
+ `\\^(?<unitCaretExponentPre>-?\\d+)|` + // Matches caret exponent
38
+ `(?<unitSuperExponentPre>⁻?[¹²³⁴⁵⁶⁷⁸⁹])` + // Matches superscript exponent
39
+ `)?` + // End of exponent group
40
+ `\\s*(?<unitName>(?:${allUnits}))` + // Matches the unit name
41
+ `(?:` + // Group for handling exponents (caret or superscript)
42
+ `\\^(?<unitCaretExponentPost>-?\\d+)|` + // Matches caret exponent
43
+ `(?<unitSuperExponentPost>⁻?[¹²³⁴⁵⁶⁷⁸⁹])` + // Matches superscript exponent
44
+ `)?` + // End of exponent group
45
+ `)(?=(?:\\s|$|(?:\\.(?!\\d))|[^\\d.]))`, // Ensures the match is followed by whitespace, end of string, or non-numeric characters
46
+ // Number with optional exponent
47
+ `|(?<!\\w)(?<number>` + // Group for number
48
+ `(?<negativeSignInteger>-)?` + // Matches an optional negative sign
49
+ `(?<integerInt>(?:\\d{1,3}(?:,\\d{3})*|\\d+))` + // Matches the integer part of the number
50
+ `(?:\\.(?<integerDec>\\d+))?` + // Matches the decimal part of the number
51
+ `(?:(?:\\^(?<integerCaretExponent>-?\\d+))|` + // Matches exponent with caret
52
+ `(?<integerSuperExponent>⁻?[¹²³⁴⁵⁶⁷⁸⁹]))?` + // Matches exponent with superscript
53
+ `)(?=(?:\\s|$|(?:\\.(?!\\d))|[^\\d.]))`, // Ensures the match is followed by whitespace, end of string, or non-numeric characters
54
+ // Unit Only (e.g., m, kg, m², kg³)
55
+ `|(?<unitOnly>` + // Group for unit only
56
+ `(?<![\\w.])` + // Negative lookbehind to prevent matching units within words
57
+ `(?<unitNameOnly>(?:${allUnits})\\b)` + // Matches the unit name
58
+ `(?:\\^(?<unitOnlyCaretExponent>-?\\d+)|(?<unitOnlySuperExponent>⁻?[¹²³⁴⁵⁶⁷⁸⁹]))?` + // Matches optional exponent
59
+ `(?!\\w)` + // Negative lookahead to prevent matching units within words
60
+ `)(?=(?:\\s|$|(?:\\.(?!\\d))|[^\\d.]))`, // Ensures the match is followed by whitespace, end of string, or non-numeric characters
61
+ // Mathematical Operators
62
+ `|(?<operator>(?:(?<=^)|(?<=\\s))(${operatorSymbols})(?=\\s|$|(?:\\.(?!\\d))))`, // Matches mathematical operators
63
+ ].join(""), "u");
64
+ exports.regexMatches = regexMatches;
65
+ //# sourceMappingURL=regexPatterns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regexPatterns.js","sourceRoot":"","sources":["../../../../src/utils/extraction/regexPatterns.ts"],"names":[],"mappings":";;;AAAA,kDAK8B;AAE9B,MAAM,cAAc,GAAG,CAAC,GAAW,EAAU,EAAE;IAC7C,OAAO,GAAG,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC,CAAC;AAEF,yCAAyC;AACzC,MAAM,wBAAwB,GAAG,MAAM,CAAC,IAAI,CAAC,yBAAe,CAAC;KAC1D,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,kCAAkC;KACpE,IAAI,CAAC,GAAG,CAAC,CAAC;AACb,MAAM,sBAAsB,GAAG,MAAM,CAAC,IAAI,CAAC,uBAAa,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEpE,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,eAAK,CAAC;KAChC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;KACjC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;KACnC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEb,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,cAAI,CAAC;KACtC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;KAC3C,IAAI,CAAC,GAAG,CAAC,CAAC;AAEb,MAAM,YAAY,GAAG,IAAI,MAAM,CAC7B;IACE,uCAAuC;IACvC,eAAe,GAAG,gFAAgF;QAChG,gEAAgE,wBAAwB,6EAA6E,GAAG,gCAAgC;QACxM,GAAG,GAAG,KAAK;QACX,kIAAkI,sBAAsB,IAAI,GAAG,8BAA8B;QAC7L,GAAG,GAAG,iCAAiC;QACvC,sCAAsC,EAAE,wFAAwF;IAElI,mDAAmD;IACnD,iBAAiB,GAAG,gCAAgC;QAClD,2HAA2H,GAAG,qCAAqC;QACnK,uCAAuC,EAAE,wFAAwF;IAEnI,6DAA6D;IAC7D,WAAW,GAAG,kBAAkB;QAC9B,0FAA0F,GAAG,sCAAsC;QACnI,MAAM,GAAG,8BAA8B;QACvC,KAAK,GAAG,sDAAsD;QAC9D,qCAAqC,GAAG,yBAAyB;QACjE,wCAAwC,GAAG,+BAA+B;QAC1E,IAAI,GAAG,wBAAwB;QAC/B,sBAAsB,QAAQ,IAAI,GAAG,wBAAwB;QAC7D,KAAK,GAAG,sDAAsD;QAC9D,sCAAsC,GAAG,yBAAyB;QAClE,yCAAyC,GAAG,+BAA+B;QAC3E,IAAI,GAAG,wBAAwB;QAC/B,uCAAuC,EAAE,wFAAwF;IAEnI,gCAAgC;IAChC,qBAAqB,GAAG,mBAAmB;QACzC,4BAA4B,GAAG,oCAAoC;QACnE,8CAA8C,GAAG,yCAAyC;QAC1F,6BAA6B,GAAG,yCAAyC;QACzE,4CAA4C,GAAG,8BAA8B;QAC7E,0CAA0C,GAAG,oCAAoC;QACjF,uCAAuC,EAAE,wFAAwF;IAEnI,mCAAmC;IACnC,eAAe,GAAG,sBAAsB;QACtC,aAAa,GAAG,6DAA6D;QAC7E,sBAAsB,QAAQ,OAAO,GAAG,wBAAwB;QAChE,kFAAkF,GAAG,4BAA4B;QACjH,SAAS,GAAG,4DAA4D;QACxE,uCAAuC,EAAE,wFAAwF;IACnI,yBAAyB;IACzB,oCAAoC,eAAe,4BAA4B,EAAE,iCAAiC;CACnH,CAAC,IAAI,CAAC,EAAE,CAAC,EACV,GAAG,CACJ,CAAC;AAEO,oCAAY"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toRegularInteger = toRegularInteger;
4
+ /**
5
+ * Converts a string of superscript digits to regular integer string.
6
+ * @param {string} superscriptString - String containing superscript digits.
7
+ * @returns {string} - String of regular digits.
8
+ */
9
+ function toRegularInteger(superscriptString) {
10
+ const superscriptMap = {
11
+ "⁰": "0",
12
+ "¹": "1",
13
+ "²": "2",
14
+ "³": "3",
15
+ "⁴": "4",
16
+ "⁵": "5",
17
+ "⁶": "6",
18
+ "⁷": "7",
19
+ "⁸": "8",
20
+ "⁹": "9",
21
+ };
22
+ let standardDigitString = "";
23
+ for (let char of superscriptString) {
24
+ if (superscriptMap[char]) {
25
+ standardDigitString += superscriptMap[char];
26
+ }
27
+ else {
28
+ standardDigitString += char;
29
+ }
30
+ }
31
+ return standardDigitString;
32
+ }
33
+ //# sourceMappingURL=parseSuperscript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseSuperscript.js","sourceRoot":"","sources":["../../../src/utils/parseSuperscript.ts"],"names":[],"mappings":";;AAKA,4CAwBC;AA7BD;;;;GAIG;AACH,SAAgB,gBAAgB,CAAC,iBAAyB;IACxD,MAAM,cAAc,GAA8B;QAChD,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;KACT,CAAC;IAEF,IAAI,mBAAmB,GAAG,EAAE,CAAC;IAC7B,KAAK,IAAI,IAAI,IAAI,iBAAiB,EAAE,CAAC;QACnC,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,mBAAmB,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;QAC9C,CAAC;aAAM,CAAC;YACN,mBAAmB,IAAI,IAAI,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,OAAO,mBAAmB,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.exponentSpokenWord = exponentSpokenWord;
4
+ const parseSuperscript_1 = require("../parseSuperscript");
5
+ const positiveInteger_1 = require("./positiveInteger");
6
+ /** * Converts an exponent integer to its spoken word representation, * optionally using "squared" and "cubed" for exponents 2 and 3. * @param exponent The exponent value as an integer. * @param onlyUsePowerOf A boolean flag. If false, uses "squared" for 2 and "cubed" for 3. * If true, uses "to the power of two", "to the power of three", etc. * @returns The spoken word representation of the exponent. */
7
+ function exponentSpokenWord(exponent, onlyUsePowerOf = false) {
8
+ const isNegative = exponent.startsWith("-") || exponent.startsWith("⁻");
9
+ let newExponentString = (0, parseSuperscript_1.toRegularInteger)(isNegative ? exponent.slice(1) : exponent);
10
+ if (!onlyUsePowerOf && !isNegative) {
11
+ if (newExponentString === "2") {
12
+ return "squared";
13
+ }
14
+ if (newExponentString === "3") {
15
+ return "cubed";
16
+ }
17
+ }
18
+ let res = "to the power of " + (isNegative ? "negative " : "") + (0, positiveInteger_1.positiveInteger)(parseInt(newExponentString));
19
+ return res;
20
+ }
21
+ //# sourceMappingURL=exponent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exponent.js","sourceRoot":"","sources":["../../../../src/utils/stringBuilding/exponent.ts"],"names":[],"mappings":";;AAKA,gDAaC;AAlBD,0DAAuD;AACvD,uDAAoD;AAEpD,sZAAsZ;AAEtZ,SAAgB,kBAAkB,CAAC,QAAgB,EAAE,iBAA0B,KAAK;IAClF,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACxE,IAAI,iBAAiB,GAAG,IAAA,mCAAgB,EAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACpF,IAAI,CAAC,cAAc,IAAI,CAAC,UAAU,EAAE,CAAC;QACnC,IAAI,iBAAiB,KAAK,GAAG,EAAE,CAAC;YAC9B,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,iBAAiB,KAAK,GAAG,EAAE,CAAC;YAC9B,OAAO,OAAO,CAAC;QACjB,CAAC;IACH,CAAC;IACD,IAAI,GAAG,GAAG,kBAAkB,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAA,iCAAe,EAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC9G,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.negative = void 0;
4
+ const negative = (bool) => {
5
+ return bool ? "negative " : "";
6
+ };
7
+ exports.negative = negative;
8
+ //# sourceMappingURL=negative.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"negative.js","sourceRoot":"","sources":["../../../../src/utils/stringBuilding/negative.ts"],"names":[],"mappings":";;;AAAO,MAAM,QAAQ,GAAG,CAAC,IAAa,EAAU,EAAE;IAChD,OAAO,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;AACjC,CAAC,CAAC;AAFW,QAAA,QAAQ,YAEnB"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.perDigit = perDigit;
4
+ const positiveInteger_1 = require("./positiveInteger");
5
+ /**
6
+ * Converts each digit in a number to words, and returns them as a joined string.
7
+ * @param num The number to convert, as a string.
8
+ * @returns A string of space-separated words, where each word is a digit in the original number.
9
+ * @example convertPerDigit("123") => "one two three"
10
+ */
11
+ function perDigit(num) {
12
+ const words = [];
13
+ for (let i = 0; i < num.length; i++) {
14
+ words.push((0, positiveInteger_1.positiveInteger)(parseInt(num[i])));
15
+ }
16
+ return words.join(" ");
17
+ }
18
+ //# sourceMappingURL=perDigit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"perDigit.js","sourceRoot":"","sources":["../../../../src/utils/stringBuilding/perDigit.ts"],"names":[],"mappings":";;AASA,4BAMC;AAfD,uDAAoD;AAEpD;;;;;GAKG;AAEH,SAAgB,QAAQ,CAAC,GAAW;IAClC,MAAM,KAAK,GAAG,EAAE,CAAC;IACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,IAAA,iCAAe,EAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.positiveInteger = positiveInteger;
4
+ const default_1 = require("../../config/default");
5
+ const zeroTo999_1 = require("./zeroTo999");
6
+ /**
7
+ * Converts a non-negative integer into its full English word representation.
8
+ * @param num The integer to convert.
9
+ * @returns The word representation of the number, or an error message for invalid input.
10
+ */
11
+ function positiveInteger(num) {
12
+ if (typeof num !== "number" || !Number.isInteger(num) || num < 0) {
13
+ return "Invalid input: Please provide a non-negative integer.";
14
+ }
15
+ if (num === 0) {
16
+ return "zero";
17
+ }
18
+ let words = "";
19
+ let scaleIndex = 0;
20
+ while (num > 0) {
21
+ if (num % 1000 !== 0) {
22
+ const upToHundreds = (0, zeroTo999_1.zeroTo999)(num % 1000);
23
+ const magnitudeScale = default_1.numbers.scales[scaleIndex] ? " " + default_1.numbers.scales[scaleIndex] : "";
24
+ words = upToHundreds + magnitudeScale + (words ? " " + words : "");
25
+ }
26
+ num = Math.floor(num / 1000);
27
+ scaleIndex++;
28
+ }
29
+ return words.trim().replace(/\s+/g, " ");
30
+ }
31
+ //# sourceMappingURL=positiveInteger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"positiveInteger.js","sourceRoot":"","sources":["../../../../src/utils/stringBuilding/positiveInteger.ts"],"names":[],"mappings":";;AASA,0CAuBC;AAhCD,kDAA+C;AAC/C,2CAAwC;AAExC;;;;GAIG;AAEH,SAAgB,eAAe,CAAC,GAAW;IACzC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;QACjE,OAAO,uDAAuD,CAAC;IACjE,CAAC;IAED,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;QACd,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,KAAK,GAAG,EAAE,CAAC;IACf,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,OAAO,GAAG,GAAG,CAAC,EAAE,CAAC;QACf,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC,EAAE,CAAC;YACrB,MAAM,YAAY,GAAG,IAAA,qBAAS,EAAC,GAAG,GAAG,IAAI,CAAC,CAAC;YAC3C,MAAM,cAAc,GAAG,iBAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,iBAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1F,KAAK,GAAG,YAAY,GAAG,cAAc,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACrE,CAAC;QACD,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;QAC7B,UAAU,EAAE,CAAC;IACf,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.twoDigit = twoDigit;
4
+ const positiveInteger_1 = require("./positiveInteger");
5
+ /**
6
+ * Converts a given number of cents to words, provided it is a valid number between 0 and 99.
7
+ * @param num The number of cents to convert, as a string.
8
+ * @returns The word representation of the number of cents, or an empty string if the conversion failed.
9
+ */
10
+ function twoDigit(num) {
11
+ if (num.trim().length !== 2)
12
+ return "";
13
+ let parsed = parseInt(num);
14
+ if (parsed < 100 && parsed >= 0)
15
+ return (0, positiveInteger_1.positiveInteger)(parsed);
16
+ return "";
17
+ }
18
+ //# sourceMappingURL=twoDigits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"twoDigits.js","sourceRoot":"","sources":["../../../../src/utils/stringBuilding/twoDigits.ts"],"names":[],"mappings":";;AAQA,4BAMC;AAdD,uDAAoD;AAEpD;;;;GAIG;AAEH,SAAgB,QAAQ,CAAC,GAAW;IAClC,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACvC,IAAI,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAE3B,IAAI,MAAM,GAAG,GAAG,IAAI,MAAM,IAAI,CAAC;QAAE,OAAO,IAAA,iCAAe,EAAC,MAAM,CAAC,CAAC;IAChE,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.zeroTo999 = zeroTo999;
4
+ const default_1 = require("../../config/default");
5
+ /**
6
+ * Converts a number less than 1000 into words.
7
+ * @param num The number to convert (0-999).
8
+ * @returns The word representation of the number.
9
+ */
10
+ function zeroTo999(num) {
11
+ if (num === 0) {
12
+ return "";
13
+ }
14
+ let words = "";
15
+ if (num >= 100) {
16
+ words += default_1.numbers.ones[Math.floor(num / 100)] + " hundred";
17
+ num %= 100;
18
+ if (num > 0) {
19
+ words += " ";
20
+ }
21
+ }
22
+ if (num >= 20) {
23
+ words += default_1.numbers.tens[Math.floor(num / 10)];
24
+ num %= 10;
25
+ if (num > 0) {
26
+ words += " " + default_1.numbers.ones[num];
27
+ }
28
+ }
29
+ else if (num >= 10) {
30
+ words += default_1.numbers.teens[num - 10];
31
+ }
32
+ else if (num > 0) {
33
+ words += default_1.numbers.ones[num];
34
+ }
35
+ return words;
36
+ }
37
+ //# sourceMappingURL=zeroTo999.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zeroTo999.js","sourceRoot":"","sources":["../../../../src/utils/stringBuilding/zeroTo999.ts"],"names":[],"mappings":";;AAQA,8BA4BC;AApCD,kDAA+C;AAE/C;;;;GAIG;AAEH,SAAgB,SAAS,CAAC,GAAW;IACnC,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;QACd,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,KAAK,GAAG,EAAE,CAAC;IAEf,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;QACf,KAAK,IAAI,iBAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC;QAC1D,GAAG,IAAI,GAAG,CAAC;QACX,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;YACZ,KAAK,IAAI,GAAG,CAAC;QACf,CAAC;IACH,CAAC;IAED,IAAI,GAAG,IAAI,EAAE,EAAE,CAAC;QACd,KAAK,IAAI,iBAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;QAC5C,GAAG,IAAI,EAAE,CAAC;QACV,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;YACZ,KAAK,IAAI,GAAG,GAAG,iBAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;SAAM,IAAI,GAAG,IAAI,EAAE,EAAE,CAAC;QACrB,KAAK,IAAI,iBAAO,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;IACnC,CAAC;SAAM,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;QACnB,KAAK,IAAI,iBAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}