affinirum 1.0.4 → 1.0.6

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/README.md CHANGED
@@ -240,7 +240,9 @@ Unknown or variant type is declared as **??**.
240
240
  - **float | integer float | integer.Modulo(divisor)** — Modulo
241
241
  - **float | integer float | integer.Power(exponent)** — Power
242
242
  - **float | integer float | integer.Root(index)** — Root
243
- - **float | integer float | integer.Cast()** — Cast to number
243
+ - **float | integer float | integer.Cast()** — Cast to integer or float
244
+ - **float integer.CastToFloat()** — Cast to float
245
+ - **integer float.CastToInteger()** — Cast to integer
244
246
 
245
247
  #### Object Functions
246
248
  - **array object.Entries()** — Key-value pairs
package/dst/Functions.js CHANGED
@@ -2,7 +2,7 @@ import { funcFirst, funcLast, funcFirstIndex, funcLastIndex, funcEvery, funcAny,
2
2
  import { funcByte } from "./constant/Buffer.js";
3
3
  import { funcAdd, funcSlice, funcSplice, funcInject } from "./constant/Enumerable.js";
4
4
  import { funcLength, funcContains, funcAt, funcHas } from "./constant/Iterable.js";
5
- import { funcGreaterThan, funcLessThan, funcGreaterOrEqual, funcLessOrEqual, funcSubtract, funcMultiply, funcDivide, funcRemainder, funcModulo, funcPower, funcRoot, funcNegate, funcCast } from "./constant/Number.js";
5
+ import { funcGreaterThan, funcLessThan, funcGreaterOrEqual, funcLessOrEqual, funcSubtract, funcMultiply, funcDivide, funcRemainder, funcModulo, funcPower, funcRoot, funcNegate, funcCast, funcCastToFloat, funcCastToInteger } from "./constant/Number.js";
6
6
  import { funcEntries, funcKeys, funcValues } from "./constant/Object.js";
7
7
  import { funcLike, funcUnlike, funcStartsWith, funcEndsWith, funcChar, funcCharCode, funcTrim, funcTrimStart, funcTrimEnd, funcLowerCase, funcUpperCase, funcSplit } from "./constant/String.js";
8
8
  import { funcYear, funcMonth, funcMonthIndex, funcWeekdayIndex, funcDay, funcHour, funcMinute, funcSecond, funcMillisecond, funcEpochTime } from "./constant/Timestamp.js";
@@ -49,6 +49,8 @@ export const Functions = [
49
49
  ["Root", funcRoot],
50
50
  ["Negate", funcNegate],
51
51
  ["Cast", funcCast],
52
+ ["CastToFloat", funcCastToFloat],
53
+ ["CastToInteger", funcCastToInteger],
52
54
  // Object
53
55
  ["Entries", funcEntries],
54
56
  ["Keys", funcKeys],
@@ -52,6 +52,8 @@ exports.Functions = [
52
52
  ["Root", Number_js_1.funcRoot],
53
53
  ["Negate", Number_js_1.funcNegate],
54
54
  ["Cast", Number_js_1.funcCast],
55
+ ["CastToFloat", Number_js_1.funcCastToFloat],
56
+ ["CastToInteger", Number_js_1.funcCastToInteger],
55
57
  // Object
56
58
  ["Entries", Object_js_1.funcEntries],
57
59
  ["Keys", Object_js_1.funcKeys],
@@ -50,17 +50,17 @@ const formatFloat = (value, radix) => value.toString(radix) + (Number.isInteger(
50
50
  exports.formatFloat = formatFloat;
51
51
  const typeNumberOrArray = Type_js_1.Type.union(Type_js_1.Type.Float, Type_js_1.Type.arrayType([Type_js_1.Type.Float]));
52
52
  const typeAggregator = Type_js_1.Type.functionType(Type_js_1.Type.Float, [typeNumberOrArray], true);
53
- const typeNumberTransform = Type_js_1.Type.functionType(Type_js_1.Type.Float, [Type_js_1.Type.Float]);
53
+ const typeTransform = Type_js_1.Type.functionType(Type_js_1.Type.Float, [Type_js_1.Type.Float]);
54
54
  const funcSum = new Constant_js_1.Constant((...values) => values.flat().reduce((acc, val) => acc + val, 0), typeAggregator);
55
55
  const funcMin = new Constant_js_1.Constant((...values) => Math.min(Number.POSITIVE_INFINITY, ...values.flat()), typeAggregator);
56
56
  const funcMax = new Constant_js_1.Constant((...values) => Math.max(Number.NEGATIVE_INFINITY, ...values.flat()), typeAggregator);
57
- const funcExponent = new Constant_js_1.Constant((value) => Math.exp(value), typeNumberTransform);
58
- const funcLogarithm = new Constant_js_1.Constant((value) => Math.log(value), typeNumberTransform);
59
- const funcAbs = new Constant_js_1.Constant((value) => Math.abs(value), typeNumberTransform);
60
- const funcCeil = new Constant_js_1.Constant((value) => Math.ceil(value), typeNumberTransform);
61
- const funcFloor = new Constant_js_1.Constant((value) => Math.floor(value), typeNumberTransform);
62
- const funcRound = new Constant_js_1.Constant((value) => Math.round(value), typeNumberTransform);
63
- const funcTruncate = new Constant_js_1.Constant((value) => Math.trunc(value), typeNumberTransform);
57
+ const funcExponent = new Constant_js_1.Constant((value) => Math.exp(value), typeTransform);
58
+ const funcLogarithm = new Constant_js_1.Constant((value) => Math.log(value), typeTransform);
59
+ const funcAbs = new Constant_js_1.Constant((value) => Math.abs(value), typeTransform);
60
+ const funcCeil = new Constant_js_1.Constant((value) => Math.ceil(value), typeTransform);
61
+ const funcFloor = new Constant_js_1.Constant((value) => Math.floor(value), typeTransform);
62
+ const funcRound = new Constant_js_1.Constant((value) => Math.round(value), typeTransform);
63
+ const funcTruncate = new Constant_js_1.Constant((value) => Math.trunc(value), typeTransform);
64
64
  const funcRandomFloat = new Constant_js_1.Constant((value) => value == null ? undefined : Math.random() * value, Type_js_1.Type.functionType(Type_js_1.Type.Float, [Type_js_1.Type.Float]), false);
65
65
  const funcDecodeFloat = new Constant_js_1.Constant((value, encoding = "float64", byteOffset) => decodeFloat(value, encoding, byteOffset == null ? undefined : Number(byteOffset)), Type_js_1.Type.functionType(Type_js_1.Type.OptionalFloat, [Type_js_1.Type.Buffer, Type_js_1.Type.OptionalString, Type_js_1.Type.OptionalInteger]));
66
66
  const funcParseFloat = new Constant_js_1.Constant((value) => value ? Number.parseFloat(value) : undefined, Type_js_1.Type.functionType(Type_js_1.Type.OptionalFloat, [Type_js_1.Type.String]));
@@ -1,8 +1,20 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.funcCast = exports.funcNegate = exports.funcRoot = exports.funcPower = exports.funcModulo = exports.funcRemainder = exports.funcDivide = exports.funcMultiply = exports.funcSubtract = exports.funcLessOrEqual = exports.funcGreaterOrEqual = exports.funcLessThan = exports.funcGreaterThan = void 0;
3
+ exports.funcCastToInteger = exports.funcCastToFloat = exports.funcCast = exports.funcNegate = exports.funcRoot = exports.funcPower = exports.funcModulo = exports.funcRemainder = exports.funcDivide = exports.funcMultiply = exports.funcSubtract = exports.funcLessOrEqual = exports.funcGreaterOrEqual = exports.funcLessThan = exports.funcGreaterThan = void 0;
4
4
  const Constant_js_1 = require("../Constant.js");
5
5
  const Type_js_1 = require("../Type.js");
6
+ const castToInteger = (value) => {
7
+ if (Number.isNaN(value)) {
8
+ return 0n;
9
+ }
10
+ if (value === Number.NEGATIVE_INFINITY) {
11
+ return -0x8000000000000000n;
12
+ }
13
+ if (value === Number.POSITIVE_INFINITY) {
14
+ return 0x7fffffffffffffffn;
15
+ }
16
+ return BigInt.asIntN(64, BigInt(Math.trunc(value)));
17
+ };
6
18
  const typeComparator = Type_js_1.Type.functionType(Type_js_1.Type.Boolean, [Type_js_1.Type.Number, Type_js_1.Type.Number]);
7
19
  const typeOperator = Type_js_1.Type.union(Type_js_1.Type.functionType(Type_js_1.Type.Float, [Type_js_1.Type.Float, Type_js_1.Type.Integer]), Type_js_1.Type.functionType(Type_js_1.Type.Float, [Type_js_1.Type.Integer, Type_js_1.Type.Float]), Type_js_1.Type.functionType(Type_js_1.Type.Integer, [Type_js_1.Type.Integer, Type_js_1.Type.Integer]));
8
20
  exports.funcGreaterThan = new Constant_js_1.Constant((value1, value2) => value1 > value2, typeComparator);
@@ -56,4 +68,8 @@ exports.funcRoot = new Constant_js_1.Constant((value, exponent) => {
56
68
  return Math.pow(Number(value), 1 / Number(exponent));
57
69
  }, typeOperator);
58
70
  exports.funcNegate = new Constant_js_1.Constant((value) => typeof value === "number" ? -value : BigInt.asIntN(64, -value), Type_js_1.Type.union(Type_js_1.Type.functionType(Type_js_1.Type.Float, [Type_js_1.Type.Float]), Type_js_1.Type.functionType(Type_js_1.Type.Integer, [Type_js_1.Type.Integer])));
59
- exports.funcCast = new Constant_js_1.Constant((value) => typeof value === "number" ? BigInt.asIntN(64, BigInt(Math.trunc(value))) : Number(value), Type_js_1.Type.union(Type_js_1.Type.functionType(Type_js_1.Type.Float, [Type_js_1.Type.Integer]), Type_js_1.Type.functionType(Type_js_1.Type.Integer, [Type_js_1.Type.Float])));
71
+ exports.funcCast = new Constant_js_1.Constant((value) => typeof value !== "number"
72
+ ? Number(value)
73
+ : castToInteger(value), Type_js_1.Type.union(Type_js_1.Type.functionType(Type_js_1.Type.Float, [Type_js_1.Type.Integer]), Type_js_1.Type.functionType(Type_js_1.Type.Integer, [Type_js_1.Type.Float])));
74
+ exports.funcCastToFloat = new Constant_js_1.Constant((value) => Number(value), Type_js_1.Type.functionType(Type_js_1.Type.Float, [Type_js_1.Type.Integer]));
75
+ exports.funcCastToInteger = new Constant_js_1.Constant((value) => castToInteger(value), Type_js_1.Type.functionType(Type_js_1.Type.Integer, [Type_js_1.Type.Float]));
@@ -45,17 +45,17 @@ const decodeFloat = (value, encoding = "float64", byteOffset) => {
45
45
  export const formatFloat = (value, radix) => value.toString(radix) + (Number.isInteger(value) ? ".0" : "");
46
46
  const typeNumberOrArray = Type.union(Type.Float, Type.arrayType([Type.Float]));
47
47
  const typeAggregator = Type.functionType(Type.Float, [typeNumberOrArray], true);
48
- const typeNumberTransform = Type.functionType(Type.Float, [Type.Float]);
48
+ const typeTransform = Type.functionType(Type.Float, [Type.Float]);
49
49
  const funcSum = new Constant((...values) => values.flat().reduce((acc, val) => acc + val, 0), typeAggregator);
50
50
  const funcMin = new Constant((...values) => Math.min(Number.POSITIVE_INFINITY, ...values.flat()), typeAggregator);
51
51
  const funcMax = new Constant((...values) => Math.max(Number.NEGATIVE_INFINITY, ...values.flat()), typeAggregator);
52
- const funcExponent = new Constant((value) => Math.exp(value), typeNumberTransform);
53
- const funcLogarithm = new Constant((value) => Math.log(value), typeNumberTransform);
54
- const funcAbs = new Constant((value) => Math.abs(value), typeNumberTransform);
55
- const funcCeil = new Constant((value) => Math.ceil(value), typeNumberTransform);
56
- const funcFloor = new Constant((value) => Math.floor(value), typeNumberTransform);
57
- const funcRound = new Constant((value) => Math.round(value), typeNumberTransform);
58
- const funcTruncate = new Constant((value) => Math.trunc(value), typeNumberTransform);
52
+ const funcExponent = new Constant((value) => Math.exp(value), typeTransform);
53
+ const funcLogarithm = new Constant((value) => Math.log(value), typeTransform);
54
+ const funcAbs = new Constant((value) => Math.abs(value), typeTransform);
55
+ const funcCeil = new Constant((value) => Math.ceil(value), typeTransform);
56
+ const funcFloor = new Constant((value) => Math.floor(value), typeTransform);
57
+ const funcRound = new Constant((value) => Math.round(value), typeTransform);
58
+ const funcTruncate = new Constant((value) => Math.trunc(value), typeTransform);
59
59
  const funcRandomFloat = new Constant((value) => value == null ? undefined : Math.random() * value, Type.functionType(Type.Float, [Type.Float]), false);
60
60
  const funcDecodeFloat = new Constant((value, encoding = "float64", byteOffset) => decodeFloat(value, encoding, byteOffset == null ? undefined : Number(byteOffset)), Type.functionType(Type.OptionalFloat, [Type.Buffer, Type.OptionalString, Type.OptionalInteger]));
61
61
  const funcParseFloat = new Constant((value) => value ? Number.parseFloat(value) : undefined, Type.functionType(Type.OptionalFloat, [Type.String]));
@@ -12,3 +12,5 @@ export declare const funcPower: Constant;
12
12
  export declare const funcRoot: Constant;
13
13
  export declare const funcNegate: Constant;
14
14
  export declare const funcCast: Constant;
15
+ export declare const funcCastToFloat: Constant;
16
+ export declare const funcCastToInteger: Constant;
@@ -1,5 +1,17 @@
1
1
  import { Constant } from "../Constant.js";
2
2
  import { Type } from "../Type.js";
3
+ const castToInteger = (value) => {
4
+ if (Number.isNaN(value)) {
5
+ return 0n;
6
+ }
7
+ if (value === Number.NEGATIVE_INFINITY) {
8
+ return -0x8000000000000000n;
9
+ }
10
+ if (value === Number.POSITIVE_INFINITY) {
11
+ return 0x7fffffffffffffffn;
12
+ }
13
+ return BigInt.asIntN(64, BigInt(Math.trunc(value)));
14
+ };
3
15
  const typeComparator = Type.functionType(Type.Boolean, [Type.Number, Type.Number]);
4
16
  const typeOperator = Type.union(Type.functionType(Type.Float, [Type.Float, Type.Integer]), Type.functionType(Type.Float, [Type.Integer, Type.Float]), Type.functionType(Type.Integer, [Type.Integer, Type.Integer]));
5
17
  export const funcGreaterThan = new Constant((value1, value2) => value1 > value2, typeComparator);
@@ -53,4 +65,8 @@ export const funcRoot = new Constant((value, exponent) => {
53
65
  return Math.pow(Number(value), 1 / Number(exponent));
54
66
  }, typeOperator);
55
67
  export const funcNegate = new Constant((value) => typeof value === "number" ? -value : BigInt.asIntN(64, -value), Type.union(Type.functionType(Type.Float, [Type.Float]), Type.functionType(Type.Integer, [Type.Integer])));
56
- export const funcCast = new Constant((value) => typeof value === "number" ? BigInt.asIntN(64, BigInt(Math.trunc(value))) : Number(value), Type.union(Type.functionType(Type.Float, [Type.Integer]), Type.functionType(Type.Integer, [Type.Float])));
68
+ export const funcCast = new Constant((value) => typeof value !== "number"
69
+ ? Number(value)
70
+ : castToInteger(value), Type.union(Type.functionType(Type.Float, [Type.Integer]), Type.functionType(Type.Integer, [Type.Float])));
71
+ export const funcCastToFloat = new Constant((value) => Number(value), Type.functionType(Type.Float, [Type.Integer]));
72
+ export const funcCastToInteger = new Constant((value) => castToInteger(value), Type.functionType(Type.Integer, [Type.Float]));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "affinirum",
3
- "version": "1.0.4",
3
+ "version": "1.0.6",
4
4
  "description": "Affinirum Scripting Language",
5
5
  "main": "dst/cjs/index.js",
6
6
  "module": "dst/index.js",