pareto-core 0.1.257 → 0.1.259

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.
@@ -1,30 +1,129 @@
1
1
  import * as p_di from "../../../interface/data.js";
2
2
  import * as p_ri from "../../../interface/refiner.js";
3
3
  import { type Abort } from "../../../interface/__internal/Abort.js";
4
+ /**
5
+ * Wraps a dictionary and provides entry lookup and transformation methods.
6
+ */
4
7
  export declare const dictionary: <T extends p_di.Value>(dict: p_di.Dictionary<T>) => {
8
+ /**
9
+ * Retrieves the entry with the given id.
10
+ * Calls `abort.no_such_entry` if no entry with that id exists.
11
+ * @param id the id of the entry to retrieve
12
+ * @param abort callbacks invoked on error; `no_such_entry` is called when the id is not found
13
+ * @returns the value of the entry
14
+ */
5
15
  get_entry(id: string, abort: {
6
16
  no_such_entry: Abort<null>;
7
17
  }): T;
18
+ /**
19
+ * Retrieves the entry with the given id if it exists, otherwise returns a not-set optional.
20
+ * @param id the id of the entry to retrieve
21
+ * @returns a set optional containing the entry value, or not-set if the id is not found
22
+ */
8
23
  get_possible_entry(id: string): p_di.Optional_Value<T>;
24
+ /**
25
+ * Converts the values of the dictionary to a new type using the provided assign_entry function.
26
+ * @param assign_entry function to convert each entry; receives the current value and the entry id
27
+ * @returns a new dictionary with the same ids and the converted values
28
+ */
9
29
  map: <New_Type extends p_di.Value>(assign_entry: (value: T, id: string) => New_Type) => p_di.Dictionary<New_Type>;
30
+ /**
31
+ * gives the entries in the dictionary a new id.
32
+ * if a duplicate id is found, the duplicate_id function is called to get the target dictionary
33
+ * typically, you will use this function in a way where you can guarantee that there will be no duplicate ids, and the duplicate_id function will never be called,
34
+ * so you typically will have a p_unreachable_code_path() call
35
+ */
36
+ re_id: (get_id: ($: T, id: string) => string, on_duplicate_id: ($: T, id: string) => never) => p_di.Dictionary<T>;
37
+ /**
38
+ * Maps each entry to a resolved value, supporting cross-entry lookups during resolution.
39
+ *
40
+ * The `acyclic_lookup` allows looking up other entries that should not have any direct or indirect
41
+ * dependency on the current entry; they are resolved on the spot if not yet resolved.
42
+ * A `cycle_detected` abort is triggered if a cycle is found.
43
+ *
44
+ * The `cyclic_lookup` allows referencing entries that may depend on the current entry.
45
+ * It returns a handle whose `get_circular_dependent` must not be called until all entries
46
+ * in the dictionary have been fully resolved; accessing it too early triggers the
47
+ * `accessing_cyclic_sibling_before_it_is_resolved` abort.
48
+ *
49
+ * @param assign_entry function called for each entry with its value, id, and both lookup handles
50
+ * @returns a new dictionary containing the resolved values
51
+ */
10
52
  resolve: <Resolved extends p_di.Value>(assign_entry: (value: T, id: string, acyclic_lookup: p_ri.lookup.Acyclic<Resolved>, cyclic_lookup: p_ri.lookup.Cyclic<Resolved>) => Resolved) => p_di.Dictionary<Resolved>;
11
53
  };
54
+ /**
55
+ * Wraps a list and provides conversion and transformation methods.
56
+ */
12
57
  export declare const list: <T extends p_di.Value>(list: p_di.List<T>) => {
58
+ /**
59
+ * Converts the list to a dictionary using the provided id and value functions.
60
+ * first asks for the id of an item, then for the value of that item.
61
+ * Calls `abort.duplicate_id` if two items produce the same id.
62
+ * @param get_id function to derive the dictionary key from each item
63
+ * @param get_value function to derive the dictionary value from each item
64
+ * @param abort callbacks invoked on error; `duplicate_id` is called with the conflicting id
65
+ * @returns a new dictionary built from the list items
66
+ */
13
67
  convert_to_dictionary: <NT extends p_di.Value>(get_id: (item: T) => string, get_value: (item: T) => NT, abort: {
14
68
  duplicate_id: Abort<string>;
15
69
  }) => p_di.Dictionary<NT>;
70
+ /**
71
+ * Converts the items in the list to a new type using the provided assign_item function.
72
+ * @param assign_item function to convert each item to a new value
73
+ * @returns a new list containing the converted values
74
+ */
16
75
  map: <New_Type extends p_di.Value>(assign_item: (item: T) => New_Type) => p_di.List<New_Type>;
76
+ /**
77
+ * Maps the items in the list to a new type while maintaining a state that is updated with each item.
78
+ * @param initial_state the initial value of the state before processing any items
79
+ * @param assign_item function to convert each item using the current state
80
+ * @param update_state function to produce the next state from the converted item and the current state
81
+ * @param wrapup function called once with the final converted list and the final state to produce the result
82
+ * @returns the result produced by `wrapup`
83
+ */
17
84
  map_with_state: <Target_Item extends p_di.Value, State, Result_Type extends {
18
85
  [id: string]: p_di.Value;
19
86
  }>(initial_state: State, assign_item: (item: T, state: State) => Target_Item, update_state: (item: Target_Item, state: State) => State, wrapup: (final_list: p_di.List<Target_Item>, final_state: State) => Result_Type) => Result_Type;
20
87
  };
