@schedule1-tools/mixer 0.2.3 → 0.2.5
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 +112 -46
- package/dist/core/effectSet.d.ts +1 -27
- package/dist/core/effectSet.d.ts.map +1 -0
- package/dist/core/effectSet.js +1 -27
- package/dist/core/effectSet.js.map +1 -0
- package/dist/core/mixer.d.ts +1 -11
- package/dist/core/mixer.d.ts.map +1 -0
- package/dist/core/mixer.js +6 -71
- package/dist/core/mixer.js.map +1 -0
- package/dist/data/effects.d.ts +3 -0
- package/dist/data/effects.d.ts.map +1 -0
- package/dist/data/effects.js +159 -148
- package/dist/data/effects.js.map +1 -0
- package/dist/data/products.d.ts +1 -0
- package/dist/data/products.d.ts.map +1 -0
- package/dist/data/products.js +16 -0
- package/dist/data/products.js.map +1 -0
- package/dist/data/rules.d.ts +1 -0
- package/dist/data/rules.d.ts.map +1 -0
- package/dist/data/rules.js +2 -2
- package/dist/data/rules.js.map +1 -0
- package/dist/data/substances.d.ts +1 -0
- package/dist/data/substances.d.ts.map +1 -0
- package/dist/data/substances.js +4 -3
- package/dist/data/substances.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -6
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +6 -3
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +1 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/encoding.d.ts +1 -16
- package/dist/utils/encoding.d.ts.map +1 -0
- package/dist/utils/encoding.js +7 -62
- package/dist/utils/encoding.js.map +1 -0
- package/package.json +42 -41
- package/dist/utils/lz.d.ts +0 -5
- package/dist/utils/lz.js +0 -177
package/dist/types.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export type EffectCode = 'Ag' | 'At' | 'Ba' | 'Be' | 'Ca' | 'Cd' | 'Cy' | 'Di' | 'El' | 'En' | 'Eu' | 'Ex' | 'Fc' | 'Fo' | 'Gi' | 'Gl' | 'Je' | 'La' | 'Lf' | 'Mu' | 'Pa' | 'Re' | 'Sc' | 'Se' | 'Sh' | 'Si' | 'Sl' | 'Sm' | 'Sn' | 'Sp' | 'To' | 'Tp' | 'Tt' | 'Zo';
|
|
2
|
-
export type Substance = 'Cuke' | 'Flu Medicine' | 'Gasoline' | 'Donut' | 'Energy Drink' | 'Mouth Wash' | 'Motor Oil' | 'Banana' | 'Chili' | 'Iodine' | 'Paracetamol' | '
|
|
3
|
-
export type Product = 'OG Kush' | 'Sour Diesel' | 'Green Crack' | 'Grandaddy Purple' | 'Meth' | 'Cocaine';
|
|
4
|
-
export type RankCode = '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | '10' | '11' | '12' | '13';
|
|
2
|
+
export type Substance = 'Cuke' | 'Flu Medicine' | 'Gasoline' | 'Donut' | 'Energy Drink' | 'Mouth Wash' | 'Motor Oil' | 'Banana' | 'Chili' | 'Iodine' | 'Paracetamol' | 'Viagor' | 'Horse Semen' | 'Mega Bean' | 'Addy' | 'Battery';
|
|
3
|
+
export type Product = 'OG Kush' | 'Sour Diesel' | 'Green Crack' | 'Grandaddy Purple' | 'Meth' | 'Cocaine' | 'Shrooms';
|
|
4
|
+
export type RankCode = '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | '10' | '11' | '12' | '13' | '14' | '15' | '16' | '17' | '18' | '19' | '20' | '21' | '22' | '23' | '24' | '25' | '26';
|
|
5
5
|
export interface EffectData {
|
|
6
6
|
name: string;
|
|
7
7
|
description: string;
|
|
@@ -20,6 +20,8 @@ export interface ProductData {
|
|
|
20
20
|
price: number;
|
|
21
21
|
effects: EffectCode[];
|
|
22
22
|
abbreviation: string;
|
|
23
|
+
addiction?: number;
|
|
24
|
+
rank: RankCode;
|
|
23
25
|
}
|
|
24
26
|
export interface EffectRule {
|
|
25
27
|
ifPresent: EffectCode[];
|
|
@@ -38,3 +40,4 @@ export interface MixState {
|
|
|
38
40
|
product: Product;
|
|
39
41
|
substances: Substance[];
|
|
40
42
|
}
|
|
43
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAClB,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,CAAC;AAET,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,cAAc,GACd,UAAU,GACV,OAAO,GACP,cAAc,GACd,YAAY,GACZ,WAAW,GACX,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,aAAa,GACb,QAAQ,GACR,aAAa,GACb,WAAW,GACX,MAAM,GACN,SAAS,CAAC;AAEd,MAAM,MAAM,OAAO,GACf,SAAS,GACT,aAAa,GACb,aAAa,GACb,kBAAkB,GAClB,MAAM,GACN,SAAS,GACT,SAAS,CAAC;AAEd,MAAM,MAAM,QAAQ,GAChB,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,CAAC;AAET,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,UAAU,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,QAAQ,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,UAAU,EAAE,CAAC;IACxB,YAAY,EAAE,UAAU,EAAE,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;CAClD;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,SAAS,EAAE,CAAC;CACzB"}
|
package/dist/types.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/dist/utils/encoding.d.ts
CHANGED
|
@@ -1,20 +1,5 @@
|
|
|
1
1
|
import type { MixState } from '../types';
|
|
2
|
-
/**
|
|
3
|
-
* Encode a mix state into a URL-safe string
|
|
4
|
-
* @param state - The mix state to encode
|
|
5
|
-
* @returns The URL-safe string
|
|
6
|
-
* @throws Error if the product type or any substance code is invalid
|
|
7
|
-
*/
|
|
8
2
|
export declare function encodeMixState(state: MixState): string;
|
|
9
|
-
/**
|
|
10
|
-
* Decode a mix state from a URL-safe string
|
|
11
|
-
* @param hash - The URL-safe string to decode
|
|
12
|
-
* @returns The decoded MixState or null if invalid
|
|
13
|
-
*/
|
|
14
3
|
export declare function decodeMixState(hash: string): MixState | null;
|
|
15
|
-
/**
|
|
16
|
-
* Migrates an old format mix hash to the new format
|
|
17
|
-
* @param legacyHash - The old format hash to migrate
|
|
18
|
-
* @returns The mix state in the new hash format, or null if migration failed
|
|
19
|
-
*/
|
|
20
4
|
export declare function migrateMixHash(legacyHash: string): Promise<string | null>;
|
|
5
|
+
//# sourceMappingURL=encoding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encoding.d.ts","sourceRoot":"","sources":["../../src/utils/encoding.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAsB,MAAM,UAAU,CAAC;AAa7D,wBAAgB,cAAc,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,CAqBtD;AAOD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAyC5D;AAOD,wBAAsB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmC/E"}
|
package/dist/utils/encoding.js
CHANGED
|
@@ -1,49 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
35
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
6
|
exports.encodeMixState = encodeMixState;
|
|
37
7
|
exports.decodeMixState = decodeMixState;
|
|
38
8
|
exports.migrateMixHash = migrateMixHash;
|
|
9
|
+
const lz_string_1 = __importDefault(require("lz-string"));
|
|
39
10
|
const products_1 = require("../data/products");
|
|
40
11
|
const substances_1 = require("../data/substances");
|
|
41
|
-
/**
|
|
42
|
-
* Encode a mix state into a URL-safe string
|
|
43
|
-
* @param state - The mix state to encode
|
|
44
|
-
* @returns The URL-safe string
|
|
45
|
-
* @throws Error if the product type or any substance code is invalid
|
|
46
|
-
*/
|
|
47
12
|
function encodeMixState(state) {
|
|
48
13
|
if (!products_1.products[state.product]) {
|
|
49
14
|
throw new Error(`Invalid product type: ${state.product}`);
|
|
@@ -63,11 +28,6 @@ function encodeMixState(state) {
|
|
|
63
28
|
const encoded = `${state.product}:${abbreviatedSubstances.join('')}`;
|
|
64
29
|
return toBase64Url(encoded);
|
|
65
30
|
}
|
|
66
|
-
/**
|
|
67
|
-
* Decode a mix state from a URL-safe string
|
|
68
|
-
* @param hash - The URL-safe string to decode
|
|
69
|
-
* @returns The decoded MixState or null if invalid
|
|
70
|
-
*/
|
|
71
31
|
function decodeMixState(hash) {
|
|
72
32
|
if (!hash || typeof hash !== 'string') {
|
|
73
33
|
return null;
|
|
@@ -102,15 +62,9 @@ function decodeMixState(hash) {
|
|
|
102
62
|
return null;
|
|
103
63
|
}
|
|
104
64
|
}
|
|
105
|
-
/**
|
|
106
|
-
* Migrates an old format mix hash to the new format
|
|
107
|
-
* @param legacyHash - The old format hash to migrate
|
|
108
|
-
* @returns The mix state in the new hash format, or null if migration failed
|
|
109
|
-
*/
|
|
110
65
|
async function migrateMixHash(legacyHash) {
|
|
111
66
|
try {
|
|
112
|
-
const
|
|
113
|
-
const jsonStr = LZString.decompressFromBase64(legacyHash);
|
|
67
|
+
const jsonStr = lz_string_1.default.decompressFromBase64(legacyHash);
|
|
114
68
|
if (!jsonStr)
|
|
115
69
|
return null;
|
|
116
70
|
const mixArr = JSON.parse(jsonStr);
|
|
@@ -137,15 +91,10 @@ async function migrateMixHash(legacyHash) {
|
|
|
137
91
|
}
|
|
138
92
|
return encodeMixState({ product: productId, substances: substanceIds });
|
|
139
93
|
}
|
|
140
|
-
catch
|
|
94
|
+
catch {
|
|
141
95
|
return null;
|
|
142
96
|
}
|
|
143
97
|
}
|
|
144
|
-
/**
|
|
145
|
-
* Convert a string to a URL-safe base64 string
|
|
146
|
-
* @param str - The string to convert
|
|
147
|
-
* @returns The URL-safe base64 string
|
|
148
|
-
*/
|
|
149
98
|
function toBase64Url(str) {
|
|
150
99
|
return Buffer.from(str, 'utf-8')
|
|
151
100
|
.toString('base64')
|
|
@@ -153,11 +102,6 @@ function toBase64Url(str) {
|
|
|
153
102
|
.replace(/\//g, '_')
|
|
154
103
|
.replace(/=/g, '');
|
|
155
104
|
}
|
|
156
|
-
/**
|
|
157
|
-
* Convert a URL-safe base64 string back to a regular string
|
|
158
|
-
* @param str - The URL-safe base64 string to convert
|
|
159
|
-
* @returns The regular string
|
|
160
|
-
*/
|
|
161
105
|
function fromBase64Url(str) {
|
|
162
106
|
if (typeof str !== 'string') {
|
|
163
107
|
throw new Error('Input must be a string');
|
|
@@ -167,3 +111,4 @@ function fromBase64Url(str) {
|
|
|
167
111
|
const padded = padding ? base64 + '='.repeat(4 - padding) : base64;
|
|
168
112
|
return Buffer.from(padded, 'base64').toString('utf-8');
|
|
169
113
|
}
|
|
114
|
+
//# sourceMappingURL=encoding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encoding.js","sourceRoot":"","sources":["../../src/utils/encoding.ts"],"names":[],"mappings":";;;;;AAaA,wCAqBC;AAOD,wCAyCC;AAOD,wCAmCC;AA1HD,0DAAiC;AAEjC,+CAA4C;AAC5C,mDAAwE;AAQxE,SAAgB,cAAc,CAAC,KAAe;IAC5C,IAAI,CAAC,mBAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,yBAAyB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACzC,IAAI,CAAC,uBAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,2BAA2B,SAAS,EAAE,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,MAAM,qBAAqB,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACvD,MAAM,IAAI,GAAG,uBAAU,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;QACxC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,EAAE,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,GAAG,KAAK,CAAC,OAAO,IAAI,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;IACrE,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC;AAC9B,CAAC;AAOD,SAAgB,cAAc,CAAC,IAAY;IACzC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEjC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,GAAG,KAAK,CAAC;QAEvC,IAAI,CAAC,OAAO,IAAI,CAAC,mBAAQ,CAAC,OAAkB,CAAC,EAAE,CAAC;YAC9C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,IAAI,GAAgB,EAAE,CAAC;QAE7B,IAAI,aAAa,EAAE,CAAC;YAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC9C,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;gBAC9B,MAAM,QAAQ,GAAG,mCAAsB,CAAC,IAAI,CAAC,CAAC;gBAE9C,IAAI,CAAC,QAAQ,IAAI,CAAC,uBAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACvC,OAAO,IAAI,CAAC;gBACd,CAAC;gBAED,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;QAED,OAAO;YACL,OAAO,EAAE,OAAkB;YAC3B,UAAU,EAAE,IAAI;SACjB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAOM,KAAK,UAAU,cAAc,CAAC,UAAkB;IACrD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,mBAAQ,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;QAC1D,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAE1B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAE1D,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAe,CAAC;QAC3C,IAAI,CAAC,mBAAQ,CAAC,SAAS,CAAC;YAAE,OAAO,IAAI,CAAC;QAEtC,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,uBAAU,CAAC,CAAC,MAAM,CAClD,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE;YACjB,IAAI,GAAG,CAAC,YAAY;gBAAE,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,EAAe,CAAC;YAC9D,OAAO,GAAG,CAAC;QACb,CAAC,EACD,EAA+B,CAChC,CAAC;QAEF,MAAM,YAAY,GAAgB,EAAE,CAAC;QACrC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACvC,KAAK,MAAM,WAAW,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;gBAC9C,MAAM,WAAW,GAAG,uBAAU,CAAC,WAAwB,CAAC;oBACtD,CAAC,CAAE,WAAyB;oBAC5B,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;gBAE5B,IAAI,WAAW;oBAAE,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;QAED,OAAO,cAAc,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;IAC1E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAOD,SAAS,WAAW,CAAC,GAAW;IAC9B,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC;SAC7B,QAAQ,CAAC,QAAQ,CAAC;SAClB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AACvB,CAAC;AAOD,SAAS,aAAa,CAAC,GAAW;IAChC,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACnE,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACzD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,41 +1,42 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@schedule1-tools/mixer",
|
|
3
|
-
"version": "0.2.
|
|
4
|
-
"description": "A package for calculating substance mixes in Schedule 1",
|
|
5
|
-
"main": "dist/index.js",
|
|
6
|
-
"types": "dist/index.d.ts",
|
|
7
|
-
"files": [
|
|
8
|
-
"dist"
|
|
9
|
-
],
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
"
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
"
|
|
33
|
-
},
|
|
34
|
-
"
|
|
35
|
-
|
|
36
|
-
"
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
"
|
|
40
|
-
}
|
|
41
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "@schedule1-tools/mixer",
|
|
3
|
+
"version": "0.2.5",
|
|
4
|
+
"description": "A package for calculating substance mixes in Schedule 1",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist"
|
|
9
|
+
],
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"test": "jest",
|
|
13
|
+
"test:coverage": "jest --coverage",
|
|
14
|
+
"prepublishOnly": "pnpm run test && pnpm run build",
|
|
15
|
+
"format": "prettier --write ."
|
|
16
|
+
},
|
|
17
|
+
"keywords": [
|
|
18
|
+
"schedule1"
|
|
19
|
+
],
|
|
20
|
+
"author": "Schedule1 Tools",
|
|
21
|
+
"license": "MIT",
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"lz-string": "^1.5.0"
|
|
24
|
+
},
|
|
25
|
+
"devDependencies": {
|
|
26
|
+
"@ianvs/prettier-plugin-sort-imports": "^4.4.1",
|
|
27
|
+
"@types/jest": "^29.5.14",
|
|
28
|
+
"@types/node": "^22.14.1",
|
|
29
|
+
"jest": "^29.7.0",
|
|
30
|
+
"prettier": "^3.5.3",
|
|
31
|
+
"ts-jest": "^29.3.2",
|
|
32
|
+
"typescript": "^5.8.3"
|
|
33
|
+
},
|
|
34
|
+
"repository": {
|
|
35
|
+
"type": "git",
|
|
36
|
+
"url": "https://github.com/schedule1-tools/mixer.git"
|
|
37
|
+
},
|
|
38
|
+
"bugs": {
|
|
39
|
+
"url": "https://github.com/schedule1-tools/mixer/issues"
|
|
40
|
+
},
|
|
41
|
+
"homepage": "https://github.com/schedule1-tools/mixer#readme"
|
|
42
|
+
}
|
package/dist/utils/lz.d.ts
DELETED
package/dist/utils/lz.js
DELETED
|
@@ -1,177 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.decompressFromBase64 = decompressFromBase64;
|
|
4
|
-
/**
|
|
5
|
-
* A minimal implementation of LZString's decompressFromBase64 function
|
|
6
|
-
* Based on the original LZ-string library but simplified for your specific use case
|
|
7
|
-
*/
|
|
8
|
-
function decompressFromBase64(input) {
|
|
9
|
-
if (!input)
|
|
10
|
-
return null;
|
|
11
|
-
// Convert from base64 to a format suitable for processing
|
|
12
|
-
const keyStrBase64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
|
|
13
|
-
const baseReverseDic = {};
|
|
14
|
-
for (let i = 0; i < keyStrBase64.length; i++) {
|
|
15
|
-
baseReverseDic[keyStrBase64[i]] = i;
|
|
16
|
-
}
|
|
17
|
-
// Decompress the input
|
|
18
|
-
return _decompress(input.length, 32, (index) => {
|
|
19
|
-
return baseReverseDic[input.charAt(index)];
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Core decompression function
|
|
24
|
-
*/
|
|
25
|
-
function _decompress(length, resetValue, getNextValue) {
|
|
26
|
-
const dictionary = [];
|
|
27
|
-
let enlargeIn = 4;
|
|
28
|
-
let dictSize = 4;
|
|
29
|
-
let numBits = 3;
|
|
30
|
-
let result = '';
|
|
31
|
-
let entry = '';
|
|
32
|
-
let w = '';
|
|
33
|
-
let c = '';
|
|
34
|
-
let errorCount = 0;
|
|
35
|
-
let bits = 0;
|
|
36
|
-
let maxpower = Math.pow(2, 2);
|
|
37
|
-
let power = 1;
|
|
38
|
-
let resb;
|
|
39
|
-
let data = { val: getNextValue(0), position: resetValue, index: 1 };
|
|
40
|
-
for (let i = 0; i < 3; i++) {
|
|
41
|
-
dictionary[i] = String(i);
|
|
42
|
-
}
|
|
43
|
-
bits = 0;
|
|
44
|
-
maxpower = Math.pow(2, numBits);
|
|
45
|
-
power = 1;
|
|
46
|
-
while (power != maxpower) {
|
|
47
|
-
resb = data.val & data.position;
|
|
48
|
-
data.position >>= 1;
|
|
49
|
-
if (data.position == 0) {
|
|
50
|
-
data.position = resetValue;
|
|
51
|
-
data.val = getNextValue(data.index++);
|
|
52
|
-
}
|
|
53
|
-
bits |= (resb > 0 ? 1 : 0) * power;
|
|
54
|
-
power <<= 1;
|
|
55
|
-
}
|
|
56
|
-
switch (bits) {
|
|
57
|
-
case 0:
|
|
58
|
-
bits = 0;
|
|
59
|
-
maxpower = Math.pow(2, 8);
|
|
60
|
-
power = 1;
|
|
61
|
-
while (power != maxpower) {
|
|
62
|
-
resb = data.val & data.position;
|
|
63
|
-
data.position >>= 1;
|
|
64
|
-
if (data.position == 0) {
|
|
65
|
-
data.position = resetValue;
|
|
66
|
-
data.val = getNextValue(data.index++);
|
|
67
|
-
}
|
|
68
|
-
bits |= (resb > 0 ? 1 : 0) * power;
|
|
69
|
-
power <<= 1;
|
|
70
|
-
}
|
|
71
|
-
c = String.fromCharCode(bits);
|
|
72
|
-
break;
|
|
73
|
-
case 1:
|
|
74
|
-
bits = 0;
|
|
75
|
-
maxpower = Math.pow(2, 16);
|
|
76
|
-
power = 1;
|
|
77
|
-
while (power != maxpower) {
|
|
78
|
-
resb = data.val & data.position;
|
|
79
|
-
data.position >>= 1;
|
|
80
|
-
if (data.position == 0) {
|
|
81
|
-
data.position = resetValue;
|
|
82
|
-
data.val = getNextValue(data.index++);
|
|
83
|
-
}
|
|
84
|
-
bits |= (resb > 0 ? 1 : 0) * power;
|
|
85
|
-
power <<= 1;
|
|
86
|
-
}
|
|
87
|
-
c = String.fromCharCode(bits);
|
|
88
|
-
break;
|
|
89
|
-
case 2:
|
|
90
|
-
return '';
|
|
91
|
-
}
|
|
92
|
-
dictionary[3] = c;
|
|
93
|
-
w = c;
|
|
94
|
-
result = c;
|
|
95
|
-
while (true) {
|
|
96
|
-
if (data.index > length) {
|
|
97
|
-
return null;
|
|
98
|
-
}
|
|
99
|
-
bits = 0;
|
|
100
|
-
maxpower = Math.pow(2, numBits);
|
|
101
|
-
power = 1;
|
|
102
|
-
while (power != maxpower) {
|
|
103
|
-
resb = data.val & data.position;
|
|
104
|
-
data.position >>= 1;
|
|
105
|
-
if (data.position == 0) {
|
|
106
|
-
data.position = resetValue;
|
|
107
|
-
data.val = getNextValue(data.index++);
|
|
108
|
-
}
|
|
109
|
-
bits |= (resb > 0 ? 1 : 0) * power;
|
|
110
|
-
power <<= 1;
|
|
111
|
-
}
|
|
112
|
-
switch ((c = bits)) {
|
|
113
|
-
case 0:
|
|
114
|
-
bits = 0;
|
|
115
|
-
maxpower = Math.pow(2, 8);
|
|
116
|
-
power = 1;
|
|
117
|
-
while (power != maxpower) {
|
|
118
|
-
resb = data.val & data.position;
|
|
119
|
-
data.position >>= 1;
|
|
120
|
-
if (data.position == 0) {
|
|
121
|
-
data.position = resetValue;
|
|
122
|
-
data.val = getNextValue(data.index++);
|
|
123
|
-
}
|
|
124
|
-
bits |= (resb > 0 ? 1 : 0) * power;
|
|
125
|
-
power <<= 1;
|
|
126
|
-
}
|
|
127
|
-
dictionary[dictSize++] = String.fromCharCode(bits);
|
|
128
|
-
c = dictSize - 1;
|
|
129
|
-
enlargeIn--;
|
|
130
|
-
break;
|
|
131
|
-
case 1:
|
|
132
|
-
bits = 0;
|
|
133
|
-
maxpower = Math.pow(2, 16);
|
|
134
|
-
power = 1;
|
|
135
|
-
while (power != maxpower) {
|
|
136
|
-
resb = data.val & data.position;
|
|
137
|
-
data.position >>= 1;
|
|
138
|
-
if (data.position == 0) {
|
|
139
|
-
data.position = resetValue;
|
|
140
|
-
data.val = getNextValue(data.index++);
|
|
141
|
-
}
|
|
142
|
-
bits |= (resb > 0 ? 1 : 0) * power;
|
|
143
|
-
power <<= 1;
|
|
144
|
-
}
|
|
145
|
-
dictionary[dictSize++] = String.fromCharCode(bits);
|
|
146
|
-
c = dictSize - 1;
|
|
147
|
-
enlargeIn--;
|
|
148
|
-
break;
|
|
149
|
-
case 2:
|
|
150
|
-
return result;
|
|
151
|
-
}
|
|
152
|
-
if (enlargeIn == 0) {
|
|
153
|
-
enlargeIn = Math.pow(2, numBits);
|
|
154
|
-
numBits++;
|
|
155
|
-
}
|
|
156
|
-
if (typeof c === 'number' && dictionary[c]) {
|
|
157
|
-
entry = dictionary[c];
|
|
158
|
-
}
|
|
159
|
-
else {
|
|
160
|
-
if (typeof c === 'number' && c === dictSize) {
|
|
161
|
-
entry = w + w.charAt(0);
|
|
162
|
-
}
|
|
163
|
-
else {
|
|
164
|
-
return null;
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
result += entry;
|
|
168
|
-
// Add w+entry[0] to the dictionary
|
|
169
|
-
dictionary[dictSize++] = w + entry.charAt(0);
|
|
170
|
-
enlargeIn--;
|
|
171
|
-
w = entry;
|
|
172
|
-
if (enlargeIn == 0) {
|
|
173
|
-
enlargeIn = Math.pow(2, numBits);
|
|
174
|
-
numBits++;
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
}
|