@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.
Files changed (52) hide show
  1. package/README.md +112 -46
  2. package/dist/bitmaps.d.ts +9 -0
  3. package/dist/bitmaps.d.ts.map +1 -0
  4. package/dist/bitmaps.js +45 -0
  5. package/dist/bitmaps.js.map +1 -0
  6. package/dist/core/effectSet.d.ts +1 -27
  7. package/dist/core/effectSet.d.ts.map +1 -0
  8. package/dist/core/effectSet.js +1 -27
  9. package/dist/core/effectSet.js.map +1 -0
  10. package/dist/core/mixer.d.ts +1 -11
  11. package/dist/core/mixer.d.ts.map +1 -0
  12. package/dist/core/mixer.js +6 -71
  13. package/dist/core/mixer.js.map +1 -0
  14. package/dist/core/reverse.d.ts +3 -0
  15. package/dist/core/reverse.d.ts.map +1 -0
  16. package/dist/core/reverse.js +89 -0
  17. package/dist/core/reverse.js.map +1 -0
  18. package/dist/data/effects.d.ts +3 -0
  19. package/dist/data/effects.d.ts.map +1 -0
  20. package/dist/data/effects.js +159 -148
  21. package/dist/data/effects.js.map +1 -0
  22. package/dist/data/products.d.ts +1 -0
  23. package/dist/data/products.d.ts.map +1 -0
  24. package/dist/data/products.js +3 -0
  25. package/dist/data/products.js.map +1 -0
  26. package/dist/data/rules.d.ts +1 -0
  27. package/dist/data/rules.d.ts.map +1 -0
  28. package/dist/data/rules.js +2 -2
  29. package/dist/data/rules.js.map +1 -0
  30. package/dist/data/substances.d.ts +1 -0
  31. package/dist/data/substances.d.ts.map +1 -0
  32. package/dist/data/substances.js +2 -1
  33. package/dist/data/substances.js.map +1 -0
  34. package/dist/index.d.ts +2 -1
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +5 -6
  37. package/dist/index.js.map +1 -0
  38. package/dist/maskRules.d.ts +8 -0
  39. package/dist/maskRules.d.ts.map +1 -0
  40. package/dist/maskRules.js +18 -0
  41. package/dist/maskRules.js.map +1 -0
  42. package/dist/types.d.ts +3 -1
  43. package/dist/types.d.ts.map +1 -0
  44. package/dist/types.js +1 -0
  45. package/dist/types.js.map +1 -0
  46. package/dist/utils/encoding.d.ts +1 -16
  47. package/dist/utils/encoding.d.ts.map +1 -0
  48. package/dist/utils/encoding.js +7 -62
  49. package/dist/utils/encoding.js.map +1 -0
  50. package/package.json +1 -1
  51. package/dist/utils/lz.d.ts +0 -5
  52. 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.migrateMixHash = exports.decodeMixState = exports.encodeMixState = exports.mixFromHash = exports.mixSubstances = void 0;
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
- // Data exports
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,8 @@
1
+ type MaskRule = {
2
+ ifPresentMask: bigint;
3
+ ifNotPresentMask: bigint;
4
+ replaceMask: Array<[bigint, bigint]>;
5
+ };
6
+ export declare const maskRulesBySubstance: Record<string, MaskRule[]>;
7
+ export {};
8
+ //# sourceMappingURL=maskRules.d.ts.map
@@ -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' | 'Viagra' | 'Horse Semen' | 'Mega Bean' | 'Addy' | 'Battery';
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
@@ -1,2 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -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"}
@@ -1,49 +1,14 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
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 LZString = await Promise.resolve().then(() => __importStar(require('lz-string')));
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 (_a) {
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@schedule1-tools/mixer",
3
- "version": "0.2.3",
3
+ "version": "0.2.4",
4
4
  "description": "A package for calculating substance mixes in Schedule 1",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -1,5 +0,0 @@
1
- /**
2
- * A minimal implementation of LZString's decompressFromBase64 function
3
- * Based on the original LZ-string library but simplified for your specific use case
4
- */
5
- export declare function decompressFromBase64(input: string): string | null;
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
- }