feat: start nemesis #1227
							
								
								
									
										7
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										7
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							@ -14,6 +14,7 @@
 | 
				
			|||||||
        "copyfiles": "^2.4.1",
 | 
					        "copyfiles": "^2.4.1",
 | 
				
			||||||
        "crc-32": "^1.2.2",
 | 
					        "crc-32": "^1.2.2",
 | 
				
			||||||
        "express": "^5",
 | 
					        "express": "^5",
 | 
				
			||||||
 | 
					        "json-with-bigint": "^3.2.1",
 | 
				
			||||||
        "mongoose": "^8.11.0",
 | 
					        "mongoose": "^8.11.0",
 | 
				
			||||||
        "morgan": "^1.10.0",
 | 
					        "morgan": "^1.10.0",
 | 
				
			||||||
        "typescript": ">=5.5 <5.6.0",
 | 
					        "typescript": ">=5.5 <5.6.0",
 | 
				
			||||||
@ -2346,6 +2347,12 @@
 | 
				
			|||||||
      "dev": true,
 | 
					      "dev": true,
 | 
				
			||||||
      "license": "MIT"
 | 
					      "license": "MIT"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "node_modules/json-with-bigint": {
 | 
				
			||||||
 | 
					      "version": "3.2.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/json-with-bigint/-/json-with-bigint-3.2.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-0f8RHpU1AwBFwIPmtm71W+cFxzlXdiBmzc3JqydsNDSKSAsr0Lso6KXRbz0h2LRwTIRiHAk/UaD+xaAN5f577w==",
 | 
				
			||||||
 | 
					      "license": "MIT"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "node_modules/json5": {
 | 
					    "node_modules/json5": {
 | 
				
			||||||
      "version": "2.2.3",
 | 
					      "version": "2.2.3",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
 | 
				
			||||||
 | 
				
			|||||||
@ -19,6 +19,7 @@
 | 
				
			|||||||
    "copyfiles": "^2.4.1",
 | 
					    "copyfiles": "^2.4.1",
 | 
				
			||||||
    "crc-32": "^1.2.2",
 | 
					    "crc-32": "^1.2.2",
 | 
				
			||||||
    "express": "^5",
 | 
					    "express": "^5",
 | 
				
			||||||
 | 
					    "json-with-bigint": "^3.2.1",
 | 
				
			||||||
    "mongoose": "^8.11.0",
 | 
					    "mongoose": "^8.11.0",
 | 
				
			||||||
    "morgan": "^1.10.0",
 | 
					    "morgan": "^1.10.0",
 | 
				
			||||||
    "typescript": ">=5.5 <5.6.0",
 | 
					    "typescript": ">=5.5 <5.6.0",
 | 
				
			||||||
 | 
				
			|||||||
@ -1,4 +1,4 @@
 | 
				
			|||||||
import { JSONParse } from "../json-with-bigint";
 | 
					import { JSONParse } from "json-with-bigint";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const getJSONfromString = <T>(str: string): T => {
 | 
					export const getJSONfromString = <T>(str: string): T => {
 | 
				
			||||||
    const jsonSubstring = str.substring(0, str.lastIndexOf("}") + 1);
 | 
					    const jsonSubstring = str.substring(0, str.lastIndexOf("}") + 1);
 | 
				
			||||||
 | 
				
			|||||||
@ -1,53 +0,0 @@
 | 
				
			|||||||
// Based on the json-with-bigint library: https://github.com/Ivan-Korolenko/json-with-bigint/blob/main/json-with-bigint.js
 | 
					 | 
				
			||||||
// Sadly we can't use it directly: https://github.com/Ivan-Korolenko/json-with-bigint/issues/15
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* eslint-disable */
 | 
					 | 
				
			||||||
const noiseValue = /^-?\d+n+$/; // Noise - strings that match the custom format before being converted to it
 | 
					 | 
				
			||||||
export const JSONParse = (json: any) => {
 | 
					 | 
				
			||||||
    if (!json) return JSON.parse(json);
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
    const MAX_INT = Number.MAX_SAFE_INTEGER.toString();
 | 
					 | 
				
			||||||
    const MAX_DIGITS = MAX_INT.length;
 | 
					 | 
				
			||||||
    const stringsOrLargeNumbers =
 | 
					 | 
				
			||||||
      /"(?:\\.|[^"])*"|-?(0|[1-9][0-9]*)(\.[0-9]+)?([eE][+-]?[0-9]+)?/g;
 | 
					 | 
				
			||||||
    const noiseValueWithQuotes = /^"-?\d+n+"$/; // Noise - strings that match the custom format before being converted to it
 | 
					 | 
				
			||||||
    const customFormat = /^-?\d+n$/;
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
    // Find and mark big numbers with "n"
 | 
					 | 
				
			||||||
    const serializedData = json.replace(
 | 
					 | 
				
			||||||
      stringsOrLargeNumbers,
 | 
					 | 
				
			||||||
      (text: any, digits: any, fractional: any, exponential: any) => {
 | 
					 | 
				
			||||||
        const isString = text[0] === '"';
 | 
					 | 
				
			||||||
        const isNoise = isString && Boolean(text.match(noiseValueWithQuotes));
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
        if (isNoise) return text.substring(0, text.length - 1) + 'n"'; // Mark noise values with additional "n" to offset the deletion of one "n" during the processing
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
        const isFractionalOrExponential = fractional || exponential;
 | 
					 | 
				
			||||||
        const isLessThanMaxSafeInt =
 | 
					 | 
				
			||||||
          digits &&
 | 
					 | 
				
			||||||
          (digits.length < MAX_DIGITS ||
 | 
					 | 
				
			||||||
            (digits.length === MAX_DIGITS && digits <= MAX_INT)); // With a fixed number of digits, we can correctly use lexicographical comparison to do a numeric comparison
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
        if (isString || isFractionalOrExponential || isLessThanMaxSafeInt)
 | 
					 | 
				
			||||||
          return text;
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
        return '"' + text + 'n"';
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
    // Convert marked big numbers to BigInt
 | 
					 | 
				
			||||||
    return JSON.parse(serializedData, (_, value) => {
 | 
					 | 
				
			||||||
      const isCustomFormatBigInt =
 | 
					 | 
				
			||||||
        typeof value === "string" && Boolean(value.match(customFormat));
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
      if (isCustomFormatBigInt)
 | 
					 | 
				
			||||||
        return BigInt(value.substring(0, value.length - 1));
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
      const isNoiseValue =
 | 
					 | 
				
			||||||
        typeof value === "string" && Boolean(value.match(noiseValue));
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
      if (isNoiseValue) return value.substring(0, value.length - 1); // Remove one "n" off the end of the noisy string
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
      return value;
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user