@fileverse-dev/formulajs 4.4.11-mod-21 → 4.4.11-mod-21-patch-1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/cjs/index.cjs CHANGED
@@ -5226,6 +5226,75 @@ Z.TEST = (array, x, sigma) => {
5226
5226
  return 1 - NORM.S.DIST((AVERAGE(array) - x) / (sigma / Math.sqrt(n)), true)
5227
5227
  };
5228
5228
 
5229
+ function PNL() {
5230
+ const [A, B] = argsToArray(arguments);
5231
+
5232
+ const toNumberOrThrow = (val) => {
5233
+ const num = Number(val);
5234
+ if (isNaN(num)) throw new Error(`Invalid number value: ${val}`);
5235
+ return num;
5236
+ };
5237
+
5238
+ // Single numbers
5239
+ if (typeof A === "number" && typeof B === "number") {
5240
+ return A - B;
5241
+ }
5242
+
5243
+ // 1D arrays
5244
+ if (Array.isArray(A) && Array.isArray(B) && typeof A[0] !== "object") {
5245
+ const maxLen = Math.max(A.length, B.length);
5246
+ let total = 0;
5247
+ for (let i = 0; i < maxLen; i++) {
5248
+ const aVal = i < A.length ? toNumberOrThrow(A[i]) : 0;
5249
+ const bVal = i < B.length ? toNumberOrThrow(B[i]) : 0;
5250
+ total += aVal - bVal;
5251
+ }
5252
+ return total;
5253
+ }
5254
+
5255
+ // 2D arrays
5256
+ if (Array.isArray(A[0]) && typeof A[0][0] !== "object") {
5257
+ let total = 0;
5258
+ const maxRows = Math.max(A.length, B.length);
5259
+ for (let i = 0; i < maxRows; i++) {
5260
+ const rowA = A[i] || [];
5261
+ const rowB = B[i] || [];
5262
+ const maxCols = Math.max(rowA.length, rowB.length);
5263
+ for (let j = 0; j < maxCols; j++) {
5264
+ const aVal = j < rowA.length ? toNumberOrThrow(rowA[j]) : 0;
5265
+ const bVal = j < rowB.length ? toNumberOrThrow(rowB[j]) : 0;
5266
+ total += aVal - bVal;
5267
+ }
5268
+ }
5269
+ return total;
5270
+ }
5271
+
5272
+ // 3D arrays
5273
+ if (Array.isArray(A[0][0])) {
5274
+ let total = 0;
5275
+ const maxX = Math.max(A.length, B.length);
5276
+ for (let i = 0; i < maxX; i++) {
5277
+ const matA = A[i] || [];
5278
+ const matB = B[i] || [];
5279
+ const maxY = Math.max(matA.length, matB.length);
5280
+ for (let j = 0; j < maxY; j++) {
5281
+ const rowA = matA[j] || [];
5282
+ const rowB = matB[j] || [];
5283
+ const maxZ = Math.max(rowA.length, rowB.length);
5284
+ for (let k = 0; k < maxZ; k++) {
5285
+ const aVal = k < rowA.length ? toNumberOrThrow(rowA[k]) : 0;
5286
+ const bVal = k < rowB.length ? toNumberOrThrow(rowB[k]) : 0;
5287
+ total += aVal - bVal;
5288
+ }
5289
+ }
5290
+ }
5291
+ return total;
5292
+ }
5293
+
5294
+ throw new Error("Unsupported or mismatched structure");
5295
+ }
5296
+
5297
+
5229
5298
  /**
5230
5299
  * Returns the absolute value of a number.
5231
5300
  *
@@ -13019,6 +13088,12 @@ const CHAIN_ID_MAP = {
13019
13088
  base: 8453,
13020
13089
  };
13021
13090
 
13091
+ const ERROR_MESSAGES_FLAG = {
13092
+ INVALID_API_KEY: '_MISSING',
13093
+ RATE_LIMIT: '_RATE_LIMIT_REACHED',
13094
+ DEFAULT: 'FETCH_ERROR'
13095
+ };
13096
+
13022
13097
  const fromTimeStampToBlock = async (timestamp, chain, apiKey) => {
13023
13098
  if(!timestamp || !chain || !apiKey) return
13024
13099
  const chainId = CHAIN_ID_MAP[chain];
@@ -13030,28 +13105,32 @@ if(!timestamp || !chain || !apiKey) return
13030
13105
  };
13031
13106
 
13032
13107
  async function ETHERSCAN(address, page, offset) {
13033
- const API_KEY = window.localStorage.getItem(SERVICE_API_KEY.Etherscan);
13034
- const url = `https://api.etherscan.io/v2/api?chainid=1&module=account&action=txlist&address=${address}&startblock=0&endblock=99999999&page=${page || 1}&offset=${offset || 10}&sort=asc&apikey=${API_KEY}`;
13035
-
13036
- try {
13037
- const response = await fetch(url);
13038
- if (!response.ok) {
13039
- throw new Error(`HTTP error! Status: ${response.status}`)
13040
- }
13041
- const json = await response.json();
13042
- if (json.result.includes("Invalid API Key")) {
13043
- return `${SERVICE_API_KEY.Etherscan}_MISSING`
13044
- }
13045
- /*
13046
- [{blockNumber: '0x1d3d1', timeStamp: '0x5f7e4f', hash: '0x3c3c3c3c', nonce: '0x1',}]
13047
- */
13048
- return json.result;
13049
- } catch (error) {
13050
- return "ERROR IN FETCHING"
13051
- }
13052
- }
13053
-
13054
- async function GETPRICE(token, vs_currencies) {
13108
+ return `${SERVICE_API_KEY.Etherscan}${ERROR_MESSAGES_FLAG.RATE_LIMIT}`
13109
+ // const API_KEY = window.localStorage.getItem(SERVICE_API_KEY.Etherscan);
13110
+ // const url = `https://api.etherscan.io/v2/api?chainid=1&module=account&action=txlist&address=${address}&startblock=0&endblock=99999999&page=${page || 1}&offset=${offset || 10}&sort=asc&apikey=${API_KEY}`
13111
+
13112
+ // try {
13113
+ // const response = await fetch(url)
13114
+ // if (!response.ok) {
13115
+ // throw new Error(`HTTP error! Status: ${response.status}`)
13116
+ // }
13117
+ // const json = await response.json()
13118
+ // if (json.result.includes("Invalid API Key")) {
13119
+ // return `${SERVICE_API_KEY.Etherscan}${ERROR_MESSAGES_FLAG.INVALID_API_KEY}`
13120
+ // }
13121
+ // if(json.result.includes('Max rate limit reached')){
13122
+ // return `${SERVICE_API_KEY.Etherscan}${ERROR_MESSAGES_FLAG.RATE_LIMIT}`
13123
+ // }
13124
+ // /*
13125
+ // [{blockNumber: '0x1d3d1', timeStamp: '0x5f7e4f', hash: '0x3c3c3c3c', nonce: '0x1',}]
13126
+ // */
13127
+ // return json.result;
13128
+ // } catch (error) {
13129
+ // return ERROR_MESSAGES_FLAG.DEFAULT
13130
+ // }
13131
+ }
13132
+
13133
+ async function COINGECKO(token, vs_currencies) {
13055
13134
  const API_KEY = window.localStorage.getItem(SERVICE_API_KEY.Coingecko);
13056
13135
  const url = `https://api.coingecko.com/api/v3/simple/price?vs_currencies=${vs_currencies}&ids=${token}`;
13057
13136
 
@@ -13065,7 +13144,10 @@ async function GETPRICE(token, vs_currencies) {
13065
13144
  if (!response.ok) {
13066
13145
  const json = await response.json();
13067
13146
  if (json.status.error_message.includes("API Key Missing")) {
13068
- return `${SERVICE_API_KEY.Coingecko}_MISSING`
13147
+ return `${SERVICE_API_KEY.Coingecko}${ERROR_MESSAGES_FLAG.INVALID_API_KEY}`
13148
+ }
13149
+ if(response.status === 429){
13150
+ return `${SERVICE_API_KEY.Coingecko}${ERROR_MESSAGES_FLAG.RATE_LIMIT}`
13069
13151
  }
13070
13152
  }
13071
13153
  const jsonResponse = await response.json();
@@ -13084,7 +13166,7 @@ async function GETPRICE(token, vs_currencies) {
13084
13166
  */
13085
13167
  return [output];
13086
13168
  } catch (error) {
13087
- return "ERROR IN FETCHING"
13169
+ return ERROR_MESSAGES_FLAG.DEFAULT
13088
13170
  }
13089
13171
  }
13090
13172
 
@@ -13118,81 +13200,18 @@ async function EOA(address, categories, chain, startTime, endTime) {
13118
13200
  if (json.result?.includes?.("Invalid API Key")) {
13119
13201
  return `${SERVICE_API_KEY[chain.charAt(0).toUpperCase() + chain.slice(1)]}_MISSING`;
13120
13202
  }
13203
+ if(json.result.includes('Max rate limit reached')){
13204
+ return `${SERVICE_API_KEY.Etherscan}${ERROR_MESSAGES_FLAG.RATE_LIMIT}`
13205
+ }
13121
13206
  return json.result;
13122
13207
  } catch (e) {
13123
13208
  console.log(e);
13124
- return "ERROR IN FETCHING";
13209
+ return ERROR_MESSAGES_FLAG.DEFAULT;
13125
13210
  }
13126
13211
  }
