🎉 initiate project *astro_rewrite*

This commit is contained in:
sindrekjelsrud 2023-07-19 21:31:30 +02:00
parent ffd4d5e86c
commit 2ba37bfbe3
8658 changed files with 2268794 additions and 2538 deletions

25
node_modules/strnum/.vscode/launch.json generated vendored Normal file
View file

@ -0,0 +1,25 @@
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Jasmine Tests",
"program": "${workspaceFolder}/node_modules/jasmine/bin/jasmine.js",
"args": [
"${workspaceFolder}/spec/attr_spec.js"
],
"internalConsoleOptions": "openOnSessionStart"
},{
"type": "node",
"request": "launch",
"name": "Jasmine Tests current test file",
"program": "${workspaceFolder}/node_modules/jasmine/bin/jasmine.js",
"args": [
"${file}"
],
"internalConsoleOptions": "openOnSessionStart"
}
]
}

21
node_modules/strnum/LICENSE generated vendored Normal file
View file

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2021 Natural Intelligence
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

86
node_modules/strnum/README.md generated vendored Normal file
View file

@ -0,0 +1,86 @@
# strnum
Parse string into Number based on configuration
```bash
npm install strnum
```
```js
const toNumber = require("strnum");
toNumber(undefined) // undefined
toNumber(null)) //null
toNumber("")) // ""
toNumber("string"); //"string")
toNumber("12,12"); //"12,12")
toNumber("12 12"); //"12 12")
toNumber("12-12"); //"12-12")
toNumber("12.12.12"); //"12.12.12")
toNumber("0x2f"); //47)
toNumber("-0x2f"); //-47)
toNumber("0x2f", { hex : true}); //47)
toNumber("-0x2f", { hex : true}); //-47)
toNumber("0x2f", { hex : false}); //"0x2f")
toNumber("-0x2f", { hex : false}); //"-0x2f")
toNumber("06"); //6)
toNumber("06", { leadingZeros : true}); //6)
toNumber("06", { leadingZeros : false}); //"06")
toNumber("006"); //6)
toNumber("006", { leadingZeros : true}); //6)
toNumber("006", { leadingZeros : false}); //"006")
toNumber("0.0"); //0)
toNumber("00.00"); //0)
toNumber("0.06"); //0.06)
toNumber("00.6"); //0.6)
toNumber(".006"); //0.006)
toNumber("6.0"); //6)
toNumber("06.0"); //6)
toNumber("0.0", { leadingZeros : false}); //0)
toNumber("00.00", { leadingZeros : false}); //"00.00")
toNumber("0.06", { leadingZeros : false}); //0.06)
toNumber("00.6", { leadingZeros : false}); //"00.6")
toNumber(".006", { leadingZeros : false}); //0.006)
toNumber("6.0" , { leadingZeros : false}); //6)
toNumber("06.0" , { leadingZeros : false}); //"06.0")
toNumber("-06"); //-6)
toNumber("-06", { leadingZeros : true}); //-6)
toNumber("-06", { leadingZeros : false}); //"-06")
toNumber("-0.0"); //-0)
toNumber("-00.00"); //-0)
toNumber("-0.06"); //-0.06)
toNumber("-00.6"); //-0.6)
toNumber("-.006"); //-0.006)
toNumber("-6.0"); //-6)
toNumber("-06.0"); //-6)
toNumber("-0.0" , { leadingZeros : false}); //-0)
toNumber("-00.00", { leadingZeros : false}); //"-00.00")
toNumber("-0.06", { leadingZeros : false}); //-0.06)
toNumber("-00.6", { leadingZeros : false}); //"-00.6")
toNumber("-.006", {leadingZeros : false}); //-0.006)
toNumber("-6.0" , { leadingZeros : false}); //-6)
toNumber("-06.0" , { leadingZeros : false}); //"-06.0")
toNumber("420926189200190257681175017717") ; //4.209261892001902e+29)
toNumber("000000000000000000000000017717" , { leadingZeros : false}); //"000000000000000000000000017717")
toNumber("000000000000000000000000017717" , { leadingZeros : true}); //17717)
toNumber("01.0e2" , { leadingZeros : false}); //"01.0e2")
toNumber("-01.0e2" , { leadingZeros : false}); //"-01.0e2")
toNumber("01.0e2") ; //100)
toNumber("-01.0e2") ; //-100)
toNumber("1.0e2") ; //100)
toNumber("-1.0e2") ; //-100)
toNumber("1.0e-2"); //0.01)
toNumber("+1212121212"); // 1212121212
toNumber("+1212121212", { skipLike: /\+[0-9]{10}/} )); //"+1212121212"
```
Supported Options
```js
hex : true, //when hexadecimal string should be parsed
leadingZeros: true, //when number with leading zeros like 08 should be parsed. 0.0 is not impacted
eNotation: true //when number with eNotation or number parsed in eNotation should be considered
```

