@schedule1-tools/mixer 0.2.3 → 0.2.4
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/bitmaps.d.ts +9 -0
- package/dist/bitmaps.d.ts.map +1 -0
- package/dist/bitmaps.js +45 -0
- package/dist/bitmaps.js.map +1 -0
- 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/core/reverse.d.ts +3 -0
- package/dist/core/reverse.d.ts.map +1 -0
- package/dist/core/reverse.js +89 -0
- package/dist/core/reverse.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 +3 -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 +2 -1
- 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/maskRules.d.ts +8 -0
- package/dist/maskRules.d.ts.map +1 -0
- package/dist/maskRules.js +18 -0
- package/dist/maskRules.js.map +1 -0
- package/dist/types.d.ts +3 -1
- 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 +1 -1
- package/dist/utils/lz.d.ts +0 -5
- package/dist/utils/lz.js +0 -177
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
export { mixSubstances, mixFromHash } from './core/mixer';
|
|
2
1
|
export { encodeMixState, decodeMixState, migrateMixHash } from './utils/encoding';
|
|
2
|
+
export { mixSubstances, mixFromHash } from './core/mixer';
|
|
3
3
|
export { effects } from './data/effects';
|
|
4
4
|
export { products, productAbbreviations } from './data/products';
|
|
5
5
|
export { substances } from './data/substances';
|
|
6
6
|
export { effectRulesBySubstance } from './data/rules';
|
|
7
7
|
export type { EffectCode, Substance, Product, RankCode, EffectData, SubstanceData, ProductData, EffectRule, MixResult, MixState, } from './types';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClF,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE1D,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAEtD,YAAY,EACV,UAAU,EACV,SAAS,EACT,OAAO,EACP,QAAQ,EACR,UAAU,EACV,aAAa,EACb,WAAW,EACX,UAAU,EACV,SAAS,EACT,QAAQ,GACT,MAAM,SAAS,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.effectRulesBySubstance = exports.substances = exports.productAbbreviations = exports.products = exports.effects = exports.
|
|
4
|
-
// Main exports
|
|
5
|
-
var mixer_1 = require("./core/mixer");
|
|
6
|
-
Object.defineProperty(exports, "mixSubstances", { enumerable: true, get: function () { return mixer_1.mixSubstances; } });
|
|
7
|
-
Object.defineProperty(exports, "mixFromHash", { enumerable: true, get: function () { return mixer_1.mixFromHash; } });
|
|
3
|
+
exports.effectRulesBySubstance = exports.substances = exports.productAbbreviations = exports.products = exports.effects = exports.mixFromHash = exports.mixSubstances = exports.migrateMixHash = exports.decodeMixState = exports.encodeMixState = void 0;
|
|
8
4
|
var encoding_1 = require("./utils/encoding");
|
|
9
5
|
Object.defineProperty(exports, "encodeMixState", { enumerable: true, get: function () { return encoding_1.encodeMixState; } });
|
|
10
6
|
Object.defineProperty(exports, "decodeMixState", { enumerable: true, get: function () { return encoding_1.decodeMixState; } });
|
|
11
7
|
Object.defineProperty(exports, "migrateMixHash", { enumerable: true, get: function () { return encoding_1.migrateMixHash; } });
|
|
12
|
-
|
|
8
|
+
var mixer_1 = require("./core/mixer");
|
|
9
|
+
Object.defineProperty(exports, "mixSubstances", { enumerable: true, get: function () { return mixer_1.mixSubstances; } });
|
|
10
|
+
Object.defineProperty(exports, "mixFromHash", { enumerable: true, get: function () { return mixer_1.mixFromHash; } });
|
|
13
11
|
var effects_1 = require("./data/effects");
|
|
14
12
|
Object.defineProperty(exports, "effects", { enumerable: true, get: function () { return effects_1.effects; } });
|
|
15
13
|
var products_1 = require("./data/products");
|
|
@@ -19,3 +17,4 @@ var substances_1 = require("./data/substances");
|
|
|
19
17
|
Object.defineProperty(exports, "substances", { enumerable: true, get: function () { return substances_1.substances; } });
|
|
20
18
|
var rules_1 = require("./data/rules");
|
|
21
19
|
Object.defineProperty(exports, "effectRulesBySubstance", { enumerable: true, get: function () { return rules_1.effectRulesBySubstance; } });
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,6CAAkF;AAAzE,0GAAA,cAAc,OAAA;AAAE,0GAAA,cAAc,OAAA;AAAE,0GAAA,cAAc,OAAA;AACvD,sCAA0D;AAAjD,sGAAA,aAAa,OAAA;AAAE,oGAAA,WAAW,OAAA;AAEnC,0CAAyC;AAAhC,kGAAA,OAAO,OAAA;AAChB,4CAAiE;AAAxD,oGAAA,QAAQ,OAAA;AAAE,gHAAA,oBAAoB,OAAA;AACvC,gDAA+C;AAAtC,wGAAA,UAAU,OAAA;AACnB,sCAAsD;AAA7C,+GAAA,sBAAsB,OAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"maskRules.d.ts","sourceRoot":"","sources":["../src/maskRules.ts"],"names":[],"mappings":"AAMA,KAAK,QAAQ,GAAG;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACtC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,CAa7B,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.maskRulesBySubstance = void 0;
|
|
4
|
+
const bitmaps_1 = require("./bitmaps");
|
|
5
|
+
const rules_1 = require("./data/rules");
|
|
6
|
+
exports.maskRulesBySubstance = Object.fromEntries(Object.entries(rules_1.effectRulesBySubstance).map(([sub, rules]) => [
|
|
7
|
+
sub,
|
|
8
|
+
rules.map((r) => {
|
|
9
|
+
const ip = r.ifPresent.reduce((m, e) => m | bitmaps_1.codeToBit[e], BigInt(0));
|
|
10
|
+
const inot = r.ifNotPresent.reduce((m, e) => m | bitmaps_1.codeToBit[e], BigInt(0));
|
|
11
|
+
const rep = [];
|
|
12
|
+
for (const [oldE, newE] of Object.entries(r.replace)) {
|
|
13
|
+
rep.push([bitmaps_1.codeToBit[oldE], bitmaps_1.codeToBit[newE]]);
|
|
14
|
+
}
|
|
15
|
+
return { ifPresentMask: ip, ifNotPresentMask: inot, replaceMask: rep };
|
|
16
|
+
}),
|
|
17
|
+
]));
|
|
18
|
+
//# sourceMappingURL=maskRules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"maskRules.js","sourceRoot":"","sources":["../src/maskRules.ts"],"names":[],"mappings":";;;AAGA,uCAAsC;AACtC,wCAAsD;AAQzC,QAAA,oBAAoB,GAA+B,MAAM,CAAC,WAAW,CAChF,MAAM,CAAC,OAAO,CAAC,8BAAsB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;IAC3D,GAAG;IACH,KAAK,CAAC,GAAG,CAAC,CAAC,CAAa,EAAE,EAAE;QAC1B,MAAM,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,mBAAS,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,MAAM,IAAI,GAAG,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,mBAAS,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1E,MAAM,GAAG,GAA4B,EAAE,CAAC;QACxC,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAA+B,EAAE,CAAC;YACnF,GAAG,CAAC,IAAI,CAAC,CAAC,mBAAS,CAAC,IAAI,CAAC,EAAE,mBAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,EAAE,aAAa,EAAE,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC;IACzE,CAAC,CAAC;CACH,CAAC,CAC2B,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
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' | '
|
|
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
3
|
export type Product = 'OG Kush' | 'Sour Diesel' | 'Green Crack' | 'Grandaddy Purple' | 'Meth' | 'Cocaine';
|
|
4
4
|
export type RankCode = '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | '10' | '11' | '12' | '13';
|
|
5
5
|
export interface EffectData {
|
|
@@ -20,6 +20,7 @@ export interface ProductData {
|
|
|
20
20
|
price: number;
|
|
21
21
|
effects: EffectCode[];
|
|
22
22
|
abbreviation: string;
|
|
23
|
+
addiction?: number;
|
|
23
24
|
}
|
|
24
25
|
export interface EffectRule {
|
|
25
26
|
ifPresent: EffectCode[];
|
|
@@ -38,3 +39,4 @@ export interface MixState {
|
|
|
38
39
|
product: Product;
|
|
39
40
|
substances: Substance[];
|
|
40
41
|
}
|
|
42
|
+
//# 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,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,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;CACpB;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":"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"}
|
package/package.json
CHANGED
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
|
-
}
|