88
+ /**
89
+ * Wraps an optional value and provides methods to handle both the set and not-set cases.
90
+ */
21
91
  export declare const optional: <T extends p_di.Value>(optional_value: p_di.Optional_Value<T>) => {
92
+ /**
93
+ * Calls `if_set` with the wrapped value if it is set, otherwise calls `if_not_set`.
94
+ * @param if_set function to call with the value when it is set
95
+ * @param if_not_set function to call when the value is not set
96
+ * @returns the result of whichever function was called
97
+ */
22
98
  decide: <RT extends p_di.Value>(if_set: ($: T) => RT, if_not_set: () => RT) => RT;
99
+ /**
100
+ * Transforms the wrapped value using the provided function if it is set.
101
+ * If the value is not set, returns a not-set optional.
102
+ * @param assign_set_value function to transform the value
103
+ * @returns a new optional containing the transformed value, or not-set if the original was not set
104
+ */
23
105
  map: <New_Type extends p_di.Value>(assign_set_value: (value: T) => New_Type) => p_di.Optional_Value<New_Type>;
24
106
  };
107
+ /**
108
+ * Wraps a state value and provides a method to produce a result from it.
109
+ */
25
110
  export declare const state: <State extends p_di.State>(state: State) => {
111
+ /**
112
+ * Passes the state to the provided function and returns the result.
113
+ * @param assign function to produce a result from the state
114
+ * @returns the result produced by `assign`
115
+ */
26
116
  decide: <RT extends p_di.Value>(assign: (output: State) => RT) => RT;
27
117
  };
118
+ /**
119
+ * Wraps a string value and provides a method to convert it into a state.
120
+ */
28
121
  export declare const text: (string: string) => {
122
+ /**
123
+ * Converts the string into a state value using the provided function and context.
124
+ * @param context additional context passed to `assign_state`
125
+ * @param assign_state function that receives the context and the string and returns the state
126
+ * @returns the state produced by `assign_state`
127
+ */
29
128
  to_state: <State extends p_di.State, Context extends p_di.Value>(context: Context, assign_state: ($: Context, text: string) => State) => State;
30
129
  };
@@ -3,8 +3,18 @@ import * as p_ri from "../../../interface/refiner.js";
3
3
  import {} from "../../../interface/__internal/Abort.js";
4
4
  import * as lit from "../sync/literal.js";
5
5
  import { Dictionary_Class } from "../sync/primitives/Dictionary.js";
