@nymphjs/nymph 1.0.0-beta.6 → 1.0.0-beta.60

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 (64) hide show
  1. package/CHANGELOG.md +273 -0
  2. package/README.md +13 -21
  3. package/dist/Entity.d.ts +269 -7
  4. package/dist/Entity.js +431 -89
  5. package/dist/Entity.js.map +1 -1
  6. package/dist/Entity.test.js +38 -16
  7. package/dist/Entity.test.js.map +1 -1
  8. package/dist/Entity.types.d.ts +225 -19
  9. package/dist/Nymph.d.ts +423 -11
  10. package/dist/Nymph.js +649 -156
  11. package/dist/Nymph.js.map +1 -1
  12. package/dist/Nymph.types.d.ts +31 -7
  13. package/dist/Nymph.types.js +2 -1
  14. package/dist/Nymph.types.js.map +1 -1
  15. package/dist/conf/d.d.ts +26 -0
  16. package/dist/conf/defaults.js +22 -0
  17. package/dist/conf/defaults.js.map +1 -1
  18. package/dist/driver/NymphDriver.d.ts +111 -36
  19. package/dist/driver/NymphDriver.js +169 -68
  20. package/dist/driver/NymphDriver.js.map +1 -1
  21. package/dist/driver/testArtifacts.d.ts +1 -1
  22. package/dist/driver/testArtifacts.js +285 -18
  23. package/dist/driver/testArtifacts.js.map +1 -1
  24. package/dist/errors/EntityInvalidDataError.d.ts +6 -0
  25. package/dist/errors/EntityInvalidDataError.js +6 -0
  26. package/dist/errors/EntityInvalidDataError.js.map +1 -1
  27. package/dist/errors/EntityUniqueConstraintError.d.ts +3 -0
  28. package/dist/errors/EntityUniqueConstraintError.js +11 -0
  29. package/dist/errors/EntityUniqueConstraintError.js.map +1 -0
  30. package/dist/errors/InvalidStateError.d.ts +3 -0
  31. package/dist/errors/InvalidStateError.js +11 -0
  32. package/dist/errors/InvalidStateError.js.map +1 -0
  33. package/dist/errors/QueryFailedError.js.map +1 -1
  34. package/dist/errors/index.d.ts +2 -0
  35. package/dist/errors/index.js +2 -0
  36. package/dist/errors/index.js.map +1 -1
  37. package/dist/testArtifacts.d.ts +17 -5
  38. package/dist/testArtifacts.js +23 -19
  39. package/dist/testArtifacts.js.map +1 -1
  40. package/dist/testMocks.d.ts +15 -10
  41. package/dist/testMocks.js +34 -11
  42. package/dist/testMocks.js.map +1 -1
  43. package/dist/utils.d.ts +1 -1
  44. package/dist/utils.js +21 -5
  45. package/dist/utils.js.map +1 -1
  46. package/package.json +16 -14
  47. package/src/Entity.test.ts +30 -10
  48. package/src/Entity.ts +406 -135
  49. package/src/Entity.types.ts +32 -66
  50. package/src/Nymph.ts +626 -196
  51. package/src/Nymph.types.ts +97 -26
  52. package/src/conf/d.ts +8 -0
  53. package/src/conf/defaults.ts +24 -0
  54. package/src/driver/NymphDriver.ts +187 -243
  55. package/src/driver/testArtifacts.ts +327 -146
  56. package/src/errors/EntityUniqueConstraintError.ts +6 -0
  57. package/src/errors/InvalidStateError.ts +6 -0
  58. package/src/errors/index.ts +4 -0
  59. package/src/nymphJoiProps.ts +2 -2
  60. package/src/testArtifacts.ts +18 -19
  61. package/src/testMocks.ts +64 -32
  62. package/src/utils.ts +22 -8
  63. package/tsconfig.json +1 -1
  64. package/typedoc.json +4 -0
@@ -1,5 +1,5 @@
1
- import { EntityConstructor, EntityInterface } from './Entity.types';
2
- import Nymph from './Nymph';
1
+ import type { EntityConstructor, EntityInterface } from './Entity.types';
2
+ import type Nymph from './Nymph';
3
3
 
4
4
  export type NymphEventType =
5
5
  | 'connect'
@@ -9,25 +9,38 @@ export type NymphEventType =
9
9
  | 'beforeGetEntities'
10
10
  | 'beforeSaveEntity'
11
11
  | 'afterSaveEntity'
12
+ | 'failedSaveEntity'
12
13
  | 'beforeDeleteEntity'
13
14
  | 'afterDeleteEntity'
15
+ | 'failedDeleteEntity'
14
16
  | 'beforeDeleteEntityByID'
15
17
  | 'afterDeleteEntityByID'
18
+ | 'failedDeleteEntityByID'
16
19
  | 'beforeNewUID'
17
20
  | 'afterNewUID'
21
+ | 'failedNewUID'
18
22
  | 'beforeSetUID'
19
23
  | 'afterSetUID'