13127
13212
 
13128
13213
 
13129
- function PNL() {
13130
- const [A, B] = argsToArray(arguments);
13131
-
13132
- const toNumberOrThrow = (val) => {
13133
- const num = Number(val);
13134
- if (isNaN(num)) throw new Error(`Invalid number value: ${val}`);
13135
- return num;
13136
- };
13137
-
13138
- // Single numbers
13139
- if (typeof A === "number" && typeof B === "number") {
13140
- return A - B;
13141
- }
13142
-
13143
- // 1D arrays
13144
- if (Array.isArray(A) && Array.isArray(B) && typeof A[0] !== "object") {
13145
- const maxLen = Math.max(A.length, B.length);
13146
- let total = 0;
13147
- for (let i = 0; i < maxLen; i++) {
13148
- const aVal = i < A.length ? toNumberOrThrow(A[i]) : 0;
13149
- const bVal = i < B.length ? toNumberOrThrow(B[i]) : 0;
13150
- total += aVal - bVal;
13151
- }
13152
- return total;
13153
- }
13154
-
13155
- // 2D arrays
13156
- if (Array.isArray(A[0]) && typeof A[0][0] !== "object") {
13157
- let total = 0;
13158
- const maxRows = Math.max(A.length, B.length);
13159
- for (let i = 0; i < maxRows; i++) {
13160
- const rowA = A[i] || [];
13161
- const rowB = B[i] || [];
13162
- const maxCols = Math.max(rowA.length, rowB.length);
13163
- for (let j = 0; j < maxCols; j++) {
13164
- const aVal = j < rowA.length ? toNumberOrThrow(rowA[j]) : 0;
13165
- const bVal = j < rowB.length ? toNumberOrThrow(rowB[j]) : 0;
13166
- total += aVal - bVal;
13167
- }
13168
- }
13169
- return total;
13170
- }
13171
-
13172
- // 3D arrays
13173
- if (Array.isArray(A[0][0])) {
13174
- let total = 0;
13175
- const maxX = Math.max(A.length, B.length);
13176
- for (let i = 0; i < maxX; i++) {
13177
- const matA = A[i] || [];
13178
- const matB = B[i] || [];
13179
- const maxY = Math.max(matA.length, matB.length);
13180
- for (let j = 0; j < maxY; j++) {
13181
- const rowA = matA[j] || [];
13182
- const rowB = matB[j] || [];
13183
- const maxZ = Math.max(rowA.length, rowB.length);
13184
- for (let k = 0; k < maxZ; k++) {
13185
- const aVal = k < rowA.length ? toNumberOrThrow(rowA[k]) : 0;
13186
- const bVal = k < rowB.length ? toNumberOrThrow(rowB[k]) : 0;
13187
- total += aVal - bVal;
13188
- }
13189
- }
13190
- }
13191
- return total;
13192
- }
13193
13214
 
13194
- throw new Error("Unsupported or mismatched structure");
13195
- }
13196
13215
 