6
+ /**
7
+ * Wraps a dictionary and provides entry lookup and transformation methods.
8
+ */
6
9
  export const dictionary = (dict) => {
7
10
  return {
11
+ /**
12
+ * Retrieves the entry with the given id.
13
+ * Calls `abort.no_such_entry` if no entry with that id exists.
14
+ * @param id the id of the entry to retrieve
15
+ * @param abort callbacks invoked on error; `no_such_entry` is called when the id is not found
16
+ * @returns the value of the entry
17
+ */
8
18
  get_entry(id, abort) {
9
19
  const raw = dict.__get_raw();
10
20
  for (let i = 0; i !== raw.length; i += 1) {
@@ -15,6 +25,11 @@ export const dictionary = (dict) => {
15
25
  }
16
26
  return abort.no_such_entry(null);
17
27
  },
28
+ /**
29
+ * Retrieves the entry with the given id if it exists, otherwise returns a not-set optional.
30
+ * @param id the id of the entry to retrieve
31
+ * @returns a set optional containing the entry value, or not-set if the id is not found
32
+ */
18
33
  get_possible_entry(id) {
19
34
  const raw = dict.__get_raw();
20
35
  for (let i = 0; i !== raw.length; i += 1) {
@@ -25,6 +40,11 @@ export const dictionary = (dict) => {
25
40
  }
26
41
  return lit.not_set();
27
42
  },
43
+ /**
44
+ * Converts the values of the dictionary to a new type using the provided assign_entry function.
45
+ * @param assign_entry function to convert each entry; receives the current value and the entry id
46
+ * @returns a new dictionary with the same ids and the converted values
47
+ */
28
48
  map: (assign_entry) => {
29
49
  //this local function helps with type inference
30
50
  const temp_d_map = (mapper) => {
@@ -37,6 +57,40 @@ export const dictionary = (dict) => {
37
57
  };
38
58
  return temp_d_map(assign_entry);
39
59
  },
60
+ /**
61
+ * gives the entries in the dictionary a new id.
62
+ * if a duplicate id is found, the duplicate_id function is called to get the target dictionary
63
+ * typically, you will use this function in a way where you can guarantee that there will be no duplicate ids, and the duplicate_id function will never be called,
64
+ * so you typically will have a p_unreachable_code_path() call
65
+ */
66
+ re_id: (get_id, on_duplicate_id) => {
67
+ const temp = {};
68
+ dict.__get_raw().forEach(([id, value]) => {
69
+ const new_id = get_id(value, id);
70
+ if (temp[new_id] !== undefined) {
71
+ return on_duplicate_id(value, id);
72
+ }
73
+ else {
74
+ temp[new_id] = value;
75
+ }
76
+ });
77
+ return lit.dictionary(temp);
78
+ },
79
+ /**
80
+ * Maps each entry to a resolved value, supporting cross-entry lookups during resolution.
81
+ *
82
+ * The `acyclic_lookup` allows looking up other entries that should not have any direct or indirect
83
+ * dependency on the current entry; they are resolved on the spot if not yet resolved.
84
+ * A `cycle_detected` abort is triggered if a cycle is found.
85
+ *
86
+ * The `cyclic_lookup` allows referencing entries that may depend on the current entry.
87
+ * It returns a handle whose `get_circular_dependent` must not be called until all entries
88
+ * in the dictionary have been fully resolved; accessing it too early triggers the
89
+ * `accessing_cyclic_sibling_before_it_is_resolved` abort.
90
+ *
91
+ * @param assign_entry function called for each entry with its value, id, and both lookup handles
92
+ * @returns a new dictionary containing the resolved values
93
+ */
40
94
  resolve: (assign_entry) => {
41
95
  const source = dict;
42
96
  const out = {};
@@ -119,8 +173,20 @@ export const dictionary = (dict) => {
119
173
  },
120
174
  };
121
175
  };
176
+ /**
177
+ * Wraps a list and provides conversion and transformation methods.
178
+ */
122
179
  export const list = (list) => {
123
180
  return {
181
+ /**
182
+ * Converts the list to a dictionary using the provided id and value functions.
183
+ * first asks for the id of an item, then for the value of that item.
184
+ * Calls `abort.duplicate_id` if two items produce the same id.
185
+ * @param get_id function to derive the dictionary key from each item
186
+ * @param get_value function to derive the dictionary value from each item
187
+ * @param abort callbacks invoked on error; `duplicate_id` is called with the conflicting id
188
+ * @returns a new dictionary built from the list items
189
+ */
124
190
  convert_to_dictionary: (get_id, get_value, abort) => {
125
191
  const temp = {};
126
192
  list.__get_raw().forEach(($) => {
@@ -132,11 +198,24 @@ export const list = (list) => {
132
198
  });
133
199
  return lit.dictionary(temp);
134
200
  },
201
+ /**
202
+ * Converts the items in the list to a new type using the provided assign_item function.
203
+ * @param assign_item function to convert each item to a new value
204
+ * @returns a new list containing the converted values
205
+ */
135
206
  map: (assign_item) => {
136
207
  return lit.list(list.__get_raw().map((entry) => {
137
208
  return assign_item(entry);
138
209
  }));
139
210
  },
211
+ /**
212
+ * Maps the items in the list to a new type while maintaining a state that is updated with each item.
213
+ * @param initial_state the initial value of the state before processing any items
214
+ * @param assign_item function to convert each item using the current state
215
+ * @param update_state function to produce the next state from the converted item and the current state
216
+ * @param wrapup function called once with the final converted list and the final state to produce the result
217
+ * @returns the result produced by `wrapup`
218
+ */
140
219
  map_with_state: (initial_state, assign_item, update_state, wrapup) => {
141
220
  let current_state = initial_state;
142
221
  return wrapup(lit.list(list.__get_raw().map(($) => {
@@ -147,14 +226,29 @@ export const list = (list) => {
147
226
  },
148
227
  };
149
228
  };
229
+ /**
230
+ * Wraps an optional value and provides methods to handle both the set and not-set cases.
231
+ */
150
232
  export const optional = (optional_value) => {
151
233
  return {
234
+ /**
235
+ * Calls `if_set` with the wrapped value if it is set, otherwise calls `if_not_set`.
236
+ * @param if_set function to call with the value when it is set
237
+ * @param if_not_set function to call when the value is not set
238
+ * @returns the result of whichever function was called
239
+ */
152
240
  decide: (if_set, if_not_set) => {
153
241
  const raw = optional_value.__get_raw();
154
242
  return raw === null
155
243
  ? if_not_set()
156
244
  : if_set(raw[0]);
157
245
  },
246
+ /**
247
+ * Transforms the wrapped value using the provided function if it is set.
248
+ * If the value is not set, returns a not-set optional.
249
+ * @param assign_set_value function to transform the value
250
+ * @returns a new optional containing the transformed value, or not-set if the original was not set
251
+ */
158
252
  map: (assign_set_value) => {
159
253
  const raw = optional_value.__get_raw();
160
254
  return raw === null
@@ -163,16 +257,33 @@ export const optional = (optional_value) => {
163
257
  }
164
258
  };
165
259
  };
260
+ /**
261
+ * Wraps a state value and provides a method to produce a result from it.
262
+ */
166
263
  export const state = (state) => {
167
264
  return {
265
+ /**
266
+ * Passes the state to the provided function and returns the result.
267
+ * @param assign function to produce a result from the state
268
+ * @returns the result produced by `assign`
269
+ */
168
270
  decide: (assign) => {
169
271
  return assign(state);
170
272
  }
171
273
  };
172
274
  };
275
+ /**
276
+ * Wraps a string value and provides a method to convert it into a state.
277
+ */
173
278
  export const text = (string) => {
174
279
  return {
280
+ /**
281
+ * Converts the string into a state value using the provided function and context.
282
+ * @param context additional context passed to `assign_state`
283
+ * @param assign_state function that receives the context and the string and returns the state
284
+ * @returns the state produced by `assign_state`
285
+ */
175
286
  to_state: (context, assign_state) => assign_state(context, string)
176
287
  };
177
288
  };
178
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9pbXBsZW1lbnRhdGlvbi9fX2ludGVybmFsL3JlZmluZXIvZnJvbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssSUFBSSxNQUFNLDRCQUE0QixDQUFBO0FBQ2xELE9BQU8sS0FBSyxJQUFJLE1BQU0sK0JBQStCLENBQUE7QUFDckQsT0FBTyxFQUFjLE1BQU0sd0NBQXdDLENBQUE7QUFDbkUsT0FBTyxLQUFLLEdBQUcsTUFBTSxvQkFBb0IsQ0FBQTtBQUN6QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQTtBQUVuRSxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsQ0FDdEIsSUFBd0IsRUFDMUIsRUFBRTtJQUNBLE9BQU87UUFFSCxTQUFTLENBQ0wsRUFBVSxFQUNWLEtBRUM7WUFFRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUE7WUFDNUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUN2QyxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFFLENBQUE7Z0JBQ3pCLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO29CQUN0QixPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtnQkFDdkIsQ0FBQztZQUNMLENBQUM7WUFDRCxPQUFPLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDcEMsQ0FBQztRQUVELGtCQUFrQixDQUNkLEVBQVU7WUFFVixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUE7WUFDNUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxN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
289
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9pbXBsZW1lbnRhdGlvbi9fX2ludGVybmFsL3JlZmluZXIvZnJvbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssSUFBSSxNQUFNLDRCQUE0QixDQUFBO0FBQ2xELE9BQU8sS0FBSyxJQUFJLE1BQU0sK0JBQStCLENBQUE7QUFDckQsT0FBTyxFQUFjLE1BQU0sd0NBQXdDLENBQUE7QUFDbkUsT0FBTyxLQUFLLEdBQUcsTUFBTSxvQkFBb0IsQ0FBQTtBQUN6QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQTtBQUVuRTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUN0QixJQUF3QixFQUMxQixFQUFFO0lBQ0EsT0FBTztRQUVIOzs7Ozs7V0FNRztRQUNILFNBQVMsQ0FDTCxFQUFVLEVBQ1YsS0FFQztZQUVELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQTtZQUM1QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZDLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUUsQ0FBQTtnQkFDekIsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7b0JBQ3RCLE9BQU8sU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFBO2dCQUN2QixDQUFDO1lBQ0wsQ0FBQztZQUNELE9BQU8sS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNwQyxDQUFDO1FBRUQ7Ozs7V0FJRztRQUNILGtCQUFrQixDQUNkLEVBQVU7WUFFVixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUE7WUFDNUIsS0FBSyxJQUFJLENB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