crelte 0.5.13 → 0.5.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/dist/queries/Queries.d.ts +3 -0
  2. package/dist/queries/Queries.d.ts.map +1 -1
  3. package/dist/queries/Queries.js +3 -0
  4. package/dist/queries/index.d.ts +21 -0
  5. package/dist/queries/index.d.ts.map +1 -1
  6. package/dist/queries/vars.d.ts +25 -2
  7. package/dist/queries/vars.d.ts.map +1 -1
  8. package/dist/queries/vars.js +42 -1
  9. package/dist/routing/route/BaseRoute.d.ts.map +1 -1
  10. package/dist/routing/route/BaseRoute.js +4 -17
  11. package/dist/server/queries/QueryGqlRoute.d.ts +3 -1
  12. package/dist/server/queries/QueryGqlRoute.d.ts.map +1 -1
  13. package/dist/server/queries/QueryGqlRoute.js +4 -2
  14. package/dist/server/queries/QueryHandleRoute.d.ts +3 -2
  15. package/dist/server/queries/QueryHandleRoute.d.ts.map +1 -1
  16. package/dist/server/queries/QueryHandleRoute.js +4 -2
  17. package/dist/server/queries/queries.d.ts.map +1 -1
  18. package/dist/server/queries/queries.js +12 -2
  19. package/dist/server/queries/routes.d.ts +3 -2
  20. package/dist/server/queries/routes.d.ts.map +1 -1
  21. package/dist/server/queries/routes.js +9 -3
  22. package/dist/std/index.d.ts +1 -0
  23. package/dist/std/index.d.ts.map +1 -1
  24. package/dist/std/index.js +1 -0
  25. package/dist/std/url/index.d.ts +40 -0
  26. package/dist/std/url/index.d.ts.map +1 -0
  27. package/dist/std/url/index.js +65 -0
  28. package/dist/std/url/utils.d.ts +19 -0
  29. package/dist/std/url/utils.d.ts.map +1 -0
  30. package/dist/std/url/utils.js +40 -0
  31. package/dist/vite/index.js +3 -2
  32. package/package.json +5 -1
  33. package/src/queries/Queries.ts +3 -0
  34. package/src/queries/index.ts +25 -0
  35. package/src/queries/vars.ts +58 -3
  36. package/src/routing/route/BaseRoute.ts +8 -22
  37. package/src/server/queries/QueryGqlRoute.ts +17 -2
  38. package/src/server/queries/QueryHandleRoute.ts +5 -2
  39. package/src/server/queries/queries.ts +29 -3
  40. package/src/server/queries/routes.ts +17 -3
  41. package/src/std/index.ts +1 -0
  42. package/src/std/url/index.ts +78 -0
  43. package/src/std/url/utils.ts +48 -0
  44. package/src/vite/index.ts +4 -2