24
+ | 'failedSetUID'
20
25
  | 'beforeRenameUID'
21
26
  | 'afterRenameUID'
27
+ | 'failedRenameUID'
22
28
  | 'beforeDeleteUID'
23
- | 'afterDeleteUID';
29
+ | 'afterDeleteUID'
30
+ | 'failedDeleteUID'
31
+ | 'beforeStartTransaction'
32
+ | 'afterStartTransaction'
33
+ | 'beforeCommitTransaction'
34
+ | 'afterCommitTransaction'
35
+ | 'beforeRollbackTransaction'
36
+ | 'afterRollbackTransaction';
24
37
  export type NymphConnectCallback = (
25
38
  nymph: Nymph,
26
- result: Promise<boolean>
39
+ result: Promise<boolean>,
27
40
  ) => Promise<void>;
28
41
  export type NymphDisconnectCallback = (
29
42
  nymph: Nymph,
30
- result: Promise<boolean>
43
+ result: Promise<boolean>,
31
44
  ) => Promise<void>;
32
45
  /**
33
46
  * The NymphQueryCallback will be called on both top level and qref queries.
@@ -43,76 +56,131 @@ export type NymphDisconnectCallback = (
43
56
  export type NymphQueryCallback = (
44
57
  nymph: Nymph,
45
58
  options: Options,
46
- selectors: FormattedSelector[]
59
+ selectors: FormattedSelector[],
47
60
  ) => void;
48
61
  export type NymphBeforeGetEntityCallback = (
49
62
  nymph: Nymph,
50
63
  options: Options,
51
- selectors: Selector[]
64
+ selectors: Selector[],
52
65
  ) => Promise<void>;
53
66
  export type NymphBeforeGetEntitiesCallback = (
54
67
  nymph: Nymph,
55
68
  options: Options,
56
- selectors: Selector[]
69
+ selectors: Selector[],
57
70
  ) => Promise<void>;
58
71
  export type NymphBeforeSaveEntityCallback = (
59
72
  nymph: Nymph,
60
- entity: EntityInterface
73
+ entity: EntityInterface,
61
74
  ) => Promise<void>;
62
75
  export type NymphAfterSaveEntityCallback = (
63
76
  nymph: Nymph,
64
- result: Promise<boolean>
77
+ result: Promise<boolean>,
78
+ ) => Promise<void>;
79
+ export type NymphFailedSaveEntityCallback = (
80
+ nymph: Nymph,
81
+ error: any,
65
82
  ) => Promise<void>;
66
83
  export type NymphBeforeDeleteEntityCallback = (
67
84
  nymph: Nymph,
68
- entity: EntityInterface
85
+ entity: EntityInterface,
69
86
  ) => Promise<void>;
70
87
  export type NymphAfterDeleteEntityCallback = (
71
88
  nymph: Nymph,
72
- result: Promise<boolean>
89
+ result: Promise<boolean>,
90
+ ) => Promise<void>;
91
+ export type NymphFailedDeleteEntityCallback = (
92
+ nymph: Nymph,
93
+ error: any,
73
94
  ) => Promise<void>;
74
95
  export type NymphBeforeDeleteEntityByIDCallback = (
75
96
  nymph: Nymph,
76
97
  guid: string,
77
- className?: string
98
+ className?: string,
78
99
  ) => Promise<void>;
79
100
  export type NymphAfterDeleteEntityByIDCallback = (
80
101
  nymph: Nymph,
81
- result: Promise<boolean>
102
+ result: Promise<boolean>,
103
+ ) => Promise<void>;
104
+ export type NymphFailedDeleteEntityByIDCallback = (
105
+ nymph: Nymph,
106
+ error: any,
82
107
  ) => Promise<void>;
83
108
  export type NymphBeforeNewUIDCallback = (
84
109
  nymph: Nymph,
85
- name: string
110
+ name: string,
86
111
  ) => Promise<void>;
87
112
  export type NymphAfterNewUIDCallback = (
88
113
  nymph: Nymph,
89
- result: Promise<number | null>
114
+ result: Promise<number | null>,
115
+ ) => Promise<void>;
116
+ export type NymphFailedNewUIDCallback = (
117
+ nymph: Nymph,
118
+ error: any,
90
119
  ) => Promise<void>;
91
120
  export type NymphBeforeSetUIDCallback = (
92
121
  nymph: Nymph,
93
122
  name: string,
94
- value: number
123
+ value: number,
95
124
  ) => Promise<void>;
96
125
  export type NymphAfterSetUIDCallback = (
97
126
  nymph: Nymph,
98
- result: Promise<boolean>
127
+ result: Promise<boolean>,
128
+ ) => Promise<void>;
129
+ export type NymphFailedSetUIDCallback = (
130
+ nymph: Nymph,
131
+ error: any,
99
132
  ) => Promise<void>;
100
133
  export type NymphBeforeRenameUIDCallback = (
101
134
  nymph: Nymph,
102
135
  oldName: string,
103
- newName: string
136
+ newName: string,
104
137
  ) => Promise<void>;
105
138
  export type NymphAfterRenameUIDCallback = (
106
139
  nymph: Nymph,
107
- result: Promise<boolean>
140
+ result: Promise<boolean>,
141
+ ) => Promise<void>;
142
+ export type NymphFailedRenameUIDCallback = (
143
+ nymph: Nymph,
144
+ error: any,
108
145
  ) => Promise<void>;
109
146
  export type NymphBeforeDeleteUIDCallback = (
110
147
  nymph: Nymph,
111
- name: string
148
+ name: string,
112
149
  ) => Promise<void>;
113
150
  export type NymphAfterDeleteUIDCallback = (
114
151
  nymph: Nymph,
115
- result: Promise<boolean>
152
+ result: Promise<boolean>,
153
+ ) => Promise<void>;
154
+ export type NymphFailedDeleteUIDCallback = (
155
+ nymph: Nymph,
156
+ error: any,
157
+ ) => Promise<void>;
158
+ export type NymphBeforeStartTransactionCallback = (
159
+ nymph: Nymph,
160
+ name: string,
161
+ ) => Promise<void>;
162
+ export type NymphAfterStartTransactionCallback = (
163
+ nymph: Nymph,
164
+ name: string,
165
+ result: Nymph,
166
+ ) => Promise<void>;
167
+ export type NymphBeforeCommitTransactionCallback = (
168
+ nymph: Nymph,
169
+ name: string,
170
+ ) => Promise<void>;
171
+ export type NymphAfterCommitTransactionCallback = (
172
+ nymph: Nymph,
173
+ name: string,
174
+ result: boolean,
175
+ ) => Promise<void>;
176
+ export type NymphBeforeRollbackTransactionCallback = (
177
+ nymph: Nymph,
178
+ name: string,
179
+ ) => Promise<void>;
180
+ export type NymphAfterRollbackTransactionCallback = (
181
+ nymph: Nymph,
182
+ name: string,
183
+ result: boolean,
116
184
  ) => Promise<void>;
117
185
 
118
186
  export type Options<T extends EntityConstructor = EntityConstructor> = {
@@ -120,7 +188,7 @@ export type Options<T extends EntityConstructor = EntityConstructor> = {
120
188
  limit?: number;
121
189
  offset?: number;
122
190
  reverse?: boolean;
123
- sort?: 'cdate' | 'mdate';
191
+ sort?: 'cdate' | 'mdate' | string;
124
192
  return?: 'entity' | 'guid' | 'count';
125
193
  source?: string;
126
194
  skipCache?: boolean;
@@ -309,9 +377,12 @@ export interface TilmeldInterface {
309
377
  init(nymph: Nymph): void;
310
378
  clone(): TilmeldInterface;
311
379
  gatekeeper(ability?: string): boolean;
312
- authenticate(): void;
380
+ authenticate(skipXsrfToken?: boolean, skipRenew?: boolean): Promise<boolean>;
313
381
  clearSession(): void;
314
382
  extractToken(token: string): Promise<any>;
315
- fillSession(user: any): void;
316
- checkClientUIDPermissions(name: string, type?: TilmeldAccessLevels): boolean;
383
+ fillSession(user: any): Promise<void>;
384
+ checkClientUIDPermissions(
385
+ name: string,
386
+ type?: TilmeldAccessLevels,
387
+ ): Promise<boolean>;
317
388
  }
package/src/conf/d.ts CHANGED
@@ -21,4 +21,12 @@ export interface Config {
21
21
  * return a 404 error.
22
22
  */
