@schedule1-tools/mixer 0.2.5 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -34,10 +34,7 @@ import { mixSubstances } from '@schedule1-tools/mixer';
34
34
  * mixSubstances(product: Product, substances: Substance[])
35
35
  * → computes cost, effects, profit, profitMargin, addiction
36
36
  */
37
- const result = mixSubstances(
38
- 'OG Kush',
39
- ['Cuke', 'Flu Medicine', 'Gasoline']
40
- );
37
+ const result = mixSubstances('OG Kush', ['Cuke', 'Flu Medicine', 'Gasoline']);
41
38
  // result → {
42
39
  // effects: ['Be','Se','Eu','To'],
43
40
  // cost: 12,
@@ -71,18 +68,15 @@ const result = mixFromHash('T0cgS3VzaDpBQkM');
71
68
  ### 3. Encode & decode mix state
72
69
 
73
70
  ```typescript
74
- import {
75
- encodeMixState,
76
- decodeMixState
77
- } from '@schedule1-tools/mixer';
71
+ import { decodeMixState, encodeMixState } from '@schedule1-tools/mixer';
78
72
 
79
73
  /**
80
74
  * encodeMixState(state: MixState) → string
81
75
  * decodeMixState(hash: string) → MixState
82
76
  */
83
77
  const encoded = encodeMixState({
84
- product: 'OG Kush',
85
- substances: ['Cuke','Flu Medicine','Gasoline']
78
+ product: 'OG Kush',
79
+ substances: ['Cuke', 'Flu Medicine', 'Gasoline'],
86
80
  });
87
81
  // encoded → 'T0cgS3VzaDpBQkM'
88
82
 
@@ -109,28 +103,23 @@ const newHash = await migrateMixHash('OLD_BASE64_HASH_HERE');
109
103
 
110
104
  In addition to the functions above, the package also exports data objects:
111
105
 
112
- - `effects`: All effect definitions
113
- - `products`: All product definitions
114
- - `substances`: All substance definitions
115
- - `effectRulesBySubstance`: Transformation rules for each substance
106
+ - `effects`: All effect definitions
107
+ - `products`: All product definitions
108
+ - `substances`: All substance definitions
109
+ - `effectRulesBySubstance`: Transformation rules for each substance
116
110
 
117
111
  ```typescript
