@yongdall/common 0.1.0 → 0.3.0

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,3 +1,4 @@
1
+ import { Search } from "@yongdall/common";
1
2
  import { Permission } from "@yongdall/types";
2
3
 
3
4
  //#region \0rolldown/runtime.js
@@ -20,9 +21,9 @@ type FieldValue = {
20
21
  value?: any;
21
22
  placeholder?: string | undefined;
22
23
  };
23
- type Value = string | RecursiveArray<string> | FieldValue | null;
24
+ type Value = string | number | boolean | RecursiveArray<string> | FieldValue | null;
24
25
  type Field = string | [string, ...number[]];
25
- type Match = [fields: Field[], value: Value | (() => Value), operator: string | null, sign?: string];
26
+ type Match = [fields: Field[], value: Value, operator: string | null, sign?: string];
26
27
  type Children = [fields: Field[], children: AndList];
27
28
  type Or = {
28
29
  or?: OrList | undefined;
@@ -42,6 +43,7 @@ type Param = {
42
43
  offset?: number | undefined;
43
44
  limit?: number | undefined;
44
45
  page?: number | undefined;
46
+ total?: boolean | undefined;
45
47
  placeholders?: Record<string, string> | undefined;
46
48
  };
47
49
  //#endregion
@@ -63,11 +65,12 @@ declare function exec(data: Record<string, any>, exec: (value: ExecParam) => boo
63
65
  */
64
66
  declare function asyncExec(data: Record<string, any>, exec: (value: ExecParam) => PromiseLike<boolean | null> | (boolean | null), and?: (Match | Children)[], or?: (Match | Children | Or)[]): Promise<boolean | null>;
65
67
  type ExecParam = {
66
- fields: string[];
68
+ fields: Field[];
67
69
  operator: string;
68
70
  sign?: string | null | undefined;
69
71
  value: any;
70
72
  values: any[];
73
+ field?: string | undefined;
71
74
  };
72
75
  //#endregion
73
76
  //#region packages/common/Search/fill.d.mts
@@ -75,17 +78,17 @@ type ExecParam = {
75
78
  *
76
79
  * @template {Match | Children | Or} T
77
80
  * @param {T[]} match
78
- * @returns {Generator<Value | (() => Value), T[]?, Value | (() => string | null) | null>}
81
+ * @returns {Generator<Value, T[]?, Value | null>}
79
82
  */
80
- declare function fillMatches<T extends Match | Children | Or>(match: T[]): Generator<Value | (() => Value), T[] | null, Value | (() => string | null) | null>;
83
+ declare function fillMatches<T extends Match | Children | Or>(match: T[]): Generator<Value, T[] | null, Value | null>;
81
84
  /**
82
85
  *
83
86
  * @template {Match | Children | Or} T
84
87
  * @param {T[] | null | undefined} match
85
- * @param {(placeholder: string) => string | (() => string | null) | null} getPlaceholder
88
+ * @param {(placeholder: string) => Value | null} getPlaceholder
86
89
  * @returns {T[]}
87
90
  */
88
- declare function fill<T extends Match | Children | Or>(match: T[] | null | undefined, getPlaceholder: (placeholder: string) => string | (() => string | null) | null): T[];
91
+ declare function fill<T extends Match | Children | Or>(match: T[] | null | undefined, getPlaceholder: (placeholder: string) => Value | null): T[];
89
92
  //#endregion
90
93
  //#region packages/common/Search/merge.d.mts
91
94
  /** @import { Param } from './types.mjs' */
@@ -112,6 +115,7 @@ declare function stringify({
112
115
  limit,
113
116
  offset,
114
117
  page,
118
+ total,
115
119
  placeholders
116
120
  }: Partial<Param>, usePage?: boolean): string;
117
121
  //#endregion
@@ -135,11 +139,60 @@ declare function runGenerator<T, TReturn, TNext>(generator: Generator<T, TReturn
135
139
  */
136
140
  declare function asyncRunGenerator<T, TReturn, TNext>(generator: Generator<T, TReturn, TNext>, run: (value: T) => PromiseLike<TNext> | TNext, def: TNext): Promise<TReturn>;
137
141
  //#endregion
138
- //#region packages/common/Search/WhereLike.d.mts
139
- interface WhereLike {
140
- and(where: this): this;
141
- or(where: this): this;
142
- }
142
+ //#region packages/common/Search/toWhere.d.mts
143
+ /**
144
+ *
145
+ * @template TField
146
+ * @template TParam
147
+ * @template TWhere
148
+ * @typedef {object} Where
149
+ * @property {(where: TWhere) => boolean?} [value]
150
+ * @property {(list: TWhere[]) => TWhere?} or
151
+ * @property {(list: TWhere[]) => TWhere?} and
152
+ * @property {ItemToWhere<TField, TParam, TWhere>} build
153
+ */
154
+ /**
155
+ *
156
+ * @template TField
157
+ * @template TParam
158
+ * @template TWhere
159
+ * @callback ToWhere
160
+ * @param {TField} fields
161
+ * @param {Search.AndList} [and]
162
+ * @param {...Search.OrList | null | undefined} orList
163
+ * @returns {Generator<TParam, TWhere?, TWhere?>}
164
+ */
165
+ /**
166
+ *
167
+ * @template TField
168
+ * @template TParam
169
+ * @template TWhere
170
+ * @callback ItemToWhere
171
+ * @param {ToWhere<TField, TParam, TWhere>} toWhere
172
+ * @param {TField} fields
173
+ * @param {Search.Match | Search.Children} and
174
+ * @returns {Generator<TParam, TWhere?, TWhere?>}
175
+ */
176
+ /**
177
+ *
178
+ * @template TField
179
+ * @template TParam
180
+ * @template TWhere
181
+ * @param {Where<TField, TParam, TWhere>} where
182
+ * @param {TField} fields
183
+ * @param {Search.AndList} [and]
184
+ * @param {...Search.OrList | null | undefined} orList
185
+ * @returns {Generator<TParam, TWhere?, TWhere?>}
186
+ */
187
+ declare function toWhere<TField, TParam, TWhere>(where: Where<TField, TParam, TWhere>, fields: TField, and?: Search.AndList, ...orList: (Search.OrList | null | undefined)[]): Generator<TParam, TWhere | null, TWhere | null>;
188
+ type Where<TField, TParam, TWhere> = {
189
+ value?: ((where: TWhere) => boolean | null) | undefined;
190
+ or: (list: TWhere[]) => TWhere | null;
191
+ and: (list: TWhere[]) => TWhere | null;
192
+ build: ItemToWhere<TField, TParam, TWhere>;
193
+ };
194
+ type ToWhere<TField, TParam, TWhere> = (fields: TField, and?: Search.AndList | undefined, ...orList: (Search.OrList | null | undefined)[]) => Generator<TParam, TWhere | null, TWhere | null>;
195
+ type ItemToWhere<TField, TParam, TWhere> = (toWhere: ToWhere<TField, TParam, TWhere>, fields: TField, and: Search.Match | Search.Children) => Generator<TParam, TWhere | null, TWhere | null>;
143
196
  //#endregion
144
197
  //#region packages/common/Search/parse.d.mts
145
198
  /**
@@ -149,9 +202,18 @@ interface WhereLike {
149
202
  */
150
203
  declare function parse(search: string, split?: string): Param;
151
204
  declare namespace index_d_exports {
152
- export { AndItem, AndList, Children, ExecParam, Field, FieldValue, Match, Or, OrItem, OrList, Param, Value, WhereLike, asyncExec, asyncRunGenerator, exec, fill, fillMatches, merge, parse, runGenerator, stringify };
205
+ export { AndItem, AndList, Children, ExecParam, Field, FieldValue, ItemToWhere, Match, Or, OrItem, OrList, Param, ToWhere, Value, Where, asyncExec, asyncRunGenerator, exec, fill, fillMatches, merge, parse, runGenerator, stringify, toWhere };
153
206
  }
154
207
  //#endregion
208
+ //#region packages/common/transformError.d.mts
209
+ /**
210
+ * @template T
211
+ * @template {Error} E
212
+ * @param {Map<any, (error: E) => T>} transforms
213
+ * @param {E} error
214
+ */
215
+ declare function transformError<T, E extends Error>(transforms: Map<any, (error: E) => T>, error: E): T;
216
+ //#endregion
155
217
  //#region packages/common/Hook.d.mts
156
218
  /**
157
219
  * @template T
@@ -277,13 +339,13 @@ declare function yieldPermissionConstraintFields({
277
339
  */
278
340
  /**
279
341
  * @typedef {object} BootConfiguration
342
+ * @property {string} [id]
280
343
  * @property {string} [route] 路由管理器
281
344
  * @property {string} [theme] 界面主题
282
345
  * @property {string} [authenticator] 登陆器
283
346
  * @property {boolean} [authRequired] 是否强制登陆
284
347
  * @property {string} [skin]
285
- * @property {boolean} [single]
286
- * @property {string} [application]
348
+ * @property {boolean} [multiUser]
287
349
  * @property {string} [domain]
288
350
  * @property {string | number} [port]
289
351
  * @property {string} [path]
@@ -297,6 +359,7 @@ declare function yieldPermissionConstraintFields({
297
359
  * @property {string} [type]
298
360
  * @property {string} [help] 帮助链接
299
361
  * @property {any[]} [userMenus]
362
+ * @property {any[]} [menus]
300
363
  */
301
364
  /**
302
365
  * @typedef {object} Importmap
@@ -324,6 +387,7 @@ type Plugin = {
324
387
  styles?: string[] | undefined;
325
388
  };
326
389
  type BootConfiguration = {
390
+ id?: string | undefined;
327
391
  /**
328
392
  * 路由管理器
329
393
  */
@@ -341,8 +405,7 @@ type BootConfiguration = {
341
405
  */
342
406
  authRequired?: boolean | undefined;
343
407
  skin?: string | undefined;
344
- single?: boolean | undefined;
345
- application?: string | undefined;
408
+ multiUser?: boolean | undefined;
346
409
  domain?: string | undefined;
347
410
  port?: string | number | undefined;
348
411
  path?: string | undefined;
@@ -357,6 +420,7 @@ type BootConfiguration = {
357
420
  */
358
421
  help?: string | undefined;
359
422
  userMenus?: any[] | undefined;
423
+ menus?: any[] | undefined;
360
424
  };
361
425
  type Importmap = {
362
426
  imports: Record<string, string>;
@@ -388,4 +452,4 @@ declare namespace Pages {
388
452
  };
389
453
  }
390
454
  //#endregion
391
- export { BootConfiguration, Hook, Importmap, Indicator, Pages, Plugin, RecursiveArray, index_d_exports as Search, findPluginIdRegex, getPatternFields, isFunction, pluginIdRegex, runPattern, yieldPermissionConstraintFields };
455
+ export { BootConfiguration, Hook, Importmap, Indicator, Pages, Plugin, RecursiveArray, index_d_exports as Search, findPluginIdRegex, getPatternFields, isFunction, pluginIdRegex, runPattern, transformError, yieldPermissionConstraintFields };
package/index.mjs CHANGED
@@ -1,3 +1,5 @@
1
+ import "@yongdall/common";
2
+
1
3
  //#region \0rolldown/runtime.js
2
4
  var __defProp = Object.defineProperty;
3
5
  var __exportAll = (all, no_symbols) => {
@@ -99,22 +101,23 @@ function selectValue(list, field) {
99
101
  }
100
102
  /**
101
103
  * @typedef {object} ExecParam
102
- * @property {string[]} fields
104
+ * @property {Field[]} fields
103
105
  * @property {string} operator
104
106
  * @property {string?} [sign]
105
107
  * @property {any} value
106
108
  * @property {any[]} values
109
+ * @property {string} [field]
107
110
  */
108
111
  /**
109
112
  *
110
113
  * @param {Record<string, any>[]} data
111
- * @param {string[]} parentFields
114
+ * @param {Field[]} parentFields
112
115
  * @param {Match} match
113
116
  * @returns {Generator<ExecParam, boolean?, boolean?>}
114
117
  */
115
118
  function* execMatch(data, parentFields, match) {
116
119
  const fields = [...match[0]];
117
- const currentFields = [...parentFields, ...fields.map((v) => typeof v === "string" ? v : v[0])];
120
+ const currentFields = [...parentFields, ...fields];
118
121
  const last = fields.pop();
119
122
  if (!last) return null;
120
123
  const lastField = typeof last === "string" ? last : last[0];
@@ -151,6 +154,7 @@ function* execMatch(data, parentFields, match) {
151
154
  operator,
152
155
  sign,
153
156
  value: item[field],
157
+ field,
154
158
  values: [item[lastField]]
155
159
  };
156
160
  if (result === null) continue;
@@ -161,7 +165,7 @@ function* execMatch(data, parentFields, match) {
161
165
  /**
162
166
  *
163
167
  * @param {Record<string, any>[]} data
164
- * @param {string[]} parentFields
168
+ * @param {Field[]} parentFields
165
169
  * @param {Match | Children | Or} match
166
170
  * @returns {Generator<ExecParam, boolean?, boolean?>}
167
171
  */
@@ -175,7 +179,7 @@ function* execItem(data, parentFields, match) {
175
179
  let defResult = null;
176
180
  const values = select(data, match[0]);
177
181
  if (!values.length) return false;
178
- const fields = [...parentFields, ...match[0].map((v) => typeof v === "string" ? v : v[0])];
182
+ const fields = [...parentFields, ...match[0]];
179
183
  for (const item of match[1]) {
180
184
  const result = yield* execItem(values, fields, item);
181
185
  if (result === null) continue;
@@ -187,7 +191,7 @@ function* execItem(data, parentFields, match) {
187
191
  /**
188
192
  *
189
193
  * @param {Record<string, any>[]} list
190
- * @param {string[]} parentFields
194
+ * @param {Field[]} parentFields
191
195
  * @param {(Match | Children)[]} [and]
192
196
  * @param {(Match | Children | Or)[]} [or]
193
197
  * @returns {Generator<ExecParam, boolean?, boolean?>}
@@ -238,7 +242,7 @@ async function asyncExec(data, exec, and, or) {
238
242
  *
239
243
  * @template {Match | Children | Or} T
240
244
  * @param {T[]} match
241
- * @returns {Generator<Value | (() => Value), T[]?, Value | (() => string | null) | null>}
245
+ * @returns {Generator<Value, T[]?, Value | null>}
242
246
  */
243
247
  function* fillList(match) {
244
248
  /** @type {T[]} */
@@ -255,7 +259,7 @@ function* fillList(match) {
255
259
  *
256
260
  * @template {Match | Children | Or} T
257
261
  * @param {T} match
258
- * @returns {Generator<Value | (() => Value), T?, Value | (() => string | null) | null>}
262
+ * @returns {Generator<Value, T?, Value | null>}
259
263
  */
260
264
  function* fillMatch(match) {
261
265
  if (!Array.isArray(match)) {
@@ -284,7 +288,7 @@ function* fillMatch(match) {
284
288
  *
285
289
  * @template {Match | Children | Or} T
286
290
  * @param {T[]} match
287
- * @returns {Generator<Value | (() => Value), T[]?, Value | (() => string | null) | null>}
291
+ * @returns {Generator<Value, T[]?, Value | null>}
288
292
  */
289
293
  function* fillMatches(match) {
290
294
  /** @type {T[]} */
@@ -301,16 +305,16 @@ function* fillMatches(match) {
301
305
  *
302
306
  * @template {Match | Children | Or} T
303
307
  * @param {T[] | null | undefined} match
304
- * @param {(placeholder: string) => string | (() => string | null) | null} getPlaceholder
308
+ * @param {(placeholder: string) => Value | null} getPlaceholder
305
309
  * @returns {T[]}
306
310
  */
307
311
  function fill(match, getPlaceholder) {
308
312
  if (!match) return [];
309
313
  /**
310
314
  *
311
- * @template {Value | (() => Value)} T
315
+ * @template {Value} T
312
316
  * @param {T} match
313
- * @returns {Value | (() => string | null) | null}
317
+ * @returns {Value | null}
314
318
  */
315
319
  function fillValue(match) {
316
320
  if (!match || typeof match !== "object") return null;
@@ -545,11 +549,12 @@ function parse(search, split = "&") {
545
549
  let limit = 0;
546
550
  let offset = 0;
547
551
  let page = 0;
552
+ let total = false;
548
553
  /** @type {Record<string, string>} */
549
554
  const placeholders = {};
550
555
  /** @type {(Parse.Match & {groups: string[]})[]} */
551
556
  const allMatches = [];
552
- for (const s of search.split(split)) {
557
+ for (const s of typeof search === "string" ? search.split(split) : []) {
553
558
  if (s[0] === "=") {
554
559
  values.push(s.slice(1));
555
560
  continue;
@@ -577,6 +582,8 @@ function parse(search, split = "&") {
577
582
  if (val && /^\d+$/.test(val)) offset = parseInt(val);
578
583
  } else if (name === "page") {
579
584
  if (val && /^\d+$/.test(val)) page = parseInt(val);
585
+ } else if (name === "total") {
586
+ if (val) total = true;
580
587
  }
581
588
  continue;
582
589
  }
@@ -608,6 +615,7 @@ function parse(search, split = "&") {
608
615
  /** @type {Param} */
609
616
  const result = {};
610
617
  if (values?.length) result.values = values;
618
+ if (total) result.total = total;
611
619
  if (limit && limit > 0) result.limit = limit;
612
620
  if (page && page > 0) result.page = page;
613
621
  if (offset && offset > 0) result.offset = offset;
@@ -644,6 +652,7 @@ function merge(a, b) {
644
652
  const result = {};
645
653
  if (values?.length) result.values = values;
646
654
  if (limit && limit > 0) result.limit = limit;
655
+ if (a.total || b.total) result.total = true;
647
656
  if (page && page > 0) result.page = page;
648
657
  if (offset && offset > 0) result.offset = offset;
649
658
  if (select?.length) result.select = select;
@@ -662,7 +671,7 @@ function merge(a, b) {
662
671
  const encodeValue = (v) => encodeURIComponent(v).replaceAll("%20", "+");
663
672
  /**
664
673
  *
665
- * @param {string | RecursiveArray<string> | FieldValue} value
674
+ * @param {string | boolean | number | RecursiveArray<string> | FieldValue} value
666
675
  */
667
676
  function stringifyValue(value) {
668
677
  if (Array.isArray(value)) {
@@ -679,6 +688,8 @@ function stringifyValue(value) {
679
688
  if (value.length > 1) return val;
680
689
  return `(${val})`;
681
690
  }
691
+ if (typeof value === "number") return `${value}`;
692
+ if (typeof value === "boolean") return value ? "1" : 0;
682
693
  if (typeof value !== "object") return encodeValue(value);
683
694
  const { field, placeholder } = value;
684
695
  if (placeholder) return `?${encodeValue(placeholder)}`;
@@ -743,7 +754,7 @@ function stringifyOr(list) {
743
754
  * @param {Partial<Param>} query
744
755
  * @param {boolean} [usePage]
745
756
  */
746
- function stringify({ values, where, orWhere, sort, select, limit, offset, page, placeholders }, usePage) {
757
+ function stringify({ values, where, orWhere, sort, select, limit, offset, page, total, placeholders }, usePage) {
747
758
  /** @type {string[]} */
748
759
  let queries = [];
749
760
  for (const v of values || []) {
@@ -751,6 +762,7 @@ function stringify({ values, where, orWhere, sort, select, limit, offset, page,
751
762
  queries.push(`=${encodeValue(v)}`);
752
763
  }
753
764
  if (limit && limit > 0) queries.push(`:limit=${limit}`);
765
+ if (total) queries.push(`:total=${total}`);
754
766
  if (usePage) {
755
767
  if (page && page > 0) queries.push(`:page=${page}`);
756
768
  } else if (offset && offset > 0) queries.push(`:offset=${offset}`);
@@ -774,6 +786,93 @@ function stringify({ values, where, orWhere, sort, select, limit, offset, page,
774
786
  return queries.join("&");
775
787
  }
776
788
 
789
+ //#endregion
790
+ //#region packages/common/Search/toWhere.mjs
791
+ /**
792
+ *
793
+ * @template TField
794
+ * @template TParam
795
+ * @template TWhere
796
+ * @typedef {object} Where
797
+ * @property {(where: TWhere) => boolean?} [value]
798
+ * @property {(list: TWhere[]) => TWhere?} or
799
+ * @property {(list: TWhere[]) => TWhere?} and
800
+ * @property {ItemToWhere<TField, TParam, TWhere>} build
801
+ */
802
+ /**
803
+ *
804
+ * @template TField
805
+ * @template TParam
806
+ * @template TWhere
807
+ * @callback ToWhere
808
+ * @param {TField} fields
809
+ * @param {Search.AndList} [and]
810
+ * @param {...Search.OrList | null | undefined} orList
811
+ * @returns {Generator<TParam, TWhere?, TWhere?>}
812
+ */
813
+ /**
814
+ *
815
+ * @template TField
816
+ * @template TParam
817
+ * @template TWhere
818
+ * @callback ItemToWhere
819
+ * @param {ToWhere<TField, TParam, TWhere>} toWhere
820
+ * @param {TField} fields
821
+ * @param {Search.Match | Search.Children} and
822
+ * @returns {Generator<TParam, TWhere?, TWhere?>}
823
+ */
824
+ /**
825
+ *
826
+ * @template TField
827
+ * @template TParam
828
+ * @template TWhere
829
+ * @param {Where<TField, TParam, TWhere>} where
830
+ * @param {TField} fields
831
+ * @param {Search.AndList} [and]
832
+ * @param {...Search.OrList | null | undefined} orList
833
+ * @returns {Generator<TParam, TWhere?, TWhere?>}
834
+ */
835
+ function toWhere(where, fields, and, ...orList) {
836
+ /**
837
+ *
838
+ * @param {TField} fields
839
+ * @param {Search.AndList} [and]
840
+ * @param {...Search.OrList | null | undefined} orList
841
+ * @returns {Generator<TParam, TWhere?, TWhere?>}
842
+ */
843
+ function* toWhere(fields, and, ...orList) {
844
+ /** @type {TWhere[]} */
845
+ const list = [];
846
+ if (and) for (const item of and) {
847
+ const w = yield* where.build(toWhere, fields, item);
848
+ if (w == null) continue;
849
+ if (where.value?.(w) === false) return w;
850
+ list.push(w);
851
+ }
852
+ orFor: for (const or of orList) {
853
+ if (!or) continue;
854
+ /** @type {TWhere[]} */
855
+ const orList = [];
856
+ for (const item of or) {
857
+ const w = Array.isArray(item) ? yield* where.build(toWhere, fields, item) : yield* toWhere(fields, item.and, item.or);
858
+ if (w == null) continue;
859
+ if (where.value?.(w) === true) {
860
+ list.push(w);
861
+ continue orFor;
862
+ }
863
+ orList.push(w);
864
+ }
865
+ const w = orList.length ? where.or(orList) : null;
866
+ if (w == null) continue;
867
+ if (where.value?.(w) === false) return w;
868
+ list.push(w);
869
+ }
870
+ if (!list.length) return null;
871
+ return where.and(list);
872
+ }
873
+ return toWhere(fields, and, ...orList);
874
+ }
875
+
777
876
  //#endregion
778
877
  //#region packages/common/Search/index.mjs
779
878
  var Search_exports = /* @__PURE__ */ __exportAll({
@@ -785,9 +884,29 @@ var Search_exports = /* @__PURE__ */ __exportAll({
785
884
  merge: () => merge,
786
885
  parse: () => parse,
787
886
  runGenerator: () => runGenerator,
788
- stringify: () => stringify
887
+ stringify: () => stringify,
888
+ toWhere: () => toWhere
789
889
  });
790
890
 
891
+ //#endregion
892
+ //#region packages/common/transformError.mjs
893
+ const prototype = Error.prototype;
894
+ /**
895
+ * @template T
896
+ * @template {Error} E
897
+ * @param {Map<any, (error: E) => T>} transforms
898
+ * @param {E} error
899
+ */
900
+ function transformError(transforms, error) {
901
+ if (!(error instanceof Error)) throw error;
902
+ for (let p = Object.getPrototypeOf(error); p; p = Object.getPrototypeOf(p)) {
903
+ const fn = transforms.get(p);
904
+ if (typeof fn === "function") return fn(error);
905
+ if (p === prototype) break;
906
+ }
907
+ throw error;
908
+ }
909
+
791
910
  //#endregion
792
911
  //#region packages/common/Hook.mjs
793
912
  /**
@@ -1074,7 +1193,7 @@ function runPattern(pattern, document) {
1074
1193
  const doc = typeof document === "object" && document || {};
1075
1194
  return pattern.replace(regex, (_, v) => {
1076
1195
  if (Object.hasOwn(doc, v)) return doc[v] ?? "";
1077
- return `{${v}}`;
1196
+ return `${v}`;
1078
1197
  });
1079
1198
  }
1080
1199
 
@@ -1112,13 +1231,13 @@ const findPluginIdRegex = /^(?<pluginId>(?:(?<scope>@[a-zA-Z\d_.-]+)\/)?(?<name>
1112
1231
  */
1113
1232
  /**
1114
1233
  * @typedef {object} BootConfiguration
1234
+ * @property {string} [id]
1115
1235
  * @property {string} [route] 路由管理器
1116
1236
  * @property {string} [theme] 界面主题
1117
1237
  * @property {string} [authenticator] 登陆器
1118
1238
  * @property {boolean} [authRequired] 是否强制登陆
1119
1239
  * @property {string} [skin]
1120
- * @property {boolean} [single]
1121
- * @property {string} [application]
1240
+ * @property {boolean} [multiUser]
1122
1241
  * @property {string} [domain]
1123
1242
  * @property {string | number} [port]
1124
1243
  * @property {string} [path]
@@ -1132,6 +1251,7 @@ const findPluginIdRegex = /^(?<pluginId>(?:(?<scope>@[a-zA-Z\d_.-]+)\/)?(?<name>
1132
1251
  * @property {string} [type]
1133
1252
  * @property {string} [help] 帮助链接
1134
1253
  * @property {any[]} [userMenus]
1254
+ * @property {any[]} [menus]
1135
1255
  */
1136
1256
  /**
1137
1257
  * @typedef {object} Importmap
@@ -1154,5 +1274,5 @@ function isFunction(v) {
1154
1274
  }
1155
1275
 
1156
1276
  //#endregion
1157
- export { Hook, Search_exports as Search, findPluginIdRegex, getPatternFields, isFunction, pluginIdRegex, runPattern, yieldPermissionConstraintFields };
1277
+ export { Hook, Search_exports as Search, findPluginIdRegex, getPatternFields, isFunction, pluginIdRegex, runPattern, transformError, yieldPermissionConstraintFields };
1158
1278
  //# sourceMappingURL=index.mjs.map
package/index.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["#config","#hooks","#stringTag","#keys"],"sources":["../../packages/common/Search/util.mjs","../../packages/common/Search/exec.mjs","../../packages/common/Search/fill.mjs","../../packages/common/Search/parse.mjs","../../packages/common/Search/merge.mjs","../../packages/common/Search/stringify.mjs","../../packages/common/Search/index.mjs","../../packages/common/Hook.mjs","../../packages/common/model.mjs","../../packages/common/yieldPermissionConstraintFields.mjs","../../packages/common/index.mjs"],"sourcesContent":["\n/**\n * @template T\n * @template TReturn\n * @template TNext\n * @param {Generator<T, TReturn, TNext>} generator \n * @param {(value: T) => TNext} run \n * @param {TNext} def \n */\nexport function runGenerator(generator, run, def) {\n\t/** @type {TNext} */\n\tlet value = def;\n\tfor (; ;) {\n\t\tconst result = generator.next(value);\n\t\tif (result.done) {\n\t\t\treturn result.value;\n\t\t}\n\t\tvalue = run(result.value);\n\t}\n}\n/**\n * @template T\n * @template TReturn\n * @template TNext\n * @param {Generator<T, TReturn, TNext>} generator \n * @param {(value: T) => PromiseLike<TNext> | TNext} run \n * @param {TNext} def \n */\nexport async function asyncRunGenerator(generator, run, def) {\n\t/** @type {TNext} */\n\tlet value = def;\n\tfor (; ;) {\n\t\tconst result = generator.next(value);\n\t\tif (result.done) {\n\t\t\treturn result.value;\n\t\t}\n\t\tvalue = await run(result.value);\n\t}\n}\n","/** @import { Children, Field, Match, Or } from './types.mjs' */\nimport { asyncRunGenerator, runGenerator } from './util.mjs';\n\n\n/**\n * \n * @param {Record<string, any>[]} data \n * @param {Field[]} fields \n * @returns {any[]}\n */\nfunction select(data, fields) {\n\tlet list = data;\n\tfor (let item of fields) {\n\t\tconst [field, ...sub] = typeof item === 'string' ? [item] : item;\n\n\t\tif (!list.length) { continue; }\n\t\t/** @type {any[]} */\n\t\tconst subList = [];\n\t\tit: for (const item of list) {\n\t\t\tif (!item || typeof item !== 'object') { continue; }\n\t\t\tif (!Object.hasOwn(item, field)) { continue; }\n\t\t\tlet value = item[field];\n\t\t\tfor (const index of sub) {\n\t\t\t\tif (!Array.isArray(value)) { continue it; }\n\t\t\t\tvalue = value[index];\n\t\t\t}\n\t\t\tsubList.push(value);\n\t\t}\n\t\tlist = subList.flat(Infinity).filter(v => v && typeof v === 'object');\n\t}\n\treturn list;\n\n}\n\n/**\n * \n * @param {Record<string, any>[]} list \n * @param {string} field \n * @returns {any[]}\n */\nfunction selectValue(list, field) {\n\t/** @type {any[]} */\n\tconst subList = [];\n\tfor (const item of list) {\n\t\tif (!item || typeof item !== 'object') { continue; }\n\t\tif (!Object.hasOwn(item, field)) { continue; }\n\t\tsubList.push(item[field]);\n\t}\n\treturn subList;\n\n}\n/**\n * @typedef {object} ExecParam\n * @property {string[]} fields\n * @property {string} operator\n * @property {string?} [sign]\n * @property {any} value\n * @property {any[]} values\n */\n/**\n * \n * @param {Record<string, any>[]} data \n * @param {string[]} parentFields \n * @param {Match} match \n * @returns {Generator<ExecParam, boolean?, boolean?>}\n */\nfunction* execMatch(data, parentFields, match) {\n\tconst fields = [...match[0]];\n\tconst currentFields = [...parentFields, ...fields.map(v => typeof v === 'string' ? v : v[0])];\n\tconst last = fields.pop();\n\tif (!last) { return null; }\n\tconst lastField = typeof last === 'string' ? last : last[0];\n\tconst records = select(data, fields);\n\tif (!records.length) { return false; }\n\tconst [, value, operator, sign] = match;\n\tif (operator === null) {\n\t\tconst values = selectValue(records, lastField);\n\t\treturn sign ? values.find(v => v === null) : values.find(v => v !== null);\n\t}\n\tif (typeof value !== 'object' || !value || Array.isArray(value)) {\n\n\t\tconst values = selectValue(records, lastField);\n\t\tif (!values.length) { return false; }\n\n\t\treturn yield ({ fields: currentFields, operator, sign, value, values });\n\t}\n\n\tif (value.filter || value.table || value.placeholder) { return null; }\n\tconst field = value.field;\n\tif (!field) { return null; }\n\n\t/** @type {boolean?} */\n\tlet defResult = false;\n\tfor (const item of records) {\n\t\tif (!item || typeof item !== 'object') { continue; }\n\t\tif (!Object.hasOwn(item, field)) { continue; }\n\t\tif (!Object.hasOwn(item, lastField)) { continue; }\n\t\tdefResult = null;\n\t\tconst result = yield ({ fields: currentFields, operator, sign, value: item[field], values: [item[lastField]] });\n\t\tif (result === null) { continue; }\n\t\treturn result;\n\t}\n\treturn defResult;\n\n}\n/**\n * \n * @param {Record<string, any>[]} data \n * @param {string[]} parentFields \n * @param {Match | Children | Or} match \n * @returns {Generator<ExecParam, boolean?, boolean?>}\n */\nfunction* execItem(data, parentFields, match) {\n\tif (!Array.isArray(match)) {\n\t\tconst { and, or } = match;\n\t\treturn yield* execOr(data, parentFields, and, or);\n\t}\n\tif (match.length !== 2) {\n\t\treturn yield* execMatch(data, parentFields, match);\n\n\t}\n\t/** @type {boolean?} */\n\tlet defResult = null;\n\tconst values = select(data, match[0]);\n\tif (!values.length) { return false; }\n\tconst fields = [...parentFields, ...match[0].map(v => typeof v === 'string' ? v : v[0])];\n\tfor (const item of match[1]) {\n\t\tconst result = yield* execItem(values, fields, item);\n\t\tif (result === null) { continue; }\n\t\tif (!result) { return false; }\n\t\tdefResult = true;\n\t}\n\treturn defResult;\n}\n/**\n * \n * @param {Record<string, any>[]} list \n * @param {string[]} parentFields \n * @param {(Match | Children)[]} [and] \n * @param {(Match | Children | Or)[]} [or] \n * @returns {Generator<ExecParam, boolean?, boolean?>}\n */\nfunction* execOr(list, parentFields, and, or) {\n\t/** @type {boolean?} */\n\tlet defResult = null;\n\tif (Array.isArray(and)) {\n\t\tfor (const item of and) {\n\t\t\tconst result = yield* execItem(list, parentFields, item);\n\t\t\tif (result === null) { continue; }\n\t\t\tif (!result) { return false; }\n\t\t\tdefResult = true;\n\t\t}\n\t}\n\tif (Array.isArray(or)) {\n\t\tfor (const item of or) {\n\t\t\tconst result = yield* execItem(list, parentFields, item);\n\t\t\tif (result === null) { continue; }\n\t\t\tif (result) { return true; }\n\t\t\tdefResult = true;\n\t\t}\n\t}\n\treturn defResult;\n\n}\n\n/**\n * \n * @param {Record<string, any>} data \n * @param {(value: ExecParam) => boolean?} exec \n * @param {(Match | Children)[]} [and] \n * @param {(Match | Children | Or)[]} [or] \n */\nexport function exec(data, exec, and, or) {\n\treturn runGenerator(execOr([data].flat(), [], and, or), exec, null);\n}\n\n/**\n * \n * @param {Record<string, any>} data \n * @param {(value: ExecParam) => PromiseLike<boolean?> | boolean?} exec \n * @param {(Match | Children)[]} [and] \n * @param {(Match | Children | Or)[]} [or] \n */\nexport async function asyncExec(data, exec, and, or) {\n\treturn asyncRunGenerator(execOr([data].flat(), [], and, or), exec, null);\n}\n","/** @import { Value } from './types.mjs' */\n/** @import { Children, Field, FieldValue, Match, Or } from './types.mjs' */\n\nimport { runGenerator } from './util.mjs';\n\n\n\n\n\n\n/**\n * \n * @template {Match | Children | Or} T \n * @param {T[]} match \n * @returns {Generator<Value | (() => Value), T[]?, Value | (() => string | null) | null>}\n */\nfunction* fillList(match) {\n\t/** @type {T[]} */\n\tlet list = [];\n\tlet has = false;\n\tfor (const child of match) {\n\t\tconst val = yield* fillMatch(child);\n\t\tlist.push(val || child);\n\t\tif (val) { has = true; }\n\t}\n\treturn has ? list : null;\n\n}\n/**\n * \n * @template {Match | Children | Or} T \n * @param {T} match \n * @returns {Generator<Value | (() => Value), T?, Value | (() => string | null) | null>}\n */\nfunction* fillMatch(match) {\n\tif (!Array.isArray(match)) {\n\t\tconst and = match.and && (yield* fillMatches(match.and));\n\t\tconst or = match.or && (yield* fillMatches(match.or));\n\t\tif (!and && !or) { return null; }\n\t\t/** @type {Or} */\n\t\tconst item = { and: and || match.and, or: or || match.or };\n\t\treturn /** @type {T} */(item);\n\t}\n\tif (match.length === 2) {\n\t\tlet children = yield* fillMatches(match[1]);\n\t\tif (!children) { return null; }\n\t\t/** @type {Children} */\n\t\tconst item = [match[0], match[1]];\n\t\treturn /** @type {T} */(item);\n\t}\n\tconst value = yield match[1];\n\tif (value === null) { return null; }\n\t/** @type {Match} */\n\tconst item = [match[0], value, match[2], match[3]];\n\treturn /** @type {T} */(item);\n\n}\n\n/**\n * \n * @template {Match | Children | Or} T \n * @param {T[]} match \n * @returns {Generator<Value | (() => Value), T[]?, Value | (() => string | null) | null>}\n */\nexport function* fillMatches(match) {\n\t/** @type {T[]} */\n\tconst list = [];\n\tlet has = false;\n\tfor (const child of match) {\n\t\tconst val = yield* fillMatch(child);\n\t\tlist.push(val || child);\n\t\tif (val) { has = true; }\n\t}\n\treturn has ? list : null;\n\n}\n\n/**\n * \n * @template {Match | Children | Or} T \n * @param {T[] | null | undefined} match \n * @param {(placeholder: string) => string | (() => string | null) | null} getPlaceholder \n * @returns {T[]}\n */\nexport function fill(match, getPlaceholder) {\n\tif (!match) { return []; }\n\t/**\n\t * \n\t * @template {Value | (() => Value)} T \n\t * @param {T} match \n\t * @returns {Value | (() => string | null) | null}\n\t */\n\tfunction fillValue(match) {\n\t\tif (!match || typeof match !== 'object') { return null; }\n\t\tif (Array.isArray(match)) { return null; }\n\t\tconst placeholder = match.placeholder;\n\t\tif (!placeholder || typeof placeholder !== 'string') { return null; }\n\t\treturn getPlaceholder(placeholder);\n\t}\n\treturn runGenerator(fillList(match), fillValue, null) || match;\n}\n","/** @import { RecursiveArray } from '../types/types.mjs' */\n/** @import { Children, Field, Match, Or, Param, Value } from './types.mjs' */\n\n\n\n/**\n * @typedef {object} Parse.Field\n * @property {string} field\n * @property {string?} [group]\n * @property {number[]} sub\n */\n/**\n * @typedef {object} Parse.Match\n * @property {null} [children]\n * @property {Parse.Field[]} fields\n * @property {string?} operator\n * @property {string} [sign]\n * @property {Value} value\n */\n\n\n/**\n * @typedef {object} Parse.Children\n * @property {Parse.Field[]} fields\n * @property {(Parse.Match | Parse.Children)[]} children\n */\n\n/**\n * \n * @param {Parse.Field[]} fields \n * @returns {Field[]}\n */\nfunction compressFields(fields) {\n\treturn fields.map(\n\t\t({ field, sub }) => sub.length ? [field, ...sub] : field\n\t);\n}\n\n/**\n * \n * @param {Parse.Match | Parse.Children} v \n * @returns {Match | Children}\n */\nfunction compressAndItem(v) {\n\tif (v.children) {\n\treturn [compressFields(v.fields), v.children.map(compressAndItem)];\n\n\t}\n\tconst { fields, operator, value, sign } = v;\n\treturn [compressFields(fields), value, operator, sign];\n}\n\nconst fieldParserRegex = /^([-_\\d\\p{L}]+)((?:\\[-?\\d+\\])*)$/u;\n/**\n * \n * @param {string} l \n */\nfunction parseFields(l) {\n\t/** @type {Parse.Field[]} */\n\tconst fields = [];\n\tfor (const v of l.split('.')) {\n\t\tif (!v || v[0] === '?') { return null; }\n\t\tconst index = v.indexOf('?');\n\t\tconst r = fieldParserRegex.exec(index > 0 ? v.slice(0, index) : v);\n\t\tif (!r) { return null; }\n\t\tconst sub = r[2]?.split(/\\[|\\]/).filter(Boolean).map(v => parseInt(v) || 0) || [];\n\t\tconst group = index > 0 ? v.slice(index) : undefined;\n\t\tfields.push({ field: r[1], group, sub });\n\t}\n\treturn fields;\n\n}\n\n\n/** @param {string} v */\nconst decodeValue = v => decodeURIComponent(v.replaceAll('+', ' '));\n/**\n * \n * @param {string} s \n * @returns {string | RecursiveArray<string>?}\n */\nfunction parseArrayValue(s) {\n\t/** @type {(string | RecursiveArray<string>)[]} */\n\tconst root = [];\n\t/** @type {(string | RecursiveArray<string>)[][]} */\n\tconst stack = [];\n\tlet current = root;\n\t/** @type {string[]} */\n\tlet strings = [];\n\tlet end = false;\n\tlet must = true;\n\tfunction add() {\n\t\tcurrent.push(decodeValue(strings.join()));\n\t\tstrings = [];\n\t}\n\n\tfor (const c of s) {\n\t\tif (c === ',') {\n\t\t\tif (end) {\n\t\t\t\tend = false;\n\t\t\t} else {\n\t\t\t\tadd();\n\t\t\t}\n\t\t\tmust = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (c === ')') {\n\t\t\tif (must || strings.length) {\n\t\t\t\tadd();\n\t\t\t\tmust = false;\n\t\t\t}\n\t\t\tconst last = stack.pop();\n\t\t\tif (!last) { return null; }\n\t\t\tlast.push(current);\n\t\t\tcurrent = last;\n\t\t\tend = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (end) { return null; }\n\t\tmust = false;\n\t\tif (c !== '(') {\n\t\t\tstrings.push(c);\n\t\t\tcontinue;\n\t\t}\n\t\tif (strings.length) { return null; }\n\t\tstack.push(current);\n\t\tcurrent = [];\n\t}\n\tif (must || strings.length) {\n\t\tadd();\n\t}\n\tif (stack.length) { return null; }\n\treturn root.length === 1 ? root[0] : root;\n}\n\nconst valueQRegex = /^([-_\\d\\p{L}]+)@([-_\\d\\p{L}]+)/u;\n\n\n/**\n * \n * @param {string?} v \n * @returns {Value | true}\n */\nfunction parseValue(v) {\n\tif (v === null) { return true; }\n\tif (v[0] === '?') {\n\t\treturn { placeholder: decodeValue(v.slice(1)) };\n\t}\n\tif (v[0] === ':') {\n\t\treturn { field: decodeValue(v.slice(1)) };\n\t}\n\tif (v[0] === '@') {\n\t\t// TODO: \n\t\treturn null;\n\t}\n\tconst vq = valueQRegex.test(v);\n\tif (vq) {\n\t\t// TODO: \n\t\treturn null;\n\t}\n\tif (v.includes('(') || v.includes(')')) {\n\t\tconst list = parseArrayValue(v);\n\t\tif (list) { return list; }\n\t}\n\tif (v.includes(',')) {\n\t\treturn v.split(',').map(v => decodeValue(v.replaceAll('+', ' ')));\n\t}\n\treturn decodeValue(v);\n}\n/**\n * \n * @param {(Parse.Match | Parse.Children)[]} list \n * @returns {Iterable<Match | Children>}\n */\nfunction* toAnd(list) {\n\t/** @type {[(Parse.Match | Parse.Children), Parse.Field[], Parse.Field[]][]} */\n\tconst values = list.map(v => {\n\t\tconst fields = v.fields;\n\t\tconst index = fields.findLastIndex(v => v.group);\n\t\tif (index < 0 || index >= fields.length - 1) {\n\t\t\treturn [v, [], []];\n\t\t}\n\t\tconst field = fields[index];\n\t\tif (!field) { return [v, [], []]; }\n\t\treturn [{ ...v, fields: fields.slice(index + 1) }, fields.slice(0, index + 1), [...fields.slice(0, index), { ...field, group: undefined }]];\n\t});\n\tconst map = Object.groupBy(values, v => JSON.stringify(v[1]));\n\tyield* map['[]']?.map(v => compressAndItem(v[0])) || [];\n\tdelete map['[]'];\n\t/** @type {Parse.Children[]} */\n\tconst result = Object.values(map).filter(Boolean).map((list = []) => {\n\t\tif (!list?.length) { return { fields: [], children: [] }; }\n\t\treturn { fields: list[0][2] || [], children: list.map(v => v[0]) };\n\t}).filter(v => v.fields.length);\n\tif (!result.length) { return; }\n\n\tyield* toAnd(result);\n}\n\n/**\n * \n * @param {(Parse.Match & {groups: string[]})[]} list \n * @returns {Or}\n */\nfunction toOr(list) {\n\tconst map = Map.groupBy(list, v => v.groups.shift() ?? null);\n\tconst and = map.get(null) || [];\n\tconst baseOr = map.get('') || [];\n\tmap.delete(null);\n\tmap.delete('');\n\n\treturn {\n\t\tor: [\n\t\t\t...baseOr.map(v => compressAndItem(v)),\n\t\t\t...[...map.values()].map(v => toOr(v)),\n\t\t],\n\t\tand: [...toAnd(and)],\n\t};\n}\n/**\n * \n * @param {string} search \n * @returns {Param}\n */\nexport function parse(search, split = '&') {\n\t/** @type {string[]} */\n\tconst values = [];\n\t/** @type {string[]} */\n\tconst select = [];\n\t/** @type {[field: string, desc?: boolean][]} */\n\tconst sorts = [];\n\tlet limit = 0;\n\tlet offset = 0;\n\tlet page = 0;\n\t/** @type {Record<string, string>} */\n\tconst placeholders = {};\n\n\n\t/** @type {(Parse.Match & {groups: string[]})[]} */\n\tconst allMatches = [];\n\n\tfor (const s of search.split(split)) {\n\t\tif (s[0] === '=') {\n\t\t\tvalues.push(s.slice(1));\n\t\t\tcontinue;\n\t\t}\n\t\tconst index = s.indexOf('=');\n\t\tconst key = index < 0 ? s : s.slice(0, index);\n\t\tconst val = index < 0 ? null : s.slice(index + 1);\n\t\tif (index <= 0) { continue; }\n\t\tif (`.!@^*<>{}[]()+|;,\"'\\`\\\\/`.includes(key[0])) { continue; }\n\t\tif (key[0] === '?') {\n\t\t\tplaceholders[decodeValue(key.slice(1))] = decodeValue(val || '');\n\t\t\tcontinue;\n\t\t}\n\t\tif (key[0] === ':') {\n\t\t\tconst name = key.slice(1);\n\t\t\tif (!val) { continue; }\n\t\t\tif (name === 'sort') {\n\t\t\t\tsorts.push(...val.split(',').filter(Boolean).map(v => {\n\t\t\t\t\tconst desc = v[0] === '-';\n\t\t\t\t\tconst name = desc ? v.slice(1) : v;\n\t\t\t\t\treturn /** @type {[field: string, desc?: boolean]} */([decodeValue(name), desc]);\n\t\t\t\t}).filter(Boolean));\n\t\t\t} else if (name === 'select') {\n\t\t\t\tselect.push(...val.split(',').map(decodeValue).filter(Boolean));\n\t\t\t} else if (name === 'limit') {\n\t\t\t\tif (val && /^\\d+$/.test(val)) { limit = parseInt(val); }\n\t\t\t} else if (name === 'offset') {\n\t\t\t\tif (val && /^\\d+$/.test(val)) { offset = parseInt(val); }\n\t\t\t} else if (name === 'page') {\n\t\t\t\tif (val && /^\\d+$/.test(val)) { page = parseInt(val); }\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tconst sg = key.split('~');\n\t\tlet field = sg.pop() || '';\n\t\tlet sign = '';\n\t\tif ('!'.includes(field[field.length - 1])) {\n\t\t\tsign = '!';\n\t\t\tfield = field.slice(0, -1);\n\t\t}\n\n\t\tconst l = field.split(':', 3);\n\t\tif (l.length > 2) { continue; }\n\t\tconst fields = parseFields(l[0]);\n\t\tif (!fields) { continue; }\n\t\tconst value = parseValue(val);\n\t\tif (value === null) { continue; }\n\n\t\tconst operator = decodeValue(l[1] || '');\n\t\tconst groupIndex = sg.indexOf('');\n\t\tconst groups = groupIndex < 0 ? sg : sg.slice(0, groupIndex + 1);\n\t\tallMatches.push({\n\t\t\tgroups,\n\t\t\tfields,\n\t\t\toperator: !operator && value === true ? null : operator,\n\t\t\tsign,\n\t\t\tvalue: value === true ? null : value\n\t\t});\n\t}\n\n\tconst { and, or } = toOr(allMatches);\n\n\t/** @type {Param} */\n\tconst result = {};\n\tif (values?.length) {\n\t\tresult.values = values;\n\t}\n\tif (limit && limit > 0) {\n\t\tresult.limit = limit;\n\t}\n\tif (page && page > 0) {\n\t\tresult.page = page;\n\t}\n\tif (offset && offset > 0) {\n\t\tresult.offset = offset;\n\t}\n\tif (select?.length) {\n\t\tresult.select = select;\n\t}\n\tif (sorts?.length) {\n\t\tresult.sort = sorts;\n\t}\n\tconst where = and;\n\tif (where?.length) {\n\t\tresult.where = where;\n\t}\n\tconst orWhere = or;\n\tif (orWhere?.length) {\n\t\tresult.orWhere = orWhere;\n\t}\n\tif (Array.isArray(placeholders) && placeholders.length) {\n\t\tresult.placeholders = placeholders;\n\t}\n\n\n\treturn result\n}\n","/** @import { Param } from './types.mjs' */\n\n/**\n * \n * @param {Partial<Param>} a \n * @param {Partial<Param>} b \n * @returns {Param}\n */\nexport function merge(a, b) {\n\tconst limit = b.limit || a.limit || 10;\n\tconst page = b.page ?? a.page;\n\tconst offset = \n\tb.offset ?? (b.limit && (b.page || b.page === 0) ? (Math.floor(Math.max(b.page || 0, 1)) - 1) * b.limit : null)\n\t?? a.offset ?? (a.limit && (a.page || a.page === 0) ? (Math.floor(Math.max(a.page || 0, 1)) - 1) * a.limit : null)\n\t?? (Math.floor(Math.max(page || 0, 1)) - 1) * limit;\n\n\tconst values = [...a.values || [], ...b.values || []]\n\tconst sort = [...a.sort || [], ...b.sort || []]\n\tconst select = [...a.select || [], ...b.select || []]\n\tconst where = [...a.where || [], ...b.where || []]\n\tconst orWhere = [...a.orWhere || [], ...b.orWhere || []]\n\tconst or = [...a.or || [], ...b.or || []]\n\n\t/** @type {Param} */\n\tconst result = {};\n\tif (values?.length) {\n\t\tresult.values = values;\n\t}\n\tif (limit && limit > 0) {\n\t\tresult.limit = limit;\n\t}\n\tif (page && page > 0) {\n\t\tresult.page = page;\n\t}\n\tif (offset && offset > 0) {\n\t\tresult.offset = offset;\n\t}\n\tif (select?.length) {\n\t\tresult.select = select;\n\t}\n\tif (sort?.length) {\n\t\tresult.sort = sort;\n\t}\n\tif (where?.length) {\n\t\tresult.where = where;\n\t}\n\tif (orWhere?.length) {\n\t\tresult.orWhere = orWhere;\n\t}\n\tif (or?.length) {\n\t\tresult.or = or;\n\t}\n\n\treturn result;\n}\n","/** @import { RecursiveArray } from '../types/types.mjs' */\n/** @import { Children, Field, FieldValue, Match, Or, Param } from './types.mjs' */\n\n/** @param {string} v */\nconst encodeValue = v => encodeURIComponent(v).replaceAll('%20', '+');\n\n/**\n * \n * @param {string | RecursiveArray<string> | FieldValue} value \n */\nfunction stringifyValue(value) {\n\tif (Array.isArray(value)) {\n\t\t/**\n\t\t * \n\t\t * @param {string | RecursiveArray<string>} v \n\t\t * @returns {string}\n\t\t */\n\t\tfunction s(v) {\n\t\t\tif (Array.isArray(v)) {\n\t\t\t\treturn `(${v.map(s).join(',')})`;\n\t\t\t}\n\t\t\treturn encodeValue(v);\n\t\t}\n\t\tconst val = value.map(s).join(',');\n\t\tif (value.length > 1) { return val; }\n\t\treturn `(${val})`;\n\t}\n\tif (typeof value !== 'object') {\n\t\treturn encodeValue(value);\n\t}\n\tconst { field, placeholder } = value;\n\tif (placeholder) {\n\t\treturn `?${encodeValue(placeholder)}`;\n\t}\n\tif (field) {\n\t\treturn `:${encodeValue(field)}`;\n\t}\n\t// TODO:\n\treturn '';\n}\n\n/**\n * \n * @param {Field[]} fields \n */\nfunction stringifyFields(fields) {\n\treturn fields.map(item => {\n\t\tconst [field, ...sub] = typeof item === 'string' ? [item] : item;\n\t\t\treturn `${encodeValue(field)}${sub.map(() => `[k]`).join('')}`;\n\t\t}\n\t).join('.');\n}\n/**\n * \n * @param {Match} define \n */\nfunction stringifyDefine([fields, value, operator, sign]) {\n\tconst key = operator\n\t\t? `${stringifyFields(fields)}:${encodeValue(operator)}${sign || ''}`\n\t\t: `${stringifyFields(fields)}${sign || ''}`;\n\tif (operator === null) { return key; }\n\tif (value === null) { return ''; }\n\tif (typeof value === 'function') { return''; }\n\treturn `${key}=${stringifyValue(value)}`;\n}\n/**\n * \n * @param {(Match | Children)[]} list \n * @returns {string[]}\n */\nfunction stringifyAnd(list) {\n\tlet index = 0;\n\treturn list.flatMap(v => {\n\t\tif (v.length !== 2) {\n\t\t\treturn stringifyDefine(v);\n\t\t}\n\t\tconst list = stringifyAnd(v[1]);\n\t\tif (!list.length) { return []; }\n\t\tlet key = stringifyFields(v[0]);\n\t\tif (list.length > 1) {\n\t\t\tkey += `?${(index++).toString(36)}`;\n\t\t}\n\t\treturn list.map(v => `${key}.${v}`);\n\t}).filter(Boolean);\n}\n\n/**\n * \n * @param {(Match | Children | Or)[]} list \n * @returns {string[]}\n */\nfunction stringifyOr(list) {\n\tlet index = 0;\n\treturn list.map(v => {\n\t\tif (Array.isArray(v)) {\n\t\t\treturn stringifyAnd([v]);\n\n\t\t}\n\t\treturn [\n\t\t\t...stringifyAnd(v.and || []),\n\t\t\t...stringifyOr(v.or || []),\n\t\t];\n\t}).flatMap(list => {\n\t\tif (!list) { return []; }\n\t\tconst key = list.length === 1 ? `~` : `${(index++).toString(36)}~`;\n\t\treturn list.map(v => `${key}${v}`);\n\t});\n}\n/**\n * \n * @param {Partial<Param>} query \n * @param {boolean} [usePage] \n */\nexport function stringify({\n\tvalues,\n\twhere,\n\torWhere,\n\tsort,\n\tselect,\n\tlimit, offset, page,\n\tplaceholders,\n}, usePage) {\n\t/** @type {string[]} */\n\tlet queries = [];\n\tfor (const v of values || []) {\n\t\tif (!v) { continue; }\n\t\tqueries.push(`=${encodeValue(v)}`);\n\t}\n\tif (limit && limit > 0) {\n\t\tqueries.push(`:limit=${limit}`);\n\t}\n\tif (usePage) {\n\t\tif (page && page > 0) {\n\t\t\tqueries.push(`:page=${page}`);\n\t\t}\n\t} else {\n\t\tif (offset && offset > 0) {\n\t\t\tqueries.push(`:offset=${offset}`);\n\t\t}\n\t}\n\tif (select) {\n\t\tconst val = select.filter(Boolean).map(encodeValue).join(',');\n\t\tif (val) {\n\t\t\tqueries.push(`.select=${val}`);\n\t\t}\n\t}\n\tif (sort) {\n\t\tconst val = sort.filter(Boolean).map(v => {\n\t\t\tif (Array.isArray(v)) {\n\t\t\t\tconst [field, desc] = v;\n\t\t\t\tif (field) {\n\t\t\t\t\treturn `${desc ? '-' : ''}${encodeValue(field)}`;\n\t\t\t\t}\n\t\t\t} else if (v) {\n\t\t\t\treturn encodeValue(v);\n\t\t\t}\n\t\t\treturn '';\n\t\t}).filter(Boolean).join(',');\n\t\tif (val) {\n\t\t\tqueries.push(`.sort=${val}`);\n\t\t}\n\t}\n\tif (placeholders && typeof placeholders === 'object' && !Array.isArray(placeholders)) {\n\t\tfor (const [k, v] of Object.entries(placeholders)) {\n\t\t\tqueries.push(`?${encodeValue(k)}=${encodeValue(v)}`);\n\n\t\t}\n\t}\n\tfor (const v of stringifyAnd(where || [])) {\n\t\tqueries.push(v);\n\t}\n\tfor (const v of stringifyOr(orWhere || [])) {\n\t\tqueries.push(v);\n\t}\n\treturn queries.join('&');\n}\n","export * from './exec.mjs';\nexport * from './fill.mjs';\nexport { parse } from './parse.mjs';\nexport * from './merge.mjs';\nexport * from './stringify.mjs';\nexport * from './types.mjs';\nexport * from './util.mjs';\nexport * from './WhereLike.mjs';\n","/**\n * @template T\n * @typedef {T | readonly T[]} Hook.MaybeArray\n */\n/**\n * @template T\n * @typedef {T extends readonly any[] ? Readonly<T>\n * : T extends Record<string, any> ? Hook.MaybeArray<Hook.Define<T> | T>\n * : T extends object ? Hook.MaybeArray<Hook.Define<T> | T>\n * : Hook.MaybeArray<T>\n * } Hook.Item\n */\n/**\n * @template T\n * @typedef {T extends Record<string, any> ? { [k in keyof T]?: Hook.Item<T[k]> } : T} Hook.Define\n*/\n\n\n\n\n/** @type {*} */\nconst noopFilter = () => true;\n\n\n\n\n/**\n * \n * @param {Record<string, any>} plugin \n * @param {string[]} name \n * @returns {*[]}\n */\nfunction findHook(plugin, name) {\n\tlet list = [plugin].flat();\n\tfor (const k of name.filter(Boolean)) {\n\t\tconst values = [];\n\t\tfor (const it of list) {\n\t\t\tif (!it || typeof it !== 'object') { continue; }\n\t\t\tif (!Object.hasOwn(it, k)) { continue; }\n\t\t\tvalues.push(it[k]);\n\t\t}\n\t\tif (!values.length) { return []; }\n\t\tlist = values.flat();\n\t}\n\treturn list;\n}\n\n/**\n * \n * @template T\n * @param {any} plugin \n * @param {string[]} names \n * @returns {T | void}\n */\nfunction first(plugin, names) {\n\tif (!names.length) { return plugin; }\n\tif (!plugin || typeof plugin !== 'object') { return; }\n\tconst [name, ...keys] = names;\n\tfor (const v of [plugin].flat()) {\n\t\tconst val = first(v[name], keys);\n\t\tif (val !== undefined) { return val; }\n\t}\n}\n\n/**\n * \n * @template T\n * @param {Record<string, any>} hooks \n * @param {string[]} name \n * @returns {IterableIterator<T>}\n */\nfunction* values(hooks, name) {\n\tfor (const it of Object.values(hooks)) {\n\t\tfor (const value of findHook(it, name)) {\n\t\t\tyield value;\n\t\t}\n\t}\n}\n\n\n\n\n/**\n * @template T\n */\nexport class Hook {\n\t/**\n\t * @template {object} T\n\t * @param {Record<string, Hook.Define<T>> | (() => Record<string, Hook.Define<T>>)} [options]\n\t * @return {Hook<T>}\n\t */\n\tstatic build(options) {\n\t\tconst hook = new Hook();\n\t\treturn Hook.update(hook, options);\n\t}\n\t/**\n\t * \n\t * @template T\n\t * @param {Hook<T>} hook\n\t * @param {Record<string, Hook.Define<T>> | (() => Record<string, Hook.Define<T>>)} [options]\n\t */\n\tstatic update(hook, options) {\n\t\tlet updated = false;\n\t\tif (typeof options === 'function') {\n\t\t\tObject.defineProperty(hook.#config, 'hooks', {\n\t\t\t\tconfigurable: true,\n\t\t\t\tget() {\n\t\t\t\t\tconst r = options();\n\t\t\t\t\treturn typeof r === 'object' && r || {};\n\t\t\t\t},\n\t\t\t});\n\t\t\tupdated = true;\n\t\t} else {\n\t\t\tif (options && typeof options === 'object') {\n\t\t\t\tObject.defineProperty(hook.#config, 'hooks', {\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\tvalue: options,\n\t\t\t\t});\n\t\t\t\tupdated = true;\n\t\t\t}\n\t\t}\n\t\tif (updated) {\n\t\t\tHook.reset(hook);\n\t\t}\n\t\treturn hook;\n\t}\n\t/**\n\t * \n\t * @template T\n\t * @param {Hook<T>} hook\n\t */\n\tstatic reset(hook) {\n\t\tconst hooks = hook.#hooks;\n\t\tconst resetFn = hook.#config.resetFn;\n\t\tresetFn.sort(([, a], [, b]) => a - b);\n\t\tconst before = resetFn.filter(([, p]) => p <= 0);\n\t\tconst after = resetFn.filter(([, p]) => p > 0);\n\t\tfor (const [fn] of before) { fn(); }\n\t\tfor (const fn of values(hooks, ['reset'])) {\n\t\t\tif (typeof fn !== 'function') { continue; }\n\t\t\tfn();\n\t\t}\n\t\tfor (const [fn] of after) { fn(); }\n\t}\n\n\t/** @type {{hooks: any; resetFn: [fn: () => void, hysteresis: number][]}} */\n\t#config = { hooks: Object.create(null), resetFn: [] };\n\t/** @type {string[]} */\n\t#keys = [];\n\t#stringTag = 'Hook';\n\t[Symbol.iterator]() { return this.entries(); }\n\t[Symbol.toStringTag]() { return this.#stringTag; }\n\t/** @param {string} hint */\n\t[Symbol.toPrimitive](hint) {\n\t\tif (hint === 'number') { return NaN; }\n\t\treturn `[${this[Symbol.toStringTag]()}]`;\n\t}\n\n\tget #hooks() { return this.#config.hooks; };\n\t/**\n\t * @template {T extends readonly any[] ? never : T extends object ? string & keyof T : never} K\n\t * @param {K} key \n\t * @returns {Hook<Exclude<T extends readonly any[] ? never : T extends object ? T[K] :never, void | undefined>>}\n\t */\n\tget(key) {\n\t\tconst keys = [...this.#keys, key];\n\t\tconst hook = new Hook();\n\t\thook.#config = this.#config;\n\t\thook.#keys = keys;\n\t\thook.#stringTag = `Hook(${keys.join('.')})`;\n\t\treturn hook;\n\t}\n\t/**\n\t * @param {T extends (...args: infer A) => any ? A : []} args \n\t * @returns \n\t */\n\tcall(...args) {\n\t\tfor (const fn of this.values()) {\n\t\t\tif (typeof fn !== 'function') { continue; }\n\t\t\tfn(...args);\n\t\t}\n\t}\n\t/**\n\t * \n\t * @param {string} plugin \n\t * @returns {T | void}\n\t */\n\tfirst(plugin) {\n\t\tconst hooks = this.#hooks;\n\t\tif (!Object.hasOwn(hooks, plugin)) { return; }\n\t\treturn first(hooks[plugin], this.#keys.filter(Boolean));\n\t}\n\n\t/**\n\t * \n\t * @param {string} plugin \n\t * @returns {IterableIterator<T extends readonly (infer V)[] ? V : T>}\n\t */\n\t*plugin(plugin) {\n\t\tconst hooks = this.#hooks;\n\t\tif (!Object.hasOwn(hooks, plugin)) { return; }\n\t\tyield* findHook(hooks[plugin], this.#keys.filter(Boolean));\n\t}\n\n\t/**\n\t * \n\t * @returns {IterableIterator<T extends readonly (infer V)[] ? V : T>}\n\t */\n\tvalues() { return values(this.#hooks, this.#keys); }\n\n\t/**\n\t * \n\t * @returns {IterableIterator<[string, T extends readonly (infer V)[] ? V : T]>}\n\t */\n\t*entries() {\n\t\tconst hooks = this.#hooks;\n\t\tconst name = this.#keys;\n\t\tfor (const [plugin, it] of Object.entries(hooks)) {\n\t\t\tfor (const value of findHook(it, name)) {\n\t\t\t\tyield [plugin, value];\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * \n\t * @template [TX=(T extends Record<string, infer TT>? TT extends readonly (infer V)[] ? V : TT : never)]\n\t * @param {(v: *)=>v is TX} filter \n\t * @returns {IterableIterator<[plugin: string, key: string, value: TX]>}\n\t */\n\t*entriesObject(filter = noopFilter) {\n\t\tfor (const [plugin, hooksMap] of this.entries()) {\n\t\t\tif (!hooksMap || typeof hooksMap !== 'object') { continue; }\n\t\t\tfor (const [k, v] of Object.entries(hooksMap)) {\n\t\t\t\tif (!filter(v)) { continue; }\n\t\t\t\tyield [plugin, k, v];\n\t\t\t}\n\t\t}\n\t}\n\n\n\n\t/**\n\t * @template [TT=(T extends Record<string, infer TT> ? TT : never)]\n\t * @param {(v: *)=>v is TT} [filter] \n\t * @returns {Record<string, TT>}\n\t */\n\tnamed(filter = noopFilter) {\n\t\t/** @type {Record<string, TT>} */\n\t\tconst result = Object.create(null);\n\t\tfor (const hooksMap of this.values()) {\n\t\t\tif (!hooksMap || typeof hooksMap !== 'object') { continue; }\n\t\t\tfor (const [k, v] of Object.entries(hooksMap)) {\n\t\t\t\tif (!filter(v)) { continue; }\n\t\t\t\tresult[k] = v;\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * \n\t * @param {() => void} fn \n\t * @param {number} [hysteresis] \n\t * @returns \n\t */\n\tlisten(fn, hysteresis) {\n\t\tif (typeof fn !== 'function') { return () => { }; }\n\t\tconst resetFn = this.#config.resetFn;\n\t\t/** @type {[() => void, number]} */\n\t\tconst it = [fn, Number.isFinite(hysteresis) && hysteresis || 0];\n\t\tresetFn.push(it);\n\t\tresetFn.sort(([, a], [, b]) => b - a);\n\t\treturn () => {\n\t\t\tconst index = resetFn.findIndex(v => v === it);\n\t\t\tif (index >= 0) {\n\t\t\t\tresetFn.splice(index, 1);\n\t\t\t}\n\t\t};\n\t}\n}\n","const regex = /\\{([^}{}]+)\\}/g\n/**\n * \n * @param {string?} [pattern] \n */\nexport function getPatternFields(pattern) {\n\tif (!pattern || typeof pattern !== 'string') { return []; }\n\t/** @type {string[]} */\n\tconst fields = [];\n\tfor(let result = regex.exec(pattern); result; result = regex.exec(pattern)) {\n\t\tfields.push(result[1]);\n\t}\n\treturn fields;\n}\n\n/**\n * \n * @param {string?} [pattern] \n * @param {Record<string, any>?} [document] \n * @returns \n */\nexport function runPattern(pattern, document) {\n\tif (!pattern || typeof pattern !== 'string') { return ''; }\n\tconst doc = typeof document === 'object' && document || {};\n\treturn pattern.replace(regex, (_, v) => {\n\t\tif (Object.hasOwn(doc, v)) { return doc[v] ?? ''; }\n\t\treturn `{${v}}`;\n\t});\n}\n","/** @import { Permission } from '@yongdall/types' */\n\n\n\n\n\n/**\n *\n * @param {Permission} permission\n * @returns {Iterable<string>}\n */\nexport default function* yieldPermissionConstraintFields({ constraints, organizationField }) {\n\tif (organizationField) { yield organizationField; }\n\tif (!constraints) { return; }\n\tfor (const [field, constraint] of Object.entries(constraints)) {\n\t\tif (!constraint) { continue; }\n\t\tconst { value, values, user } = constraint;\n\t\tif (value !== undefined) {\n\t\t\tyield field;\n\t\t} else if (Array.isArray(values) && values.length) {\n\t\t\tyield field;\n\t\t} else if (values instanceof Set && values.size) {\n\t\t\tyield field;\n\t\t} else if (user) {\n\t\t\tyield field;\n\t\t}\n\t}\n}\n","export * as Search from './Search/index.mjs';\nexport { Hook } from './Hook.mjs';\nexport * from './model.mjs';\nexport { default as yieldPermissionConstraintFields } from './yieldPermissionConstraintFields.mjs';\n\n\nexport const pluginIdRegex = /^(?:(?<scope>@[a-zA-Z\\d_.-]+)\\/)?(?<name>[a-zA-Z\\d_.-]+)$/;\nexport const findPluginIdRegex = /^(?<pluginId>(?:(?<scope>@[a-zA-Z\\d_.-]+)\\/)?(?<name>[a-zA-Z\\d_.-]+))(?:\\/(?<path>[^#]*))?(?:#(?<hash>.*))?$/;\n\n/**\n * @typedef {object} Plugin\n * @property {string} [version]\n * @property {Record<string, string>} [assets]\n * @property {string} [hooks]\n * @property {string[]} [styles]\n */\n/**\n * @typedef {object} BootConfiguration\n * @property {string} [route] 路由管理器\n * @property {string} [theme] 界面主题\n * @property {string} [authenticator] 登陆器\n * @property {boolean} [authRequired] 是否强制登陆\n * @property {string} [skin]\n * @property {boolean} [single] \n * @property {string} [application] \n * @property {string} [domain] \n * @property {string | number} [port] \n * @property {string} [path] \n * @property {Record<string, string>} [pages]\n * @property {Record<string, string>} [configurationPages]\n * \n * \n * @property {string} [logo] \n * @property {string} [title] \n * @property {string} [company] \n * @property {string} [type] \n * @property {string} [help] 帮助链接\n * @property {any[]} [userMenus]\n */\n/**\n * @typedef {object} Importmap\n * @property {Record<string, string>} imports\n * @property {Record<string, Record<string, string>>} scopes\n */\n/**\n * @typedef {object} Indicator\n * @property {string} color\n * @property {string} label\n * @property {unknown} [filters]\n */\n\n/**\n *\n * @param {*} v\n * @returns {v is (...p: any[]) => any}\n */\nexport function isFunction(v) {\n\treturn typeof v === 'function';\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["#config","#hooks","#stringTag","#keys"],"sources":["../../packages/common/Search/util.mjs","../../packages/common/Search/exec.mjs","../../packages/common/Search/fill.mjs","../../packages/common/Search/parse.mjs","../../packages/common/Search/merge.mjs","../../packages/common/Search/stringify.mjs","../../packages/common/Search/toWhere.mjs","../../packages/common/Search/index.mjs","../../packages/common/transformError.mjs","../../packages/common/Hook.mjs","../../packages/common/model.mjs","../../packages/common/yieldPermissionConstraintFields.mjs","../../packages/common/index.mjs"],"sourcesContent":["\n/**\n * @template T\n * @template TReturn\n * @template TNext\n * @param {Generator<T, TReturn, TNext>} generator \n * @param {(value: T) => TNext} run \n * @param {TNext} def \n */\nexport function runGenerator(generator, run, def) {\n\t/** @type {TNext} */\n\tlet value = def;\n\tfor (; ;) {\n\t\tconst result = generator.next(value);\n\t\tif (result.done) {\n\t\t\treturn result.value;\n\t\t}\n\t\tvalue = run(result.value);\n\t}\n}\n/**\n * @template T\n * @template TReturn\n * @template TNext\n * @param {Generator<T, TReturn, TNext>} generator \n * @param {(value: T) => PromiseLike<TNext> | TNext} run \n * @param {TNext} def \n */\nexport async function asyncRunGenerator(generator, run, def) {\n\t/** @type {TNext} */\n\tlet value = def;\n\tfor (; ;) {\n\t\tconst result = generator.next(value);\n\t\tif (result.done) {\n\t\t\treturn result.value;\n\t\t}\n\t\tvalue = await run(result.value);\n\t}\n}\n","/** @import { Children, Field, Match, Or } from './types.mjs' */\nimport { asyncRunGenerator, runGenerator } from './util.mjs';\n\n\n/**\n * \n * @param {Record<string, any>[]} data \n * @param {Field[]} fields \n * @returns {any[]}\n */\nfunction select(data, fields) {\n\tlet list = data;\n\tfor (let item of fields) {\n\t\tconst [field, ...sub] = typeof item === 'string' ? [item] : item;\n\n\t\tif (!list.length) { continue; }\n\t\t/** @type {any[]} */\n\t\tconst subList = [];\n\t\tit: for (const item of list) {\n\t\t\tif (!item || typeof item !== 'object') { continue; }\n\t\t\tif (!Object.hasOwn(item, field)) { continue; }\n\t\t\tlet value = item[field];\n\t\t\tfor (const index of sub) {\n\t\t\t\tif (!Array.isArray(value)) { continue it; }\n\t\t\t\tvalue = value[index];\n\t\t\t}\n\t\t\tsubList.push(value);\n\t\t}\n\t\tlist = subList.flat(Infinity).filter(v => v && typeof v === 'object');\n\t}\n\treturn list;\n\n}\n\n/**\n * \n * @param {Record<string, any>[]} list \n * @param {string} field \n * @returns {any[]}\n */\nfunction selectValue(list, field) {\n\t/** @type {any[]} */\n\tconst subList = [];\n\tfor (const item of list) {\n\t\tif (!item || typeof item !== 'object') { continue; }\n\t\tif (!Object.hasOwn(item, field)) { continue; }\n\t\tsubList.push(item[field]);\n\t}\n\treturn subList;\n\n}\n/**\n * @typedef {object} ExecParam\n * @property {Field[]} fields\n * @property {string} operator\n * @property {string?} [sign]\n * @property {any} value\n * @property {any[]} values\n * @property {string} [field]\n */\n/**\n * \n * @param {Record<string, any>[]} data \n * @param {Field[]} parentFields \n * @param {Match} match \n * @returns {Generator<ExecParam, boolean?, boolean?>}\n */\nfunction* execMatch(data, parentFields, match) {\n\tconst fields = [...match[0]];\n\tconst currentFields = [...parentFields, ...fields];\n\tconst last = fields.pop();\n\tif (!last) { return null; }\n\tconst lastField = typeof last === 'string' ? last : last[0];\n\tconst records = select(data, fields);\n\tif (!records.length) { return false; }\n\tconst [, value, operator, sign] = match;\n\tif (operator === null) {\n\t\tconst values = selectValue(records, lastField);\n\t\treturn sign ? values.find(v => v === null) : values.find(v => v !== null);\n\t}\n\tif (typeof value !== 'object' || !value || Array.isArray(value)) {\n\n\t\tconst values = selectValue(records, lastField);\n\t\tif (!values.length) { return false; }\n\n\t\treturn yield ({ fields: currentFields, operator, sign, value, values });\n\t}\n\n\tif (value.filter || value.table || value.placeholder) { return null; }\n\tconst field = value.field;\n\tif (!field) { return null; }\n\n\t/** @type {boolean?} */\n\tlet defResult = false;\n\tfor (const item of records) {\n\t\tif (!item || typeof item !== 'object') { continue; }\n\t\tif (!Object.hasOwn(item, field)) { continue; }\n\t\tif (!Object.hasOwn(item, lastField)) { continue; }\n\t\tdefResult = null;\n\t\tconst result = yield ({ fields: currentFields, operator, sign, value: item[field], field, values: [item[lastField]] });\n\t\tif (result === null) { continue; }\n\t\treturn result;\n\t}\n\treturn defResult;\n\n}\n/**\n * \n * @param {Record<string, any>[]} data \n * @param {Field[]} parentFields \n * @param {Match | Children | Or} match \n * @returns {Generator<ExecParam, boolean?, boolean?>}\n */\nfunction* execItem(data, parentFields, match) {\n\tif (!Array.isArray(match)) {\n\t\tconst { and, or } = match;\n\t\treturn yield* execOr(data, parentFields, and, or);\n\t}\n\tif (match.length !== 2) {\n\t\treturn yield* execMatch(data, parentFields, match);\n\n\t}\n\t/** @type {boolean?} */\n\tlet defResult = null;\n\tconst values = select(data, match[0]);\n\tif (!values.length) { return false; }\n\tconst fields = [...parentFields, ...match[0]];\n\tfor (const item of match[1]) {\n\t\tconst result = yield* execItem(values, fields, item);\n\t\tif (result === null) { continue; }\n\t\tif (!result) { return false; }\n\t\tdefResult = true;\n\t}\n\treturn defResult;\n}\n/**\n * \n * @param {Record<string, any>[]} list \n * @param {Field[]} parentFields \n * @param {(Match | Children)[]} [and] \n * @param {(Match | Children | Or)[]} [or] \n * @returns {Generator<ExecParam, boolean?, boolean?>}\n */\nfunction* execOr(list, parentFields, and, or) {\n\t/** @type {boolean?} */\n\tlet defResult = null;\n\tif (Array.isArray(and)) {\n\t\tfor (const item of and) {\n\t\t\tconst result = yield* execItem(list, parentFields, item);\n\t\t\tif (result === null) { continue; }\n\t\t\tif (!result) { return false; }\n\t\t\tdefResult = true;\n\t\t}\n\t}\n\tif (Array.isArray(or)) {\n\t\tfor (const item of or) {\n\t\t\tconst result = yield* execItem(list, parentFields, item);\n\t\t\tif (result === null) { continue; }\n\t\t\tif (result) { return true; }\n\t\t\tdefResult = true;\n\t\t}\n\t}\n\treturn defResult;\n\n}\n\n/**\n * \n * @param {Record<string, any>} data \n * @param {(value: ExecParam) => boolean?} exec \n * @param {(Match | Children)[]} [and] \n * @param {(Match | Children | Or)[]} [or] \n */\nexport function exec(data, exec, and, or) {\n\treturn runGenerator(execOr([data].flat(), [], and, or), exec, null);\n}\n\n/**\n * \n * @param {Record<string, any>} data \n * @param {(value: ExecParam) => PromiseLike<boolean?> | boolean?} exec \n * @param {(Match | Children)[]} [and] \n * @param {(Match | Children | Or)[]} [or] \n */\nexport async function asyncExec(data, exec, and, or) {\n\treturn asyncRunGenerator(execOr([data].flat(), [], and, or), exec, null);\n}\n","/** @import { Value } from './types.mjs' */\n/** @import { Children, Field, FieldValue, Match, Or } from './types.mjs' */\n\nimport { runGenerator } from './util.mjs';\n\n\n\n\n\n\n/**\n * \n * @template {Match | Children | Or} T \n * @param {T[]} match \n * @returns {Generator<Value, T[]?, Value | null>}\n */\nfunction* fillList(match) {\n\t/** @type {T[]} */\n\tlet list = [];\n\tlet has = false;\n\tfor (const child of match) {\n\t\tconst val = yield* fillMatch(child);\n\t\tlist.push(val || child);\n\t\tif (val) { has = true; }\n\t}\n\treturn has ? list : null;\n\n}\n/**\n * \n * @template {Match | Children | Or} T \n * @param {T} match \n * @returns {Generator<Value, T?, Value | null>}\n */\nfunction* fillMatch(match) {\n\tif (!Array.isArray(match)) {\n\t\tconst and = match.and && (yield* fillMatches(match.and));\n\t\tconst or = match.or && (yield* fillMatches(match.or));\n\t\tif (!and && !or) { return null; }\n\t\t/** @type {Or} */\n\t\tconst item = { and: and || match.and, or: or || match.or };\n\t\treturn /** @type {T} */(item);\n\t}\n\tif (match.length === 2) {\n\t\tlet children = yield* fillMatches(match[1]);\n\t\tif (!children) { return null; }\n\t\t/** @type {Children} */\n\t\tconst item = [match[0], match[1]];\n\t\treturn /** @type {T} */(item);\n\t}\n\tconst value = yield match[1];\n\tif (value === null) { return null; }\n\t/** @type {Match} */\n\tconst item = [match[0], value, match[2], match[3]];\n\treturn /** @type {T} */(item);\n\n}\n\n/**\n * \n * @template {Match | Children | Or} T \n * @param {T[]} match \n * @returns {Generator<Value, T[]?, Value | null>}\n */\nexport function* fillMatches(match) {\n\t/** @type {T[]} */\n\tconst list = [];\n\tlet has = false;\n\tfor (const child of match) {\n\t\tconst val = yield* fillMatch(child);\n\t\tlist.push(val || child);\n\t\tif (val) { has = true; }\n\t}\n\treturn has ? list : null;\n\n}\n\n/**\n * \n * @template {Match | Children | Or} T \n * @param {T[] | null | undefined} match \n * @param {(placeholder: string) => Value | null} getPlaceholder \n * @returns {T[]}\n */\nexport function fill(match, getPlaceholder) {\n\tif (!match) { return []; }\n\t/**\n\t * \n\t * @template {Value} T \n\t * @param {T} match \n\t * @returns {Value | null}\n\t */\n\tfunction fillValue(match) {\n\t\tif (!match || typeof match !== 'object') { return null; }\n\t\tif (Array.isArray(match)) { return null; }\n\t\tconst placeholder = match.placeholder;\n\t\tif (!placeholder || typeof placeholder !== 'string') { return null; }\n\t\treturn getPlaceholder(placeholder);\n\t}\n\treturn runGenerator(fillList(match), fillValue, null) || match;\n}\n","/** @import { RecursiveArray } from '../types/types.mjs' */\n/** @import { Children, Field, Match, Or, Param, Value } from './types.mjs' */\n\n\n\n/**\n * @typedef {object} Parse.Field\n * @property {string} field\n * @property {string?} [group]\n * @property {number[]} sub\n */\n/**\n * @typedef {object} Parse.Match\n * @property {null} [children]\n * @property {Parse.Field[]} fields\n * @property {string?} operator\n * @property {string} [sign]\n * @property {Value} value\n */\n\n\n/**\n * @typedef {object} Parse.Children\n * @property {Parse.Field[]} fields\n * @property {(Parse.Match | Parse.Children)[]} children\n */\n\n/**\n * \n * @param {Parse.Field[]} fields \n * @returns {Field[]}\n */\nfunction compressFields(fields) {\n\treturn fields.map(\n\t\t({ field, sub }) => sub.length ? [field, ...sub] : field\n\t);\n}\n\n/**\n * \n * @param {Parse.Match | Parse.Children} v \n * @returns {Match | Children}\n */\nfunction compressAndItem(v) {\n\tif (v.children) {\n\treturn [compressFields(v.fields), v.children.map(compressAndItem)];\n\n\t}\n\tconst { fields, operator, value, sign } = v;\n\treturn [compressFields(fields), value, operator, sign];\n}\n\nconst fieldParserRegex = /^([-_\\d\\p{L}]+)((?:\\[-?\\d+\\])*)$/u;\n/**\n * \n * @param {string} l \n */\nfunction parseFields(l) {\n\t/** @type {Parse.Field[]} */\n\tconst fields = [];\n\tfor (const v of l.split('.')) {\n\t\tif (!v || v[0] === '?') { return null; }\n\t\tconst index = v.indexOf('?');\n\t\tconst r = fieldParserRegex.exec(index > 0 ? v.slice(0, index) : v);\n\t\tif (!r) { return null; }\n\t\tconst sub = r[2]?.split(/\\[|\\]/).filter(Boolean).map(v => parseInt(v) || 0) || [];\n\t\tconst group = index > 0 ? v.slice(index) : undefined;\n\t\tfields.push({ field: r[1], group, sub });\n\t}\n\treturn fields;\n\n}\n\n\n/** @param {string} v */\nconst decodeValue = v => decodeURIComponent(v.replaceAll('+', ' '));\n/**\n * \n * @param {string} s \n * @returns {string | RecursiveArray<string>?}\n */\nfunction parseArrayValue(s) {\n\t/** @type {(string | RecursiveArray<string>)[]} */\n\tconst root = [];\n\t/** @type {(string | RecursiveArray<string>)[][]} */\n\tconst stack = [];\n\tlet current = root;\n\t/** @type {string[]} */\n\tlet strings = [];\n\tlet end = false;\n\tlet must = true;\n\tfunction add() {\n\t\tcurrent.push(decodeValue(strings.join()));\n\t\tstrings = [];\n\t}\n\n\tfor (const c of s) {\n\t\tif (c === ',') {\n\t\t\tif (end) {\n\t\t\t\tend = false;\n\t\t\t} else {\n\t\t\t\tadd();\n\t\t\t}\n\t\t\tmust = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (c === ')') {\n\t\t\tif (must || strings.length) {\n\t\t\t\tadd();\n\t\t\t\tmust = false;\n\t\t\t}\n\t\t\tconst last = stack.pop();\n\t\t\tif (!last) { return null; }\n\t\t\tlast.push(current);\n\t\t\tcurrent = last;\n\t\t\tend = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (end) { return null; }\n\t\tmust = false;\n\t\tif (c !== '(') {\n\t\t\tstrings.push(c);\n\t\t\tcontinue;\n\t\t}\n\t\tif (strings.length) { return null; }\n\t\tstack.push(current);\n\t\tcurrent = [];\n\t}\n\tif (must || strings.length) {\n\t\tadd();\n\t}\n\tif (stack.length) { return null; }\n\treturn root.length === 1 ? root[0] : root;\n}\n\nconst valueQRegex = /^([-_\\d\\p{L}]+)@([-_\\d\\p{L}]+)/u;\n\n\n/**\n * \n * @param {string?} v \n * @returns {Value | true}\n */\nfunction parseValue(v) {\n\tif (v === null) { return true; }\n\tif (v[0] === '?') {\n\t\treturn { placeholder: decodeValue(v.slice(1)) };\n\t}\n\tif (v[0] === ':') {\n\t\treturn { field: decodeValue(v.slice(1)) };\n\t}\n\tif (v[0] === '@') {\n\t\t// TODO: \n\t\treturn null;\n\t}\n\tconst vq = valueQRegex.test(v);\n\tif (vq) {\n\t\t// TODO: \n\t\treturn null;\n\t}\n\tif (v.includes('(') || v.includes(')')) {\n\t\tconst list = parseArrayValue(v);\n\t\tif (list) { return list; }\n\t}\n\tif (v.includes(',')) {\n\t\treturn v.split(',').map(v => decodeValue(v.replaceAll('+', ' ')));\n\t}\n\treturn decodeValue(v);\n}\n/**\n * \n * @param {(Parse.Match | Parse.Children)[]} list \n * @returns {Iterable<Match | Children>}\n */\nfunction* toAnd(list) {\n\t/** @type {[(Parse.Match | Parse.Children), Parse.Field[], Parse.Field[]][]} */\n\tconst values = list.map(v => {\n\t\tconst fields = v.fields;\n\t\tconst index = fields.findLastIndex(v => v.group);\n\t\tif (index < 0 || index >= fields.length - 1) {\n\t\t\treturn [v, [], []];\n\t\t}\n\t\tconst field = fields[index];\n\t\tif (!field) { return [v, [], []]; }\n\t\treturn [{ ...v, fields: fields.slice(index + 1) }, fields.slice(0, index + 1), [...fields.slice(0, index), { ...field, group: undefined }]];\n\t});\n\tconst map = Object.groupBy(values, v => JSON.stringify(v[1]));\n\tyield* map['[]']?.map(v => compressAndItem(v[0])) || [];\n\tdelete map['[]'];\n\t/** @type {Parse.Children[]} */\n\tconst result = Object.values(map).filter(Boolean).map((list = []) => {\n\t\tif (!list?.length) { return { fields: [], children: [] }; }\n\t\treturn { fields: list[0][2] || [], children: list.map(v => v[0]) };\n\t}).filter(v => v.fields.length);\n\tif (!result.length) { return; }\n\n\tyield* toAnd(result);\n}\n\n/**\n * \n * @param {(Parse.Match & {groups: string[]})[]} list \n * @returns {Or}\n */\nfunction toOr(list) {\n\tconst map = Map.groupBy(list, v => v.groups.shift() ?? null);\n\tconst and = map.get(null) || [];\n\tconst baseOr = map.get('') || [];\n\tmap.delete(null);\n\tmap.delete('');\n\n\treturn {\n\t\tor: [\n\t\t\t...baseOr.map(v => compressAndItem(v)),\n\t\t\t...[...map.values()].map(v => toOr(v)),\n\t\t],\n\t\tand: [...toAnd(and)],\n\t};\n}\n/**\n * \n * @param {string} search \n * @returns {Param}\n */\nexport function parse(search, split = '&') {\n\t/** @type {string[]} */\n\tconst values = [];\n\t/** @type {string[]} */\n\tconst select = [];\n\t/** @type {[field: string, desc?: boolean][]} */\n\tconst sorts = [];\n\tlet limit = 0;\n\tlet offset = 0;\n\tlet page = 0;\n\tlet total = false;\n\t/** @type {Record<string, string>} */\n\tconst placeholders = {};\n\n\n\t/** @type {(Parse.Match & {groups: string[]})[]} */\n\tconst allMatches = [];\n\n\tfor (const s of typeof search === 'string' ? search.split(split) : []) {\n\t\tif (s[0] === '=') {\n\t\t\tvalues.push(s.slice(1));\n\t\t\tcontinue;\n\t\t}\n\t\tconst index = s.indexOf('=');\n\t\tconst key = index < 0 ? s : s.slice(0, index);\n\t\tconst val = index < 0 ? null : s.slice(index + 1);\n\t\tif (index <= 0) { continue; }\n\t\tif (`.!@^*<>{}[]()+|;,\"'\\`\\\\/`.includes(key[0])) { continue; }\n\t\tif (key[0] === '?') {\n\t\t\tplaceholders[decodeValue(key.slice(1))] = decodeValue(val || '');\n\t\t\tcontinue;\n\t\t}\n\t\tif (key[0] === ':') {\n\t\t\tconst name = key.slice(1);\n\t\t\tif (!val) { continue; }\n\t\t\tif (name === 'sort') {\n\t\t\t\tsorts.push(...val.split(',').filter(Boolean).map(v => {\n\t\t\t\t\tconst desc = v[0] === '-';\n\t\t\t\t\tconst name = desc ? v.slice(1) : v;\n\t\t\t\t\treturn /** @type {[field: string, desc?: boolean]} */([decodeValue(name), desc]);\n\t\t\t\t}).filter(Boolean));\n\t\t\t} else if (name === 'select') {\n\t\t\t\tselect.push(...val.split(',').map(decodeValue).filter(Boolean));\n\t\t\t} else if (name === 'limit') {\n\t\t\t\tif (val && /^\\d+$/.test(val)) { limit = parseInt(val); }\n\t\t\t} else if (name === 'offset') {\n\t\t\t\tif (val && /^\\d+$/.test(val)) { offset = parseInt(val); }\n\t\t\t} else if (name === 'page') {\n\t\t\t\tif (val && /^\\d+$/.test(val)) { page = parseInt(val); }\n\t\t\t} else if (name === 'total') {\n\t\t\t\tif (val) { total = true; }\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tconst sg = key.split('~');\n\t\tlet field = sg.pop() || '';\n\t\tlet sign = '';\n\t\tif ('!'.includes(field[field.length - 1])) {\n\t\t\tsign = '!';\n\t\t\tfield = field.slice(0, -1);\n\t\t}\n\n\t\tconst l = field.split(':', 3);\n\t\tif (l.length > 2) { continue; }\n\t\tconst fields = parseFields(l[0]);\n\t\tif (!fields) { continue; }\n\t\tconst value = parseValue(val);\n\t\tif (value === null) { continue; }\n\n\t\tconst operator = decodeValue(l[1] || '');\n\t\tconst groupIndex = sg.indexOf('');\n\t\tconst groups = groupIndex < 0 ? sg : sg.slice(0, groupIndex + 1);\n\t\tallMatches.push({\n\t\t\tgroups,\n\t\t\tfields,\n\t\t\toperator: !operator && value === true ? null : operator,\n\t\t\tsign,\n\t\t\tvalue: value === true ? null : value\n\t\t});\n\t}\n\n\tconst { and, or } = toOr(allMatches);\n\n\t/** @type {Param} */\n\tconst result = {};\n\tif (values?.length) {\n\t\tresult.values = values;\n\t}\n\tif (total) {\n\t\tresult.total = total;\n\t}\n\tif (limit && limit > 0) {\n\t\tresult.limit = limit;\n\t}\n\tif (page && page > 0) {\n\t\tresult.page = page;\n\t}\n\tif (offset && offset > 0) {\n\t\tresult.offset = offset;\n\t}\n\tif (select?.length) {\n\t\tresult.select = select;\n\t}\n\tif (sorts?.length) {\n\t\tresult.sort = sorts;\n\t}\n\tconst where = and;\n\tif (where?.length) {\n\t\tresult.where = where;\n\t}\n\tconst orWhere = or;\n\tif (orWhere?.length) {\n\t\tresult.orWhere = orWhere;\n\t}\n\tif (Array.isArray(placeholders) && placeholders.length) {\n\t\tresult.placeholders = placeholders;\n\t}\n\n\n\treturn result\n}\n","/** @import { Param } from './types.mjs' */\n\n/**\n * \n * @param {Partial<Param>} a \n * @param {Partial<Param>} b \n * @returns {Param}\n */\nexport function merge(a, b) {\n\tconst limit = b.limit || a.limit || 10;\n\tconst page = b.page ?? a.page;\n\tconst offset = \n\tb.offset ?? (b.limit && (b.page || b.page === 0) ? (Math.floor(Math.max(b.page || 0, 1)) - 1) * b.limit : null)\n\t?? a.offset ?? (a.limit && (a.page || a.page === 0) ? (Math.floor(Math.max(a.page || 0, 1)) - 1) * a.limit : null)\n\t?? (Math.floor(Math.max(page || 0, 1)) - 1) * limit;\n\n\tconst values = [...a.values || [], ...b.values || []]\n\tconst sort = [...a.sort || [], ...b.sort || []]\n\tconst select = [...a.select || [], ...b.select || []]\n\tconst where = [...a.where || [], ...b.where || []]\n\tconst orWhere = [...a.orWhere || [], ...b.orWhere || []]\n\tconst or = [...a.or || [], ...b.or || []]\n\n\t/** @type {Param} */\n\tconst result = {};\n\tif (values?.length) {\n\t\tresult.values = values;\n\t}\n\tif (limit && limit > 0) {\n\t\tresult.limit = limit;\n\t}\n\tif (a.total || b.total) {\n\t\tresult.total = true;\n\t}\n\tif (page && page > 0) {\n\t\tresult.page = page;\n\t}\n\tif (offset && offset > 0) {\n\t\tresult.offset = offset;\n\t}\n\tif (select?.length) {\n\t\tresult.select = select;\n\t}\n\tif (sort?.length) {\n\t\tresult.sort = sort;\n\t}\n\tif (where?.length) {\n\t\tresult.where = where;\n\t}\n\tif (orWhere?.length) {\n\t\tresult.orWhere = orWhere;\n\t}\n\tif (or?.length) {\n\t\tresult.or = or;\n\t}\n\n\treturn result;\n}\n","/** @import { RecursiveArray } from '../types/types.mjs' */\n/** @import { Children, Field, FieldValue, Match, Or, Param } from './types.mjs' */\n\n/** @param {string} v */\nconst encodeValue = v => encodeURIComponent(v).replaceAll('%20', '+');\n\n/**\n * \n * @param {string | boolean | number | RecursiveArray<string> | FieldValue} value \n */\nfunction stringifyValue(value) {\n\tif (Array.isArray(value)) {\n\t\t/**\n\t\t * \n\t\t * @param {string | RecursiveArray<string>} v \n\t\t * @returns {string}\n\t\t */\n\t\tfunction s(v) {\n\t\t\tif (Array.isArray(v)) {\n\t\t\t\treturn `(${v.map(s).join(',')})`;\n\t\t\t}\n\t\t\treturn encodeValue(v);\n\t\t}\n\t\tconst val = value.map(s).join(',');\n\t\tif (value.length > 1) { return val; }\n\t\treturn `(${val})`;\n\t}\n\tif (typeof value === 'number') {\n\t\treturn `${value}`;\n\t}\n\tif (typeof value === 'boolean') {\n\t\treturn value ? '1' : 0\n\t}\n\tif (typeof value !== 'object') {\n\t\treturn encodeValue(value);\n\t}\n\tconst { field, placeholder } = value;\n\tif (placeholder) {\n\t\treturn `?${encodeValue(placeholder)}`;\n\t}\n\tif (field) {\n\t\treturn `:${encodeValue(field)}`;\n\t}\n\t// TODO:\n\treturn '';\n}\n\n/**\n * \n * @param {Field[]} fields \n */\nfunction stringifyFields(fields) {\n\treturn fields.map(item => {\n\t\tconst [field, ...sub] = typeof item === 'string' ? [item] : item;\n\t\t\treturn `${encodeValue(field)}${sub.map(() => `[k]`).join('')}`;\n\t\t}\n\t).join('.');\n}\n/**\n * \n * @param {Match} define \n */\nfunction stringifyDefine([fields, value, operator, sign]) {\n\tconst key = operator\n\t\t? `${stringifyFields(fields)}:${encodeValue(operator)}${sign || ''}`\n\t\t: `${stringifyFields(fields)}${sign || ''}`;\n\tif (operator === null) { return key; }\n\tif (value === null) { return ''; }\n\tif (typeof value === 'function') { return''; }\n\treturn `${key}=${stringifyValue(value)}`;\n}\n/**\n * \n * @param {(Match | Children)[]} list \n * @returns {string[]}\n */\nfunction stringifyAnd(list) {\n\tlet index = 0;\n\treturn list.flatMap(v => {\n\t\tif (v.length !== 2) {\n\t\t\treturn stringifyDefine(v);\n\t\t}\n\t\tconst list = stringifyAnd(v[1]);\n\t\tif (!list.length) { return []; }\n\t\tlet key = stringifyFields(v[0]);\n\t\tif (list.length > 1) {\n\t\t\tkey += `?${(index++).toString(36)}`;\n\t\t}\n\t\treturn list.map(v => `${key}.${v}`);\n\t}).filter(Boolean);\n}\n\n/**\n * \n * @param {(Match | Children | Or)[]} list \n * @returns {string[]}\n */\nfunction stringifyOr(list) {\n\tlet index = 0;\n\treturn list.map(v => {\n\t\tif (Array.isArray(v)) {\n\t\t\treturn stringifyAnd([v]);\n\n\t\t}\n\t\treturn [\n\t\t\t...stringifyAnd(v.and || []),\n\t\t\t...stringifyOr(v.or || []),\n\t\t];\n\t}).flatMap(list => {\n\t\tif (!list) { return []; }\n\t\tconst key = list.length === 1 ? `~` : `${(index++).toString(36)}~`;\n\t\treturn list.map(v => `${key}${v}`);\n\t});\n}\n/**\n * \n * @param {Partial<Param>} query \n * @param {boolean} [usePage] \n */\nexport function stringify({\n\tvalues,\n\twhere,\n\torWhere,\n\tsort,\n\tselect,\n\tlimit, offset, page, total,\n\tplaceholders,\n}, usePage) {\n\t/** @type {string[]} */\n\tlet queries = [];\n\tfor (const v of values || []) {\n\t\tif (!v) { continue; }\n\t\tqueries.push(`=${encodeValue(v)}`);\n\t}\n\tif (limit && limit > 0) {\n\t\tqueries.push(`:limit=${limit}`);\n\t}\n\tif (total) {\n\t\tqueries.push(`:total=${total}`);\n\n\t}\n\tif (usePage) {\n\t\tif (page && page > 0) {\n\t\t\tqueries.push(`:page=${page}`);\n\t\t}\n\t} else {\n\t\tif (offset && offset > 0) {\n\t\t\tqueries.push(`:offset=${offset}`);\n\t\t}\n\t}\n\tif (select) {\n\t\tconst val = select.filter(Boolean).map(encodeValue).join(',');\n\t\tif (val) {\n\t\t\tqueries.push(`.select=${val}`);\n\t\t}\n\t}\n\tif (sort) {\n\t\tconst val = sort.filter(Boolean).map(v => {\n\t\t\tif (Array.isArray(v)) {\n\t\t\t\tconst [field, desc] = v;\n\t\t\t\tif (field) {\n\t\t\t\t\treturn `${desc ? '-' : ''}${encodeValue(field)}`;\n\t\t\t\t}\n\t\t\t} else if (v) {\n\t\t\t\treturn encodeValue(v);\n\t\t\t}\n\t\t\treturn '';\n\t\t}).filter(Boolean).join(',');\n\t\tif (val) {\n\t\t\tqueries.push(`.sort=${val}`);\n\t\t}\n\t}\n\tif (placeholders && typeof placeholders === 'object' && !Array.isArray(placeholders)) {\n\t\tfor (const [k, v] of Object.entries(placeholders)) {\n\t\t\tqueries.push(`?${encodeValue(k)}=${encodeValue(v)}`);\n\n\t\t}\n\t}\n\tfor (const v of stringifyAnd(where || [])) {\n\t\tqueries.push(v);\n\t}\n\tfor (const v of stringifyOr(orWhere || [])) {\n\t\tqueries.push(v);\n\t}\n\treturn queries.join('&');\n}\n","import { Search } from '@yongdall/common';\n\n/**\n * \n * @template TField\n * @template TParam\n * @template TWhere\n * @typedef {object} Where\n * @property {(where: TWhere) => boolean?} [value]\n * @property {(list: TWhere[]) => TWhere?} or\n * @property {(list: TWhere[]) => TWhere?} and\n * @property {ItemToWhere<TField, TParam, TWhere>} build\n */\n\n/**\n * \n * @template TField\n * @template TParam\n * @template TWhere\n * @callback ToWhere\n * @param {TField} fields \n * @param {Search.AndList} [and] \n * @param {...Search.OrList | null | undefined} orList\n * @returns {Generator<TParam, TWhere?, TWhere?>}\n */\n\n/**\n * \n * @template TField\n * @template TParam\n * @template TWhere\n * @callback ItemToWhere\n * @param {ToWhere<TField, TParam, TWhere>} toWhere \n * @param {TField} fields \n * @param {Search.Match | Search.Children} and\n * @returns {Generator<TParam, TWhere?, TWhere?>}\n */\n\n\n\n\n/**\n * \n * @template TField\n * @template TParam\n * @template TWhere\n * @param {Where<TField, TParam, TWhere>} where \n * @param {TField} fields \n * @param {Search.AndList} [and] \n * @param {...Search.OrList | null | undefined} orList\n * @returns {Generator<TParam, TWhere?, TWhere?>}\n */\nexport function toWhere(where, fields, and, ...orList) {\n\t/**\n\t * \n\t * @param {TField} fields \n\t * @param {Search.AndList} [and] \n\t * @param {...Search.OrList | null | undefined} orList\n\t * @returns {Generator<TParam, TWhere?, TWhere?>}\n\t */\n\tfunction* toWhere(fields, and, ...orList) {\n\n\t\t/** @type {TWhere[]} */\n\t\tconst list = [];\n\t\tif (and) {\n\t\t\tfor (const item of and) {\n\t\t\t\tconst w = yield* where.build(toWhere, fields, item);\n\t\t\t\tif (w == null) { continue; }\n\t\t\t\tif (where.value?.(w) === false) { return w; }\n\t\t\t\tlist.push(w);\n\t\t\t}\n\t\t}\n\t\torFor: for (const or of orList) {\n\t\t\tif (!or) { continue; }\n\t\t\t/** @type {TWhere[]} */\n\t\t\tconst orList = [];\n\t\t\tfor (const item of or) {\n\t\t\t\tconst w = Array.isArray(item)\n\t\t\t\t\t? yield* where.build(toWhere, fields, item)\n\t\t\t\t\t: yield* toWhere(fields, item.and, item.or);\n\t\t\t\tif (w == null) { continue; }\n\t\t\t\tif (where.value?.(w) === true) {\n\t\t\t\t\tlist.push(w);\n\t\t\t\t\tcontinue orFor;\n\t\t\t\t}\n\t\t\t\torList.push(w);\n\t\t\t}\n\t\t\tconst w = orList.length ? where.or(orList) : null;\n\t\t\tif (w == null) { continue; }\n\t\t\tif (where.value?.(w) === false) { return w; }\n\t\t\tlist.push(w);\n\t\t}\n\t\tif (!list.length) { return null; }\n\t\treturn where.and(list);\n\t}\n\treturn toWhere(fields, and, ...orList);\n}\n","export * from './exec.mjs';\nexport * from './fill.mjs';\nexport { parse } from './parse.mjs';\nexport * from './merge.mjs';\nexport * from './stringify.mjs';\nexport * from './types.mjs';\nexport * from './util.mjs';\nexport * from './toWhere.mjs';\n","\nconst prototype = Error.prototype;\n/**\n * @template T\n * @template {Error} E\n * @param {Map<any, (error: E) => T>} transforms \n * @param {E} error \n */\nexport function transformError(transforms, error) {\n\tif (!(error instanceof Error)) { throw error; }\n\tfor (let p = Object.getPrototypeOf(error); p; p = Object.getPrototypeOf(p)) {\n\t\tconst fn = transforms.get(p);\n\t\tif (typeof fn === 'function') { return fn(error); }\n\t\tif (p === prototype) { break; }\n\t}\n\tthrow error;\n}\n","/**\n * @template T\n * @typedef {T | readonly T[]} Hook.MaybeArray\n */\n/**\n * @template T\n * @typedef {T extends readonly any[] ? Readonly<T>\n * : T extends Record<string, any> ? Hook.MaybeArray<Hook.Define<T> | T>\n * : T extends object ? Hook.MaybeArray<Hook.Define<T> | T>\n * : Hook.MaybeArray<T>\n * } Hook.Item\n */\n/**\n * @template T\n * @typedef {T extends Record<string, any> ? { [k in keyof T]?: Hook.Item<T[k]> } : T} Hook.Define\n*/\n\n\n\n\n/** @type {*} */\nconst noopFilter = () => true;\n\n\n\n\n/**\n * \n * @param {Record<string, any>} plugin \n * @param {string[]} name \n * @returns {*[]}\n */\nfunction findHook(plugin, name) {\n\tlet list = [plugin].flat();\n\tfor (const k of name.filter(Boolean)) {\n\t\tconst values = [];\n\t\tfor (const it of list) {\n\t\t\tif (!it || typeof it !== 'object') { continue; }\n\t\t\tif (!Object.hasOwn(it, k)) { continue; }\n\t\t\tvalues.push(it[k]);\n\t\t}\n\t\tif (!values.length) { return []; }\n\t\tlist = values.flat();\n\t}\n\treturn list;\n}\n\n/**\n * \n * @template T\n * @param {any} plugin \n * @param {string[]} names \n * @returns {T | void}\n */\nfunction first(plugin, names) {\n\tif (!names.length) { return plugin; }\n\tif (!plugin || typeof plugin !== 'object') { return; }\n\tconst [name, ...keys] = names;\n\tfor (const v of [plugin].flat()) {\n\t\tconst val = first(v[name], keys);\n\t\tif (val !== undefined) { return val; }\n\t}\n}\n\n/**\n * \n * @template T\n * @param {Record<string, any>} hooks \n * @param {string[]} name \n * @returns {IterableIterator<T>}\n */\nfunction* values(hooks, name) {\n\tfor (const it of Object.values(hooks)) {\n\t\tfor (const value of findHook(it, name)) {\n\t\t\tyield value;\n\t\t}\n\t}\n}\n\n\n\n\n/**\n * @template T\n */\nexport class Hook {\n\t/**\n\t * @template {object} T\n\t * @param {Record<string, Hook.Define<T>> | (() => Record<string, Hook.Define<T>>)} [options]\n\t * @return {Hook<T>}\n\t */\n\tstatic build(options) {\n\t\tconst hook = new Hook();\n\t\treturn Hook.update(hook, options);\n\t}\n\t/**\n\t * \n\t * @template T\n\t * @param {Hook<T>} hook\n\t * @param {Record<string, Hook.Define<T>> | (() => Record<string, Hook.Define<T>>)} [options]\n\t */\n\tstatic update(hook, options) {\n\t\tlet updated = false;\n\t\tif (typeof options === 'function') {\n\t\t\tObject.defineProperty(hook.#config, 'hooks', {\n\t\t\t\tconfigurable: true,\n\t\t\t\tget() {\n\t\t\t\t\tconst r = options();\n\t\t\t\t\treturn typeof r === 'object' && r || {};\n\t\t\t\t},\n\t\t\t});\n\t\t\tupdated = true;\n\t\t} else {\n\t\t\tif (options && typeof options === 'object') {\n\t\t\t\tObject.defineProperty(hook.#config, 'hooks', {\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\tvalue: options,\n\t\t\t\t});\n\t\t\t\tupdated = true;\n\t\t\t}\n\t\t}\n\t\tif (updated) {\n\t\t\tHook.reset(hook);\n\t\t}\n\t\treturn hook;\n\t}\n\t/**\n\t * \n\t * @template T\n\t * @param {Hook<T>} hook\n\t */\n\tstatic reset(hook) {\n\t\tconst hooks = hook.#hooks;\n\t\tconst resetFn = hook.#config.resetFn;\n\t\tresetFn.sort(([, a], [, b]) => a - b);\n\t\tconst before = resetFn.filter(([, p]) => p <= 0);\n\t\tconst after = resetFn.filter(([, p]) => p > 0);\n\t\tfor (const [fn] of before) { fn(); }\n\t\tfor (const fn of values(hooks, ['reset'])) {\n\t\t\tif (typeof fn !== 'function') { continue; }\n\t\t\tfn();\n\t\t}\n\t\tfor (const [fn] of after) { fn(); }\n\t}\n\n\t/** @type {{hooks: any; resetFn: [fn: () => void, hysteresis: number][]}} */\n\t#config = { hooks: Object.create(null), resetFn: [] };\n\t/** @type {string[]} */\n\t#keys = [];\n\t#stringTag = 'Hook';\n\t[Symbol.iterator]() { return this.entries(); }\n\t[Symbol.toStringTag]() { return this.#stringTag; }\n\t/** @param {string} hint */\n\t[Symbol.toPrimitive](hint) {\n\t\tif (hint === 'number') { return NaN; }\n\t\treturn `[${this[Symbol.toStringTag]()}]`;\n\t}\n\n\tget #hooks() { return this.#config.hooks; };\n\t/**\n\t * @template {T extends readonly any[] ? never : T extends object ? string & keyof T : never} K\n\t * @param {K} key \n\t * @returns {Hook<Exclude<T extends readonly any[] ? never : T extends object ? T[K] :never, void | undefined>>}\n\t */\n\tget(key) {\n\t\tconst keys = [...this.#keys, key];\n\t\tconst hook = new Hook();\n\t\thook.#config = this.#config;\n\t\thook.#keys = keys;\n\t\thook.#stringTag = `Hook(${keys.join('.')})`;\n\t\treturn hook;\n\t}\n\t/**\n\t * @param {T extends (...args: infer A) => any ? A : []} args \n\t * @returns \n\t */\n\tcall(...args) {\n\t\tfor (const fn of this.values()) {\n\t\t\tif (typeof fn !== 'function') { continue; }\n\t\t\tfn(...args);\n\t\t}\n\t}\n\t/**\n\t * \n\t * @param {string} plugin \n\t * @returns {T | void}\n\t */\n\tfirst(plugin) {\n\t\tconst hooks = this.#hooks;\n\t\tif (!Object.hasOwn(hooks, plugin)) { return; }\n\t\treturn first(hooks[plugin], this.#keys.filter(Boolean));\n\t}\n\n\t/**\n\t * \n\t * @param {string} plugin \n\t * @returns {IterableIterator<T extends readonly (infer V)[] ? V : T>}\n\t */\n\t*plugin(plugin) {\n\t\tconst hooks = this.#hooks;\n\t\tif (!Object.hasOwn(hooks, plugin)) { return; }\n\t\tyield* findHook(hooks[plugin], this.#keys.filter(Boolean));\n\t}\n\n\t/**\n\t * \n\t * @returns {IterableIterator<T extends readonly (infer V)[] ? V : T>}\n\t */\n\tvalues() { return values(this.#hooks, this.#keys); }\n\n\t/**\n\t * \n\t * @returns {IterableIterator<[string, T extends readonly (infer V)[] ? V : T]>}\n\t */\n\t*entries() {\n\t\tconst hooks = this.#hooks;\n\t\tconst name = this.#keys;\n\t\tfor (const [plugin, it] of Object.entries(hooks)) {\n\t\t\tfor (const value of findHook(it, name)) {\n\t\t\t\tyield [plugin, value];\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * \n\t * @template [TX=(T extends Record<string, infer TT>? TT extends readonly (infer V)[] ? V : TT : never)]\n\t * @param {(v: *)=>v is TX} filter \n\t * @returns {IterableIterator<[plugin: string, key: string, value: TX]>}\n\t */\n\t*entriesObject(filter = noopFilter) {\n\t\tfor (const [plugin, hooksMap] of this.entries()) {\n\t\t\tif (!hooksMap || typeof hooksMap !== 'object') { continue; }\n\t\t\tfor (const [k, v] of Object.entries(hooksMap)) {\n\t\t\t\tif (!filter(v)) { continue; }\n\t\t\t\tyield [plugin, k, v];\n\t\t\t}\n\t\t}\n\t}\n\n\n\n\t/**\n\t * @template [TT=(T extends Record<string, infer TT> ? TT : never)]\n\t * @param {(v: *)=>v is TT} [filter] \n\t * @returns {Record<string, TT>}\n\t */\n\tnamed(filter = noopFilter) {\n\t\t/** @type {Record<string, TT>} */\n\t\tconst result = Object.create(null);\n\t\tfor (const hooksMap of this.values()) {\n\t\t\tif (!hooksMap || typeof hooksMap !== 'object') { continue; }\n\t\t\tfor (const [k, v] of Object.entries(hooksMap)) {\n\t\t\t\tif (!filter(v)) { continue; }\n\t\t\t\tresult[k] = v;\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * \n\t * @param {() => void} fn \n\t * @param {number} [hysteresis] \n\t * @returns \n\t */\n\tlisten(fn, hysteresis) {\n\t\tif (typeof fn !== 'function') { return () => { }; }\n\t\tconst resetFn = this.#config.resetFn;\n\t\t/** @type {[() => void, number]} */\n\t\tconst it = [fn, Number.isFinite(hysteresis) && hysteresis || 0];\n\t\tresetFn.push(it);\n\t\tresetFn.sort(([, a], [, b]) => b - a);\n\t\treturn () => {\n\t\t\tconst index = resetFn.findIndex(v => v === it);\n\t\t\tif (index >= 0) {\n\t\t\t\tresetFn.splice(index, 1);\n\t\t\t}\n\t\t};\n\t}\n}\n","const regex = /\\{([^}{}]+)\\}/g\n/**\n * \n * @param {string?} [pattern] \n */\nexport function getPatternFields(pattern) {\n\tif (!pattern || typeof pattern !== 'string') { return []; }\n\t/** @type {string[]} */\n\tconst fields = [];\n\tfor(let result = regex.exec(pattern); result; result = regex.exec(pattern)) {\n\t\tfields.push(result[1]);\n\t}\n\treturn fields;\n}\n\n/**\n * \n * @param {string?} [pattern] \n * @param {Record<string, any>?} [document] \n * @returns \n */\nexport function runPattern(pattern, document) {\n\tif (!pattern || typeof pattern !== 'string') { return ''; }\n\tconst doc = typeof document === 'object' && document || {};\n\treturn pattern.replace(regex, (_, v) => {\n\t\tif (Object.hasOwn(doc, v)) { return doc[v] ?? ''; }\n\t\treturn `${v}`;\n\t});\n}\n","/** @import { Permission } from '@yongdall/types' */\n\n\n\n\n\n/**\n *\n * @param {Permission} permission\n * @returns {Iterable<string>}\n */\nexport default function* yieldPermissionConstraintFields({ constraints, organizationField }) {\n\tif (organizationField) { yield organizationField; }\n\tif (!constraints) { return; }\n\tfor (const [field, constraint] of Object.entries(constraints)) {\n\t\tif (!constraint) { continue; }\n\t\tconst { value, values, user } = constraint;\n\t\tif (value !== undefined) {\n\t\t\tyield field;\n\t\t} else if (Array.isArray(values) && values.length) {\n\t\t\tyield field;\n\t\t} else if (values instanceof Set && values.size) {\n\t\t\tyield field;\n\t\t} else if (user) {\n\t\t\tyield field;\n\t\t}\n\t}\n}\n","export * as Search from './Search/index.mjs';\nexport { transformError } from './transformError.mjs';\nexport { Hook } from './Hook.mjs';\nexport * from './model.mjs';\nexport { default as yieldPermissionConstraintFields } from './yieldPermissionConstraintFields.mjs';\n\n\nexport const pluginIdRegex = /^(?:(?<scope>@[a-zA-Z\\d_.-]+)\\/)?(?<name>[a-zA-Z\\d_.-]+)$/;\nexport const findPluginIdRegex = /^(?<pluginId>(?:(?<scope>@[a-zA-Z\\d_.-]+)\\/)?(?<name>[a-zA-Z\\d_.-]+))(?:\\/(?<path>[^#]*))?(?:#(?<hash>.*))?$/;\n\n/**\n * @typedef {object} Plugin\n * @property {string} [version]\n * @property {Record<string, string>} [assets]\n * @property {string} [hooks]\n * @property {string[]} [styles]\n */\n/**\n * @typedef {object} BootConfiguration\n * @property {string} [id] \n * @property {string} [route] 路由管理器\n * @property {string} [theme] 界面主题\n * @property {string} [authenticator] 登陆器\n * @property {boolean} [authRequired] 是否强制登陆\n * @property {string} [skin]\n * @property {boolean} [multiUser] \n * @property {string} [domain] \n * @property {string | number} [port] \n * @property {string} [path] \n * @property {Record<string, string>} [pages]\n * @property {Record<string, string>} [configurationPages]\n * \n * \n * @property {string} [logo] \n * @property {string} [title] \n * @property {string} [company] \n * @property {string} [type] \n * @property {string} [help] 帮助链接\n * @property {any[]} [userMenus]\n * @property {any[]} [menus]\n */\n/**\n * @typedef {object} Importmap\n * @property {Record<string, string>} imports\n * @property {Record<string, Record<string, string>>} scopes\n */\n/**\n * @typedef {object} Indicator\n * @property {string} color\n * @property {string} label\n * @property {unknown} [filters]\n */\n\n/**\n *\n * @param {*} v\n * @returns {v is (...p: any[]) => any}\n */\nexport function isFunction(v) {\n\treturn typeof v === 'function';\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@yongdall/common",
3
- "version": "0.1.0",
3
+ "version": "0.3.0",
4
4
  "exports": {
5
5
  ".": "./index.mjs"
6
6
  },
7
7
  "devDependencies": {
8
- "@yongdall/types": "^0.1.0"
8
+ "@yongdall/types": "^0.3.0"
9
9
  },
10
10
  "main": "./index.mjs",
11
11
  "type": "module"