24
node_modules/strnum/package.json generated vendored Normal file
View file

@ -0,0 +1,24 @@
{
"name": "strnum",
"version": "1.0.5",
"description": "Parse String to Number based on configuration",
"main": "strnum.js",
"scripts": {
"test": "jasmine strnum.test.js"
},
"keywords": [
"string",
"number",
"parse",
"convert"
],
"repository": {
"type": "git",
"url": "https://github.com/NaturalIntelligence/strnum"
},
"author": "Amit Gupta (https://amitkumargupta.work/)",
"license": "MIT",
"devDependencies": {
"jasmine": "^3.10.0"
}
}

124
node_modules/strnum/strnum.js generated vendored Normal file
View file

@ -0,0 +1,124 @@
const hexRegex = /^[-+]?0x[a-fA-F0-9]+$/;
const numRegex = /^([\-\+])?(0*)(\.[0-9]+([eE]\-?[0-9]+)?|[0-9]+(\.[0-9]+([eE]\-?[0-9]+)?)?)$/;
// const octRegex = /0x[a-z0-9]+/;
// const binRegex = /0x[a-z0-9]+/;
//polyfill
if (!Number.parseInt && window.parseInt) {
Number.parseInt = window.parseInt;
}
if (!Number.parseFloat && window.parseFloat) {
Number.parseFloat = window.parseFloat;
}
const consider = {
hex : true,
leadingZeros: true,
decimalPoint: "\.",
eNotation: true
//skipLike: /regex/
};
function toNumber(str, options = {}){
// const options = Object.assign({}, consider);
// if(opt.leadingZeros === false){
// options.leadingZeros = false;
// }else if(opt.hex === false){
// options.hex = false;
// }
options = Object.assign({}, consider, options );
if(!str || typeof str !== "string" ) return str;
let trimmedStr = str.trim();
// if(trimmedStr === "0.0") return 0;
// else if(trimmedStr === "+0.0") return 0;
// else if(trimmedStr === "-0.0") return -0;
if(options.skipLike !== undefined && options.skipLike.test(trimmedStr)) return str;
else if (options.hex && hexRegex.test(trimmedStr)) {
return Number.parseInt(trimmedStr, 16);
// } else if (options.parseOct && octRegex.test(str)) {
// return Number.parseInt(val, 8);
// }else if (options.parseBin && binRegex.test(str)) {
// return Number.parseInt(val, 2);
}else{
//separate negative sign, leading zeros, and rest number
const match = numRegex.exec(trimmedStr);
if(match){
const sign = match[1];
const leadingZeros = match[2];
let numTrimmedByZeros = trimZeros(match[3]); //complete num without leading zeros
//trim ending zeros for floating number
const eNotation = match[4] || match[6];
if(!options.leadingZeros && leadingZeros.length > 0 && sign && trimmedStr[2] !== ".") return str; //-0123
else if(!options.leadingZeros && leadingZeros.length > 0 && !sign && trimmedStr[1] !== ".") return str; //0123
else{//no leading zeros or leading zeros are allowed
const num = Number(trimmedStr);
const numStr = "" + num;
if(numStr.search(/[eE]/) !== -1){ //given number is long and parsed to eNotation
if(options.eNotation) return num;
else return str;
}else if(eNotation){ //given number has enotation
if(options.eNotation) return num;
else return str;
}else if(trimmedStr.indexOf(".") !== -1){ //floating number
// const decimalPart = match[5].substr(1);
// const intPart = trimmedStr.substr(0,trimmedStr.indexOf("."));
// const p = numStr.indexOf(".");
// const givenIntPart = numStr.substr(0,p);
// const givenDecPart = numStr.substr(p+1);
if(numStr === "0" && (numTrimmedByZeros === "") ) return num; //0.0
else if(numStr === numTrimmedByZeros) return num; //0.456. 0.79000
else if( sign && numStr === "-"+numTrimmedByZeros) return num;
else return str;
}
if(leadingZeros){
// if(numTrimmedByZeros === numStr){
// if(options.leadingZeros) return num;
// else return str;
// }else return str;
if(numTrimmedByZeros === numStr) return num;
else if(sign+numTrimmedByZeros === numStr) return num;
else return str;
}
if(trimmedStr === numStr) return num;
else if(trimmedStr === sign+numStr) return num;
// else{
// //number with +/- sign
// trimmedStr.test(/[-+][0-9]);
// }
return str;
}
// else if(!eNotation && trimmedStr && trimmedStr !== Number(trimmedStr) ) return str;
}else{ //non-numeric string
return str;
}
}
}
/**
*
* @param {string} numStr without leading zeros
* @returns
*/
function trimZeros(numStr){
if(numStr && numStr.indexOf(".") !== -1){//float
numStr = numStr.replace(/0+$/, ""); //remove ending zeros
if(numStr === ".") numStr = "0";
else if(numStr[0] === ".") numStr = "0"+numStr;
else if(numStr[numStr.length-1] === ".") numStr = numStr.substr(0,numStr.length-1);
return numStr;
}
return numStr;
}
module.exports = toNumber