118
- import {
119
- effects,
120
- products,
121
- substances,
122
- effectRulesBySubstance
123
- } from '@schedule1-tools/mixer';
112
+ import { effectRulesBySubstance, effects, products, substances } from '@schedule1-tools/mixer';
124
113
  ```
125
114
 
126
115
  ---
127
116
 
128
117
  ## Contributing
129
118
 
130
- 1. Fork the repo
131
- 2. Create a branch (`git checkout -b feat/my-feature`)
132
- 3. Run tests & lint (`pnpm test && pnpm run format`)
133
- 4. Open a PR against `main`
119
+ 1. Fork the repo
120
+ 2. Create a branch (`git checkout -b feat/my-feature`)
121
+ 3. Run tests & lint (`pnpm test && pnpm run format`)
122
+ 4. Open a PR against `main`
134
123
 
135
124
  Please read [CONTRIBUTING.md](CONTRIBUTING.md) (if present) for more details.
136
125
 
@@ -1,12 +1,22 @@
1
1
  import type { EffectCode } from '../types';
2
+ export declare const EFFECT_INDEX: Record<EffectCode, number>;
2
3
  export declare class EffectSet {
3
- private effects;
4
+ /** bitmask for effects 0-31 */
5
+ lo: number;
6
+ /** bitmask for effects 32-33 (Tt, Zo) */
7
+ hi: number;
8
+ private _size;
9
+ /** effect indices in insertion order, used by toArray() */
10
+ private _order;
4
11
  constructor(initialEffects?: EffectCode[]);
12
+ has(effect: EffectCode): boolean;
13
+ hasBit(idx: number): boolean;
5
14
  add(effect: EffectCode): boolean;
15
+ addBit(idx: number): boolean;
6
16
  remove(effect: EffectCode): boolean;
7
- has(effect: EffectCode): boolean;
8
- toArray(): EffectCode[];
17
+ removeBit(idx: number): boolean;
9
18
  size(): number;
19
+ toArray(): EffectCode[];
10
20
  clone(): EffectSet;
11
21
  }
12
22
  //# sourceMappingURL=effectSet.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"effectSet.d.ts","sourceRoot":"","sources":["../../src/core/effectSet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAkB;gBAErB,cAAc,GAAE,UAAU,EAAO;IAS7C,GAAG,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO;IAWhC,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO;IAWnC,GAAG,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO;IAQhC,OAAO,IAAI,UAAU,EAAE;IAQvB,IAAI,IAAI,MAAM;IAQd,KAAK,IAAI,SAAS;CAKnB"}
1
+ {"version":3,"file":"effectSet.d.ts","sourceRoot":"","sources":["../../src/core/effectSet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAyC3C,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAuB,CAAC;AAK5E,qBAAa,SAAS;IACpB,+BAA+B;IAC/B,EAAE,SAAK;IACP,yCAAyC;IACzC,EAAE,SAAK;IACP,OAAO,CAAC,KAAK,CAAK;IAClB,2DAA2D;IAC3D,OAAO,CAAC,MAAM,CAAgB;gBAElB,cAAc,GAAE,UAAU,EAAO;IAI7C,GAAG,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO;IAIhC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI5B,GAAG,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO;IAIhC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAe5B,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO;IAInC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAgB/B,IAAI,IAAI,MAAM;IAId,OAAO,IAAI,UAAU,EAAE;IAIvB,KAAK,IAAI,SAAS;CAQnB"}
@@ -1,34 +1,117 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EffectSet = void 0;
4
- class EffectSet {
1
+ // All 34 effect codes in alphabetical order.
2
+ // Effects 0-31 map to `lo`, effects 32-33 (Tt, Zo) map to `hi`.
3
+ const EFFECT_CODES = [
4
+ 'Ag',
5
+ 'At',
6
+ 'Ba',
7
+ 'Be',
8
+ 'Ca',
9
+ 'Cd',
10
+ 'Cy',
11
+ 'Di',
12
+ 'El',
13
+ 'En',
14
+ 'Eu',
15
+ 'Ex',
16
+ 'Fc',
17
+ 'Fo',
18
+ 'Gi',
19
+ 'Gl',
20
+ 'Je',
21
+ 'La',
22
+ 'Lf',
23
+ 'Mu',
24
+ 'Pa',
25
+ 'Re',
26
+ 'Sc',
27
+ 'Se',
28
+ 'Sh',
29
+ 'Si',
30
+ 'Sl',
31
+ 'Sm',
32
+ 'Sn',
33
+ 'Sp',
34
+ 'To',
35
+ 'Tp',
36
+ 'Tt',
37
+ 'Zo',
38
+ ];
39
+ export const EFFECT_INDEX = Object.create(null);
40
+ for (let i = 0; i < EFFECT_CODES.length; i++) {
41
+ EFFECT_INDEX[EFFECT_CODES[i]] = i;
42
+ }
43
+ export class EffectSet {
5
44
  constructor(initialEffects = []) {
6
- this.effects = new Set(initialEffects);
45
+ /** bitmask for effects 0-31 */
46
+ this.lo = 0;
47
+ /** bitmask for effects 32-33 (Tt, Zo) */
48
+ this.hi = 0;
49
+ this._size = 0;
50
+ /** effect indices in insertion order, used by toArray() */
51
+ this._order = [];
52
+ for (const e of initialEffects)
53
+ this.add(e);
54
+ }
55
+ has(effect) {
56
+ return this.hasBit(EFFECT_INDEX[effect]);
57
+ }
58
+ hasBit(idx) {
59
+ return idx < 32 ? (this.lo & (1 << idx)) !== 0 : (this.hi & (1 << (idx - 32))) !== 0;
7
60
  }
8
61
  add(effect) {
9
- const alreadyExists = this.effects.has(effect);
10
- this.effects.add(effect);
11
- return !alreadyExists;
62
+ return this.addBit(EFFECT_INDEX[effect]);
12
63
  }
13
- remove(effect) {
14
- const existed = this.effects.has(effect);
15
- this.effects.delete(effect);
16
- return existed;
64
+ addBit(idx) {
65
+ if (idx < 32) {
66
+ const bit = 1 << idx;
67
+ if (this.lo & bit)
68
+ return false;
69
+ this.lo |= bit;
70
+ }
71
+ else {
72
+ const bit = 1 << (idx - 32);
73
+ if (this.hi & bit)
74
+ return false;
75
+ this.hi |= bit;
76
+ }
77
+ this._size++;
78
+ this._order.push(idx);
79
+ return true;
17
80
  }
18
- has(effect) {
19
- return this.effects.has(effect);
81
+ remove(effect) {
82
+ return this.removeBit(EFFECT_INDEX[effect]);
20
83
  }
21
- toArray() {
22
- return Array.from(this.effects);
84
+ removeBit(idx) {
85
+ if (idx < 32) {
86
+ const bit = 1 << idx;
87
+ if (!(this.lo & bit))
88
+ return false;
89
+ this.lo &= ~bit;
90
+ }
91
+ else {
92
+ const bit = 1 << (idx - 32);
93
+ if (!(this.hi & bit))
94
+ return false;
95
+ this.hi &= ~bit;
96
+ }
97
+ this._size--;
98
+ const i = this._order.indexOf(idx);
99
+ if (i !== -1)
100
+ this._order.splice(i, 1);
101
+ return true;
23
102
  }
24
103
  size() {
25
- return this.effects.size;
104
+ return this._size;
105
+ }
106
+ toArray() {
107
+ return this._order.map((i) => EFFECT_CODES[i]);
26
108
  }
27
109
  clone() {
28
- const clone = new EffectSet();
29
- clone.effects = new Set(this.effects);
30
- return clone;
110
+ const c = new EffectSet();
111
+ c.lo = this.lo;
112
+ c.hi = this.hi;
113
+ c._size = this._size;
114
+ c._order = this._order.slice();
115
+ return c;
31
116
  }
32
117
  }
33
- exports.EffectSet = EffectSet;
34
- //# sourceMappingURL=effectSet.js.map
@@ -1,4 +1,12 @@
1
1
  import type { MixResult, Product, Substance } from '../types';
2
+ /**
3
+ * Mixes a list of substances into a product and returns the resulting effects,
4
+ * sell price, profit, and addiction value.
5
+ */
2
6
  export declare function mixSubstances(product: Product, substanceCodes: Substance[]): MixResult;
7
+ /**
8
+ * Decodes a hash and runs it through mixSubstances.
9
+ * Throws if the hash is invalid.
10
+ */
3
11
  export declare function mixFromHash(hash: string): MixResult;
4
12
  //# sourceMappingURL=mixer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mixer.d.ts","sourceRoot":"","sources":["../../src/core/mixer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA0B,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAiBtF,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,SAAS,CA8EtF;AAOD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAMnD"}
1
+ {"version":3,"file":"mixer.d.ts","sourceRoot":"","sources":["../../src/core/mixer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA0B,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAwDtF;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,SAAS,CAkFtF;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAMnD"}
@@ -1,54 +1,99 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.mixSubstances = mixSubstances;
4
- exports.mixFromHash = mixFromHash;
5
- const effects_1 = require("../data/effects");
6
- const products_1 = require("../data/products");
7
- const rules_1 = require("../data/rules");
8
- const substances_1 = require("../data/substances");
9
- const encoding_1 = require("../utils/encoding");
10
- const effectSet_1 = require("./effectSet");
1
+ import { effects } from '../data/effects';
2
+ import { products } from '../data/products';
3
+ import { effectRulesBySubstance } from '../data/rules';
4
+ import { substances } from '../data/substances';
5
+ import { decodeMixState } from '../utils/encoding';
6
+ import { EFFECT_INDEX, EffectSet } from './effectSet';
11
7
  const MAX_EFFECTS = 8;
12
- function mixSubstances(product, substanceCodes) {
13
- if (!products_1.products[product]) {
8
+ const compiledRulesBySubstance = (() => {
9
+ const out = Object.create(null);
10
+ for (const sub in effectRulesBySubstance) {
11
+ const rules = effectRulesBySubstance[sub];
12
+ out[sub] = rules.map((r) => ({
13
+ ifPresent: EFFECT_INDEX[r.ifPresent[0]],
14
+ ifNotPresent: EFFECT_INDEX[r.ifNotPresent[0]],
15
+ replaceFrom: EFFECT_INDEX[Object.keys(r.replace)[0]],
16
+ replaceTo: EFFECT_INDEX[Object.values(r.replace)[0]],
17
+ }));
18
+ }
19
+ return out;
20
+ })();
21
+ const substanceEffectIndices = (() => {
22
+ const out = Object.create(null);
23
+ for (const sub in substances) {
24
+ out[sub] = substances[sub].effect.map((e) => EFFECT_INDEX[e]);
25
+ }
26
+ return out;
27
+ })();
28
+ // Typed arrays for cache-friendly price/addiction lookups by effect index.
29
+ const EFFECT_COUNT = 34;
30
+ const effectPrices = new Float64Array(EFFECT_COUNT);
31
+ const effectAddictions = new Float64Array(EFFECT_COUNT);
32
+ for (const code in effects) {
33
+ const idx = EFFECT_INDEX[code];
34
+ effectPrices[idx] = effects[code].price;
35
+ effectAddictions[idx] = effects[code].addiction;
36
+ }
37
+ function hasBit(lo, hi, idx) {
38
+ return idx < 32 ? (lo & (1 << idx)) !== 0 : (hi & (1 << (idx - 32))) !== 0;
39
+ }
40
+ /**
41
+ * Mixes a list of substances into a product and returns the resulting effects,
42
+ * sell price, profit, and addiction value.
43
+ */
44
+ export function mixSubstances(product, substanceCodes) {
45
+ if (!products[product]) {
14
46
  throw new Error(`Unknown product: ${product}`);
15
47
  }
16
- const productInfo = products_1.products[product];
17
- const effectsSet = new effectSet_1.EffectSet(productInfo.effects);
48
+ const productInfo = products[product];
49
+ const effectsSet = new EffectSet(productInfo.effects);
18
50
  let totalCost = 0;
19
51
  for (const code of substanceCodes) {
20
- const substance = substances_1.substances[code];
52
+ const substance = substances[code];
21
53
  if (!substance)
22
54
  continue;
23
55
  totalCost += substance.price;
24
- const rules = rules_1.effectRulesBySubstance[code];
56
+ const rules = compiledRulesBySubstance[code];
25
57
  if (rules && rules.length > 0) {
26
- const initialEffects = effectsSet.clone();
27
- const processedEffects = new effectSet_1.EffectSet();
28
- const removedEffects = new effectSet_1.EffectSet();
29
- const appliedRules = new Set();
58
+ // Snapshot the current state as plain ints to avoid a clone() allocation.
59
+ const initLo = effectsSet.lo;
60
+ const initHi = effectsSet.hi;
61
+ let removedLo = 0;
62
+ let removedHi = 0;
63
+ let appliedRules = 0; // bit i = rule i fired in phase 1
64
+ // Phase 1: apply rules whose conditions are met right now.
30
65
  for (let i = 0; i < rules.length; i++) {
31
66
  const rule = rules[i];
32
- if (checkRulePreconditions(rule, initialEffects)) {
33
- applyReplaceEffects(rule.replace, initialEffects, effectsSet, processedEffects, removedEffects);
34
- appliedRules.add(i);
67
+ if (hasBit(initLo, initHi, rule.ifPresent) &&
68
+ !hasBit(initLo, initHi, rule.ifNotPresent) &&
69
+ hasBit(initLo, initHi, rule.replaceFrom)) {
70
+ effectsSet.removeBit(rule.replaceFrom);
71
+ effectsSet.addBit(rule.replaceTo);
72
+ if (rule.replaceFrom < 32)
73
+ removedLo |= 1 << rule.replaceFrom;
74
+ else
75
+ removedHi |= 1 << (rule.replaceFrom - 32);
76
+ appliedRules |= 1 << i;
35
77
  }
36
78
  }
79
+ // Phase 2: apply rules that were blocked by a now-removed effect.
37
80
  for (let i = 0; i < rules.length; i++) {
38
- if (appliedRules.has(i))
81
+ if (appliedRules & (1 << i))
39
82
  continue;
40
83
  const rule = rules[i];
41
- if (meetsPhaseTwo(rule, initialEffects, effectsSet, removedEffects)) {
42
- if (canApplyTransformation(rule.replace, effectsSet)) {
43
- applyTransformations(rule.replace, effectsSet, processedEffects);
44
- }
84
+ if (hasBit(initLo, initHi, rule.ifPresent) &&
85
+ hasBit(removedLo, removedHi, rule.ifNotPresent) &&
86
+ !hasBit(effectsSet.lo, effectsSet.hi, rule.ifNotPresent) &&
87
+ hasBit(effectsSet.lo, effectsSet.hi, rule.replaceFrom)) {
88
+ effectsSet.removeBit(rule.replaceFrom);
89
+ effectsSet.addBit(rule.replaceTo);
45
90
  }
46
91
  }
47
92
  }
48
- if (effectsSet.size() < MAX_EFFECTS && substance.effect) {
49
- for (const effect of substance.effect) {
50
- if (!effectsSet.has(effect)) {
51
- effectsSet.add(effect);
93
+ if (effectsSet.size() < MAX_EFFECTS) {
94
+ for (const idx of substanceEffectIndices[code]) {
95
+ if (!effectsSet.hasBit(idx)) {
96
+ effectsSet.addBit(idx);
52
97
  if (effectsSet.size() >= MAX_EFFECTS)
53
98
  break;
54
99
  }
@@ -71,86 +116,26 @@ function mixSubstances(product, substanceCodes) {
71
116
  addiction,
72
117
  };
73
118
  }
74
- function mixFromHash(hash) {
75
- const state = (0, encoding_1.decodeMixState)(hash);
119
+ /**
120
+ * Decodes a hash and runs it through mixSubstances.
121
+ * Throws if the hash is invalid.
122
+ */
123
+ export function mixFromHash(hash) {
124
+ const state = decodeMixState(hash);
76
125
  if (!state) {
77
126
  throw new Error(`Invalid hash: ${hash}`);
78
127
  }
79
128
  return mixSubstances(state.product, state.substances);
80
129
  }
81
- function checkRulePreconditions(rule, initialEffects) {
82
- for (const effect of rule.ifPresent) {
83
- if (!initialEffects.has(effect))
84
- return false;
85
- }
86
- for (const effect of rule.ifNotPresent) {
87
- if (initialEffects.has(effect))
88
- return false;
89
- }
90
- for (const oldEffect of Object.keys(rule.replace)) {
91
- if (initialEffects.has(oldEffect))
92
- return true;
93
- }
94
- return false;
95
- }
96
- function meetsPhaseTwo(rule, initialEffects, currentEffects, removedEffects) {
97
- for (const effect of rule.ifPresent) {
98
- if (!initialEffects.has(effect))
99
- return false;
100
- }
101
- let hasRemovedForbidden = false;
102
- for (const effect of rule.ifNotPresent) {
103
- if (removedEffects.has(effect)) {
104
- hasRemovedForbidden = true;
105
- break;
106
- }
107
- }
108
- if (!hasRemovedForbidden)
109
- return false;
110
- for (const effect of rule.ifNotPresent) {
111
- if (currentEffects.has(effect))
112
- return false;
113
- }
114
- return true;
115
- }
116
- function applyReplaceEffects(replace, initialEffects, effectsSet, processedEffects, removedEffects) {
117
- for (const [oldEffect, newEffect] of Object.entries(replace)) {
118
- if (initialEffects.has(oldEffect)) {
119
- effectsSet.remove(oldEffect);
120
- effectsSet.add(newEffect);
121
- processedEffects.add(oldEffect);
122
- removedEffects.add(oldEffect);
123
- }
124
- }
125
- }
126
- function canApplyTransformation(replace, effectsSet) {
127
- for (const oldEffect of Object.keys(replace)) {
128
- if (effectsSet.has(oldEffect))
129
- return true;
130
- }
131
- return false;
132
- }
133
- function applyTransformations(replace, effectsSet, processedEffects) {
134
- for (const [oldEffect, newEffect] of Object.entries(replace)) {
135
- if (effectsSet.has(oldEffect)) {
136
- effectsSet.remove(oldEffect);
137
- effectsSet.add(newEffect);
138
- processedEffects.add(oldEffect);
139
- }
140
- }
141
- }
142
130
  function calculateEffectValue(effectCodes) {
143
131
  let value = 0;
144
- for (const code of effectCodes) {
145
- value += effects_1.effects[code]?.price || 0;
146
- }
132
+ for (const code of effectCodes)
133
+ value += effectPrices[EFFECT_INDEX[code]];
147
134
  return value;
148
135
  }
149
136
  function calculateAddiction(product, effectCodes) {
150
- let value = products_1.products[product]?.addiction || 0;
151
- for (const code of effectCodes) {
152
- value += effects_1.effects[code]?.addiction || 0;
153
- }
137
+ let value = products[product]?.addiction || 0;
138
+ for (const code of effectCodes)
139
+ value += effectAddictions[EFFECT_INDEX[code]];
154
140
  return value;
155
141
  }
156
- //# sourceMappingURL=mixer.js.map
@@ -1,7 +1,4 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.bitToEffect = exports.effectBits = exports.effects = void 0;
4
- exports.effects = {
1
+ export const effects = {
5
2
  Pa: {
6
3
  name: 'Paranoia',
7
4
  description: 'Induces paranoia in the user.',
@@ -275,14 +272,13 @@ exports.effects = {
275
272
  addiction: 0.336,
276
273
  },
277
274
  };
278
- exports.effectBits = Object.keys(exports.effects)
275
+ export const effectBits = Object.keys(effects)
279
276
  .sort()
280
277
  .reduce((acc, code, idx) => {
281
278
  acc[code] = 1n << BigInt(idx);
282
279
  return acc;
283
280
  }, {});
284
- exports.bitToEffect = Object.entries(exports.effectBits).reduce((acc, [code, bit]) => {
281
+ export const bitToEffect = Object.entries(effectBits).reduce((acc, [code, bit]) => {
285
282
  acc[bit.toString()] = code;
286
283
  return acc;
287
284
  }, {});
288
- //# sourceMappingURL=effects.js.map
@@ -1,7 +1,4 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.productAbbreviations = exports.products = void 0;
4
- exports.products = {
1
+ export const products = {
5
2
  'OG Kush': {
6
3
  price: 35,
7
4
  rank: '1',
@@ -48,8 +45,7 @@ exports.products = {
48
45
  addiction: 0.05,
49
46
  },
50
47
  };
51
- exports.productAbbreviations = Object.entries(exports.products).reduce((acc, [product, data]) => {
48
+ export const productAbbreviations = Object.entries(products).reduce((acc, [product, data]) => {
52
49
  acc[data.abbreviation] = product;
53
50
  return acc;
54
51
  }, {});
55
- //# sourceMappingURL=products.js.map
@@ -1,7 +1,4 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.effectRulesBySubstance = void 0;
4
- exports.effectRulesBySubstance = {
1
+ export const effectRulesBySubstance = {
5
2
  Cuke: [
6
3
  { ifPresent: ['Eu'], ifNotPresent: ['La'], replace: { Eu: 'La' } },
7
4
  { ifPresent: ['Fo'], ifNotPresent: ['Cy'], replace: { Fo: 'Cy' } },
@@ -149,4 +146,3 @@ exports.effectRulesBySubstance = {
149
146
  { ifPresent: ['Sh'], ifNotPresent: ['Mu'], replace: { Sh: 'Mu' } },
150
147
  ],
151
148
  };
152
- //# sourceMappingURL=rules.js.map
@@ -1,7 +1,4 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.substanceAbbreviations = exports.substances = void 0;
4
- exports.substances = {
1
+ export const substances = {
5
2
  Cuke: {
6
3
  abbreviation: 'A',
7
4
  rank: '1',
@@ -99,8 +96,7 @@ exports.substances = {
99
96
  effect: ['Be'],
100
97
  },
101
98
  };
102
- exports.substanceAbbreviations = Object.entries(exports.substances).reduce((acc, [substance, data]) => {
99
+ export const substanceAbbreviations = Object.entries(substances).reduce((acc, [substance, data]) => {
103
100
  acc[data.abbreviation] = substance;
104
101
  return acc;
105
102
  }, {});
106
- //# sourceMappingURL=substances.js.map
package/dist/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  export { encodeMixState, decodeMixState, migrateMixHash } from './utils/encoding';
2
2
  export { mixSubstances, mixFromHash } from './core/mixer';
3
- export { effects } from './data/effects';
4
3
  export { products, productAbbreviations } from './data/products';
5
- export { substances } from './data/substances';
6
4
  export { effectRulesBySubstance } from './data/rules';
5
+ export { substances } from './data/substances';
6
+ export { effects } from './data/effects';
7
7
  export type { EffectCode, Substance, Product, RankCode, EffectData, SubstanceData, ProductData, EffectRule, MixResult, MixState, } from './types';
8
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +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"}
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;AAElF,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE1D,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,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,20 +1,6 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.effectRulesBySubstance = exports.substances = exports.productAbbreviations = exports.products = exports.effects = exports.mixFromHash = exports.mixSubstances = exports.migrateMixHash = exports.decodeMixState = exports.encodeMixState = void 0;
4
- var encoding_1 = require("./utils/encoding");
5
- Object.defineProperty(exports, "encodeMixState", { enumerable: true, get: function () { return encoding_1.encodeMixState; } });
6
- Object.defineProperty(exports, "decodeMixState", { enumerable: true, get: function () { return encoding_1.decodeMixState; } });
7
- Object.defineProperty(exports, "migrateMixHash", { enumerable: true, get: function () { return encoding_1.migrateMixHash; } });
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; } });
11
- var effects_1 = require("./data/effects");
12
- Object.defineProperty(exports, "effects", { enumerable: true, get: function () { return effects_1.effects; } });
13
- var products_1 = require("./data/products");
14
- Object.defineProperty(exports, "products", { enumerable: true, get: function () { return products_1.products; } });
15
- Object.defineProperty(exports, "productAbbreviations", { enumerable: true, get: function () { return products_1.productAbbreviations; } });
16
- var substances_1 = require("./data/substances");
17
- Object.defineProperty(exports, "substances", { enumerable: true, get: function () { return substances_1.substances; } });
18
- var rules_1 = require("./data/rules");
19
- Object.defineProperty(exports, "effectRulesBySubstance", { enumerable: true, get: function () { return rules_1.effectRulesBySubstance; } });
20
- //# sourceMappingURL=index.js.map
1
+ export { encodeMixState, decodeMixState, migrateMixHash } from './utils/encoding';
2
+ export { mixSubstances, mixFromHash } from './core/mixer';
3
+ export { products, productAbbreviations } from './data/products';
4
+ export { effectRulesBySubstance } from './data/rules';
5
+ export { substances } from './data/substances';
6
+ export { effects } from './data/effects';
package/dist/types.js CHANGED
@@ -1,3 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=types.js.map
1
+ export {};
@@ -1,5 +1,17 @@
1
1
  import type { MixState } from '../types';
2
+ /**
3
+ * Encodes a mix state to a shareable URL-safe string.
4
+ * Throws if the product or any substance is invalid.
5
+ */
2
6
  export declare function encodeMixState(state: MixState): string;
7
+ /**
8
+ * Decodes a URL-safe string back into a MixState.
9
+ * Returns null if the hash is invalid or unrecognized.
10
+ */
3
11
  export declare function decodeMixState(hash: string): MixState | null;
12
+ /**
13
+ * Migrates a legacy LZ-compressed hash to the current format.
14
+ * Returns null if migration fails.
15
+ */
4
16
  export declare function migrateMixHash(legacyHash: string): Promise<string | null>;
5
17
  //# sourceMappingURL=encoding.d.ts.map
@@ -1 +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
+ {"version":3,"file":"encoding.d.ts","sourceRoot":"","sources":["../../src/utils/encoding.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAsB,MAAM,UAAU,CAAC;AAO7D;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,CAqBtD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAyC5D;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmC/E"}
@@ -1,25 +1,21 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.encodeMixState = encodeMixState;
7
- exports.decodeMixState = decodeMixState;
8
- exports.migrateMixHash = migrateMixHash;
9
- const lz_string_1 = __importDefault(require("lz-string"));
10
- const products_1 = require("../data/products");
11
- const substances_1 = require("../data/substances");
12
- function encodeMixState(state) {
13
- if (!products_1.products[state.product]) {
1
+ import LZString from 'lz-string';
2
+ import { products } from '../data/products';
3
+ import { substanceAbbreviations, substances } from '../data/substances';
4
+ /**
5
+ * Encodes a mix state to a shareable URL-safe string.
6
+ * Throws if the product or any substance is invalid.
7
+ */
8
+ export function encodeMixState(state) {
9
+ if (!products[state.product]) {
14
10
  throw new Error(`Invalid product type: ${state.product}`);
15
11
  }
16
12
  for (const substance of state.substances) {
17
- if (!substances_1.substances[substance]) {
13
+ if (!substances[substance]) {
18
14
  throw new Error(`Invalid substance code: ${substance}`);
19
15
  }
20
16
  }
21
17
  const abbreviatedSubstances = state.substances.map((s) => {
22
- const abbr = substances_1.substances[s].abbreviation;
18
+ const abbr = substances[s].abbreviation;
23
19
  if (!abbr) {
24
20
  throw new Error(`Missing abbreviation for substance: ${s}`);
25
21
  }
@@ -28,7 +24,11 @@ function encodeMixState(state) {
28
24
  const encoded = `${state.product}:${abbreviatedSubstances.join('')}`;
29
25
  return toBase64Url(encoded);
30
26
  }
31
- function decodeMixState(hash) {
27
+ /**
28
+ * Decodes a URL-safe string back into a MixState.
29
+ * Returns null if the hash is invalid or unrecognized.
30
+ */
31
+ export function decodeMixState(hash) {
32
32
  if (!hash || typeof hash !== 'string') {
33
33
  return null;
34
34
  }
@@ -39,15 +39,15 @@ function decodeMixState(hash) {
39
39
  return null;
40
40
  }
41
41
  const [product, substancesStr] = parts;
42
- if (!product || !products_1.products[product]) {
42
+ if (!product || !products[product]) {
43
43
  return null;
44
44
  }
45
45
  const subs = [];
46
46
  if (substancesStr) {
47
47
  for (let i = 0; i < substancesStr.length; i++) {
48
48
  const abbr = substancesStr[i];
49
- const fullName = substances_1.substanceAbbreviations[abbr];
50
- if (!fullName || !substances_1.substances[fullName]) {
49
+ const fullName = substanceAbbreviations[abbr];
50
+ if (!fullName || !substances[fullName]) {
51
51
  return null;
52
52
  }
53
53
  subs.push(fullName);
@@ -58,13 +58,17 @@ function decodeMixState(hash) {
58
58
  substances: subs,
59
59
  };
60
60
  }
61
- catch (error) {
61
+ catch {
62
62
  return null;
63
63
  }
64
64
  }
65
- async function migrateMixHash(legacyHash) {
65
+ /**
66
+ * Migrates a legacy LZ-compressed hash to the current format.
67
+ * Returns null if migration fails.
68
+ */
69
+ export async function migrateMixHash(legacyHash) {
66
70
  try {
67
- const jsonStr = lz_string_1.default.decompressFromBase64(legacyHash);
71
+ const jsonStr = LZString.decompressFromBase64(legacyHash);
68
72
  if (!jsonStr)
69
73
  return null;
70
74
  const mixArr = JSON.parse(jsonStr);
@@ -72,9 +76,9 @@ async function migrateMixHash(legacyHash) {
72
76
  return null;
73
77
  const firstMix = mixArr[0];
74
78
  const productId = firstMix.weed;
75
- if (!products_1.products[productId])
79
+ if (!products[productId])
76
80
  return null;
77
- const subsByAbbr = Object.entries(substances_1.substances).reduce((map, [id, sub]) => {
81
+ const subsByAbbr = Object.entries(substances).reduce((map, [id, sub]) => {
78
82
  if (sub.abbreviation)
79
83
  map[sub.abbreviation] = id;
80
84
  return map;
@@ -82,7 +86,7 @@ async function migrateMixHash(legacyHash) {
82
86
  const substanceIds = [];
83
87
  if (Array.isArray(firstMix.substances)) {
84
88
  for (const legacySubId of firstMix.substances) {
85
- const substanceId = substances_1.substances[legacySubId]
89
+ const substanceId = substances[legacySubId]
86
90
  ? legacySubId
87
91
  : subsByAbbr[legacySubId];
88
92
  if (substanceId)
@@ -111,4 +115,3 @@ function fromBase64Url(str) {
111
115
  const padded = padding ? base64 + '='.repeat(4 - padding) : base64;
112
116
  return Buffer.from(padded, 'base64').toString('utf-8');
113
117
  }
114
- //# sourceMappingURL=encoding.js.map
package/package.json CHANGED
@@ -1,17 +1,24 @@
1
1
  {
2
2
  "name": "@schedule1-tools/mixer",
3
- "version": "0.2.5",
3
+ "version": "0.3.1",
4
4
  "description": "A package for calculating substance mixes in Schedule 1",
5
+ "type": "module",
5
6
  "main": "dist/index.js",
6
7
  "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ }
13
+ },
7
14
  "files": [
8
15
  "dist"
9
16
  ],
10
17
  "scripts": {
11
- "build": "tsc",
12
- "test": "jest",
13
- "test:coverage": "jest --coverage",
14
- "prepublishOnly": "pnpm run test && pnpm run build",
18
+ "build": "tsc -p tsconfig.build.json",
19
+ "test": "bun jest",
20
+ "test:coverage": "bun jest --coverage",
21
+ "prepublishOnly": "bun run test && bun run build",
15
22
  "format": "prettier --write ."
16
23
  },
17
24
  "keywords": [
@@ -23,13 +30,14 @@
23
30
  "lz-string": "^1.5.0"
24
31
  },
25
32
  "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
+ "@ianvs/prettier-plugin-sort-imports": "^4.7.1",
34
+ "@types/bun": "^1.3.11",
35
+ "@types/jest": "^30.0.0",
36
+ "@types/node": "^25.5.0",
37
+ "jest": "^30.3.0",
38
+ "prettier": "^3.8.1",
39
+ "ts-jest": "^29.4.6",
40
+ "typescript": "^6.0.2"
33
41
  },
34
42
  "repository": {
35
43
  "type": "git",
@@ -1 +0,0 @@
1
- {"version":3,"file":"effectSet.js","sourceRoot":"","sources":["../../src/core/effectSet.ts"],"names":[],"mappings":";;;AAEA,MAAa,SAAS;IAGpB,YAAY,iBAA+B,EAAE;QAC3C,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC;IACzC,CAAC;IAOD,GAAG,CAAC,MAAkB;QACpB,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACzB,OAAO,CAAC,aAAa,CAAC;IACxB,CAAC;IAOD,MAAM,CAAC,MAAkB;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5B,OAAO,OAAO,CAAC;IACjB,CAAC;IAOD,GAAG,CAAC,MAAkB;QACpB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IAMD,OAAO;QACL,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAMD,IAAI;QACF,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IAMD,KAAK;QACH,MAAM,KAAK,GAAG,IAAI,SAAS,EAAE,CAAC;QAC9B,KAAK,CAAC,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtC,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AA/DD,8BA+DC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"mixer.js","sourceRoot":"","sources":["../../src/core/mixer.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"effects.js","sourceRoot":"","sources":["../../src/data/effects.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"products.js","sourceRoot":"","sources":["../../src/data/products.ts"],"names":[],"mappings":";;;AAEa,QAAA,QAAQ,GAAiC;IACpD,SAAS,EAAE;QACT,KAAK,EAAE,EAAE;QACT,IAAI,EAAE,GAAG;QACT,OAAO,EAAE,CAAC,IAAI,CAAC;QACf,YAAY,EAAE,IAAI;KACnB;IACD,aAAa,EAAE;QACb,KAAK,EAAE,EAAE;QACT,IAAI,EAAE,GAAG;QACT,OAAO,EAAE,CAAC,IAAI,CAAC;QACf,YAAY,EAAE,IAAI;KACnB;IACD,aAAa,EAAE;QACb,KAAK,EAAE,EAAE;QACT,IAAI,EAAE,GAAG;QACT,OAAO,EAAE,CAAC,IAAI,CAAC;QACf,YAAY,EAAE,IAAI;KACnB;IACD,kBAAkB,EAAE;QAClB,KAAK,EAAE,EAAE;QACT,IAAI,EAAE,GAAG;QACT,OAAO,EAAE,CAAC,IAAI,CAAC;QACf,YAAY,EAAE,IAAI;KACnB;IACD,IAAI,EAAE;QACJ,KAAK,EAAE,EAAE;QACT,IAAI,EAAE,GAAG;QACT,OAAO,EAAE,EAAE;QACX,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,GAAG;KACf;IACD,OAAO,EAAE;QACP,KAAK,EAAE,GAAG;QACV,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,EAAE;QACX,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,GAAG;KACf;IACD,OAAO,EAAE;QACP,KAAK,EAAE,EAAE;QACT,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,EAAE;QACX,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,IAAI;KAChB;CACF,CAAC;AAEW,QAAA,oBAAoB,GAA4B,MAAM,CAAC,OAAO,CAAC,gBAAQ,CAAC,CAAC,MAAM,CAC1F,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE;IACvB,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,OAAkB,CAAC;IAC5C,OAAO,GAAG,CAAC;AACb,CAAC,EACD,EAA6B,CAC9B,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/data/rules.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"substances.js","sourceRoot":"","sources":["../../src/data/substances.ts"],"names":[],"mappings":"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"}
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
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"}
package/dist/types.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"encoding.js","sourceRoot":"","sources":["../../src/utils/encoding.ts"],"names":[],"mappings":"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"}