13197
13216
 
13198
13217
  async function FLVURL(token, vs_currencies) {
@@ -13255,6 +13274,7 @@ exports.CHITEST = CHITEST;
13255
13274
  exports.CHOOSE = CHOOSE;
13256
13275
  exports.CLEAN = CLEAN;
13257
13276
  exports.CODE = CODE;
13277
+ exports.COINGECKO = COINGECKO;
13258
13278
  exports.COLUMN = COLUMN;
13259
13279
  exports.COLUMNS = COLUMNS;
13260
13280
  exports.COMBIN = COMBIN;
@@ -13360,7 +13380,6 @@ exports.GAUSS = GAUSS;
13360
13380
  exports.GCD = GCD;
13361
13381
  exports.GEOMEAN = GEOMEAN;
13362
13382
  exports.GESTEP = GESTEP;
13363
- exports.GETPRICE = GETPRICE;
13364
13383
  exports.GROWTH = GROWTH;
13365
13384
  exports.HARMEAN = HARMEAN;
13366
13385
  exports.HEX2BIN = HEX2BIN;
@@ -83,7 +83,7 @@ var FUNCTION_LOCALE = [
83
83
  ]
84
84
  },
85
85
  {
86
- n: "GETPRICE",
86
+ n: "COINGECKO",
87
87
  t: 20,
88
88
  API_KEY: SERVICE_API_KEY.Coingecko,
89
89
  d: "Query the prices of one or more coins by using their unique Coin API IDs, symbols, or names.",
package/lib/esm/index.mjs CHANGED
@@ -5224,6 +5224,75 @@ Z.TEST = (array, x, sigma) => {
5224
5224
  return 1 - NORM.S.DIST((AVERAGE(array) - x) / (sigma / Math.sqrt(n)), true)
5225
5225
  };
5226
5226
 
5227
+ function PNL() {
5228
+ const [A, B] = argsToArray(arguments);
5229
+
5230
+ const toNumberOrThrow = (val) => {
5231
+ const num = Number(val);
5232
+ if (isNaN(num)) throw new Error(`Invalid number value: ${val}`);
5233
+ return num;
5234
+ };
5235
+
5236
+ // Single numbers
5237
+ if (typeof A === "number" && typeof B === "number") {
5238
+ return A - B;
5239
+ }
5240
+
5241
+ // 1D arrays
5242
+ if (Array.isArray(A) && Array.isArray(B) && typeof A[0] !== "object") {
5243
+ const maxLen = Math.max(A.length, B.length);
5244
+ let total = 0;
5245
+ for (let i = 0; i < maxLen; i++) {
5246
+ const aVal = i < A.length ? toNumberOrThrow(A[i]) : 0;
5247
+ const bVal = i < B.length ? toNumberOrThrow(B[i]) : 0;
5248
+ total += aVal - bVal;
5249
+ }
5250
+ return total;
5251
+ }
5252
+
5253
+ // 2D arrays
5254
+ if (Array.isArray(A[0]) && typeof A[0][0] !== "object") {
5255
+ let total = 0;
5256
+ const maxRows = Math.max(A.length, B.length);
5257
+ for (let i = 0; i < maxRows; i++) {
5258
+ const rowA = A[i] || [];
5259
+ const rowB = B[i] || [];
5260
+ const maxCols = Math.max(rowA.length, rowB.length);
5261
+ for (let j = 0; j < maxCols; j++) {
5262
+ const aVal = j < rowA.length ? toNumberOrThrow(rowA[j]) : 0;
5263
+ const bVal = j < rowB.length ? toNumberOrThrow(rowB[j]) : 0;
5264
+ total += aVal - bVal;
5265
+ }
5266
+ }
5267
+ return total;
5268
+ }
5269
+
5270
+ // 3D arrays
5271
+ if (Array.isArray(A[0][0])) {
5272
+ let total = 0;
5273
+ const maxX = Math.max(A.length, B.length);
5274
+ for (let i = 0; i < maxX; i++) {
5275
+ const matA = A[i] || [];
5276
+ const matB = B[i] || [];
5277
+ const maxY = Math.max(matA.length, matB.length);
5278
+ for (let j = 0; j < maxY; j++) {
5279
+ const rowA = matA[j] || [];
5280
+ const rowB = matB[j] || [];
5281
+ const maxZ = Math.max(rowA.length, rowB.length);
5282
+ for (let k = 0; k < maxZ; k++) {
5283
+ const aVal = k < rowA.length ? toNumberOrThrow(rowA[k]) : 0;
5284
+ const bVal = k < rowB.length ? toNumberOrThrow(rowB[k]) : 0;
5285
+ total += aVal - bVal;
5286
+ }
5287
+ }
5288
+ }
5289
+ return total;
5290
+ }
5291
+
5292
+ throw new Error("Unsupported or mismatched structure");
5293
+ }
5294
+
5295
+
5227
5296
  /**
5228
5297
  * Returns the absolute value of a number.
5229
5298
  *
@@ -13017,6 +13086,12 @@ const CHAIN_ID_MAP = {
13017
13086
  base: 8453,
13018
13087
  };
13019
13088
 
13089
+ const ERROR_MESSAGES_FLAG = {
13090
+ INVALID_API_KEY: '_MISSING',
13091
+ RATE_LIMIT: '_RATE_LIMIT_REACHED',
13092
+ DEFAULT: 'FETCH_ERROR'
13093
+ };
13094
+
13020
13095
  const fromTimeStampToBlock = async (timestamp, chain, apiKey) => {
13021
13096
  if(!timestamp || !chain || !apiKey) return
13022
13097
  const chainId = CHAIN_ID_MAP[chain];
@@ -13028,28 +13103,32 @@ if(!timestamp || !chain || !apiKey) return
13028
13103
  };
13029
13104
 
13030
13105
  async function ETHERSCAN(address, page, offset) {
13031
- const API_KEY = window.localStorage.getItem(SERVICE_API_KEY.Etherscan);
13032
- const url = `https://api.etherscan.io/v2/api?chainid=1&module=account&action=txlist&address=${address}&startblock=0&endblock=99999999&page=${page || 1}&offset=${offset || 10}&sort=asc&apikey=${API_KEY}`;
13033
-
13034
- try {
13035
- const response = await fetch(url);
13036
- if (!response.ok) {
13037
- throw new Error(`HTTP error! Status: ${response.status}`)
13038
- }
13039
- const json = await response.json();
13040
- if (json.result.includes("Invalid API Key")) {
13041
- return `${SERVICE_API_KEY.Etherscan}_MISSING`
13042
- }
13043
- /*
13044
- [{blockNumber: '0x1d3d1', timeStamp: '0x5f7e4f', hash: '0x3c3c3c3c', nonce: '0x1',}]
13045
- */
13046
- return json.result;
13047
- } catch (error) {
13048
- return "ERROR IN FETCHING"
13049
- }
13050
- }
13051
-
13052
- async function GETPRICE(token, vs_currencies) {
13106
+ return `${SERVICE_API_KEY.Etherscan}${ERROR_MESSAGES_FLAG.RATE_LIMIT}`
13107
+ // const API_KEY = window.localStorage.getItem(SERVICE_API_KEY.Etherscan);
13108
+ // const url = `https://api.etherscan.io/v2/api?chainid=1&module=account&action=txlist&address=${address}&startblock=0&endblock=99999999&page=${page || 1}&offset=${offset || 10}&sort=asc&apikey=${API_KEY}`
13109
+
13110
+ // try {
13111
+ // const response = await fetch(url)
13112
+ // if (!response.ok) {
13113
+ // throw new Error(`HTTP error! Status: ${response.status}`)
13114
+ // }
13115
+ // const json = await response.json()
13116
+ // if (json.result.includes("Invalid API Key")) {
13117
+ // return `${SERVICE_API_KEY.Etherscan}${ERROR_MESSAGES_FLAG.INVALID_API_KEY}`
13118
+ // }
13119
+ // if(json.result.includes('Max rate limit reached')){
13120
+ // return `${SERVICE_API_KEY.Etherscan}${ERROR_MESSAGES_FLAG.RATE_LIMIT}`
13121
+ // }
13122
+ // /*
13123
+ // [{blockNumber: '0x1d3d1', timeStamp: '0x5f7e4f', hash: '0x3c3c3c3c', nonce: '0x1',}]
13124
+ // */
13125
+ // return json.result;
13126
+ // } catch (error) {
13127
+ // return ERROR_MESSAGES_FLAG.DEFAULT
13128
+ // }
13129
+ }
13130
+
13131
+ async function COINGECKO(token, vs_currencies) {
13053
13132
  const API_KEY = window.localStorage.getItem(SERVICE_API_KEY.Coingecko);
13054
13133
  const url = `https://api.coingecko.com/api/v3/simple/price?vs_currencies=${vs_currencies}&ids=${token}`;
13055
13134
 
@@ -13063,7 +13142,10 @@ async function GETPRICE(token, vs_currencies) {
13063
13142
  if (!response.ok) {
13064
13143
  const json = await response.json();
13065
13144
  if (json.status.error_message.includes("API Key Missing")) {
13066
- return `${SERVICE_API_KEY.Coingecko}_MISSING`
13145
+ return `${SERVICE_API_KEY.Coingecko}${ERROR_MESSAGES_FLAG.INVALID_API_KEY}`
13146
+ }
13147
+ if(response.status === 429){
13148
+ return `${SERVICE_API_KEY.Coingecko}${ERROR_MESSAGES_FLAG.RATE_LIMIT}`
13067
13149
  }
13068
13150
  }
13069
13151
  const jsonResponse = await response.json();
@@ -13082,7 +13164,7 @@ async function GETPRICE(token, vs_currencies) {
13082
13164
  */
13083
13165
  return [output];
13084
13166
  } catch (error) {
13085
- return "ERROR IN FETCHING"
13167
+ return ERROR_MESSAGES_FLAG.DEFAULT
13086
13168
  }
13087
13169
  }
13088
13170
 
@@ -13116,81 +13198,18 @@ async function EOA(address, categories, chain, startTime, endTime) {
13116
13198
  if (json.result?.includes?.("Invalid API Key")) {
13117
13199
  return `${SERVICE_API_KEY[chain.charAt(0).toUpperCase() + chain.slice(1)]}_MISSING`;
13118
13200
  }
13201
+ if(json.result.includes('Max rate limit reached')){
13202
+ return `${SERVICE_API_KEY.Etherscan}${ERROR_MESSAGES_FLAG.RATE_LIMIT}`
13203
+ }
13119
13204
  return json.result;
13120
13205
  } catch (e) {
13121
13206
  console.log(e);
13122
- return "ERROR IN FETCHING";
13207
+ return ERROR_MESSAGES_FLAG.DEFAULT;
13123
13208
  }
13124
13209
  }
