assai 1.1.1 → 2.1.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.
Files changed (38) hide show
  1. package/README.md +23 -22
  2. package/dist/src/factories/create_mongo_collection.d.mts +60 -18
  3. package/dist/src/types.d.ts +1 -1
  4. package/dist/src/usecases/mongo/operation/aggregate.d.mts +16 -0
  5. package/dist/src/usecases/mongo/operation/bulk_write.d.mts +15 -0
  6. package/dist/src/usecases/mongo/operation/find.d.mts +3 -1
  7. package/dist/src/usecases/mongo/operation/find_one.d.mts +4 -1
  8. package/dist/src/usecases/mongo/operation/find_one_and_delete.d.mts +16 -0
  9. package/dist/src/usecases/mongo/operation/find_one_and_replace.d.mts +18 -0
  10. package/dist/src/usecases/mongo/operation/find_one_and_update.d.mts +18 -0
  11. package/dist/src/usecases/mongo/operation/index.d.mts +5 -0
  12. package/dist/src/usecases/mongo/operation/insert_many.d.mts +3 -1
  13. package/dist/src/usecases/mongo/operation/insert_one.d.mts +3 -1
  14. package/dist/src/usecases/mongo/operation/update_many.d.mts +3 -1
  15. package/dist/src/usecases/mongo/operation/update_one.d.mts +4 -1
  16. package/dist/src/usecases/mongo/transformers/id/rename_find_options.d.mts +3 -4
  17. package/dist/src/usecases/mongo/transformers/input_transformer.d.mts +10 -0
  18. package/dist/src/usecases/mongo/transformers/output_transformer.d.mts +10 -0
  19. package/dist/src/usecases/mongo/transformers/timestamps.d.mts +6 -0
  20. package/jsconfig.json +16 -19
  21. package/package.json +5 -4
  22. package/src/factories/create_mongo_collection.mjs +75 -68
  23. package/src/types.ts +1 -15
  24. package/src/usecases/mongo/operation/aggregate.mjs +26 -0
  25. package/src/usecases/mongo/operation/bulk_write.mjs +54 -0
  26. package/src/usecases/mongo/operation/find.mjs +7 -6
  27. package/src/usecases/mongo/operation/find_one.mjs +9 -2
  28. package/src/usecases/mongo/operation/find_one_and_delete.mjs +23 -0
  29. package/src/usecases/mongo/operation/find_one_and_replace.mjs +24 -0
  30. package/src/usecases/mongo/operation/find_one_and_update.mjs +40 -0
  31. package/src/usecases/mongo/operation/index.mjs +5 -0
  32. package/src/usecases/mongo/operation/insert_many.mjs +7 -4
  33. package/src/usecases/mongo/operation/insert_one.mjs +10 -4
  34. package/src/usecases/mongo/operation/update_many.mjs +22 -1
  35. package/src/usecases/mongo/operation/update_one.mjs +23 -1
  36. package/src/usecases/mongo/transformers/input_transformer.mjs +33 -0
  37. package/src/usecases/mongo/transformers/output_transformer.mjs +19 -0
  38. package/src/usecases/mongo/transformers/timestamps.mjs +28 -0
@@ -0,0 +1,33 @@
1
+ import { renameToMongoId } from './id/rename_to_mongo_id.mjs'
2
+ import { stringsIntoId } from './object_id/strings_into_id.mjs'
3
+
4
+ /**
5
+ * @template {import('../../../types.js').MongoDocument} T
6
+ * @param {object} params
7
+ * @param {import('../../../types.js').Optional<T, 'id'>} params.document
8
+ * @param {import('../../../factories/create_mongo_collection.mjs').IcreateCollectionOptions<T>} [params.collectionOptions]
9
+ */
10
+ export function inputTransformer({
11
+ document, collectionOptions,
12
+ }) {
13
+ document = renameToMongoId(document)
14
+ stringsIntoId(document)
15
+
16
+ const { timestamps } = collectionOptions ?? {}
17
+ const { createdAt, updatedAt } = timestamps ?? {
18
+ createdAt: 'generate',
19
+ updatedAt: 'generate',
20
+ }
21
+
22
+ if (document.createdAt == null && createdAt === 'generate') {
23
+ // @ts-ignore
24
+ document.createdAt = new Date()
25
+ }
26
+
27
+ if (document.updatedAt == null && updatedAt === 'generate') {
28
+ // @ts-ignore
29
+ document.updatedAt = new Date()
30
+ }
31
+
32
+ return document
33
+ }
@@ -0,0 +1,19 @@
1
+ import { renameToDevId } from './id/rename_to_dev_id.mjs'
2
+ import { idsIntoString } from './object_id/ids_into_strings.mjs'
3
+ import { timestampTransformer } from './timestamps.mjs'
4
+
5
+ /**
6
+ * @template {import('../../../types.js').MongoDocument} T
7
+ * @param {object} p
8
+ * @param {import('mongodb').WithId<T> | T} p.document
9
+ * @param {import('../../../factories/create_mongo_collection.mjs').IcreateCollectionOptions<T>} [p.collectionOptions]
10
+ */
11
+ export function outputTransformer({
12
+ document, collectionOptions,
13
+ }) {
14
+ if (collectionOptions) timestampTransformer(document, collectionOptions)
15
+ idsIntoString(document)
16
+ const transformedDoc = renameToDevId(document)
17
+
18
+ return transformedDoc
19
+ }
@@ -0,0 +1,28 @@
1
+ import { ObjectId } from 'mongodb'
2
+
3
+ /**
4
+ * @template {import('../../../types.js').MongoDocument} T
5
+ * @param {import('mongodb').WithId<T> | import('../../../types.js').MongoDocument} doc
6
+ * @param {import('../../../factories/create_mongo_collection.mjs').IcreateCollectionOptions<T>} options
7
+ */
8
+ export function timestampTransformer(doc, options) {
9
+ const { timestamps } = options
10
+ const { createdAt, updatedAt } = timestamps ?? {
11
+ createdAt: 'generate',
12
+ updatedAt: 'generate',
13
+ }
14
+
15
+ if (doc.createdAt == null) {
16
+ if (createdAt == 'fromId') {
17
+ const _id = doc._id
18
+ if (_id instanceof ObjectId) {
19
+ doc.createdAt = _id.getTimestamp()
20
+ }
21
+ } else if (createdAt == 'generate') {
22
+ doc.createdAt = new Date()
23
+ }
24
+ }
25
+ if (doc.updatedAt == null && updatedAt == 'generate') {
26
+ doc.updatedAt = new Date()
27
+ }
28
+ }