@@ -41,6 +41,9 @@ export type NamedQuery = {
41
41
  * Create a NamedQuery for the given server query name.
42
42
  *
43
43
  * Prefer importing a graphql file instead.
44
+ *
45
+ * #### Note
46
+ * This needs to match the name of the js/ts file.
44
47
  */
45
48
  export declare function namedQuery(name: string): NamedQuery;
46
49
  /** Returns true if the passed object is a GraphQlQuery */
@@ -1 +1 @@
1
- {"version":3,"file":"Queries.d.ts","sourceRoot":"","sources":["../../src/queries/Queries.ts"],"names":[],"mappings":"AAAA,OAAO,QAAwC,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAa,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAEhE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC5B,KAAK,CAAC,EAAE,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,MAAM,KAAK,GAAG,WAAW,GAAG,UAAU,CAAC;AAE7C;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3D;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/C;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAEnD;AAED,0DAA0D;AAC1D,wBAAgB,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,KAAK,CAI9C;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,YAAY,GAAG;IAC1B;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,OAAO,OAAO,OAAO;IAC3B,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,KAAK,CAAgC;IAE7C,OAAO,CAAC,OAAO,CAAiB;IAEhC,OAAO;IAUP;;;;;;;;OAQG;IACH,MAAM,CAAC,GAAG,CACT,QAAQ,EAAE,MAAM,EAChB,QAAQ,GAAE,MAAM,GAAG,IAAW,EAC9B,QAAQ,GAAE,QAAyB,EACnC,IAAI,GAAE,cAAmB,GACvB,OAAO;IAQV;;;OAGG;IACH,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO;IAQnE;;;;;;;OAOG;IACG,KAAK,CACV,KAAK,EAAE,KAAK,EACZ,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EAClC,IAAI,GAAE,YAAiB,GACrB,OAAO,CAAC,OAAO,CAAC;IA0BnB;;;OAGG;IACH,WAAW,CAAC,GAAG,EAAE,OAAO;CAGxB"}
1
+ {"version":3,"file":"Queries.d.ts","sourceRoot":"","sources":["../../src/queries/Queries.ts"],"names":[],"mappings":"AAAA,OAAO,QAAwC,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAa,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAEhE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC5B,KAAK,CAAC,EAAE,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,MAAM,KAAK,GAAG,WAAW,GAAG,UAAU,CAAC;AAE7C;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3D;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/C;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAEnD;AAED,0DAA0D;AAC1D,wBAAgB,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,KAAK,CAI9C;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,YAAY,GAAG;IAC1B;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,OAAO,OAAO,OAAO;IAC3B,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,KAAK,CAAgC;IAE7C,OAAO,CAAC,OAAO,CAAiB;IAEhC,OAAO;IAUP;;;;;;;;OAQG;IACH,MAAM,CAAC,GAAG,CACT,QAAQ,EAAE,MAAM,EAChB,QAAQ,GAAE,MAAM,GAAG,IAAW,EAC9B,QAAQ,GAAE,QAAyB,EACnC,IAAI,GAAE,cAAmB,GACvB,OAAO;IAQV;;;OAGG;IACH,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO;IAQnE;;;;;;;OAOG;IACG,KAAK,CACV,KAAK,EAAE,KAAK,EACZ,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EAClC,IAAI,GAAE,YAAiB,GACrB,OAAO,CAAC,OAAO,CAAC;IA0BnB;;;OAGG;IACH,WAAW,CAAC,GAAG,EAAE,OAAO;CAGxB"}
@@ -4,6 +4,9 @@ import QueryError from './QueryError.js';
4
4
  * Create a NamedQuery for the given server query name.
5
5
  *
6
6
  * Prefer importing a graphql file instead.
7
+ *
8
+ * #### Note
9
+ * This needs to match the name of the js/ts file.
7
10
  */
8
11
  export function namedQuery(name) {
9
12
  return { queryName: name };
@@ -1,5 +1,6 @@
1
1
  import Queries, { InlineQuery, isQuery, namedQuery, NamedQuery, QueriesOptions, Query, QueryOptions } from '../queries/Queries.js';
2
2
  import type CrelteServerRequest from '../server/CrelteServer.js';
3
+ import ServerRouter from '../server/ServerRouter.js';
3
4
  import { gql } from './gql.js';
4
5
  import QueryError, { QueryErrorResponse } from './QueryError.js';
5
6
  import { QueryVar, ValidIf, vars, varsIdsEqual } from './vars.js';
@@ -10,6 +11,26 @@ export type InferQueryVarType<T> = T extends QueryVar<infer U> ? U : never;
10
11
  export type InferVariableTypes<T> = {
11
12
  [K in keyof T]: InferQueryVarType<T[K]>;
12
13
  };
14
+ /**
15
+ * Defines wether the query variables are valid.
16
+ *
17
+ * Either throw or return a boolean.
18
+ *
19
+ * #### Example
20
+ * ```ts
21
+ * import { vars, ValidVars } from 'crelte/queries';
22
+ *
23
+ * export const variables = {
24
+ * siteId: vars.siteId(),
25
+ * category: vars.id()
26
+ * };
27
+ *
28
+ * export const validVars: ValidVars<typeof variables> = (vars, sr) => {
29
+ * if (!vars.category === 5) throw new Error('category needs to be 5');
30
+ * };
31
+ * ```
32
+ */
33
+ export type ValidVars<T extends Record<string, QueryVar<any>>> = (vars: InferVariableTypes<T>, sr: ServerRouter) => void | boolean;
13
34
  /**
14
35
  * Defines when a query can safely be cached.
15
36
  *
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/queries/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/queries/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,EAAE,EACf,WAAW,EACX,OAAO,EACP,UAAU,EACV,UAAU,EACV,cAAc,EACd,KAAK,EACL,YAAY,EACZ,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,mBAAmB,MAAM,2BAA2B,CAAC;AACjE,OAAO,YAAY,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,UAAU,EAAE,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAElE,OAAO,EACN,OAAO,EACP,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,KAAK,EACV,KAAK,WAAW,IAAI,QAAQ,EAC5B,KAAK,UAAU,EACf,UAAU,EACV,OAAO,EACP,UAAU,EACV,KAAK,kBAAkB,EACvB,GAAG,EACH,IAAI,EACJ,KAAK,OAAO,EACZ,QAAQ,EACR,YAAY,GACZ,CAAC;AAEF,cAAc;AACd,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,CAAC,SAAS,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAE3E,cAAc;AACd,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAAI;KAClC,CAAC,IAAI,MAAM,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACvC,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAChE,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAC3B,EAAE,EAAE,YAAY,KACZ,IAAI,GAAG,OAAO,CAAC;AAEpB;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,OAAO,CAClB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,IACpE,OAAO,GAAG,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC;AAExE,4BAA4B;AAC5B,MAAM,MAAM,WAAW,CACtB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,IACpE,CACH,QAAQ,EAAE,GAAG,EACb,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC,KACvB,IAAI,GAAG,GAAG,GAAG,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;AAEtC;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,SAAS,CACpB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,EACvE,CAAC,SAAS,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,IACtC,CACH,QAAQ,EAAE,GAAG,EACb,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAC3B,GAAG,EAAE,mBAAmB,KACpB,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAE5B,yBAAyB;AACzB,MAAM,MAAM,QAAQ,CACnB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,IACpE,CAAC,GAAG,EAAE,mBAAmB,EAAE,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;AAEnE;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,MAAM,MAAM,CACjB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,EACvE,CAAC,SAAS,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,IAChC,CACH,GAAG,EAAE,mBAAmB,EACxB,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC,KACvB,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC"}
@@ -1,8 +1,27 @@
1
1
  import ServerRouter from '../server/ServerRouter.js';
2
2
  export declare const vars: {
3
+ /**
4
+ * Any is not validated except for nullability
5
+ */
3
6
  any: () => QueryVar<any>;
7
+ /**
8
+ * Number is a number, but will also parse strings to numbers
9
+ */
4
10
  number: () => QueryVar<number>;
11
+ /**
12
+ * String is a string, but will not parse numbers to strings
13
+ */
5
14
  string: () => QueryVar<string>;
15
+ /**
16
+ * Strings is an array of strings, but will also convert a single string to
17
+ * an array with one element
18
+ *
19
+ * #### Note
20
+ * The returned array will **never be empty**, but might be null if allowed.
21
+ * It is not deduped or sorted.
22
+ * If you have ids you should use `vars.ids()` instead.
23
+ */
24
+ strings: () => QueryVar<string[]>;
6
25
  /**
7
26
  * Id is almost the same as number but will also parse
8
27
  * strings, but only allow non negative integers
@@ -33,9 +52,12 @@ export declare const vars: {
33
52
  * ids in the field, and check if the return matches the length.
34
53
  */
35
54
  ids: () => QueryVar<number[]>;
55
+ /**
56
+ * Checks for a valid site id which exists
57
+ */
36
58
  siteId: () => QueryVar<number>;
37
59
  };
38
- export type ValidIf<T> = (v: T, cs: ServerRouter) => boolean;
60
+ export type ValidIf<T> = (v: T, sr: ServerRouter) => boolean;
39
61
  export declare class QueryVar<T = any> {
40
62
  private name;
41
63
  private type;
@@ -44,6 +66,7 @@ export declare class QueryVar<T = any> {
44
66
  private validIfFn;
45
67
  constructor();
46
68
  string(): QueryVar<string>;
69
+ strings(): QueryVar<string[]>;
47
70
  number(): QueryVar<number>;
48
71
  id(): QueryVar<number>;
49
72
  ids(): QueryVar<number[]>;
@@ -53,7 +76,7 @@ export declare class QueryVar<T = any> {
53
76
  * Set a validation function for this variable
54
77
  *
55
78
  * If the value is allowed to be null and it is null
56
- * valid will not be called.
79
+ * the passed function will not be called.
57
80
  */
58
81
  validIf(fn: ValidIf<T>): QueryVar<T>;
59
82
  validValue(v: any, cs: ServerRouter): T | null;
@@ -1 +1 @@
1
- {"version":3,"file":"vars.d.ts","sourceRoot":"","sources":["../../src/queries/vars.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,2BAA2B,CAAC;AAErD,eAAO,MAAM,IAAI;eACP,QAAQ,CAAC,GAAG,CAAC;kBACV,QAAQ,CAAC,MAAM,CAAC;kBAChB,QAAQ,CAAC,MAAM,CAAC;IAE5B;;;;;;;;OAQG;cACK,QAAQ,CAAC,MAAM,CAAC;IAExB;;;;;;;;;;;;;;;;;;OAkBG;eACM,QAAQ,CAAC,MAAM,EAAE,CAAC;kBAEf,QAAQ,CAAC,MAAM,CAAC;CAM5B,CAAC;AAIF,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,YAAY,KAAK,OAAO,CAAC;AAE7D,qBAAa,QAAQ,CAAC,CAAC,GAAG,GAAG;IAC5B,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,IAAI,CAA6C;IACzD,OAAO,CAAC,YAAY,CAAU;IAC9B,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,SAAS,CAAa;;IAU9B,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC;IAK1B,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC;IAK1B,EAAE,IAAI,QAAQ,CAAC,MAAM,CAAC;IAKtB,GAAG,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;IAKzB,QAAQ,IAAI,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC;IAK9B,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;IAK9B;;;;;OAKG;IACH,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;IAKpC,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,GAAG,IAAI;IA2E9C;;;OAGG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC;IAKpC,YAAY;CACZ;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI,QAAQ,CAMhD;AAOD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,YAAY,CAC3B,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,GAAG,SAAS,EAC9B,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,IAAI,GAAG,SAAS,GACvC,OAAO,CAWT"}
1
+ {"version":3,"file":"vars.d.ts","sourceRoot":"","sources":["../../src/queries/vars.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,2BAA2B,CAAC;AAErD,eAAO,MAAM,IAAI;IAChB;;OAEG;eACM,QAAQ,CAAC,GAAG,CAAC;IAEtB;;OAEG;kBACS,QAAQ,CAAC,MAAM,CAAC;IAE5B;;OAEG;kBACS,QAAQ,CAAC,MAAM,CAAC;IAE5B;;;;;;;;OAQG;mBACU,QAAQ,CAAC,MAAM,EAAE,CAAC;IAE/B;;;;;;;;OAQG;cACK,QAAQ,CAAC,MAAM,CAAC;IAExB;;;;;;;;;;;;;;;;;;OAkBG;eACM,QAAQ,CAAC,MAAM,EAAE,CAAC;IAE3B;;OAEG;kBACS,QAAQ,CAAC,MAAM,CAAC;CAM5B,CAAC;AAIF,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,YAAY,KAAK,OAAO,CAAC;AAE7D,qBAAa,QAAQ,CAAC,CAAC,GAAG,GAAG;IAC5B,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,IAAI,CAAyD;IACrE,OAAO,CAAC,YAAY,CAAU;IAC9B,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,SAAS,CAAa;;IAU9B,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC;IAK1B,OAAO,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;IAK7B,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC;IAK1B,EAAE,IAAI,QAAQ,CAAC,MAAM,CAAC;IAKtB,GAAG,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;IAKzB,QAAQ,IAAI,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC;IAK9B,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;IAK9B;;;;;OAKG;IACH,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;IAKpC,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,GAAG,IAAI;IAoG9C;;;OAGG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC;IAKpC,YAAY;CACZ;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI,QAAQ,CAMhD;AAOD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,YAAY,CAC3B,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,GAAG,SAAS,EAC9B,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,IAAI,GAAG,SAAS,GACvC,OAAO,CAWT"}
@@ -1,7 +1,26 @@
1
1
  export const vars = {
2
+ /**
3
+ * Any is not validated except for nullability
4
+ */
2
5
  any: () => new QueryVar(),
6
+ /**
7
+ * Number is a number, but will also parse strings to numbers
8
+ */
3
9
  number: () => new QueryVar().number(),
10
+ /**
11
+ * String is a string, but will not parse numbers to strings
12
+ */
4
13
  string: () => new QueryVar().string(),
14
+ /**
15
+ * Strings is an array of strings, but will also convert a single string to
16
+ * an array with one element
17
+ *
18
+ * #### Note
19
+ * The returned array will **never be empty**, but might be null if allowed.
20
+ * It is not deduped or sorted.
21
+ * If you have ids you should use `vars.ids()` instead.
22
+ */
23
+ strings: () => new QueryVar().strings(),
5
24
  /**
6
25
  * Id is almost the same as number but will also parse
7
26
  * strings, but only allow non negative integers
@@ -32,6 +51,9 @@ export const vars = {
32
51
  * ids in the field, and check if the return matches the length.
33
52
  */
34
53
  ids: () => new QueryVar().ids(),
54
+ /**
55
+ * Checks for a valid site id which exists
56
+ */
35
57
  siteId: () => new QueryVar()
36
58
  .number()
37
59
  .validIf((num, router) => !!router.sites.find(site => site.id === num)),
@@ -53,6 +75,10 @@ export class QueryVar {
53
75
  this.type = 'string';
54
76
  return this;
55
77
  }
78
+ strings() {
79
+ this.type = 'strings';
80
+ return this;
81
+ }
56
82
  number() {
57
83
  this.type = 'number';
58
84
  return this;
@@ -77,7 +103,7 @@ export class QueryVar {
77
103
  * Set a validation function for this variable
78
104
  *
79
105
  * If the value is allowed to be null and it is null
80
- * valid will not be called.
106
+ * the passed function will not be called.
81
107
  */
82
108
  validIf(fn) {
83
109
  this.validIfFn = fn;
@@ -101,6 +127,21 @@ export class QueryVar {
101
127
  if (typeof v !== 'string')
102
128
  throw new Error(`variable ${this.name} is not a string`);
103
129
  break;
130
+ case 'strings':
131
+ if (typeof v === 'string')
132
+ v = [v];
133
+ if (!Array.isArray(v))
134
+ throw new Error(`variable ${this.name} is not a string or a list of strings`);
135
+ if (v.length <= 0) {
136
+ if (this.defaultValue !== undefined)
137
+ return this.defaultValue;
138
+ if (this.flagNullable)
139
+ return null;
140
+ throw new Error(`variable ${this.name} is not allowed to be empty`);
141
+ }
142
+ if (!v.every(s => typeof s === 'string'))
143
+ throw new Error(`variable ${this.name} is not a list of strings`);
144
+ break;
104
145
  case 'number':
105
146
  if (typeof v !== 'number')
106
147
  throw new Error(`variable ${this.name} is not a number`);
@@ -1 +1 @@
1
- {"version":3,"file":"BaseRoute.d.ts","sourceRoot":"","sources":["../../../src/routing/route/BaseRoute.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BaseRoute.d.ts","sourceRoot":"","sources":["../../../src/routing/route/BaseRoute.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { deleteSearchParam, pathnameEq, searchEq, } from '../../std/url/utils.js';
1
2
  import { objClone } from '../../utils.js';
2
3
  import { trimSlashEnd } from '../utils.js';
3
4
  /**
@@ -185,10 +186,7 @@ export default class BaseRoute {
185
186
  * ```
186
187
  */
187
188
  setSearchParam(key, value) {
188
- const deleteValue = typeof value === 'undefined' ||
189
- value === null ||
190
- (typeof value === 'string' && value === '');
191
- if (!deleteValue) {
189
+ if (!deleteSearchParam(value)) {
192
190
  this.search.set(key, value);
193
191
  }
194
192
  else {
@@ -281,24 +279,13 @@ export default class BaseRoute {
281
279
  */
282
280
  eqUrl(route) {
283
281
  return (route &&
284
- this.url.pathname === route.url.pathname &&
285
- this.url.origin === route.url.origin);
282
+ this.url.origin === route.url.origin &&
283
+ pathnameEq(this.url.pathname, route.url.pathname));
286
284
  }
287
285
  /**
288
286
  * Checks if the search params are equal to another route
289
287
  */
290
288
  eqSearch(route) {
291
- const searchEq = (a, b) => {
292
- if (a.size !== b.size)
293
- return false;
294
- a.sort();
295
- b.sort();
296
- const aEntries = Array.from(a.entries());
297
- const bEntries = Array.from(b.entries());
298
- return aEntries
299
- .map((a, i) => [a, bEntries[i]])
300
- .every(([[ak, av], [bk, bv]]) => ak === bk && av === bv);
301
- };
302
289
  return route && searchEq(this.search, route.search);
303
290
  }
304
291
  /**
@@ -1,9 +1,10 @@
1
1
  import CrelteServerRequest from '../CrelteServer.js';
2
2
  import QueriesCaching from './QueriesCaching.js';
3
3
  import { QueryVar } from '../../queries/vars.js';
4
- import { CacheIfFn, TransformFn } from './routes.js';
4
+ import { CacheIfFn, TransformFn, ValidIfFn } from './routes.js';
5
5
  export type QueryGqlArgs = {
6
6
  vars: Record<string, QueryVar> | null;
7
+ validIfFn: ValidIfFn | null;
7
8
  cacheIfFn: CacheIfFn | null;
8
9
  preventCaching: boolean;
9
10
  transformFn: TransformFn | null;
@@ -12,6 +13,7 @@ export default class QueryGqlRoute {
12
13
  name: string;
13
14
  query: string;
14
15
  vars: Record<string, QueryVar> | null;
16
+ validIfFn: ValidIfFn | null;
15
17
  cacheIfFn: CacheIfFn | null;
16
18
  transformFn: TransformFn | null;
17
19
  constructor(name: string, query: string, args: QueryGqlArgs);
@@ -1 +1 @@
1
- {"version":3,"file":"QueryGqlRoute.d.ts","sourceRoot":"","sources":["../../../src/server/queries/QueryGqlRoute.ts"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,MAAM,oBAAoB,CAAC;AACrD,OAAO,cAAc,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAQ,MAAM,uBAAuB,CAAC;AAGvD,OAAO,EAAE,SAAS,EAAY,WAAW,EAAgB,MAAM,aAAa,CAAC;AAE7E,MAAM,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC;IACtC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;CAChC,CAAC;AAGF,MAAM,CAAC,OAAO,OAAO,aAAa;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC;IACtC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;gBAEpB,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY;IA2B3D,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,kBAAkB;IAO1B;;;OAGG;IACH,OAAO,CAAC,iBAAiB;YAuBX,SAAS;IAWjB,MAAM,CACX,OAAO,EAAE,cAAc,EACvB,GAAG,EAAE,mBAAmB,GACtB,OAAO,CAAC,QAAQ,CAAC;CAkHpB"}
1
+ {"version":3,"file":"QueryGqlRoute.d.ts","sourceRoot":"","sources":["../../../src/server/queries/QueryGqlRoute.ts"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,MAAM,oBAAoB,CAAC;AACrD,OAAO,cAAc,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAQ,MAAM,uBAAuB,CAAC;AAGvD,OAAO,EACN,SAAS,EAET,WAAW,EAEX,SAAS,EACT,MAAM,aAAa,CAAC;AAErB,MAAM,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC;IACtC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;CAChC,CAAC;AAGF,MAAM,CAAC,OAAO,OAAO,aAAa;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC;IACtC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;gBAEpB,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY;IA4B3D,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,kBAAkB;IAO1B;;;OAGG;IACH,OAAO,CAAC,iBAAiB;YAuBX,SAAS;IAWjB,MAAM,CACX,OAAO,EAAE,cAAc,EACvB,GAAG,EAAE,mBAAmB,GACtB,OAAO,CAAC,QAAQ,CAAC;CAwHpB"}
@@ -1,12 +1,13 @@
1
1
  import { vars } from '../../queries/vars.js';
2
2
  import { extractEntry } from '../../loadData/index.js';
3
3
  import { calcKey } from '../../ssr/index.js';
4
- import { newError, validateVars } from './routes.js';
4
+ import { newError, validateVars, } from './routes.js';
5
5
  // only internal
6
6
  export default class QueryGqlRoute {
7
7
  name;
8
8
  query;
9
9
  vars;
10
+ validIfFn;
10
11
  cacheIfFn;
11
12
  transformFn;
12
13
  constructor(name, query, args) {
@@ -18,6 +19,7 @@ export default class QueryGqlRoute {
18
19
  this.name = name;
19
20
  this.query = query;
20
21
  this.vars = args.vars;
22
+ this.validIfFn = args.validIfFn;
21
23
  this.cacheIfFn = args.cacheIfFn;
22
24
  this.transformFn = args.transformFn;
23
25
  if (args.preventCaching) {
@@ -87,7 +89,7 @@ export default class QueryGqlRoute {
87
89
  let vars;
88
90
  try {
89
91
  const reqVars = await csr.req.json();
90
- vars = validateVars(this.vars, reqVars, caching.router);
92
+ vars = validateVars(this.vars, reqVars, this.validIfFn, caching.router);
91
93
  if ('qName' in vars || 'xCraftSite' in vars)
92
94
  throw new Error('qName and xCraftSite are reserved variable names');
93
95
  }
@@ -1,12 +1,13 @@
1
1
  import { QueryVar } from '../../queries/vars.js';
2
2
  import CrelteServerRequest from '../CrelteServer.js';
3
3
  import ServerRouter from '../ServerRouter.js';
4
- import { HandleFn } from './routes.js';
4
+ import { HandleFn, ValidIfFn } from './routes.js';
5
5
  export default class QueryHandleRoute {
6
6
  name: string;
7
+ validIfFn: ValidIfFn | null;
7
8
  handleFn: HandleFn;
8
9
  vars: Record<string, QueryVar> | null;
9
- constructor(name: string, handleFn: HandleFn, vars: Record<string, QueryVar> | null);
10
+ constructor(name: string, validIfFn: ValidIfFn | null, handleFn: HandleFn, vars: Record<string, QueryVar> | null);
10
11
  handle(cs: ServerRouter, csr: CrelteServerRequest): Promise<Response>;
11
12
  }
12
13
  //# sourceMappingURL=QueryHandleRoute.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"QueryHandleRoute.d.ts","sourceRoot":"","sources":["../../../src/server/queries/QueryHandleRoute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,mBAAmB,MAAM,oBAAoB,CAAC;AACrD,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAA0B,MAAM,aAAa,CAAC;AAG/D,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC;gBAGrC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,IAAI;IAOhC,MAAM,CACX,EAAE,EAAE,YAAY,EAChB,GAAG,EAAE,mBAAmB,GACtB,OAAO,CAAC,QAAQ,CAAC;CAYpB"}
1
+ {"version":3,"file":"QueryHandleRoute.d.ts","sourceRoot":"","sources":["../../../src/server/queries/QueryHandleRoute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,mBAAmB,MAAM,oBAAoB,CAAC;AACrD,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAA0B,SAAS,EAAE,MAAM,aAAa,CAAC;AAG1E,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC;gBAGrC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,SAAS,GAAG,IAAI,EAC3B,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,IAAI;IAQhC,MAAM,CACX,EAAE,EAAE,YAAY,EAChB,GAAG,EAAE,mBAAmB,GACtB,OAAO,CAAC,QAAQ,CAAC;CAYpB"}
@@ -2,10 +2,12 @@ import { newError, validateVars } from './routes.js';
2
2
  // only internal
3
3
  export default class QueryHandleRoute {
4
4
  name;
5
+ validIfFn;
5
6
  handleFn;
6
7
  vars;
7
- constructor(name, handleFn, vars) {
8
+ constructor(name, validIfFn, handleFn, vars) {
8
9
  this.name = name;
10
+ this.validIfFn = validIfFn;
9
11
  this.handleFn = handleFn;
10
12
  this.vars = vars;
11
13
  }
@@ -13,7 +15,7 @@ export default class QueryHandleRoute {
13
15
  let vars;
14
16
  try {
15
17
  const reqVars = await csr.req.json();
16
- vars = validateVars(this.vars, reqVars, cs);
18
+ vars = validateVars(this.vars, reqVars, this.validIfFn, cs);
17
19
  }
18
20
  catch (e) {
19
21
  return newError(e, 400);
@@ -1 +1 @@
1
- {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../../src/server/queries/queries.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAI9C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AA6B1C,wBAAsB,eAAe,CACpC,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,YAAY,GAClB,OAAO,CAAC,IAAI,CAAC,CAgGf"}
1
+ {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../../src/server/queries/queries.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAI9C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAmC1C,wBAAsB,eAAe,CACpC,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,YAAY,GAClB,OAAO,CAAC,IAAI,CAAC,CAoHf"}
@@ -20,6 +20,7 @@ export async function initQueryRoutes(platform, mod, router) {
20
20
  query: null,
21
21
  jsFile: null,
22
22
  vars: null,
23
+ validIfFn: null,
23
24
  cacheIfFn: null,
24
25
  preventCaching: false,
25
26
  transformFn: null,
@@ -40,6 +41,15 @@ export async function initQueryRoutes(platform, mod, router) {
40
41
  if (mts.variables) {
41
42
  routeBuilder.vars = parseVars(mts.variables);
42
43
  }
44
+ if (mts.validVariables || mts.validIf) {
45
+ throw new Error(`use the function validVars in ${filename}`);
46
+ }
47
+ if (mts.validVars) {
48
+ if (typeof mts.validVars !== 'function') {
49
+ throw new Error('validVars should be a function');
50
+ }
51
+ routeBuilder.validIfFn = mts.validVars;
52
+ }
43
53
  if (mts.caching) {
44
54
  routeBuilder.cacheIfFn = parseCaching(mts.caching);
45
55
  }
@@ -59,14 +69,14 @@ export async function initQueryRoutes(platform, mod, router) {
59
69
  for (const [name, rb] of routeBuilders.entries()) {
60
70
  if (rb.query) {
61
71
  if (rb.handleFn)
62
- throw new Error('handle function not supported');
72
+ throw new Error('cannot have a handle function if a query is present');
63
73
  const route = new QueryGqlRoute(name, rb.query, rb);
64
74
  router.post('/queries/' + route.name, csr => route.handle(caching, csr));
65
75
  }
66
76
  else if (rb.handleFn) {
67
77
  if (rb.cacheIfFn || rb.transformFn || rb.preventCaching)
68
78
  throw new Error('caching or transform not supported');
69
- const route = new QueryHandleRoute(name, rb.handleFn, rb.vars);
79
+ const route = new QueryHandleRoute(name, rb.validIfFn, rb.handleFn, rb.vars);
70
80
  router.post('/queries/' + route.name, csr => route.handle(caching.router, csr));
71
81
  }
72
82
  else {
@@ -2,12 +2,13 @@ import { QueryVar } from '../../queries/vars.js';
2
2
  import CrelteServerRequest from '../CrelteServer.js';
3
3
  import ServerRouter from '../ServerRouter.js';
4
4
  export type CacheIfFn = (response: any, vars: Record<string, any>) => boolean;
5
+ export type ValidIfFn = (vars: Record<string, any>, sr: ServerRouter) => void | boolean;
5
6
  export type TransformFn = (response: any, vars: Record<string, any>, csr: CrelteServerRequest) => void | any | Promise<void | any>;
6
7
  export type HandleFn = (csr: CrelteServerRequest, vars: Record<string, any>) => Promise<any> | any;
7
8
  /**
8
- * Returns the validated variables if some vars where defined
9
+ * Returns the validated variables if some vars were defined
9
10
  * else just returns all vars
10
11
  */
11
- export declare function validateVars(qvars: Record<string, QueryVar> | null, vars: any, cs: ServerRouter): Record<string, any>;
12
+ export declare function validateVars(qvars: Record<string, QueryVar> | null, vars: any, validIfFn: ValidIfFn | null, sr: ServerRouter): Record<string, any>;
12
13
  export declare function newError(e: any, status: number): Response;
13
14
  //# sourceMappingURL=routes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../src/server/queries/routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,mBAAmB,MAAM,oBAAoB,CAAC;AACrD,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAE9C,MAAM,MAAM,SAAS,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,OAAO,CAAC;AAM9E,MAAM,MAAM,WAAW,GAAG,CACzB,QAAQ,EAAE,GAAG,EACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,GAAG,EAAE,mBAAmB,KACpB,IAAI,GAAG,GAAG,GAAG,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;AAEtC,MAAM,MAAM,QAAQ,GAAG,CACtB,GAAG,EAAE,mBAAmB,EACxB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KACrB,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;AAExB;;;GAGG;AACH,wBAAgB,YAAY,CAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,IAAI,EACtC,IAAI,EAAE,GAAG,EACT,EAAE,EAAE,YAAY,GACd,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAarB;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAEzD"}
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../src/server/queries/routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,mBAAmB,MAAM,oBAAoB,CAAC;AACrD,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAE9C,MAAM,MAAM,SAAS,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,OAAO,CAAC;AAG9E,MAAM,MAAM,SAAS,GAAG,CACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,EAAE,EAAE,YAAY,KACZ,IAAI,GAAG,OAAO,CAAC;AAMpB,MAAM,MAAM,WAAW,GAAG,CACzB,QAAQ,EAAE,GAAG,EACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,GAAG,EAAE,mBAAmB,KACpB,IAAI,GAAG,GAAG,GAAG,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;AAEtC,MAAM,MAAM,QAAQ,GAAG,CACtB,GAAG,EAAE,mBAAmB,EACxB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KACrB,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;AAExB;;;GAGG;AACH,wBAAgB,YAAY,CAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,IAAI,EACtC,IAAI,EAAE,GAAG,EACT,SAAS,EAAE,SAAS,GAAG,IAAI,EAC3B,EAAE,EAAE,YAAY,GACd,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAoBrB;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAEzD"}
@@ -1,15 +1,21 @@
1
1
  /**
2
- * Returns the validated variables if some vars where defined
2
+ * Returns the validated variables if some vars were defined
3
3
  * else just returns all vars
4
4
  */
5
- export function validateVars(qvars, vars, cs) {
5
+ export function validateVars(qvars, vars, validIfFn, sr) {
6
6
  if (!vars || typeof vars !== 'object')
7
7
  throw new Error('expected an object as vars');
8
8
  if (!qvars)
9
9
  return vars;
10
10
  const nVars = {};
11
11
  for (const [k, v] of Object.entries(qvars)) {
12
- nVars[k] = v.validValue(vars[k], cs);
12
+ nVars[k] = v.validValue(vars[k], sr);
13
+ }
14
+ if (validIfFn) {
15
+ // or throw
16
+ const valid = validIfFn(nVars, sr);
17
+ if (typeof valid === 'boolean' && !valid)
18
+ throw new Error('invalid variables for query');
13
19
  }
14
20
  return nVars;
15
21
  }
@@ -10,6 +10,7 @@
10
10
  * - {@link std/stores}
11
11
  * - {@link std/sync}
12
12
  * - {@link std/rand}
13
+ * - {@link std/url}
13
14
  */
14
15
  /**
15
16
  * Delays for a specified amount of time.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/std/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEjD;AAED,MAAM,WAAW,SAAS;IACzB,KAAK,IAAI,IAAI,CAAC;CACd;AAED;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAC7B,SAAS,GACT,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,CAAC;AAEb;;;GAGG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,oBAAoB,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAIjE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/std/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEjD;AAED,MAAM,WAAW,SAAS;IACzB,KAAK,IAAI,IAAI,CAAC;CACd;AAED;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAC7B,SAAS,GACT,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,CAAC;AAEb;;;GAGG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,oBAAoB,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAIjE"}
package/dist/std/index.js CHANGED
@@ -10,6 +10,7 @@
10
10
  * - {@link std/stores}
11
11
  * - {@link std/sync}
12
12
  * - {@link std/rand}
13
+ * - {@link std/url}
13
14
  */
14
15
  /**
15
16
  * Delays for a specified amount of time.
@@ -0,0 +1,40 @@
1
+ import { BaseRoute } from '../../routing/index.js';
2
+ /**
3
+ * Sets the search params of a URL based on the provided options.
4
+ *
5
+ * If a value is `null`, `undefined`, or an empty string, the corresponding
6
+ * search param will be deleted.
7
+ *
8
+ * #### Example
9
+ * ```js
10
+ * urlWithSearch(entry.url, { p: 1 });
11
+ * // or remove a value
12
+ * urlWithSearch(entry.url, { p: null });
13
+ * ```
14
+ */
15
+ export declare function urlWithSearch(url: BaseRoute | URL | string | null | undefined, opts: Record<string, string | number | null | undefined>): string | null;
16
+ /**
17
+ * Compares two URLs for equality.
18
+ * Normally search and hash are ignored.
19
+ *
20
+ * If either or both url is `null` or `undefined`, the function will return
21
+ * `false`.
22
+ *
23
+ * #### Example
24
+ * ```svelte
25
+ * <script>
26
+ * import { getRoute } from 'crelte';
27
+ *
28
+ * const route = getRoute();
29
+ * </script>
30
+ *
31
+ * <a href={item.url} class:active={urlEq($route, item.url)}>
32
+ * {item.title}
33
+ * </a>
34
+ * ```
35
+ */
36
+ export declare function urlEq(a: BaseRoute | URL | string | null | undefined, b: BaseRoute | URL | string | null | undefined, opts?: {
37
+ search?: boolean;
38
+ hash?: boolean;
39
+ }): boolean;
40
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/std/url/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGnD;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAC5B,GAAG,EAAE,SAAS,GAAG,GAAG,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,EAChD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,GACtD,MAAM,GAAG,IAAI,CAcf;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,KAAK,CACpB,CAAC,EAAE,SAAS,GAAG,GAAG,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,EAC9C,CAAC,EAAE,SAAS,GAAG,GAAG,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,EAC9C,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GACzC,OAAO,CAkBT"}
@@ -0,0 +1,65 @@
1
+ import { deleteSearchParam, pathnameEq, searchEq, toUrl } from './utils.js';
2
+ /**
3
+ * Sets the search params of a URL based on the provided options.
4
+ *
5
+ * If a value is `null`, `undefined`, or an empty string, the corresponding
6
+ * search param will be deleted.
7
+ *
8
+ * #### Example
9
+ * ```js
10
+ * urlWithSearch(entry.url, { p: 1 });
11
+ * // or remove a value
12
+ * urlWithSearch(entry.url, { p: null });
13
+ * ```
14
+ */
15
+ export function urlWithSearch(url, opts) {
16
+ if (!url)
17
+ return null;
18
+ url = toUrl(url);
19
+ for (const [k, v] of Object.entries(opts)) {
20
+ if (!deleteSearchParam(v)) {
21
+ url.searchParams.set(k, v);
22
+ }
23
+ else {
24
+ url.searchParams.delete(k);
25
+ }
26
+ }
27
+ return url.href;
28
+ }
29
+ /**
30
+ * Compares two URLs for equality.
31
+ * Normally search and hash are ignored.
32
+ *
33
+ * If either or both url is `null` or `undefined`, the function will return
34
+ * `false`.
35
+ *
36
+ * #### Example
37
+ * ```svelte
38
+ * <script>
39
+ * import { getRoute } from 'crelte';
40
+ *
41
+ * const route = getRoute();
42
+ * </script>
43
+ *
44
+ * <a href={item.url} class:active={urlEq($route, item.url)}>
45
+ * {item.title}
46
+ * </a>
47
+ * ```
48
+ */
49
+ export function urlEq(a, b, opts) {
50
+ if (!a || !b)
51
+ return false;
52
+ a = toUrl(a);
53
+ b = toUrl(b);
54
+ // check origin and pathname
55
+ const baseMatches = a.origin === b.origin && pathnameEq(a.pathname, b.pathname);
56
+ if (!baseMatches)
57
+ return false;
58
+ // check search
59
+ if (opts?.search && !searchEq(a.searchParams, b.searchParams))
60
+ return false;
61
+ // check hash
62
+ if (opts?.hash && a.hash !== b.hash)
63
+ return false;
64
+ return true;
65
+ }
@@ -0,0 +1,19 @@
1
+ import { BaseRoute } from '../../routing/index.js';
2
+ /**
3
+ * Checks if a search param should be removed.
4
+ * This is the case if the value is `null`, `undefined`, or an empty string.
5
+ */
6
+ export declare function deleteSearchParam(value: string | number | null | undefined): value is "" | null | undefined;
7
+ /**
8
+ * Converts a `BaseRoute`, `URL`, or string to a `URL` object.
9
+ */
10
+ export declare function toUrl(url: BaseRoute | URL | string): URL;
11
+ /**
12
+ * Compares two `URLSearchParams` objects for equality.
13
+ */
14
+ export declare function searchEq(a: URLSearchParams, b: URLSearchParams): boolean;
15
+ /**
16
+ * Compares two pathnames for equality, ignoring trailing slashes.
17
+ */
18
+ export declare function pathnameEq(a: string, b: string): boolean;
19
+ //# sourceMappingURL=utils.d.ts.map