@e280/strata 0.0.0-3 → 0.0.0-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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@e280/strata",
3
- "version": "0.0.0-3",
3
+ "version": "0.0.0-5",
4
4
  "description": "state management",
5
5
  "license": "MIT",
6
6
  "author": "Chase Moskal <chasemoskal@gmail.com>",
@@ -41,6 +41,6 @@
41
41
  "url": "https://github.com/e280/strata/issues"
42
42
  },
43
43
  "dependencies": {
44
- "@e280/stz": "^0.0.0-24"
44
+ "@e280/stz": "^0.0.0-27"
45
45
  }
46
46
  }
@@ -2,13 +2,13 @@
2
2
  import {Substrata} from "./substrata.js"
3
3
  import {Chronicle, Mutator, Options, Selector, Stratum, Substate} from "./types.js"
4
4
 
5
- export class Chronstrata<ParentState extends Substate, S extends Substate> implements Stratum<S> {
6
- #substrata: Substrata<ParentState, Chronicle<S>>
5
+ export class Chronstrata<S extends Substate, ParentState extends Substate = any> implements Stratum<S> {
6
+ #substrata: Substrata<Chronicle<S>, ParentState>
7
7
 
8
8
  constructor(
9
9
  public limit: number,
10
10
  public parent: Stratum<ParentState>,
11
- public selector: Selector<ParentState, Chronicle<S>>,
11
+ public selector: Selector<Chronicle<S>, ParentState>,
12
12
  public options: Options,
13
13
  ) {
14
14
  this.#substrata = parent.substrata(selector)
@@ -77,7 +77,7 @@ export class Chronstrata<ParentState extends Substate, S extends Substate> imple
77
77
  })
78
78
  }
79
79
 
80
- substrata<Sub extends Substate>(selector: Selector<S, Sub>): Substrata<S, Sub> {
80
+ substrata<Sub extends Substate>(selector: Selector<Sub, S>): Substrata<Sub, S> {
81
81
  return new Substrata(this, selector, this.options)
82
82
  }
83
83
  }
package/s/parts/strata.ts CHANGED
@@ -1,8 +1,8 @@
1
1
 
2
- import {debounce, deep, sub} from "@e280/stz"
2
+ import {debounce, deep, sub, tracker} from "@e280/stz"
3
3
 
4
- import {strataSetup} from "./utils/setup.js"
5
4
  import {Substrata} from "./substrata.js"
5
+ import {strataSetup} from "./utils/setup.js"
6
6
  import {Chronstrata} from "./chronstrata.js"
7
7
  import {processOptions} from "./utils/process-options.js"
8
8
  import {Chronicle, Mutator, Options, Selector, State, Stratum, Substate} from "./types.js"
@@ -29,6 +29,7 @@ export class Strata<S extends State> implements Stratum<S> {
29
29
  }
30
30
 
31
31
  get state() {
32
+ tracker.see(this)
32
33
  return this.#immutable
33
34
  }
34
35
 
@@ -51,13 +52,13 @@ export class Strata<S extends State> implements Stratum<S> {
51
52
  await this.#dispatchMutation()
52
53
  }
53
54
 