13125
13210
 
13126
13211
 
13127
- function PNL() {
13128
- const [A, B] = argsToArray(arguments);
13129
-
13130
- const toNumberOrThrow = (val) => {
13131
- const num = Number(val);
13132
- if (isNaN(num)) throw new Error(`Invalid number value: ${val}`);
13133
- return num;
13134
- };
13135
-
13136
- // Single numbers
13137
- if (typeof A === "number" && typeof B === "number") {
13138
- return A - B;
13139
- }
13140
-
13141
- // 1D arrays
13142
- if (Array.isArray(A) && Array.isArray(B) && typeof A[0] !== "object") {
13143
- const maxLen = Math.max(A.length, B.length);
13144
- let total = 0;
13145
- for (let i = 0; i < maxLen; i++) {
13146
- const aVal = i < A.length ? toNumberOrThrow(A[i]) : 0;
13147
- const bVal = i < B.length ? toNumberOrThrow(B[i]) : 0;
13148
- total += aVal - bVal;
13149
- }
13150
- return total;
13151
- }
13152
-
13153
- // 2D arrays
13154
- if (Array.isArray(A[0]) && typeof A[0][0] !== "object") {
13155
- let total = 0;
13156
- const maxRows = Math.max(A.length, B.length);
13157
- for (let i = 0; i < maxRows; i++) {
13158
- const rowA = A[i] || [];
13159
- const rowB = B[i] || [];
13160
- const maxCols = Math.max(rowA.length, rowB.length);
13161
- for (let j = 0; j < maxCols; j++) {
13162
- const aVal = j < rowA.length ? toNumberOrThrow(rowA[j]) : 0;
13163
- const bVal = j < rowB.length ? toNumberOrThrow(rowB[j]) : 0;
13164
- total += aVal - bVal;
13165
- }
13166
- }
13167
- return total;
13168
- }
13169
-
13170
- // 3D arrays
13171
- if (Array.isArray(A[0][0])) {
13172
- let total = 0;
13173
- const maxX = Math.max(A.length, B.length);
13174
- for (let i = 0; i < maxX; i++) {
13175
- const matA = A[i] || [];
13176
- const matB = B[i] || [];
13177
- const maxY = Math.max(matA.length, matB.length);
13178
- for (let j = 0; j < maxY; j++) {
13179
- const rowA = matA[j] || [];
13180
- const rowB = matB[j] || [];
13181
- const maxZ = Math.max(rowA.length, rowB.length);
13182
- for (let k = 0; k < maxZ; k++) {
13183
- const aVal = k < rowA.length ? toNumberOrThrow(rowA[k]) : 0;
13184
- const bVal = k < rowB.length ? toNumberOrThrow(rowB[k]) : 0;
13185
- total += aVal - bVal;
13186
- }
13187
- }
13188
- }
13189
- return total;
13190
- }
13191
13212
 
13192
- throw new Error("Unsupported or mismatched structure");
13193
- }
13194
13213
 