150
node_modules/strnum/strnum.test.js generated vendored Normal file
View file

@ -0,0 +1,150 @@
const toNumber = require("./strnum");
describe("Should convert all the valid numeric strings to number", () => {
it("should return undefined, null, empty string, or non-numeric as it is", () => {
expect(toNumber(undefined)).not.toBeDefined();
expect(toNumber(null)).toEqual(null);
expect(toNumber("")).toEqual("");
expect(toNumber("string")).toEqual("string");
});
it("should not parse number with spaces or comma", () => {
expect(toNumber("12,12")).toEqual("12,12");
expect(toNumber("12 12")).toEqual("12 12");
expect(toNumber("12-12")).toEqual("12-12");
expect(toNumber("12.12.12")).toEqual("12.12.12");
})
it("should consider + sign", () => {
expect(toNumber("+12")).toEqual(12);
expect(toNumber("+ 12")).toEqual("+ 12");
expect(toNumber("12+12")).toEqual("12+12");
expect(toNumber("1212+")).toEqual("1212+");
})
it("should parse hexadecimal values", () => {
expect(toNumber("0x2f")).toEqual(47);
expect(toNumber("-0x2f")).toEqual(-47);
expect(toNumber("0x2f", { hex : true})).toEqual(47);
expect(toNumber("-0x2f", { hex : true})).toEqual(-47);
expect(toNumber("0x2f", { hex : false})).toEqual("0x2f");
expect(toNumber("-0x2f", { hex : false})).toEqual("-0x2f");
})
it("should not parse strings with 0x embedded", () => {
expect(toNumber("0xzz")).toEqual("0xzz");
expect(toNumber("iweraf0x123qwerqwer")).toEqual("iweraf0x123qwerqwer");
expect(toNumber("1230x55")).toEqual("1230x55");
expect(toNumber("JVBERi0xLjMNCiXi48")).toEqual("JVBERi0xLjMNCiXi48");
})
it("leading zeros", () => {
expect(toNumber("06")).toEqual(6);
expect(toNumber("06", { leadingZeros : true})).toEqual(6);
expect(toNumber("06", { leadingZeros : false})).toEqual("06");
expect(toNumber("006")).toEqual(6);
expect(toNumber("006", { leadingZeros : true})).toEqual(6);
expect(toNumber("006", { leadingZeros : false})).toEqual("006");
expect(toNumber("000000000000000000000000017717" , { leadingZeros : false})).toEqual("000000000000000000000000017717");
expect(toNumber("000000000000000000000000017717" , { leadingZeros : true})).toEqual(17717);
expect(toNumber("020211201030005811824") ).toEqual("020211201030005811824");
expect(toNumber("0420926189200190257681175017717") ).toEqual(4.209261892001902e+29);
})
it("invalid floating number", () => {
expect(toNumber("20.21.030") ).toEqual("20.21.030");
expect(toNumber("0.21.030") ).toEqual("0.21.030");
expect(toNumber("0.21.") ).toEqual("0.21.");
expect(toNumber("0.") ).toEqual("0.");
expect(toNumber("1.") ).toEqual("1.");
});
it("floating point and leading zeros", () => {
expect(toNumber("0.0")).toEqual(0);
expect(toNumber("00.00")).toEqual(0);
expect(toNumber("0.06")).toEqual(0.06);
expect(toNumber("00.6")).toEqual(0.6);
expect(toNumber(".006")).toEqual(0.006);
expect(toNumber("6.0")).toEqual(6);
expect(toNumber("06.0")).toEqual(6);
expect(toNumber("0.0", { leadingZeros : false})).toEqual(0);
expect(toNumber("00.00", { leadingZeros : false})).toEqual("00.00");
expect(toNumber("0.06", { leadingZeros : false})).toEqual(0.06);
expect(toNumber("00.6", { leadingZeros : false})).toEqual("00.6");
expect(toNumber(".006", { leadingZeros : false})).toEqual(0.006);
expect(toNumber("6.0" , { leadingZeros : false})).toEqual(6);
expect(toNumber("06.0" , { leadingZeros : false})).toEqual("06.0");
})
it("negative number leading zeros", () => {
expect(toNumber("+06")).toEqual(6);
expect(toNumber("-06")).toEqual(-6);
expect(toNumber("-06", { leadingZeros : true})).toEqual(-6);
expect(toNumber("-06", { leadingZeros : false})).toEqual("-06");
expect(toNumber("-0.0")).toEqual(-0);
expect(toNumber("-00.00")).toEqual(-0);
expect(toNumber("-0.06")).toEqual(-0.06);
expect(toNumber("-00.6")).toEqual(-0.6);
expect(toNumber("-.006")).toEqual(-0.006);
expect(toNumber("-6.0")).toEqual(-6);
expect(toNumber("-06.0")).toEqual(-6);
expect(toNumber("-0.0" , { leadingZeros : false})).toEqual(-0);
expect(toNumber("-00.00", { leadingZeros : false})).toEqual("-00.00");
expect(toNumber("-0.06", { leadingZeros : false})).toEqual(-0.06);
expect(toNumber("-00.6", { leadingZeros : false})).toEqual("-00.6");
expect(toNumber("-.006", {leadingZeros : false})).toEqual(-0.006);
expect(toNumber("-6.0" , { leadingZeros : false})).toEqual(-6);
expect(toNumber("-06.0" , { leadingZeros : false})).toEqual("-06.0");
})
it("long number", () => {
expect(toNumber("020211201030005811824") ).toEqual("020211201030005811824");
expect(toNumber("20211201030005811824") ).toEqual("20211201030005811824");
expect(toNumber("20.211201030005811824") ).toEqual("20.211201030005811824");
expect(toNumber("0.211201030005811824") ).toEqual("0.211201030005811824");
});
it("scientific notation", () => {
expect(toNumber("01.0e2" , { leadingZeros : false})).toEqual("01.0e2");
expect(toNumber("-01.0e2" , { leadingZeros : false})).toEqual("-01.0e2");
expect(toNumber("01.0e2") ).toEqual(100);
expect(toNumber("-01.0e2") ).toEqual(-100);
expect(toNumber("1.0e2") ).toEqual(100);
expect(toNumber("-1.0e2") ).toEqual(-100);
expect(toNumber("1.0e-2")).toEqual(0.01);
expect(toNumber("420926189200190257681175017717") ).toEqual(4.209261892001902e+29);
expect(toNumber("420926189200190257681175017717" , { eNotation: false} )).toEqual("420926189200190257681175017717");
});
it("scientific notation with upper E", () => {
expect(toNumber("01.0E2" , { leadingZeros : false})).toEqual("01.0E2");
expect(toNumber("-01.0E2" , { leadingZeros : false})).toEqual("-01.0E2");
expect(toNumber("01.0E2") ).toEqual(100);
expect(toNumber("-01.0E2") ).toEqual(-100);
expect(toNumber("1.0E2") ).toEqual(100);
expect(toNumber("-1.0E2") ).toEqual(-100);
expect(toNumber("1.0E-2")).toEqual(0.01);
});
it("should skip matching pattern", () => {
expect(toNumber("+12", { skipLike: /\+[0-9]{10}/} )).toEqual(12);
expect(toNumber("12+12", { skipLike: /\+[0-9]{10}/} )).toEqual("12+12");
expect(toNumber("12+1212121212", { skipLike: /\+[0-9]{10}/} )).toEqual("12+1212121212");
expect(toNumber("+1212121212") ).toEqual(1212121212);
expect(toNumber("+1212121212", { skipLike: /\+[0-9]{10}/} )).toEqual("+1212121212");
})
it("should not change string if not number", () => {
expect(toNumber("+12 12")).toEqual("+12 12");
expect(toNumber(" +12 12 ")).toEqual(" +12 12 ");
})
it("should ignore sorrounded spaces ", () => {
expect(toNumber(" +1212 ")).toEqual(1212);
})
it("negative numbers", () => {
expect(toNumber("+1212")).toEqual(1212);
expect(toNumber("+12.12")).toEqual(12.12);
expect(toNumber("-12.12")).toEqual(-12.12);
expect(toNumber("-012.12")).toEqual(-12.12);
expect(toNumber("-012.12")).toEqual(-12.12);
})
});