54
- substrata<Sub extends Substate>(selector: Selector<S, Sub>): Substrata<S, Sub> {
55
+ substrata<Sub extends Substate>(selector: Selector<Sub, S>): Substrata<Sub, S> {
55
56
  return new Substrata(this, selector, this.options)
56
57
  }
57
58
 
58
59
  chronstrata<Sub extends Substate>(
59
60
  limit: number,
60
- selector: Selector<S, Chronicle<Sub>>,
61
+ selector: Selector<Chronicle<Sub>, S>,
61
62
  ) {
62
63
  return new Chronstrata(limit, this, selector, this.options)
63
64
  }
@@ -66,6 +67,7 @@ export class Strata<S extends State> implements Stratum<S> {
66
67
  this.#mutationLock++
67
68
  try { await this.watch.pub(this.#immutable) }
68
69
  finally { this.#mutationLock-- }
70
+ tracker.change(this)
69
71
  })
70
72
  }
71
73
 
@@ -1,18 +1,22 @@
1
1
 
2
- import {debounce, deep, sub} from "@e280/stz"
2
+ import {debounce, deep, sub, tracker} from "@e280/stz"
3
+
3
4
  import {Chronstrata} from "./chronstrata.js"
4
5
  import {Chronicle, Mutator, Options, Selector, Stratum, Substate} from "./types.js"
5
6
 
6
- export class Substrata<ParentState extends Substate, S extends Substate> implements Stratum<S> {
7
+ export class Substrata<S extends Substate, ParentState extends Substate = any> implements Stratum<S> {
7
8
  dispose: () => void
8
9
  watch = sub<[state: S]>()
9
10
 
10
11
  #immutable: S
11
- #dispatchMutation = debounce(0, (state: S) => this.watch.pub(state))
12
+ #dispatchMutation = debounce(0, async(state: S) => {
13
+ await this.watch.pub(state)
14
+ tracker.change(this)
15
+ })
12
16
 
13
17
  constructor(
14
18
  private parent: Stratum<ParentState>,
15
- private selector: Selector<ParentState, S>,
19
+ private selector: Selector<S, ParentState>,
16
20
  private options: Options,
17
21
  ) {
18
22
 
@@ -36,6 +40,7 @@ export class Substrata<ParentState extends Substate, S extends Substate> impleme
36
40
  }
37
41
 
38
42
  get state(): S {
43
+ tracker.see(this)
39
44
  return this.#immutable
40
45
  }
41
46
 
@@ -44,13 +49,13 @@ export class Substrata<ParentState extends Substate, S extends Substate> impleme
44
49
  return this.#immutable
45
50
  }
46
51
 
47
- substrata<Sub extends Substate>(selector: Selector<S, Sub>): Substrata<S, Sub> {
52
+ substrata<Sub extends Substate>(selector: Selector<Sub, S>): Substrata<Sub, S> {
48
53
  return new Substrata(this, selector, this.options)
49
54
  }
50
55
 
51
56
  chronstrata<Sub extends Substate>(
52
57
  limit: number,
53
- selector: Selector<S, Chronicle<Sub>>,
58
+ selector: Selector<Chronicle<Sub>, S>,
54
59
  ) {
55
60
  return new Chronstrata(limit, this, selector, this.options)
56
61
  }
package/s/parts/types.ts CHANGED
@@ -5,7 +5,7 @@ export type Options = {
5
5
  clone: <X>(x: X) => X
6
6
  }
7
7
 
8
- export type Selector<S, Sub> = (state: S) => Sub
8
+ export type Selector<Sub, S> = (state: S) => Sub
9
9
  export type Mutator<S> = (state: S) => void
10
10
 
11
11
  export type State = {}
@@ -20,7 +20,7 @@ export type Stratum<S extends Substate> = {
20
20
  readonly state: S
21
21
  watch(fn: (s: S) => void): () => void
22
22
  mutate(mutator: Mutator<S>): Promise<S>
23
- substrata<Sub extends Substate>(selector: Selector<S, Sub>): Substrata<S, Sub>
23
+ substrata<Sub extends Substate>(selector: Selector<Sub, S>): Substrata<Sub, S>
24
24
  }
25
25
 
26
26
  export type SetupOptions<S extends State> = {
@@ -2,6 +2,6 @@
2
2
  import {Options} from "../types.js"
3
3
 
4
4
  export const processOptions = (options: Partial<Options>): Options => ({
5
- clone: options.clone ?? structuredClone,
5
+ clone: options.clone ?? (<X>(x: X) => structuredClone(x)),
6
6
  })
7
7
 
@@ -1,12 +1,12 @@
1
1
  import { Substrata } from "./substrata.js";
2
2
  import { Chronicle, Mutator, Options, Selector, Stratum, Substate } from "./types.js";
3
- export declare class Chronstrata<ParentState extends Substate, S extends Substate> implements Stratum<S> {
3
+ export declare class Chronstrata<S extends Substate, ParentState extends Substate = any> implements Stratum<S> {
4
4
  #private;
5
5
  limit: number;
6
6
  parent: Stratum<ParentState>;
7
- selector: Selector<ParentState, Chronicle<S>>;
7
+ selector: Selector<Chronicle<S>, ParentState>;
8
8
  options: Options;
9
- constructor(limit: number, parent: Stratum<ParentState>, selector: Selector<ParentState, Chronicle<S>>, options: Options);
9
+ constructor(limit: number, parent: Stratum<ParentState>, selector: Selector<Chronicle<S>, ParentState>, options: Options);
10
10
  get state(): S;
11
11
  get undoable(): number;
12
12
  get redoable(): number;
@@ -19,5 +19,5 @@ export declare class Chronstrata<ParentState extends Substate, S extends Substat
19
19
  redo(n?: number): Promise<void>;
20
20
  /** wipe past and future snapshots */
21
21
  wipe(): Promise<void>;
22
- substrata<Sub extends Substate>(selector: Selector<S, Sub>): Substrata<S, Sub>;
22
+ substrata<Sub extends Substate>(selector: Selector<Sub, S>): Substrata<Sub, S>;
23
23
  }
@@ -1,5 +1,5 @@
1
- import { strataSetup } from "./utils/setup.js";
2
1
  import { Substrata } from "./substrata.js";
2
+ import { strataSetup } from "./utils/setup.js";
3
3
  import { Chronstrata } from "./chronstrata.js";
4
4
  import { Chronicle, Mutator, Options, Selector, State, Stratum, Substate } from "./types.js";
5
5
  export declare class Strata<S extends State> implements Stratum<S> {
@@ -12,6 +12,6 @@ export declare class Strata<S extends State> implements Stratum<S> {
12
12
  get state(): S;
13
13
  mutate(mutator: Mutator<S>): Promise<S>;
14
14
  overwrite(state: S): Promise<void>;
15
- substrata<Sub extends Substate>(selector: Selector<S, Sub>): Substrata<S, Sub>;
16
- chronstrata<Sub extends Substate>(limit: number, selector: Selector<S, Chronicle<Sub>>): Chronstrata<S, Sub>;
15
+ substrata<Sub extends Substate>(selector: Selector<Sub, S>): Substrata<Sub, S>;
16
+ chronstrata<Sub extends Substate>(limit: number, selector: Selector<Chronicle<Sub>, S>): Chronstrata<Sub, S>;
17
17
  }
package/x/parts/strata.js CHANGED
@@ -1,6 +1,6 @@
1
- import { debounce, deep, sub } from "@e280/stz";
2
- import { strataSetup } from "./utils/setup.js";
1
+ import { debounce, deep, sub, tracker } from "@e280/stz";
3
2
  import { Substrata } from "./substrata.js";
3
+ import { strataSetup } from "./utils/setup.js";
4
4
  import { Chronstrata } from "./chronstrata.js";
5
5
  import { processOptions } from "./utils/process-options.js";
6
6
  export class Strata {
@@ -21,6 +21,7 @@ export class Strata {
21
21
  this.#immutable = deep.freeze(this.options.clone(state));
22
22
  }
23
23
  get state() {
24
+ tracker.see(this);
24
25
  return this.#immutable;
25
26
  }
26
27
  async mutate(mutator) {
@@ -59,6 +60,7 @@ export class Strata {
59
60
  finally {
60
61
  this.#mutationLock--;
61
62
  }
63
+ tracker.change(this);
62
64
  });
63
65
  }
64
66
  //# sourceMappingURL=strata.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"strata.js","sourceRoot":"","sources":["../../s/parts/strata.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"strata.js","sourceRoot":"","sources":["../../s/parts/strata.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,15 @@
1
1
  import { Chronstrata } from "./chronstrata.js";
2
2
  import { Chronicle, Mutator, Options, Selector, Stratum, Substate } from "./types.js";
3
- export declare class Substrata<ParentState extends Substate, S extends Substate> implements Stratum<S> {
3
+ export declare class Substrata<S extends Substate, ParentState extends Substate = any> implements Stratum<S> {
4
4
  #private;
5
5
  private parent;
6
6
  private selector;
7
7
  private options;
8
8
  dispose: () => void;
9
9
  watch: import("@e280/stz").Sub<[state: S]>;
10
- constructor(parent: Stratum<ParentState>, selector: Selector<ParentState, S>, options: Options);
10
+ constructor(parent: Stratum<ParentState>, selector: Selector<S, ParentState>, options: Options);
11
11
  get state(): S;
12
12
  mutate(mutator: Mutator<S>): Promise<S>;
13
- substrata<Sub extends Substate>(selector: Selector<S, Sub>): Substrata<S, Sub>;
14
- chronstrata<Sub extends Substate>(limit: number, selector: Selector<S, Chronicle<Sub>>): Chronstrata<S, Sub>;
13
+ substrata<Sub extends Substate>(selector: Selector<Sub, S>): Substrata<Sub, S>;
14
+ chronstrata<Sub extends Substate>(limit: number, selector: Selector<Chronicle<Sub>, S>): Chronstrata<Sub, S>;
15
15
  }
@@ -1,4 +1,4 @@
1
- import { debounce, deep, sub } from "@e280/stz";
1
+ import { debounce, deep, sub, tracker } from "@e280/stz";
2
2
  import { Chronstrata } from "./chronstrata.js";
3
3
  export class Substrata {
4
4
  parent;
@@ -7,7 +7,10 @@ export class Substrata {
7
7
  dispose;
8
8
  watch = sub();
9
9
  #immutable;
10
- #dispatchMutation = debounce(0, (state) => this.watch.pub(state));
10
+ #dispatchMutation = debounce(0, async (state) => {
11
+ await this.watch.pub(state);
12
+ tracker.change(this);
13
+ });
11
14
  constructor(parent, selector, options) {
12
15
  this.parent = parent;
13
16
  this.selector = selector;
@@ -29,6 +32,7 @@ export class Substrata {
29
32
  this.#immutable = deep.freeze(this.options.clone(state));
30
33
  }
31
34
  get state() {
35
+ tracker.see(this);
32
36
  return this.#immutable;
33
37
  }
34
38
  async mutate(mutator) {
@@ -1 +1 @@
1
- {"version":3,"file":"substrata.js","sourceRoot":"","sources":["../../s/parts/substrata.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAC,MAAM,WAAW,CAAA;AAC7C,OAAO,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAA;AAG5C,MAAM,OAAO,SAAS;IAQX;IACA;IACA;IATV,OAAO,CAAY;IACnB,KAAK,GAAG,GAAG,EAAc,CAAA;IAEzB,UAAU,CAAG;IACb,iBAAiB,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAA;IAEpE,YACU,MAA4B,EAC5B,QAAkC,EAClC,OAAgB;QAFhB,WAAM,GAAN,MAAM,CAAsB;QAC5B,aAAQ,GAAR,QAAQ,CAA0B;QAClC,YAAO,GAAP,OAAO,CAAS;QAGzB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC9C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;QAExD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAC,WAAW,EAAC,EAAE;YACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAA;YAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;YAC3C,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;YACjD,IAAI,SAAS,EAAE,CAAC;gBACf,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;gBAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAA;gBAC5B,MAAM,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAA;YACxC,CAAC;QACF,CAAC,CAAC,CAAA;IACH,CAAC;IAED,YAAY,CAAC,KAAQ;QACpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;IACzD,CAAC;IAED,IAAI,KAAK;QACR,OAAO,IAAI,CAAC,UAAU,CAAA;IACvB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAmB;QAC/B,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;QAC5E,OAAO,IAAI,CAAC,UAAU,CAAA;IACvB,CAAC;IAED,SAAS,CAAuB,QAA0B;QACzD,OAAO,IAAI,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;IACnD,CAAC;IAED,WAAW,CACT,KAAa,EACb,QAAqC;QAEtC,OAAO,IAAI,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;IAC5D,CAAC;CACD"}
1
+ {"version":3,"file":"substrata.js","sourceRoot":"","sources":["../../s/parts/substrata.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAC,MAAM,WAAW,CAAA;AAEtD,OAAO,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAA;AAG5C,MAAM,OAAO,SAAS;IAWX;IACA;IACA;IAZV,OAAO,CAAY;IACnB,KAAK,GAAG,GAAG,EAAc,CAAA;IAEzB,UAAU,CAAG;IACb,iBAAiB,GAAG,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAC,KAAQ,EAAE,EAAE;QACjD,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QAC3B,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACrB,CAAC,CAAC,CAAA;IAEF,YACU,MAA4B,EAC5B,QAAkC,EAClC,OAAgB;QAFhB,WAAM,GAAN,MAAM,CAAsB;QAC5B,aAAQ,GAAR,QAAQ,CAA0B;QAClC,YAAO,GAAP,OAAO,CAAS;QAGzB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC9C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;QAExD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAC,WAAW,EAAC,EAAE;YACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAA;YAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;YAC3C,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;YACjD,IAAI,SAAS,EAAE,CAAC;gBACf,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;gBAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAA;gBAC5B,MAAM,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAA;YACxC,CAAC;QACF,CAAC,CAAC,CAAA;IACH,CAAC;IAED,YAAY,CAAC,KAAQ;QACpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;IACzD,CAAC;IAED,IAAI,KAAK;QACR,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACjB,OAAO,IAAI,CAAC,UAAU,CAAA;IACvB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAmB;QAC/B,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;QAC5E,OAAO,IAAI,CAAC,UAAU,CAAA;IACvB,CAAC;IAED,SAAS,CAAuB,QAA0B;QACzD,OAAO,IAAI,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;IACnD,CAAC;IAED,WAAW,CACT,KAAa,EACb,QAAqC;QAEtC,OAAO,IAAI,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;IAC5D,CAAC;CACD"}
@@ -2,7 +2,7 @@ import { Substrata } from "./substrata.js";
2
2
  export type Options = {
3
3
  clone: <X>(x: X) => X;
4
4
  };
5
- export type Selector<S, Sub> = (state: S) => Sub;
5
+ export type Selector<Sub, S> = (state: S) => Sub;
6
6
  export type Mutator<S> = (state: S) => void;
7
7
  export type State = {};
8
8
  export type Substate = {} | null | undefined;
@@ -14,7 +14,7 @@ export type Stratum<S extends Substate> = {
14
14
  readonly state: S;
15
15
  watch(fn: (s: S) => void): () => void;
16
16
  mutate(mutator: Mutator<S>): Promise<S>;
17
- substrata<Sub extends Substate>(selector: Selector<S, Sub>): Substrata<S, Sub>;
17
+ substrata<Sub extends Substate>(selector: Selector<Sub, S>): Substrata<Sub, S>;
18
18
  };
19
19
  export type SetupOptions<S extends State> = {
20
20
  version: number;
@@ -1,4 +1,4 @@
1
1
  export const processOptions = (options) => ({
2
- clone: options.clone ?? structuredClone,
2
+ clone: options.clone ?? ((x) => structuredClone(x)),
3
3
  });
4
4
  //# sourceMappingURL=process-options.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"process-options.js","sourceRoot":"","sources":["../../../s/parts/utils/process-options.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,OAAyB,EAAW,EAAE,CAAC,CAAC;IACtE,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,eAAe;CACvC,CAAC,CAAA"}
1
+ {"version":3,"file":"process-options.js","sourceRoot":"","sources":["../../../s/parts/utils/process-options.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,OAAyB,EAAW,EAAE,CAAC,CAAC;IACtE,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC,CAAI,CAAI,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;CACzD,CAAC,CAAA"}