@k8ts/instruments 0.5.3 → 0.6.0
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/dist/resources/objects.d.ts +3 -0
- package/dist/resources/objects.d.ts.map +1 -1
- package/dist/resources/objects.js +7 -4
- package/dist/resources/objects.js.map +1 -1
- package/dist/resources/types.d.ts +3 -0
- package/dist/resources/types.d.ts.map +1 -1
- package/dist/units/unit-parser.d.ts +17 -6
- package/dist/units/unit-parser.d.ts.map +1 -1
- package/dist/units/unit-parser.js +42 -15
- package/dist/units/unit-parser.js.map +1 -1
- package/dist/units/units.d.ts +4 -4
- package/dist/units/units.d.ts.map +1 -1
- package/dist/units/units.js +3 -3
- package/dist/units/units.js.map +1 -1
- package/package.json +1 -1
- package/src/resources/objects.ts +7 -4
- package/src/resources/types.ts +4 -0
- package/src/units/unit-parser.ts +48 -17
- package/src/units/units.ts +4 -4
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Map } from "immutable";
|
|
2
2
|
import { type Parjser } from "parjs";
|
|
3
3
|
import type { UnitParser, UnitValue } from "../units";
|
|
4
|
+
import { AnyUnitParser } from "../units/unit-parser";
|
|
4
5
|
import type { mt_Resource_Input_Map, mt_Resource_Unit_Map, ReqLimit } from "./types";
|
|
5
6
|
export declare class ResourcesMap<const RM extends mt_Resource_Unit_Map<RM>> {
|
|
6
7
|
private _map;
|
|
@@ -10,6 +11,8 @@ export declare class ResourcesMap<const RM extends mt_Resource_Unit_Map<RM>> {
|
|
|
10
11
|
export declare class ResourcesSpec<const RM extends mt_Resource_Unit_Map<RM>> {
|
|
11
12
|
readonly _unitParsers: Map<string, Parjser<UnitValue | undefined>>;
|
|
12
13
|
readonly _reqLimitParsers: Map<string, Parjser<ReqLimit>>;
|
|
14
|
+
readonly _anyUnitParser: AnyUnitParser;
|
|
15
|
+
readonly _anyReqLimitParser: Parjser<ReqLimit<string>>;
|
|
13
16
|
constructor(_unitMap: Map<string, UnitParser>);
|
|
14
17
|
private _parseUnitValue;
|
|
15
18
|
private _parseReqLimit;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"objects.d.ts","sourceRoot":"","sources":["../../src/resources/objects.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAO,MAAM,WAAW,CAAA;AAEpC,OAAO,EAAU,KAAK,OAAO,EAAE,MAAM,OAAO,CAAA;AAG5C,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"objects.d.ts","sourceRoot":"","sources":["../../src/resources/objects.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAO,MAAM,WAAW,CAAA;AAEpC,OAAO,EAAU,KAAK,OAAO,EAAE,MAAM,OAAO,CAAA;AAG5C,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAEpD,OAAO,KAAK,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEpF,qBAAa,YAAY,CAAC,KAAK,CAAC,EAAE,SAAS,oBAAoB,CAAC,EAAE,CAAC;IACnD,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC;IAE/C,QAAQ;CAqBX;AAED,qBAAa,aAAa,CAAC,KAAK,CAAC,EAAE,SAAS,oBAAoB,CAAC,EAAE,CAAC;IAChE,QAAQ,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC,CAAA;IAClE,QAAQ,CAAC,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAA;IACzD,QAAQ,CAAC,cAAc,gBAAuB;IAC9C,QAAQ,CAAC,kBAAkB,4BAA4C;gBAC3D,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC;IAM7C,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,cAAc;IAOtB,SAAS,EAAG,qBAAqB,CAAC,EAAE,CAAC,CAAA;IAErC,KAAK,CAAC,KAAK,CAAC,CAAC,SAAS,qBAAqB,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,YAAY,CAAC,EAAE,CAAC;IAgC5E,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,SAAS,oBAAoB,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE;SAC3D,CAAC,IAAI,MAAM,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;KACrC;CAGJ"}
|
|
@@ -6,6 +6,7 @@ const lodash_1 = require("lodash");
|
|
|
6
6
|
const parjs_1 = require("parjs");
|
|
7
7
|
const combinators_1 = require("parjs/combinators");
|
|
8
8
|
const error_1 = require("../error");
|
|
9
|
+
const unit_parser_1 = require("../units/unit-parser");
|
|
9
10
|
const parser_1 = require("./parser");
|
|
10
11
|
class ResourcesMap {
|
|
11
12
|
_map;
|
|
@@ -17,12 +18,12 @@ class ResourcesMap {
|
|
|
17
18
|
const result = {};
|
|
18
19
|
if (value.request) {
|
|
19
20
|
result.requests = {
|
|
20
|
-
[key]: value.request.
|
|
21
|
+
[key]: value.request.val
|
|
21
22
|
};
|
|
22
23
|
}
|
|
23
24
|
if (value.limit) {
|
|
24
25
|
result.limits = {
|
|
25
|
-
[key]: value.limit.
|
|
26
|
+
[key]: value.limit.val
|
|
26
27
|
};
|
|
27
28
|
}
|
|
28
29
|
if (!(0, lodash_1.isEmpty)(result)) {
|
|
@@ -37,6 +38,8 @@ exports.ResourcesMap = ResourcesMap;
|
|
|
37
38
|
class ResourcesSpec {
|
|
38
39
|
_unitParsers;
|
|
39
40
|
_reqLimitParsers;
|
|
41
|
+
_anyUnitParser = unit_parser_1.AnyUnitParser.make();
|
|
42
|
+
_anyReqLimitParser = (0, parser_1.createResourceParser)(this._anyUnitParser);
|
|
40
43
|
constructor(_unitMap) {
|
|
41
44
|
const questionMarkParser = (0, parjs_1.string)("?").pipe((0, combinators_1.mapConst)(undefined));
|
|
42
45
|
this._unitParsers = _unitMap.map(parser => parser.parser.pipe((0, combinators_1.or)(questionMarkParser)));
|
|
@@ -52,7 +55,7 @@ class ResourcesSpec {
|
|
|
52
55
|
_parseReqLimit(resource, input) {
|
|
53
56
|
const pReqLimit = this._reqLimitParsers.get(resource);
|
|
54
57
|
if (!pReqLimit) {
|
|
55
|
-
|
|
58
|
+
return this._anyReqLimitParser.parse(input).value;
|
|
56
59
|
}
|
|
57
60
|
return pReqLimit.parse(input).value;
|
|
58
61
|
}
|
|
@@ -61,7 +64,7 @@ class ResourcesSpec {
|
|
|
61
64
|
const allKeys = (0, immutable_1.Set)([...Object.keys(input), ...this._unitParsers.keys()]).toMap();
|
|
62
65
|
const map = allKeys.map((_, key) => {
|
|
63
66
|
const value = input[key];
|
|
64
|
-
const pUnitValue = this._unitParsers.get(key);
|
|
67
|
+
const pUnitValue = this._unitParsers.get(key) ?? this._anyUnitParser.parser;
|
|
65
68
|
if (!pUnitValue) {
|
|
66
69
|
throw new error_1.InstrumentsError(`No parser found for ${String(key)}`);
|
|
67
70
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"objects.js","sourceRoot":"","sources":["../../src/resources/objects.ts"],"names":[],"mappings":";;;AAAA,yCAAoC;AACpC,mCAAuC;AACvC,iCAA4C;AAC5C,mDAAgD;AAChD,oCAA2C;AAE3C,qCAA+C;AAG/C,MAAa,YAAY;IACD;IAApB,YAAoB,IAA2B;QAA3B,SAAI,GAAJ,IAAI,CAAuB;IAAG,CAAC;IAEnD,QAAQ;QACJ,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YAChD,MAAM,MAAM,GAAG,EAAS,CAAA;YACxB,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAChB,MAAM,CAAC,QAAQ,GAAG;oBACd,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG;iBAC3B,CAAA;YACL,CAAC;YACD,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBACd,MAAM,CAAC,MAAM,GAAG;oBACZ,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG;iBACzB,CAAA;YACL,CAAC;YACD,IAAI,CAAC,IAAA,gBAAO,EAAC,MAAM,CAAC,EAAE,CAAC;gBACnB,OAAO,MAAM,CAAA;YACjB,CAAC;YACD,OAAO,SAAS,CAAA;QACpB,CAAC,CAAC,CAAA;QAEF,OAAO,IAAA,cAAK,EAAC,EAAE,EAAE,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,CAAA;IAChD,CAAC;CACJ;AAxBD,oCAwBC;AAED,MAAa,aAAa;IACb,YAAY,CAA6C;IACzD,gBAAgB,CAAgC;
|
|
1
|
+
{"version":3,"file":"objects.js","sourceRoot":"","sources":["../../src/resources/objects.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,8 +14,11 @@ export interface ReqLimit<Unit extends string = string> {
|
|
|
14
14
|
readonly limit?: UnitValue<Unit>;
|
|
15
15
|
}
|
|
16
16
|
export type InputReqLimit<Unit extends string> = InputReqLimitString<Unit> | InputIdenticalReqLimitString<Unit> | InputReqLimitObject<Unit> | InputReqLimitArray<Unit>;
|
|
17
|
+
type CustomResource = `${string}/${string}`;
|
|
17
18
|
export type mt_Resource_Input_Map<ResourceUnit extends mt_Resource_Unit_Map<ResourceUnit>> = {
|
|
18
19
|
[K in keyof ResourceUnit]: InputReqLimit<ResourceUnit[K]>;
|
|
20
|
+
} & {
|
|
21
|
+
[K in CustomResource]?: InputReqLimit<string>;
|
|
19
22
|
};
|
|
20
23
|
export {};
|
|
21
24
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/resources/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AACrD,MAAM,MAAM,WAAW,CAAC,IAAI,SAAS,MAAM,IAAI,GAAG,MAAM,GAAG,IAAI,EAAE,GAAG,GAAG,CAAA;AAEvE,MAAM,WAAW,mBAAmB,CAAC,IAAI,SAAS,MAAM;IACpD,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,CAAA;IACnC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,CAAA;CACpC;AACD,MAAM,MAAM,kBAAkB,CAAC,IAAI,SAAS,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAA;AAC5F,MAAM,MAAM,oBAAoB,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAA;AAE7D,KAAK,MAAM,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,CAAA;AAC7B,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS,MAAM,IAC5C,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,CAAA;AAC5D,MAAM,MAAM,4BAA4B,CAAC,CAAC,SAAS,MAAM,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAA;AACjF,MAAM,WAAW,QAAQ,CAAC,IAAI,SAAS,MAAM,GAAG,MAAM;IAClD,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,CAAA;IAClC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,CAAA;CACnC;AACD,MAAM,MAAM,aAAa,CAAC,IAAI,SAAS,MAAM,IACvC,mBAAmB,CAAC,IAAI,CAAC,GACzB,4BAA4B,CAAC,IAAI,CAAC,GAClC,mBAAmB,CAAC,IAAI,CAAC,GACzB,kBAAkB,CAAC,IAAI,CAAC,CAAA;AAC9B,MAAM,MAAM,qBAAqB,CAAC,YAAY,SAAS,oBAAoB,CAAC,YAAY,CAAC,IAAI;KACxF,CAAC,IAAI,MAAM,YAAY,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;CAC5D,CAAA"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/resources/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AACrD,MAAM,MAAM,WAAW,CAAC,IAAI,SAAS,MAAM,IAAI,GAAG,MAAM,GAAG,IAAI,EAAE,GAAG,GAAG,CAAA;AAEvE,MAAM,WAAW,mBAAmB,CAAC,IAAI,SAAS,MAAM;IACpD,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,CAAA;IACnC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,CAAA;CACpC;AACD,MAAM,MAAM,kBAAkB,CAAC,IAAI,SAAS,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAA;AAC5F,MAAM,MAAM,oBAAoB,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAA;AAE7D,KAAK,MAAM,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,CAAA;AAC7B,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS,MAAM,IAC5C,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,CAAA;AAC5D,MAAM,MAAM,4BAA4B,CAAC,CAAC,SAAS,MAAM,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAA;AACjF,MAAM,WAAW,QAAQ,CAAC,IAAI,SAAS,MAAM,GAAG,MAAM;IAClD,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,CAAA;IAClC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,CAAA;CACnC;AACD,MAAM,MAAM,aAAa,CAAC,IAAI,SAAS,MAAM,IACvC,mBAAmB,CAAC,IAAI,CAAC,GACzB,4BAA4B,CAAC,IAAI,CAAC,GAClC,mBAAmB,CAAC,IAAI,CAAC,GACzB,kBAAkB,CAAC,IAAI,CAAC,CAAA;AAC9B,KAAK,cAAc,GAAG,GAAG,MAAM,IAAI,MAAM,EAAE,CAAA;AAE3C,MAAM,MAAM,qBAAqB,CAAC,YAAY,SAAS,oBAAoB,CAAC,YAAY,CAAC,IAAI;KACxF,CAAC,IAAI,MAAM,YAAY,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;CAC5D,GAAG;KACC,CAAC,IAAI,cAAc,CAAC,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC;CAChD,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Set } from "immutable";
|
|
1
|
+
import type { Set } from "immutable";
|
|
2
2
|
import { type Parjser } from "parjs";
|
|
3
3
|
export declare class UnitValue<Unit extends string = string> {
|
|
4
4
|
readonly unit: Unit;
|
|
@@ -6,14 +6,25 @@ export declare class UnitValue<Unit extends string = string> {
|
|
|
6
6
|
readonly type: string;
|
|
7
7
|
constructor(unit: Unit, value: number, type: string);
|
|
8
8
|
get str(): string;
|
|
9
|
+
get val(): string | number;
|
|
9
10
|
toString(): string;
|
|
10
11
|
}
|
|
11
|
-
export declare class UnitParser<const Unit extends string = string> {
|
|
12
|
-
|
|
13
|
-
private readonly _units;
|
|
12
|
+
export declare abstract class UnitParser<const Unit extends string = string> {
|
|
13
|
+
protected readonly _unitType: string;
|
|
14
14
|
readonly parser: Parjser<UnitValue<Unit>>;
|
|
15
|
-
|
|
15
|
+
protected abstract _validate(unit: string): asserts unit is Unit;
|
|
16
|
+
constructor(_unitType: string);
|
|
16
17
|
parse: (input: `${number}${Unit}`) => UnitValue<Unit>;
|
|
17
|
-
|
|
18
|
+
}
|
|
19
|
+
export declare class AnyUnitParser extends UnitParser<string> {
|
|
20
|
+
constructor();
|
|
21
|
+
_validate(_unit: string): void;
|
|
22
|
+
static make(): AnyUnitParser;
|
|
23
|
+
}
|
|
24
|
+
export declare class SetUnitParser<const Unit extends string = string> extends UnitParser<Unit> {
|
|
25
|
+
private readonly _units;
|
|
26
|
+
constructor(unitType: string, _units: Set<Unit>);
|
|
27
|
+
_validate(unit: string): asserts unit is Unit;
|
|
28
|
+
static make<const Unit extends string>(unitType: string, units: Set<Unit>): SetUnitParser<Unit>;
|
|
18
29
|
}
|
|
19
30
|
//# sourceMappingURL=unit-parser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unit-parser.d.ts","sourceRoot":"","sources":["../../src/units/unit-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"unit-parser.d.ts","sourceRoot":"","sources":["../../src/units/unit-parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAe,KAAK,OAAO,EAAE,MAAM,OAAO,CAAA;AAajD,qBAAa,SAAS,CAAC,IAAI,SAAS,MAAM,GAAG,MAAM;IAE3C,QAAQ,CAAC,IAAI,EAAE,IAAI;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM;gBAFZ,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM;IAGzB,IAAI,GAAG,WAEN;IAED,IAAI,GAAG,oBAKN;IAED,QAAQ;CAGX;AAED,8BAAsB,UAAU,CAAC,KAAK,CAAC,IAAI,SAAS,MAAM,GAAG,MAAM;IAGnD,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM;IAFhD,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAA;IACzC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI;gBACjC,SAAS,EAAE,MAAM;IAUhD,KAAK,GAAI,OAAO,GAAG,MAAM,GAAG,IAAI,EAAE,qBASjC;CACJ;AAED,qBAAa,aAAc,SAAQ,UAAU,CAAC,MAAM,CAAC;;IAKjD,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI9B,MAAM,CAAC,IAAI;CAGd;AAED,qBAAa,aAAa,CAAC,KAAK,CAAC,IAAI,SAAS,MAAM,GAAG,MAAM,CAAE,SAAQ,UAAU,CAAC,IAAI,CAAC;IAG/E,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADvB,QAAQ,EAAE,MAAM,EACC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC;IAKtC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI;IAM7C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,SAAS,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC;CAG5E"}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.UnitParser = exports.UnitValue = void 0;
|
|
3
|
+
exports.SetUnitParser = exports.AnyUnitParser = exports.UnitParser = exports.UnitValue = void 0;
|
|
4
4
|
const parjs_1 = require("parjs");
|
|
5
5
|
const combinators_1 = require("parjs/combinators");
|
|
6
6
|
const error_1 = require("../error");
|
|
7
|
-
const pUnit = (0, parjs_1.letter)().pipe((0, combinators_1.
|
|
7
|
+
const pUnit = (0, parjs_1.letter)().pipe((0, combinators_1.many)(), (0, combinators_1.stringify)());
|
|
8
8
|
const pValueUnit = (0, parjs_1.int)().pipe((0, combinators_1.then)(pUnit), (0, combinators_1.map)(arr => {
|
|
9
9
|
const [value, unit] = arr;
|
|
10
10
|
return { value, unit };
|
|
11
11
|
}));
|
|
12
|
+
// TODO: Simplify unit parser to allow for arbitrary resources/units
|
|
12
13
|
class UnitValue {
|
|
13
14
|
unit;
|
|
14
15
|
value;
|
|
@@ -21,39 +22,65 @@ class UnitValue {
|
|
|
21
22
|
get str() {
|
|
22
23
|
return `${this.value}${this.unit}`;
|
|
23
24
|
}
|
|
25
|
+
get val() {
|
|
26
|
+
if (!this.unit) {
|
|
27
|
+
return +this.value;
|
|
28
|
+
}
|
|
29
|
+
return this.str;
|
|
30
|
+
}
|
|
24
31
|
toString() {
|
|
25
32
|
return this.str;
|
|
26
33
|
}
|
|
27
34
|
}
|
|
28
35
|
exports.UnitValue = UnitValue;
|
|
29
36
|
class UnitParser {
|
|
30
|
-
|
|
31
|
-
_units;
|
|
37
|
+
_unitType;
|
|
32
38
|
parser;
|
|
33
|
-
constructor(
|
|
34
|
-
this.
|
|
35
|
-
this._units = _units;
|
|
39
|
+
constructor(_unitType) {
|
|
40
|
+
this._unitType = _unitType;
|
|
36
41
|
this.parser = pValueUnit.pipe((0, combinators_1.map)(({ value, unit }) => {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
throw new error_1.InstrumentsError(`Unit ${unit} is not a valid unit of type ${this.unitType}`);
|
|
40
|
-
}
|
|
41
|
-
return new UnitValue(unit, value, this.unitType);
|
|
42
|
+
this._validate(unit);
|
|
43
|
+
return new UnitValue(unit, value, this._unitType);
|
|
42
44
|
}));
|
|
43
45
|
}
|
|
44
46
|
parse = (input) => {
|
|
45
47
|
const pUnitValue = this.parser;
|
|
46
48
|
const result = pUnitValue.parse(input);
|
|
47
49
|
if (result.kind !== "OK") {
|
|
48
|
-
throw new error_1.InstrumentsError(`Failed to parse ${this.
|
|
50
|
+
throw new error_1.InstrumentsError(`Failed to parse ${this._unitType}`, {
|
|
49
51
|
more: result.trace.toString()
|
|
50
52
|
});
|
|
51
53
|
}
|
|
52
54
|
return result.value;
|
|
53
55
|
};
|
|
56
|
+
}
|
|
57
|
+
exports.UnitParser = UnitParser;
|
|
58
|
+
class AnyUnitParser extends UnitParser {
|
|
59
|
+
constructor() {
|
|
60
|
+
super("any");
|
|
61
|
+
}
|
|
62
|
+
_validate(_unit) {
|
|
63
|
+
// Accept any unit
|
|
64
|
+
}
|
|
65
|
+
static make() {
|
|
66
|
+
return new AnyUnitParser();
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
exports.AnyUnitParser = AnyUnitParser;
|
|
70
|
+
class SetUnitParser extends UnitParser {
|
|
71
|
+
_units;
|
|
72
|
+
constructor(unitType, _units) {
|
|
73
|
+
super(unitType);
|
|
74
|
+
this._units = _units;
|
|
75
|
+
}
|
|
76
|
+
_validate(unit) {
|
|
77
|
+
if (!this._units.has(unit)) {
|
|
78
|
+
throw new error_1.InstrumentsError(`Unit ${unit} is not a valid unit of type ${this._unitType}`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
54
81
|
static make(unitType, units) {
|
|
55
|
-
return new
|
|
82
|
+
return new SetUnitParser(unitType, units);
|
|
56
83
|
}
|
|
57
84
|
}
|
|
58
|
-
exports.
|
|
85
|
+
exports.SetUnitParser = SetUnitParser;
|
|
59
86
|
//# sourceMappingURL=unit-parser.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unit-parser.js","sourceRoot":"","sources":["../../src/units/unit-parser.ts"],"names":[],"mappings":";;;AACA,iCAAiD;AACjD,
|
|
1
|
+
{"version":3,"file":"unit-parser.js","sourceRoot":"","sources":["../../src/units/unit-parser.ts"],"names":[],"mappings":"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"}
|
package/dist/units/units.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SetUnitParser } from "./unit-parser";
|
|
2
2
|
export type G = `${number}G`;
|
|
3
3
|
export declare const G: (n: number) => G;
|
|
4
4
|
export type M = `${number}M`;
|
|
@@ -30,8 +30,8 @@ export declare namespace Unit {
|
|
|
30
30
|
type Cpu = m;
|
|
31
31
|
type Time = m | h | d | s | ms;
|
|
32
32
|
type Any = Data | Cpu | Time;
|
|
33
|
-
const Cpu:
|
|
34
|
-
const Data:
|
|
35
|
-
const Time:
|
|
33
|
+
const Cpu: SetUnitParser<"m">;
|
|
34
|
+
const Data: SetUnitParser<"M" | "G" | "T" | "K" | "Mi" | "Gi" | "Ki">;
|
|
35
|
+
const Time: SetUnitParser<"d" | "h" | "m" | "s" | "ms">;
|
|
36
36
|
}
|
|
37
37
|
//# sourceMappingURL=units.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"units.d.ts","sourceRoot":"","sources":["../../src/units/units.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"units.d.ts","sourceRoot":"","sources":["../../src/units/units.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAE7C,MAAM,MAAM,CAAC,GAAG,GAAG,MAAM,GAAG,CAAA;AAC5B,eAAO,MAAM,CAAC,GAAI,GAAG,MAAM,KAAgB,CAAC,CAAA;AAE5C,MAAM,MAAM,CAAC,GAAG,GAAG,MAAM,GAAG,CAAA;AAC5B,eAAO,MAAM,CAAC,GAAI,GAAG,MAAM,KAAgB,CAAC,CAAA;AAE5C,MAAM,MAAM,CAAC,GAAG,GAAG,MAAM,GAAG,CAAA;AAC5B,eAAO,MAAM,CAAC,GAAI,GAAG,MAAM,KAAgB,CAAC,CAAA;AAE5C,MAAM,MAAM,CAAC,GAAG,GAAG,MAAM,GAAG,CAAA;AAC5B,eAAO,MAAM,CAAC,GAAI,GAAG,MAAM,KAAgB,CAAC,CAAA;AAE5C,MAAM,MAAM,EAAE,GAAG,GAAG,MAAM,IAAI,CAAA;AAC9B,eAAO,MAAM,EAAE,GAAI,GAAG,MAAM,KAAiB,EAAE,CAAA;AAE/C,MAAM,MAAM,EAAE,GAAG,GAAG,MAAM,IAAI,CAAA;AAC9B,eAAO,MAAM,EAAE,GAAI,GAAG,MAAM,KAAiB,EAAE,CAAA;AAE/C,MAAM,MAAM,EAAE,GAAG,GAAG,MAAM,IAAI,CAAA;AAC9B,eAAO,MAAM,EAAE,GAAI,GAAG,MAAM,KAAiB,EAAE,CAAA;AAE/C,MAAM,MAAM,CAAC,GAAG,GAAG,MAAM,GAAG,CAAA;AAC5B,eAAO,MAAM,CAAC,GAAI,GAAG,MAAM,KAAgB,CAAC,CAAA;AAE5C,MAAM,MAAM,CAAC,GAAG,GAAG,MAAM,GAAG,CAAA;AAC5B,eAAO,MAAM,CAAC,GAAI,GAAG,MAAM,KAAgB,CAAC,CAAA;AAE5C,MAAM,MAAM,CAAC,GAAG,GAAG,MAAM,GAAG,CAAA;AAC5B,eAAO,MAAM,CAAC,GAAI,GAAG,MAAM,KAAqB,CAAC,CAAA;AAEjD,MAAM,MAAM,CAAC,GAAG,GAAG,MAAM,GAAG,CAAA;AAC5B,eAAO,MAAM,CAAC,GAAI,GAAG,MAAM,KAAgB,CAAC,CAAA;AAE5C,MAAM,MAAM,EAAE,GAAG,GAAG,MAAM,IAAI,CAAA;AAC9B,eAAO,MAAM,EAAE,GAAI,GAAG,MAAM,KAAiB,EAAE,CAAA;AAE/C,MAAM,WAAW,cAAc,CAAC,IAAI,SAAS,MAAM;CAAI;AAEvD,yBAAiB,IAAI,CAAC;IAClB,KAAY,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAA;IAC/C,KAAY,GAAG,GAAG,CAAC,CAAA;IACnB,KAAY,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAA;IACrC,KAAY,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,CAAA;IAE5B,MAAM,GAAG,oBAAwC,CAAA;IAEjD,MAAM,IAAI,2DAA0E,CAAA;IAEpF,MAAM,IAAI,6CAA8D,CAAA;CAClF"}
|
package/dist/units/units.js
CHANGED
|
@@ -29,8 +29,8 @@ const ms = (n) => `${n}ms`;
|
|
|
29
29
|
exports.ms = ms;
|
|
30
30
|
var Unit;
|
|
31
31
|
(function (Unit) {
|
|
32
|
-
Unit.Cpu = unit_parser_1.
|
|
33
|
-
Unit.Data = unit_parser_1.
|
|
34
|
-
Unit.Time = unit_parser_1.
|
|
32
|
+
Unit.Cpu = unit_parser_1.SetUnitParser.make("cpu", (0, immutable_1.Set)(["m"]));
|
|
33
|
+
Unit.Data = unit_parser_1.SetUnitParser.make("data", (0, immutable_1.Set)(["M", "G", "T", "K", "Mi", "Gi", "Ki"]));
|
|
34
|
+
Unit.Time = unit_parser_1.SetUnitParser.make("time", (0, immutable_1.Set)(["m", "h", "d", "s", "ms"]));
|
|
35
35
|
})(Unit || (exports.Unit = Unit = {}));
|
|
36
36
|
//# sourceMappingURL=units.js.map
|
package/dist/units/units.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"units.js","sourceRoot":"","sources":["../../src/units/units.ts"],"names":[],"mappings":";;;AAAA,yCAA+B;AAC/B,+
|
|
1
|
+
{"version":3,"file":"units.js","sourceRoot":"","sources":["../../src/units/units.ts"],"names":[],"mappings":";;;AAAA,yCAA+B;AAC/B,+CAA6C;AAGtC,MAAM,CAAC,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,CAAC,GAAQ,CAAA;AAA/B,QAAA,CAAC,KAA8B;AAGrC,MAAM,CAAC,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,CAAC,GAAQ,CAAA;AAA/B,QAAA,CAAC,KAA8B;AAGrC,MAAM,CAAC,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,CAAC,GAAQ,CAAA;AAA/B,QAAA,CAAC,KAA8B;AAGrC,MAAM,CAAC,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,CAAC,GAAQ,CAAA;AAA/B,QAAA,CAAC,KAA8B;AAGrC,MAAM,EAAE,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,CAAC,IAAU,CAAA;AAAlC,QAAA,EAAE,MAAgC;AAGxC,MAAM,EAAE,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,CAAC,IAAU,CAAA;AAAlC,QAAA,EAAE,MAAgC;AAGxC,MAAM,EAAE,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,CAAC,IAAU,CAAA;AAAlC,QAAA,EAAE,MAAgC;AAGxC,MAAM,CAAC,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,CAAC,GAAQ,CAAA;AAA/B,QAAA,CAAC,KAA8B;AAGrC,MAAM,CAAC,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,CAAC,GAAQ,CAAA;AAA/B,QAAA,CAAC,KAA8B;AAGrC,MAAM,CAAC,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAQ,CAAA;AAApC,QAAA,CAAC,KAAmC;AAG1C,MAAM,CAAC,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,CAAC,GAAQ,CAAA;AAA/B,QAAA,CAAC,KAA8B;AAGrC,MAAM,EAAE,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,CAAC,IAAU,CAAA;AAAlC,QAAA,EAAE,MAAgC;AAI/C,IAAiB,IAAI,CAWpB;AAXD,WAAiB,IAAI;IAMJ,QAAG,GAAG,2BAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAA,eAAG,EAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IAE3C,SAAI,GAAG,2BAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAA,eAAG,EAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;IAE9E,SAAI,GAAG,2BAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAA,eAAG,EAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;AACnF,CAAC,EAXgB,IAAI,oBAAJ,IAAI,QAWpB"}
|
package/package.json
CHANGED
package/src/resources/objects.ts
CHANGED
|
@@ -4,6 +4,7 @@ import { string, type Parjser } from "parjs"
|
|
|
4
4
|
import { mapConst, or } from "parjs/combinators"
|
|
5
5
|
import { InstrumentsError } from "../error"
|
|
6
6
|
import type { UnitParser, UnitValue } from "../units"
|
|
7
|
+
import { AnyUnitParser } from "../units/unit-parser"
|
|
7
8
|
import { createResourceParser } from "./parser"
|
|
8
9
|
import type { mt_Resource_Input_Map, mt_Resource_Unit_Map, ReqLimit } from "./types"
|
|
9
10
|
|
|
@@ -15,12 +16,12 @@ export class ResourcesMap<const RM extends mt_Resource_Unit_Map<RM>> {
|
|
|
15
16
|
const result = {} as any
|
|
16
17
|
if (value.request) {
|
|
17
18
|
result.requests = {
|
|
18
|
-
[key]: value.request.
|
|
19
|
+
[key]: value.request.val
|
|
19
20
|
}
|
|
20
21
|
}
|
|
21
22
|
if (value.limit) {
|
|
22
23
|
result.limits = {
|
|
23
|
-
[key]: value.limit.
|
|
24
|
+
[key]: value.limit.val
|
|
24
25
|
}
|
|
25
26
|
}
|
|
26
27
|
if (!isEmpty(result)) {
|
|
@@ -36,6 +37,8 @@ export class ResourcesMap<const RM extends mt_Resource_Unit_Map<RM>> {
|
|
|
36
37
|
export class ResourcesSpec<const RM extends mt_Resource_Unit_Map<RM>> {
|
|
37
38
|
readonly _unitParsers: Map<string, Parjser<UnitValue | undefined>>
|
|
38
39
|
readonly _reqLimitParsers: Map<string, Parjser<ReqLimit>>
|
|
40
|
+
readonly _anyUnitParser = AnyUnitParser.make()
|
|
41
|
+
readonly _anyReqLimitParser = createResourceParser(this._anyUnitParser)
|
|
39
42
|
constructor(_unitMap: Map<string, UnitParser>) {
|
|
40
43
|
const questionMarkParser = string("?").pipe(mapConst(undefined))
|
|
41
44
|
this._unitParsers = _unitMap.map(parser => parser.parser.pipe(or(questionMarkParser)))
|
|
@@ -53,7 +56,7 @@ export class ResourcesSpec<const RM extends mt_Resource_Unit_Map<RM>> {
|
|
|
53
56
|
private _parseReqLimit(resource: string, input: string): ReqLimit {
|
|
54
57
|
const pReqLimit = this._reqLimitParsers.get(resource)
|
|
55
58
|
if (!pReqLimit) {
|
|
56
|
-
|
|
59
|
+
return this._anyReqLimitParser.parse(input).value
|
|
57
60
|
}
|
|
58
61
|
return pReqLimit.parse(input).value
|
|
59
62
|
}
|
|
@@ -63,7 +66,7 @@ export class ResourcesSpec<const RM extends mt_Resource_Unit_Map<RM>> {
|
|
|
63
66
|
const allKeys = Set([...Object.keys(input), ...this._unitParsers.keys()]).toMap()
|
|
64
67
|
const map = allKeys.map((_, key) => {
|
|
65
68
|
const value = input[key as keyof R]
|
|
66
|
-
const pUnitValue = this._unitParsers.get(key)
|
|
69
|
+
const pUnitValue = this._unitParsers.get(key) ?? this._anyUnitParser.parser
|
|
67
70
|
if (!pUnitValue) {
|
|
68
71
|
throw new InstrumentsError(`No parser found for ${String(key)}`)
|
|
69
72
|
}
|
package/src/resources/types.ts
CHANGED
|
@@ -21,6 +21,10 @@ export type InputReqLimit<Unit extends string> =
|
|
|
21
21
|
| InputIdenticalReqLimitString<Unit>
|
|
22
22
|
| InputReqLimitObject<Unit>
|
|
23
23
|
| InputReqLimitArray<Unit>
|
|
24
|
+
type CustomResource = `${string}/${string}`
|
|
25
|
+
|
|
24
26
|
export type mt_Resource_Input_Map<ResourceUnit extends mt_Resource_Unit_Map<ResourceUnit>> = {
|
|
25
27
|
[K in keyof ResourceUnit]: InputReqLimit<ResourceUnit[K]>
|
|
28
|
+
} & {
|
|
29
|
+
[K in CustomResource]?: InputReqLimit<string>
|
|
26
30
|
}
|
package/src/units/unit-parser.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Set } from "immutable"
|
|
1
|
+
import type { Set } from "immutable"
|
|
2
2
|
import { int, letter, type Parjser } from "parjs"
|
|
3
|
-
import {
|
|
3
|
+
import { many, map, stringify, then } from "parjs/combinators"
|
|
4
4
|
import { InstrumentsError } from "../error"
|
|
5
|
-
const pUnit = letter().pipe(
|
|
5
|
+
const pUnit = letter().pipe(many(), stringify())
|
|
6
6
|
|
|
7
7
|
const pValueUnit = int().pipe(
|
|
8
8
|
then(pUnit),
|
|
@@ -11,6 +11,7 @@ const pValueUnit = int().pipe(
|
|
|
11
11
|
return { value, unit }
|
|
12
12
|
})
|
|
13
13
|
)
|
|
14
|
+
// TODO: Simplify unit parser to allow for arbitrary resources/units
|
|
14
15
|
export class UnitValue<Unit extends string = string> {
|
|
15
16
|
constructor(
|
|
16
17
|
readonly unit: Unit,
|
|
@@ -22,26 +23,27 @@ export class UnitValue<Unit extends string = string> {
|
|
|
22
23
|
return `${this.value}${this.unit}`
|
|
23
24
|
}
|
|
24
25
|
|
|
26
|
+
get val() {
|
|
27
|
+
if (!this.unit) {
|
|
28
|
+
return +this.value
|
|
29
|
+
}
|
|
30
|
+
return this.str
|
|
31
|
+
}
|
|
32
|
+
|
|
25
33
|
toString() {
|
|
26
34
|
return this.str
|
|
27
35
|
}
|
|
28
36
|
}
|
|
29
37
|
|
|
30
|
-
export class UnitParser<const Unit extends string = string> {
|
|
38
|
+
export abstract class UnitParser<const Unit extends string = string> {
|
|
31
39
|
readonly parser: Parjser<UnitValue<Unit>>
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
private readonly _units: Set<Unit>
|
|
35
|
-
) {
|
|
40
|
+
protected abstract _validate(unit: string): asserts unit is Unit
|
|
41
|
+
constructor(protected readonly _unitType: string) {
|
|
36
42
|
this.parser = pValueUnit.pipe(
|
|
37
43
|
map(({ value, unit }) => {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
`Unit ${unit} is not a valid unit of type ${this.unitType}`
|
|
42
|
-
)
|
|
43
|
-
}
|
|
44
|
-
return new UnitValue<Unit>(unit as any, value, this.unitType)
|
|
44
|
+
this._validate(unit)
|
|
45
|
+
|
|
46
|
+
return new UnitValue<Unit>(unit as any, value, this._unitType)
|
|
45
47
|
})
|
|
46
48
|
)
|
|
47
49
|
}
|
|
@@ -50,14 +52,43 @@ export class UnitParser<const Unit extends string = string> {
|
|
|
50
52
|
const pUnitValue = this.parser
|
|
51
53
|
const result = pUnitValue.parse(input)
|
|
52
54
|
if (result.kind !== "OK") {
|
|
53
|
-
throw new InstrumentsError(`Failed to parse ${this.
|
|
55
|
+
throw new InstrumentsError(`Failed to parse ${this._unitType}`, {
|
|
54
56
|
more: result.trace.toString()
|
|
55
57
|
})
|
|
56
58
|
}
|
|
57
59
|
return result.value
|
|
58
60
|
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export class AnyUnitParser extends UnitParser<string> {
|
|
64
|
+
constructor() {
|
|
65
|
+
super("any")
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
_validate(_unit: string): void {
|
|
69
|
+
// Accept any unit
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
static make() {
|
|
73
|
+
return new AnyUnitParser()
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export class SetUnitParser<const Unit extends string = string> extends UnitParser<Unit> {
|
|
78
|
+
constructor(
|
|
79
|
+
unitType: string,
|
|
80
|
+
private readonly _units: Set<Unit>
|
|
81
|
+
) {
|
|
82
|
+
super(unitType)
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
_validate(unit: string): asserts unit is Unit {
|
|
86
|
+
if (!this._units.has(unit as Unit)) {
|
|
87
|
+
throw new InstrumentsError(`Unit ${unit} is not a valid unit of type ${this._unitType}`)
|
|
88
|
+
}
|
|
89
|
+
}
|
|
59
90
|
|
|
60
91
|
static make<const Unit extends string>(unitType: string, units: Set<Unit>) {
|
|
61
|
-
return new
|
|
92
|
+
return new SetUnitParser<Unit>(unitType, units)
|
|
62
93
|
}
|
|
63
94
|
}
|
package/src/units/units.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Set } from "immutable"
|
|
2
|
-
import {
|
|
2
|
+
import { SetUnitParser } from "./unit-parser"
|
|
3
3
|
|
|
4
4
|
export type G = `${number}G`
|
|
5
5
|
export const G = (n: number) => `${n}G` as G
|
|
@@ -45,9 +45,9 @@ export namespace Unit {
|
|
|
45
45
|
export type Time = m | h | d | s | ms
|
|
46
46
|
export type Any = Data | Cpu | Time
|
|
47
47
|
|
|
48
|
-
export const Cpu =
|
|
48
|
+
export const Cpu = SetUnitParser.make("cpu", Set(["m"]))
|
|
49
49
|
|
|
50
|
-
export const Data =
|
|
50
|
+
export const Data = SetUnitParser.make("data", Set(["M", "G", "T", "K", "Mi", "Gi", "Ki"]))
|
|
51
51
|
|
|
52
|
-
export const Time =
|
|
52
|
+
export const Time = SetUnitParser.make("time", Set(["m", "h", "d", "s", "ms"]))
|
|
53
53
|
}
|