13195
13214
 
13196
13215
  async function FLVURL(token, vs_currencies) {
@@ -13203,4 +13222,4 @@ async function FLVURL(token, vs_currencies) {
13203
13222
 
13204
13223
  const utils = { errors, symbols, date };
13205
13224
 
13206
- export { ABS, ACCRINT, ACOS, ACOSH, ACOT, ACOTH, AGGREGATE, AND, ARABIC, ASIN, ASINH, ATAN, ATAN2, ATANH, AVEDEV, AVERAGE, AVERAGEA, AVERAGEIF, AVERAGEIFS, BASE, BESSELI, BESSELJ, BESSELK, BESSELY, BETA, BETADIST, BETAINV, BIN2DEC, BIN2HEX, BIN2OCT, BINOM, BINOMDIST, BITAND, BITLSHIFT, BITOR, BITRSHIFT, BITXOR, CEILING, CEILINGMATH, CEILINGPRECISE, CHAR, CHIDIST, CHIDISTRT, CHIINV, CHIINVRT, CHISQ, CHITEST, CHOOSE, CLEAN, CODE, COLUMN, COLUMNS, COMBIN, COMBINA, COMPLEX, CONCAT, CONCATENATE, CONFIDENCE, CONVERT, CORREL, COS, COSH, COT, COTH, COUNT, COUNTA, COUNTBLANK, COUNTIF, COUNTIFS, COUPDAYS, COVAR, COVARIANCE, COVARIANCEP, COVARIANCES, CRITBINOM, CSC, CSCH, CUMIPMT, CUMPRINC, DATE, DATEDIF, DATEVALUE, DAVERAGE, DAY, DAYS, DAYS360, DB, DCOUNT, DCOUNTA, DDB, DEC2BIN, DEC2HEX, DEC2OCT, DECIMAL, DEGREES, DELTA, DEVSQ, DGET, DISC, DMAX, DMIN, DOLLAR, DOLLARDE, DOLLARFR, DPRODUCT, DSTDEV, DSTDEVP, DSUM, DVAR, DVARP, EDATE, EFFECT, EOA, EOMONTH, ERF, ERFC, ERFCPRECISE, ERFPRECISE, ERROR, ETHERSCAN, EVEN, EXACT, EXP, EXPON, EXPONDIST, F, FACT, FACTDOUBLE, FALSE, FDIST, FDISTRT, FIND, FINV, FINVRT, FISHER, FISHERINV, FIXED, FLOOR, FLOORMATH, FLOORPRECISE, FLVURL, FORECAST, FREQUENCY, FTEST, FV, FVSCHEDULE, GAMMA, GAMMADIST, GAMMAINV, GAMMALN, GAMMALNPRECISE, GAUSS, GCD, GEOMEAN, GESTEP, GETPRICE, GROWTH, HARMEAN, HEX2BIN, HEX2DEC, HEX2OCT, HLOOKUP, HOUR, HYPGEOM, HYPGEOMDIST, IF, IFERROR, IFNA, IFS, IMABS, IMAGINARY, IMARGUMENT, IMCONJUGATE, IMCOS, IMCOSH, IMCOT, IMCSC, IMCSCH, IMDIV, IMEXP, IMLN, IMLOG10, IMLOG2, IMPOWER, IMPRODUCT, IMREAL, IMSEC, IMSECH, IMSIN, IMSINH, IMSQRT, IMSUB, IMSUM, IMTAN, INDEX, INT, INTERCEPT, IPMT, IRR, ISBLANK, ISDATE, ISERR, ISERROR, ISEVEN, ISLOGICAL, ISNA, ISNONTEXT, ISNUMBER, ISO, ISODD, ISOWEEKNUM, ISPMT, ISTEXT, KURT, LARGE, LCM, LEFT, LEN, LINEST, LN, LOG, LOG10, LOGEST, LOGINV, LOGNORM, LOGNORMDIST, LOGNORMINV, LOOKUP, LOWER, MATCH, MAX, MAXA, MAXIFS, MEDIAN, MID, MIN, MINA, MINIFS, MINUTE, MIRR, MMULT, MOD, MODE, MODEMULT, MODESNGL, MONTH, MROUND, MULTINOMIAL, MUNIT, N, NA, NEGBINOM, NEGBINOMDIST, NETWORKDAYS, NETWORKDAYSINTL, NETWORKDAYS_INTL, NOMINAL, NORM, NORMDIST, NORMINV, NORMSDIST, NORMSINV, NOT, NOW, NPER, NPV, NUMBERVALUE, OCT2BIN, OCT2DEC, OCT2HEX, ODD, OR, PDURATION, PEARSON, PERCENTILE, PERCENTILEEXC, PERCENTILEINC, PERCENTRANK, PERCENTRANKEXC, PERCENTRANKINC, PERMUT, PERMUTATIONA, PHI, PI, PMT, PNL, POISSON, POISSONDIST, POWER, PPMT, PRICEDISC, PROB, PRODUCT, PROPER, PV, QUARTILE, QUARTILEEXC, QUARTILEINC, QUOTIENT, RADIANS, RAND, RANDBETWEEN, RANK, RANKAVG, RANKEQ, RATE, REPLACE, REPT, RIGHT, ROMAN, ROUND, ROUNDDOWN, ROUNDUP, ROW, ROWS, RRI, RSQ, SEARCH, SEC, SECH, SECOND, SERIESSUM, SIGN, SIN, SINH, SKEW, SKEWP, SLN, SLOPE, SMALL, SORT, SQRT, SQRTPI, STANDARDIZE, STDEV, STDEVA, STDEVP, STDEVPA, STDEVS, STEYX, SUBSTITUTE, SUBTOTAL, SUM, SUMIF, SUMIFS, SUMPRODUCT, SUMSQ, SUMX2MY2, SUMX2PY2, SUMXMY2, SWITCH, SYD, T, TAN, TANH, TBILLEQ, TBILLPRICE, TBILLYIELD, TDIST, TDISTRT, TEXT, TEXTJOIN, TIME, TIMEVALUE, TINV, TODAY, TRANSPOSE, TREND, TRIM, TRIMMEAN, TRUE, TRUNC, TTEST, TYPE, UNICHAR, UNICODE, UNIQUE, UPPER, VALUE, VAR, VARA, VARP, VARPA, VARS, VLOOKUP, WEEKDAY, WEEKNUM, WEIBULL, WEIBULLDIST, WORKDAY, WORKDAYINTL, WORKDAY_INTL, XIRR, XNPV, XOR, YEAR, YEARFRAC, Z, ZTEST, utils };
13225
+ export { ABS, ACCRINT, ACOS, ACOSH, ACOT, ACOTH, AGGREGATE, AND, ARABIC, ASIN, ASINH, ATAN, ATAN2, ATANH, AVEDEV, AVERAGE, AVERAGEA, AVERAGEIF, AVERAGEIFS, BASE, BESSELI, BESSELJ, BESSELK, BESSELY, BETA, BETADIST, BETAINV, BIN2DEC, BIN2HEX, BIN2OCT, BINOM, BINOMDIST, BITAND, BITLSHIFT, BITOR, BITRSHIFT, BITXOR, CEILING, CEILINGMATH, CEILINGPRECISE, CHAR, CHIDIST, CHIDISTRT, CHIINV, CHIINVRT, CHISQ, CHITEST, CHOOSE, CLEAN, CODE, COINGECKO, COLUMN, COLUMNS, COMBIN, COMBINA, COMPLEX, CONCAT, CONCATENATE, CONFIDENCE, CONVERT, CORREL, COS, COSH, COT, COTH, COUNT, COUNTA, COUNTBLANK, COUNTIF, COUNTIFS, COUPDAYS, COVAR, COVARIANCE, COVARIANCEP, COVARIANCES, CRITBINOM, CSC, CSCH, CUMIPMT, CUMPRINC, DATE, DATEDIF, DATEVALUE, DAVERAGE, DAY, DAYS, DAYS360, DB, DCOUNT, DCOUNTA, DDB, DEC2BIN, DEC2HEX, DEC2OCT, DECIMAL, DEGREES, DELTA, DEVSQ, DGET, DISC, DMAX, DMIN, DOLLAR, DOLLARDE, DOLLARFR, DPRODUCT, DSTDEV, DSTDEVP, DSUM, DVAR, DVARP, EDATE, EFFECT, EOA, EOMONTH, ERF, ERFC, ERFCPRECISE, ERFPRECISE, ERROR, ETHERSCAN, EVEN, EXACT, EXP, EXPON, EXPONDIST, F, FACT, FACTDOUBLE, FALSE, FDIST, FDISTRT, FIND, FINV, FINVRT, FISHER, FISHERINV, FIXED, FLOOR, FLOORMATH, FLOORPRECISE, FLVURL, FORECAST, FREQUENCY, FTEST, FV, FVSCHEDULE, GAMMA, GAMMADIST, GAMMAINV, GAMMALN, GAMMALNPRECISE, GAUSS, GCD, GEOMEAN, GESTEP, GROWTH, HARMEAN, HEX2BIN, HEX2DEC, HEX2OCT, HLOOKUP, HOUR, HYPGEOM, HYPGEOMDIST, IF, IFERROR, IFNA, IFS, IMABS, IMAGINARY, IMARGUMENT, IMCONJUGATE, IMCOS, IMCOSH, IMCOT, IMCSC, IMCSCH, IMDIV, IMEXP, IMLN, IMLOG10, IMLOG2, IMPOWER, IMPRODUCT, IMREAL, IMSEC, IMSECH, IMSIN, IMSINH, IMSQRT, IMSUB, IMSUM, IMTAN, INDEX, INT, INTERCEPT, IPMT, IRR, ISBLANK, ISDATE, ISERR, ISERROR, ISEVEN, ISLOGICAL, ISNA, ISNONTEXT, ISNUMBER, ISO, ISODD, ISOWEEKNUM, ISPMT, ISTEXT, KURT, LARGE, LCM, LEFT, LEN, LINEST, LN, LOG, LOG10, LOGEST, LOGINV, LOGNORM, LOGNORMDIST, LOGNORMINV, LOOKUP, LOWER, MATCH, MAX, MAXA, MAXIFS, MEDIAN, MID, MIN, MINA, MINIFS, MINUTE, MIRR, MMULT, MOD, MODE, MODEMULT, MODESNGL, MONTH, MROUND, MULTINOMIAL, MUNIT, N, NA, NEGBINOM, NEGBINOMDIST, NETWORKDAYS, NETWORKDAYSINTL, NETWORKDAYS_INTL, NOMINAL, NORM, NORMDIST, NORMINV, NORMSDIST, NORMSINV, NOT, NOW, NPER, NPV, NUMBERVALUE, OCT2BIN, OCT2DEC, OCT2HEX, ODD, OR, PDURATION, PEARSON, PERCENTILE, PERCENTILEEXC, PERCENTILEINC, PERCENTRANK, PERCENTRANKEXC, PERCENTRANKINC, PERMUT, PERMUTATIONA, PHI, PI, PMT, PNL, POISSON, POISSONDIST, POWER, PPMT, PRICEDISC, PROB, PRODUCT, PROPER, PV, QUARTILE, QUARTILEEXC, QUARTILEINC, QUOTIENT, RADIANS, RAND, RANDBETWEEN, RANK, RANKAVG, RANKEQ, RATE, REPLACE, REPT, RIGHT, ROMAN, ROUND, ROUNDDOWN, ROUNDUP, ROW, ROWS, RRI, RSQ, SEARCH, SEC, SECH, SECOND, SERIESSUM, SIGN, SIN, SINH, SKEW, SKEWP, SLN, SLOPE, SMALL, SORT, SQRT, SQRTPI, STANDARDIZE, STDEV, STDEVA, STDEVP, STDEVPA, STDEVS, STEYX, SUBSTITUTE, SUBTOTAL, SUM, SUMIF, SUMIFS, SUMPRODUCT, SUMSQ, SUMX2MY2, SUMX2PY2, SUMXMY2, SWITCH, SYD, T, TAN, TANH, TBILLEQ, TBILLPRICE, TBILLYIELD, TDIST, TDISTRT, TEXT, TEXTJOIN, TIME, TIMEVALUE, TINV, TODAY, TRANSPOSE, TREND, TRIM, TRIMMEAN, TRUE, TRUNC, TTEST, TYPE, UNICHAR, UNICODE, UNIQUE, UPPER, VALUE, VAR, VARA, VARP, VARPA, VARS, VLOOKUP, WEEKDAY, WEEKNUM, WEIBULL, WEIBULLDIST, WORKDAY, WORKDAYINTL, WORKDAY_INTL, XIRR, XNPV, XOR, YEAR, YEARFRAC, Z, ZTEST, utils };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fileverse-dev/formulajs",
3
- "version": "4.4.11-mod-21",
3
+ "version": "4.4.11-mod-21-patch-1",
4
4
  "description": "JavaScript implementation of most Microsoft Excel formula functions",
5
5
  "author": "Formulajs",
6
6
  "publishConfig": {
@@ -624,6 +624,7 @@ export function CLEAN(text: any): any;
624
624
  * @returns
625
625
  */
626
626
  export function CODE(text: any): any;
627
+ export function COINGECKO(token: any, vs_currencies: any): Promise<string | {}[]>;
627
628
  /**
628
629
  * Returns the column number of a reference.
629
630
  *
@@ -1328,7 +1329,7 @@ export const ERFPRECISE: any;
1328
1329
  export namespace ERROR {
1329
1330
  function TYPE(error_val: any): Error | 1 | 2 | 3 | 4 | 8 | 5 | 6 | 7;
1330
1331
  }
1331
- export function ETHERSCAN(address: any, page: any, offset: any): Promise<any>;
1332
+ export function ETHERSCAN(address: any, page: any, offset: any): Promise<string>;
1332
1333
  /**
1333
1334
  * Rounds a number up to the nearest even integer.
1334
1335
  *
@@ -1787,7 +1788,6 @@ export function GEOMEAN(...args: any[]): any;
1787
1788
  * @returns
1788
1789
  */
1789
1790
  export function GESTEP(number: any, step: any): any;
1790
- export function GETPRICE(token: any, vs_currencies: any): Promise<string | {}[]>;
1791
1791
  /**
1792
1792
  * Returns values along an exponential trend.
1793
1793
  *
@@ -624,6 +624,7 @@ export function CLEAN(text: any): any;
624
624
  * @returns
625
625
  */
626
626
  export function CODE(text: any): any;
627
+ export function COINGECKO(token: any, vs_currencies: any): Promise<string | {}[]>;
627
628
  /**
628
629
  * Returns the column number of a reference.
629
630
  *
@@ -1328,7 +1329,7 @@ export const ERFPRECISE: any;
1328
1329
  export namespace ERROR {
1329
1330
  function TYPE(error_val: any): Error | 1 | 2 | 3 | 4 | 8 | 5 | 6 | 7;
1330
1331
  }
1331
- export function ETHERSCAN(address: any, page: any, offset: any): Promise<any>;
1332
+ export function ETHERSCAN(address: any, page: any, offset: any): Promise<string>;
1332
1333
  /**
1333
1334
  * Rounds a number up to the nearest even integer.
1334
1335
  *
@@ -1787,7 +1788,6 @@ export function GEOMEAN(...args: any[]): any;
1787
1788
  * @returns
1788
1789
  */
1789
1790
  export function GESTEP(number: any, step: any): any;
1790
- export function GETPRICE(token: any, vs_currencies: any): Promise<string | {}[]>;
1791
1791
  /**
1792
1792
  * Returns values along an exponential trend.
1793
1793
  *