23
23
  emptyListError: boolean;
24
+ /**
25
+ * A function to log debug messages. By default, uses the `debug` package.
26
+ */
27
+ debugLog: (source: string, message: string) => void;
28
+ /**
29
+ * A function to log error messages. By default, uses the `debug` package.
30
+ */
31
+ debugError: (source: string, message: string) => void;
24
32
  }
@@ -1,8 +1,32 @@
1
+ import createDebug, { type Debugger } from 'debug';
1
2
  import { Config } from './d';
2
3
 
4
+ const debuggers: { [k: string]: { log: Debugger; error: Debugger } } = {};
5
+
6
+ function getDebuggers(source: string) {
7
+ if (source in debuggers) {
8
+ return debuggers[source];
9
+ }
10
+
11
+ debuggers[source] = {
12
+ log: createDebug(`nymphjs:log:${source}`),
13
+ error: createDebug(`nymphjs:error:${source}`),
14
+ };
15
+
16
+ debuggers[source].log.log = console.log.bind(console);
17
+
18
+ return debuggers[source];
19
+ }
20
+
3
21
  export default {
4
22
  cache: false,
5
23
  cacheThreshold: 4,
6
24
  cacheLimit: 50,
7
25
  emptyListError: false,
26
+ debugLog: (source, message) => {
27
+ getDebuggers(source).log(message);
28
+ },
29
+ debugError: (source, message) => {
30
+ getDebuggers(source).error(message);
31
+ },
8
32
  } as Config;