prostgles-server 1.5.122 → 2.0.3
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.
- package/dist/DboBuilder.d.ts +52 -27
- package/dist/DboBuilder.d.ts.map +1 -1
- package/dist/DboBuilder.js +404 -85
- package/dist/DboBuilder.js.map +1 -1
- package/dist/FileManager.d.ts +160 -0
- package/dist/FileManager.d.ts.map +1 -0
- package/dist/FileManager.js +419 -0
- package/dist/FileManager.js.map +1 -0
- package/dist/Prostgles.d.ts +145 -79
- package/dist/Prostgles.d.ts.map +1 -1
- package/dist/Prostgles.js +240 -180
- package/dist/Prostgles.js.map +1 -1
- package/dist/PubSubManager.js +1 -1
- package/dist/PubSubManager.js.map +1 -1
- package/dist/QueryBuilder.d.ts.map +1 -1
- package/dist/QueryBuilder.js +8 -5
- package/dist/QueryBuilder.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/lib/DboBuilder.ts +541 -136
- package/lib/FileManager.ts +546 -0
- package/lib/Prostgles.ts +407 -253
- package/lib/PubSubManager.ts +1 -1
- package/lib/QueryBuilder.ts +10 -6
- package/lib/index.ts +3 -3
- package/package.json +8 -2
- package/tests/client/index.js +18 -6
- package/tests/client/index.ts +16 -4
- package/tests/client/package-lock.json +27 -26
- package/tests/client/package.json +1 -1
- package/tests/client_only_queries.js +4 -4
- package/tests/config_test/DBoGenerated.d.ts +231 -8
- package/tests/config_test/index.html +35 -9
- package/tests/config_test/index.js +55 -97
- package/tests/config_test/index.js.map +1 -0
- package/tests/config_test/index.ts +67 -113
- package/tests/config_test/init.sql +50 -24
- package/tests/config_test/media/002d5f12-63c3-41f3-9007-cd33009104f4.txt +1 -0
- package/tests/config_test/media/003f0136-d231-4dd1-8937-08fa9a7c3d2e.txt +1 -0
- package/tests/config_test/media/01bd39a0-083b-4bfa-91fc-f4d1d9b7b204.txt +1 -0
- package/tests/config_test/media/0224513a-62de-4f0a-92bb-dcb3f700da7f.txt +1 -0
- package/tests/config_test/media/03005346-d6d5-4824-96ae-5ad7ca762730.txt +1 -0
- package/tests/config_test/media/0342d065-9bd2-443f-9058-f8058ab52de0.txt +1 -0
- package/tests/config_test/media/0350d1cf-b3b3-4c58-aef2-ad1dc3f80c6c.txt +1 -0
- package/tests/config_test/media/036833d7-d166-43a1-bda3-b801938c614d.txt +1 -0
- package/tests/config_test/media/03b5324d-0913-408f-a78a-252ff8fe8126.txt +1 -0
- package/tests/config_test/media/0540b670-bf42-4a83-82b2-67164630a24a.txt +1 -0
- package/tests/config_test/media/05900f5f-3b67-4ee9-8e1d-b511fd79d878.txt +1 -0
- package/tests/config_test/media/05969252-3f9e-41a0-88ce-aa23ba8b42eb.txt +1 -0
- package/tests/config_test/media/05a8a60c-cc75-4469-8e06-55d88c26e97a.txt +1 -0
- package/tests/config_test/media/05e662fc-7a03-4303-ae42-27a28d9affb9.txt +1 -0
- package/tests/config_test/media/061f86e6-0ddd-49b0-b243-4c063c6db5e4.txt +1 -0
- package/tests/config_test/media/062cf311-3976-471e-88ec-d618bd8ceeaa.txt +1 -0
- package/tests/config_test/media/0693b073-77b9-446a-9606-5453bcafd200.txt +1 -0
- package/tests/config_test/media/07a09b79-b1ed-45a3-bb42-42cd1a00757b.txt +1 -0
- package/tests/config_test/media/07e48303-0520-4a80-921e-130417488baa.txt +1 -0
- package/tests/config_test/media/09ab90a6-8461-4f39-89fb-8e2277974771.txt +1 -0
- package/tests/config_test/media/09c1194a-5d09-417c-a0c4-26dcf1e65bdb.txt +1 -0
- package/tests/config_test/media/09dc662f-6a9d-4a0b-95ba-8d24ceae9721.txt +1 -0
- package/tests/config_test/media/09ebb492-6146-4ff8-ac83-ac9970f5844c.txt +1 -0
- package/tests/config_test/media/0a198d6f-c629-42bd-9aa8-3c0ff62e1f1d.txt +1 -0
- package/tests/config_test/media/0a6d3ced-a16f-4491-b25b-679e9323ad79.txt +1 -0
- package/tests/config_test/media/0a817a27-6888-4ac4-b07b-4d1275e035ff.txt +1 -0
- package/tests/config_test/media/0aadc4f7-bf87-49da-8ef6-0857bf1789b4.txt +1 -0
- package/tests/config_test/media/0abe4a2e-fd75-428b-9757-2535d4112862.txt +1 -0
- package/tests/config_test/media/0ad9deca-6362-41dd-b0b3-8f8a71e2e1e2.txt +1 -0
- package/tests/config_test/media/0bdb19df-b82c-4a07-8d9b-a6e3a2af8a94.txt +1 -0
- package/tests/config_test/media/0c1e4575-223d-4d0c-b2c3-6ab6bb9844e6.txt +1 -0
- package/tests/config_test/media/0c4e3d55-432f-42e9-aa53-48e816ff6d15.txt +1 -0
- package/tests/config_test/media/0c5b47a4-884a-4207-b106-fa2557fc5600.txt +1 -0
- package/tests/config_test/media/0d8fbe62-22bc-47e8-b4ca-b77d8fd02798.txt +1 -0
- package/tests/config_test/media/0d95a140-3ae1-4faa-a34b-ed5b6cc524ac.txt +1 -0
- package/tests/config_test/media/0e0907c7-bd10-4ce2-ac36-066916a8a793.txt +1 -0
- package/tests/config_test/media/0e192b00-2676-4130-8819-90ee34a50932.txt +1 -0
- package/tests/config_test/media/0f9e3861-0e59-4ae4-a606-1fdd2c890c5b.txt +1 -0
- package/tests/config_test/media/1039afe1-24e9-4ea6-bfd0-6871b5f06f8f.txt +1 -0
- package/tests/config_test/media/1052e479-295e-46e9-88ec-d8f20efa75ea.txt +1 -0
- package/tests/config_test/media/11973be6-a675-4e0d-a54e-1eccbcdb3f2a.txt +1 -0
- package/tests/config_test/media/121656f5-1ef9-4181-9ee0-e3ae1433fed1.txt +1 -0
- package/tests/config_test/media/121a16b4-a925-406b-9ba9-0e4b4d413402.txt +1 -0
- package/tests/config_test/media/122cdf36-5b17-4b81-aa9d-c6725d1e8c8a.txt +1 -0
- package/tests/config_test/media/12435236-4735-4978-a234-52100181ee72.txt +1 -0
- package/tests/config_test/media/130eea28-64d0-40c4-8fa4-0cfba493e321.txt +1 -0
- package/tests/config_test/media/1435b6fd-4b86-4f7e-8e68-b607c5e5f2ad.txt +1 -0
- package/tests/config_test/media/14d78bf0-fd3e-4686-863d-b18d2c69b181.txt +1 -0
- package/tests/config_test/media/14dffd0e-23ae-4659-b8b3-25c89593643e.txt +1 -0
- package/tests/config_test/media/14e32028-fb4d-4743-a34d-c325be47b25e.txt +1 -0
- package/tests/config_test/media/14fb2139-eb53-4246-8dcb-c1e568572306.txt +1 -0
- package/tests/config_test/media/1644d880-c61f-4e9c-9c5c-892623ff5689.txt +1 -0
- package/tests/config_test/media/16818bb0-a022-4fd9-acac-e5a448b58eaf.txt +1 -0
- package/tests/config_test/media/16a47db5-262f-490b-850f-0f82019a58b4.txt +1 -0
- package/tests/config_test/media/16c2ffcc-8632-4935-b12d-be1313b74ddc.txt +1 -0
- package/tests/config_test/media/16fe3928-25c7-4e3a-9f68-51520712a4f6.txt +1 -0
- package/tests/config_test/media/172a7736-d3cf-431c-92a5-1a4aa6e89c7e.txt +1 -0
- package/tests/config_test/media/1784e75f-d063-43e2-accb-364ed36ae7d0.txt +1 -0
- package/tests/config_test/media/182e9dcc-0443-4cc5-aff1-9cf954dab771.txt +1 -0
- package/tests/config_test/media/19158860-e0c0-4ac7-afee-5428f9060b36.txt +1 -0
- package/tests/config_test/media/1998f271-5d71-4bc0-9f92-376a8a98f7da.txt +1 -0
- package/tests/config_test/media/19d2b383-4b1b-41a5-a7ef-ceaf1e691e0f.txt +1 -0
- package/tests/config_test/media/1c33fac7-470b-47e0-8aba-7c7394406aad.txt +1 -0
- package/tests/config_test/media/1d8a6c9c-0539-4c08-8ea5-4bd0bbe8fa18.txt +1 -0
- package/tests/config_test/media/1de86105-97ce-49c0-8137-030f3af37fb5.txt +1 -0
- package/tests/config_test/media/1f1393d1-e2f2-445e-806e-05c9a6135437.txt +1 -0
- package/tests/config_test/media/1fc303e7-943c-42cd-87f0-d14b361e5564.txt +1 -0
- package/tests/config_test/media/1fd79260-4246-4230-b4ab-c42baad3de44.txt +1 -0
- package/tests/config_test/media/209085fb-8441-4039-bb01-32171248c7f7.txt +1 -0
- package/tests/config_test/media/20ab3e07-77d6-4fbc-9532-b47e16c38e68.txt +1 -0
- package/tests/config_test/media/20d43c00-35b4-43da-b79f-cb59888ac41b.txt +1 -0
- package/tests/config_test/media/20f7f651-06de-4d5f-aa39-2c261c662cd3.txt +1 -0
- package/tests/config_test/media/214af93c-f973-4809-a440-87a5a3b28e83.txt +1 -0
- package/tests/config_test/media/22bffc7f-c942-4163-bbf6-141f585f3671.txt +1 -0
- package/tests/config_test/media/23d09f4f-db2a-44cb-9d1b-552eb0568acf.txt +1 -0
- package/tests/config_test/media/24a256f7-fe83-4a6d-ace8-a2c2ded37341.txt +1 -0
- package/tests/config_test/media/25522aa0-9c30-413b-b0df-f9f2c2562769.txt +1 -0
- package/tests/config_test/media/25806b78-52cd-40f2-907a-d4fba3821435.txt +1 -0
- package/tests/config_test/media/259920a6-0c5a-4193-8940-91fc0183204c.txt +1 -0
- package/tests/config_test/media/28ca6b02-f58e-4204-a87a-28347d8f5884.txt +1 -0
- package/tests/config_test/media/2a3f8e6e-3bc4-44b3-ac43-17851b1f53e4.txt +1 -0
- package/tests/config_test/media/2afe6eb3-64ca-4aae-b002-676ab3862c96.txt +1 -0
- package/tests/config_test/media/2bd913c1-408a-4451-b465-e48452ca46cb.txt +1 -0
- package/tests/config_test/media/2bfe0f21-70b6-45a7-9bc0-f60dee9b0786.txt +1 -0
- package/tests/config_test/media/2c37bb2d-412e-44be-8f91-58bf1adae554.txt +1 -0
- package/tests/config_test/media/2c6ffa05-479f-4d8f-bc98-0c050567ef28.txt +1 -0
- package/tests/config_test/media/2ce666cb-e1e7-411f-9727-ce47be9365f5.txt +1 -0
- package/tests/config_test/media/2d737158-559b-4fca-b35c-3a832e21a0bf.txt +1 -0
- package/tests/config_test/media/2d7cae40-8fa9-4715-8834-b105a5815efc.txt +1 -0
- package/tests/config_test/media/2ea6b55b-eb9e-4b72-9510-4d5b00490076.txt +1 -0
- package/tests/config_test/media/2f0f8b73-7a21-48e5-b0d8-6e733de5eef8.txt +1 -0
- package/tests/config_test/media/2f37ed63-4a76-49e8-9df0-b586e2318b54.txt +1 -0
- package/tests/config_test/media/2f4e2797-63dd-43cb-8edf-b6e4a5f6d85b.txt +1 -0
- package/tests/config_test/media/2fc8b254-571c-49da-b8d8-af12bead2b6e.txt +1 -0
- package/tests/config_test/media/31887ce4-a69d-429e-bd32-e3fcf1b6ec3c.txt +1 -0
- package/tests/config_test/media/31ab5780-f38f-4614-b11e-1399a5d19e88.txt +1 -0
- package/tests/config_test/media/330b1369-abf8-4a0d-aac3-15185409347b.txt +1 -0
- package/tests/config_test/media/332306f0-16a4-46f1-b312-42d5b1739561.txt +1 -0
- package/tests/config_test/media/33729cd7-ef5a-461d-860c-188b12c3c0e1.txt +1 -0
- package/tests/config_test/media/34f797b8-98c7-47ff-ac4f-da792d3e59ec.txt +1 -0
- package/tests/config_test/media/35753dc2-4a87-4fdb-b547-8ba587ab7cca.txt +1 -0
- package/tests/config_test/media/35cf2e07-f087-410d-898b-326b16617631.txt +1 -0
- package/tests/config_test/media/3704c54c-08b7-429c-98fa-0656dca539ca.txt +1 -0
- package/tests/config_test/media/3823f728-c199-416b-aeb3-223bc0dc006a.txt +1 -0
- package/tests/config_test/media/38d31ef9-7e41-47f9-8e05-e826f9d1a378.txt +1 -0
- package/tests/config_test/media/39504f22-47a7-428a-8793-7cb9cc79b23d.txt +1 -0
- package/tests/config_test/media/39baaddd-7764-48b4-9dc3-e77f91b04ff0.txt +1 -0
- package/tests/config_test/media/39c91ceb-928d-4279-a8a7-00f363b18384.txt +1 -0
- package/tests/config_test/media/3a58c511-78de-425f-a857-63a43e3b4c51.txt +1 -0
- package/tests/config_test/media/3c3fd2ca-8a72-4d38-899b-776f4ff690fc.txt +1 -0
- package/tests/config_test/media/3c592436-14fa-49f5-be05-1d8aff250d0d.txt +1 -0
- package/tests/config_test/media/3db275e8-327d-45d4-a755-3df103967b04.txt +1 -0
- package/tests/config_test/media/3de350d2-a26d-40ef-ad11-fa1454a0f50a.txt +1 -0
- package/tests/config_test/media/3e4f08ac-8b0a-4ec6-b3be-ff6ce140af6a.txt +1 -0
- package/tests/config_test/media/3fa40e56-cb30-4722-ba36-583e7c064d16.txt +1 -0
- package/tests/config_test/media/3fe9495c-6fa5-49ca-a16f-e3cf1808d619.txt +1 -0
- package/tests/config_test/media/3fed5003-1a13-433d-a82f-325dbd57ff55.txt +1 -0
- package/tests/config_test/media/40dfa3df-237e-4e0d-99ff-c90000c5f7ed.txt +1 -0
- package/tests/config_test/media/40ea2d40-3f28-46e5-a41d-5aae1721de21.txt +1 -0
- package/tests/config_test/media/410c564d-860e-4693-9112-efb2304bf940.txt +1 -0
- package/tests/config_test/media/424c9239-aa07-48f3-9a64-c99261387fec.txt +1 -0
- package/tests/config_test/media/4260eab4-3e7d-420a-bc8f-b9cc945f3c80.txt +1 -0
- package/tests/config_test/media/42886a01-8047-4a49-beab-97f5a3a7c128.txt +1 -0
- package/tests/config_test/media/44e2e069-a213-4632-b13b-153461000c5e.txt +1 -0
- package/tests/config_test/media/46520b9c-f878-41e9-9840-0d0babb9b63d.txt +1 -0
- package/tests/config_test/media/46f010a8-66b2-48d8-b4a6-62cc23e26008.txt +1 -0
- package/tests/config_test/media/48c9f649-f776-4cd9-8df5-56b5312f51c2.txt +1 -0
- package/tests/config_test/media/49f5836b-4fb0-4ee1-831b-91ddfcaac0bf.txt +1 -0
- package/tests/config_test/media/4a2d3bae-040e-44fe-bb36-301af65302fd.txt +1 -0
- package/tests/config_test/media/4ab15a14-36c7-4a4e-8179-be60c56368c5.txt +1 -0
- package/tests/config_test/media/4b98c009-458a-4e35-96e2-ccd465673234.txt +1 -0
- package/tests/config_test/media/4bf86749-685c-423c-9997-eb73cb0bc254.txt +1 -0
- package/tests/config_test/media/4db9d5ad-c703-4fb5-9b15-9c48ee3edca1.txt +1 -0
- package/tests/config_test/media/4dd147f7-59ef-4b8f-963b-1dbedb0d10a2.txt +1 -0
- package/tests/config_test/media/4e61da19-25e1-44a0-b901-2cefc3461619.txt +1 -0
- package/tests/config_test/media/4e66c64c-72e3-4458-8ac9-490774193a50.txt +1 -0
- package/tests/config_test/media/4e98ba50-1583-4d7b-9e0d-7c577af28182.txt +1 -0
- package/tests/config_test/media/4e9cb872-dd5f-404a-ae9f-97ec69606d36.txt +1 -0
- package/tests/config_test/media/4fbb89d3-e922-42f2-81ed-6c1370199c94.txt +1 -0
- package/tests/config_test/media/4fdf0b1d-1718-4f53-8a9c-6d44bdef0c60.txt +1 -0
- package/tests/config_test/media/503c6659-ff3f-4df4-ac88-628e809b2e72.txt +1 -0
- package/tests/config_test/media/51010c69-5b30-4ac7-8ed9-12f1866ef145.txt +1 -0
- package/tests/config_test/media/51b2d38d-230e-4eb0-9b1f-dab8fa8b415d.txt +1 -0
- package/tests/config_test/media/51cc7a7b-a764-4ebd-ac31-ba881fa1404e.txt +1 -0
- package/tests/config_test/media/52f0dbb6-2179-4472-871d-dd80c6341c58.txt +1 -0
- package/tests/config_test/media/54aff9eb-0202-447d-9c95-c74560cabcd7.txt +1 -0
- package/tests/config_test/media/55551c8d-4305-48ca-a752-ade3a9efb538.txt +1 -0
- package/tests/config_test/media/555b772b-6c78-4667-80d6-bbe2f290611c.txt +1 -0
- package/tests/config_test/media/555fbb0b-febc-4611-9efa-16ddbf8e988c.txt +1 -0
- package/tests/config_test/media/55a84883-9a15-4368-b8fe-05bd848de6ba.txt +1 -0
- package/tests/config_test/media/56523343-de4a-49de-94ae-8205cc92eeb6.txt +1 -0
- package/tests/config_test/media/567d431e-813f-47d7-a3d2-e2371c0f32e2.txt +1 -0
- package/tests/config_test/media/56fa54a9-10a4-42a3-9a29-ea132adf09bc.txt +1 -0
- package/tests/config_test/media/57734e9e-d5b8-4942-a76c-db1d0cb72aea.txt +1 -0
- package/tests/config_test/media/5777d7a2-cd26-494e-92ba-fa681c2445ef.txt +1 -0
- package/tests/config_test/media/582f6e3f-1b06-4f97-bb81-4355cc139e41.txt +1 -0
- package/tests/config_test/media/584ef61c-974e-4882-aaff-8089029b7a66.txt +1 -0
- package/tests/config_test/media/58987f15-0627-4c3c-a8ba-33e0315548f9.txt +1 -0
- package/tests/config_test/media/58eb23e6-6110-489f-81d3-37d48bcd3bf7.txt +1 -0
- package/tests/config_test/media/5c5e5543-491c-49d2-b762-162faa75019a.txt +1 -0
- package/tests/config_test/media/5e688b4a-afba-4d47-bdc8-dd108d673619.txt +1 -0
- package/tests/config_test/media/5f42b54e-6020-4552-8872-17dc7d57b110.txt +1 -0
- package/tests/config_test/media/5f5ae0f6-816d-4425-8403-5d07284db0aa.txt +1 -0
- package/tests/config_test/media/5ffa2969-2d65-430e-a621-420c07f18f41.txt +1 -0
- package/tests/config_test/media/62a62671-e4bc-4312-8dfd-a06168c22aee.txt +1 -0
- package/tests/config_test/media/63732c16-1f11-4635-b2bc-62a6459e651e.txt +1 -0
- package/tests/config_test/media/64b8c889-5423-4cbb-9816-a05e72771b52.txt +1 -0
- package/tests/config_test/media/653d8bcd-4e60-4fda-9676-2e0054d966c1.txt +1 -0
- package/tests/config_test/media/6602e1e0-07e9-4dd1-b3c8-276f24e2a41f.txt +1 -0
- package/tests/config_test/media/67868636-99cc-441b-991d-7fe781b67745.txt +1 -0
- package/tests/config_test/media/67b4eede-7118-4e25-8801-ca53d0fd9d7f.txt +1 -0
- package/tests/config_test/media/67b817df-8c2f-4fe5-ba38-6090b5658943.txt +1 -0
- package/tests/config_test/media/67f8c8a6-8aa3-4d0f-bcf6-bec8c5a6726a.txt +1 -0
- package/tests/config_test/media/6808c09c-a1a9-4eea-92d6-327957c599be.txt +1 -0
- package/tests/config_test/media/681f8ee3-0d7f-4d85-a593-0c1f5ceea9be.txt +1 -0
- package/tests/config_test/media/68ae942b-c728-4127-a057-dfd08edc1aee.txt +1 -0
- package/tests/config_test/media/6a405178-234d-4562-ab34-c554826476fc.txt +1 -0
- package/tests/config_test/media/6b801410-b1fb-43f6-935e-c7cb09fb0f5a.txt +1 -0
- package/tests/config_test/media/6bd41073-fa62-4c20-a896-8b1e5d2b8381.txt +1 -0
- package/tests/config_test/media/6ea9bf1d-780e-4fc2-987e-841038b791cd.txt +1 -0
- package/tests/config_test/media/6fa62bcc-859a-44eb-a85b-ed12b3aec3ae.txt +1 -0
- package/tests/config_test/media/70118801-66f3-4165-a0b2-8918e4d4bd15.txt +1 -0
- package/tests/config_test/media/70640e73-56dc-4880-af62-ad7530a1185d.txt +1 -0
- package/tests/config_test/media/7114e6d7-f285-48b3-80c9-ec3fb1c3233e.txt +1 -0
- package/tests/config_test/media/71997029-9398-4efb-9868-3025b6de861a.txt +1 -0
- package/tests/config_test/media/725cb5f7-8410-4b7a-8427-90b213cea9d6.txt +1 -0
- package/tests/config_test/media/727960af-4454-4aa2-b479-c88398ca2c01.txt +1 -0
- package/tests/config_test/media/763e2702-7677-48b0-89be-30f8caf56667.txt +1 -0
- package/tests/config_test/media/7682d7aa-6622-4ae1-bdfc-bb5134cf92d9.txt +1 -0
- package/tests/config_test/media/773d6a45-2316-41da-9973-1395727ffc1f.txt +1 -0
- package/tests/config_test/media/783cdda1-9913-4ab0-aba6-56a4c22e2b61.txt +1 -0
- package/tests/config_test/media/78becb97-76f6-4fd1-976d-ab3d5e4b21c2.txt +1 -0
- package/tests/config_test/media/78cb1409-965a-44ea-b42b-0363db4d2ebd.txt +1 -0
- package/tests/config_test/media/79f9864e-b5d5-4c8d-bb66-749f5b49877f.txt +1 -0
- package/tests/config_test/media/7b2928b9-4fd3-46c7-8b78-f8d1118c605b.txt +1 -0
- package/tests/config_test/media/7b5aead0-b20b-4719-88aa-3dd070d53e4d.txt +1 -0
- package/tests/config_test/media/7c1a82c9-391d-40fb-a6f3-d79468fcd45f.txt +1 -0
- package/tests/config_test/media/7f1aefd7-7c6b-4b29-9f71-a85d800d63eb.txt +1 -0
- package/tests/config_test/media/7fe1aa1b-3e92-4f1b-a77d-bf69601ba162.txt +1 -0
- package/tests/config_test/media/802ca8c0-8898-446d-aeca-59d0cce3eea5.txt +1 -0
- package/tests/config_test/media/8034e1cc-a82a-4e65-9019-ecf53a212c9e.txt +1 -0
- package/tests/config_test/media/80828d5a-916c-412b-aa23-eccdf3ce4078.txt +1 -0
- package/tests/config_test/media/81a6ec1c-49c5-490b-afe8-bd47a3c3b1e7.txt +1 -0
- package/tests/config_test/media/82827b46-f1f4-4b2a-bd5a-4a83e6b5cc12.txt +1 -0
- package/tests/config_test/media/82f7163d-c5a6-44fe-b06a-b1863c553af4.txt +1 -0
- package/tests/config_test/media/83141a3e-3f8b-456a-83f1-b9b4ada167f0.txt +1 -0
- package/tests/config_test/media/837397e7-63f9-4cba-8b10-51d565e00341.txt +1 -0
- package/tests/config_test/media/8440b86e-2036-46ef-affe-e052ae1e232f.txt +1 -0
- package/tests/config_test/media/8729c33a-8f9d-496c-8090-42947d3bd4c7.txt +1 -0
- package/tests/config_test/media/874e1047-3429-443a-868d-4ce453c3a525.txt +1 -0
- package/tests/config_test/media/8770cffa-58f5-4c15-869a-687c77529f81.txt +1 -0
- package/tests/config_test/media/87c977c0-4375-4527-abc1-6223c71e8756.txt +1 -0
- package/tests/config_test/media/889e72cc-7e19-40ef-9d5b-1e501f3b48c7.txt +1 -0
- package/tests/config_test/media/88c89c9b-755e-43f9-9ac6-c01df1e83dfb.txt +1 -0
- package/tests/config_test/media/894ee8b5-d527-40e2-a7e1-475d9f07c2aa.txt +1 -0
- package/tests/config_test/media/89ec8a46-a4bf-4462-8f6d-c132016af9e1.txt +1 -0
- package/tests/config_test/media/8b2bee47-1673-4cd9-a8d5-033ef092b93e.txt +1 -0
- package/tests/config_test/media/8c362262-34ff-4707-ab5f-c334034083ee.txt +1 -0
- package/tests/config_test/media/8c458967-085b-4750-91e6-3ea391147bc7.txt +1 -0
- package/tests/config_test/media/8c5b0560-fc62-47a5-b480-a93120ca7bc4.txt +1 -0
- package/tests/config_test/media/8ce076d6-e809-4355-97ab-96104b51b939.txt +1 -0
- package/tests/config_test/media/8d60f276-8a2d-48e2-934b-63ef82f03d0f.txt +1 -0
- package/tests/config_test/media/8d889db9-f6b8-4ccb-864c-d10d1a54f7e9.txt +1 -0
- package/tests/config_test/media/8df0284b-c43f-4c32-a4e1-7dbe2c8c80f0.txt +1 -0
- package/tests/config_test/media/8e583c0b-1e2e-4b51-b104-1382e81f69d9.txt +1 -0
- package/tests/config_test/media/8f57d7e8-0f26-4719-b4d1-37896da3f579.txt +1 -0
- package/tests/config_test/media/9070fc55-481f-44c9-96f2-62f7c0a08814.txt +1 -0
- package/tests/config_test/media/93743c64-b60e-4521-9774-4d3beffd4465.txt +1 -0
- package/tests/config_test/media/939c6b06-b95d-4de6-bdaa-6f33cbe1fc1e.txt +1 -0
- package/tests/config_test/media/94ac4fc1-ba54-43de-b283-a7fa05eb3921.txt +1 -0
- package/tests/config_test/media/95093a2d-81d2-46d7-a817-7ab507cc2454.txt +1 -0
- package/tests/config_test/media/9628850e-c8d3-44da-b3b4-b27e00ba0e05.txt +1 -0
- package/tests/config_test/media/965e4782-3120-41c1-a398-23b38a342d95.txt +1 -0
- package/tests/config_test/media/97216f64-db92-4fa8-a239-5a115e3293a0.txt +1 -0
- package/tests/config_test/media/97b54a41-ec05-498e-9c61-6ec20f34a331.txt +1 -0
- package/tests/config_test/media/97c15c9a-13b4-49f1-b9ea-708c92756b95.txt +1 -0
- package/tests/config_test/media/97e45e1c-d03b-4a17-bb6f-ea8601e7fdf4.txt +1 -0
- package/tests/config_test/media/98faca9f-2686-4338-a1c2-d1920cce2fc0.txt +1 -0
- package/tests/config_test/media/997016d6-6832-4c09-9f8d-949dba5f4f8e.txt +1 -0
- package/tests/config_test/media/99ce7c2e-d4a3-49d0-9251-9c62d28288f5.txt +1 -0
- package/tests/config_test/media/9a9940a6-78b9-4978-98a6-914a171406c3.txt +1 -0
- package/tests/config_test/media/9ade4d45-452f-4a3f-ba4f-d9a08da80dab.txt +1 -0
- package/tests/config_test/media/9aff7e30-1809-4021-8ab1-e9a04068ad15.txt +1 -0
- package/tests/config_test/media/9b6b83df-1ee4-48f2-a3b0-aee0723378fc.txt +1 -0
- package/tests/config_test/media/9bbf50e1-c19d-4cc4-a366-0dcc234f003f.txt +1 -0
- package/tests/config_test/media/9ce9bc18-89eb-4a6f-832d-a4380111ebfa.txt +1 -0
- package/tests/config_test/media/9d7e647b-f1a9-44a7-bb9d-5ad7ac545ed9.txt +1 -0
- package/tests/config_test/media/9e141207-cb69-47c7-a80a-9096886b0f4e.txt +1 -0
- package/tests/config_test/media/9e58e7cc-04bb-48d0-9af1-9fd7c80d46be.txt +1 -0
- package/tests/config_test/media/9f1f6f42-70f0-404e-89e4-31588f235108.txt +1 -0
- package/tests/config_test/media/9f3e0022-deb0-44a2-b47c-fd4880fb2fa6.txt +1 -0
- package/tests/config_test/media/a07a6a4e-25c7-4f91-acdc-411e676bae99.txt +1 -0
- package/tests/config_test/media/a08ef99a-7cff-4224-985f-aa7cf292c6c3.txt +1 -0
- package/tests/config_test/media/a0c4ef94-eb1d-4b7f-b636-62ad6914a69c.txt +1 -0
- package/tests/config_test/media/a170f562-2b00-4662-85d7-7c43f9f67e0c.txt +1 -0
- package/tests/config_test/media/a32bb27b-7772-4373-ada7-890d9315256f.txt +1 -0
- package/tests/config_test/media/a36c31b9-f5c1-43a9-b448-34a380990d3f.txt +1 -0
- package/tests/config_test/media/a3831984-3f77-4bac-af70-5a7de6ce5424.txt +1 -0
- package/tests/config_test/media/a4f1f023-6135-44da-b580-c1d024cd3f47.txt +1 -0
- package/tests/config_test/media/a6227af7-2710-47be-ab45-25f497cec39f.txt +1 -0
- package/tests/config_test/media/a64baf32-bd1e-4353-bdf8-74cc3672639f.txt +1 -0
- package/tests/config_test/media/a67f5ac1-9645-4f28-a221-c3466b6ba865.txt +1 -0
- package/tests/config_test/media/a7f8e5a7-0c0e-48fb-b323-743b121fc091.txt +1 -0
- package/tests/config_test/media/a969343e-857b-49b1-a311-0030e0cc57cd.txt +1 -0
- package/tests/config_test/media/a9bc7241-7413-4113-8baf-784af73b110d.txt +1 -0
- package/tests/config_test/media/aa5b6ba2-76cf-4ca2-90b8-8f83cb23687e.txt +1 -0
- package/tests/config_test/media/aa5f29d2-3c13-4a15-ac68-b28964f80a1d.txt +1 -0
- package/tests/config_test/media/aaa97926-1d6f-4f5a-9af8-e68584797d23.txt +1 -0
- package/tests/config_test/media/ac98c0da-b830-4ec8-9ab6-d8e72a6d0bf2.txt +1 -0
- package/tests/config_test/media/af2dda92-1ed0-4b00-a786-f0f7516d4b2b.txt +1 -0
- package/tests/config_test/media/b0327e27-0733-4f08-b728-8dca3eae7526.txt +1 -0
- package/tests/config_test/media/b23fc74b-403b-49d6-810b-5c3dc71f48de.txt +1 -0
- package/tests/config_test/media/b2aa3fbb-ef3f-423b-b7a9-1863aba35bdd.txt +1 -0
- package/tests/config_test/media/b38675e5-1ecf-4967-88ef-9f60cce1bb89.txt +1 -0
- package/tests/config_test/media/b45c1951-b045-4762-a9fa-8d346617c1b5.txt +1 -0
- package/tests/config_test/media/b5359b92-46ea-4ebc-b6bc-102ef03ac5f5.txt +1 -0
- package/tests/config_test/media/b5d5aa47-fb92-48a6-9bd5-e394dc7b5212.txt +1 -0
- package/tests/config_test/media/b6bba0b4-d9fe-431b-8836-ef41bcd890fe.txt +1 -0
- package/tests/config_test/media/b72f4de8-5071-4314-a8e9-0adc7ce98fb8.txt +1 -0
- package/tests/config_test/media/b792506c-a05f-4b33-8934-83a7f2b1ebdd.txt +1 -0
- package/tests/config_test/media/b7e0e1bd-5e0f-44cc-89b9-55e67c368dce.txt +1 -0
- package/tests/config_test/media/b7ec24ac-6967-441e-9cb9-533daa7b443e.txt +1 -0
- package/tests/config_test/media/b86f2242-9e7c-4434-ac3d-e8fe868ab758.txt +1 -0
- package/tests/config_test/media/b8aa1cbb-05fe-4564-bfad-96a5243eec54.txt +1 -0
- package/tests/config_test/media/b8c54323-7977-4626-9412-66116a40fe42.txt +1 -0
- package/tests/config_test/media/ba3387a6-c5cd-4677-bddd-a399c6f648a3.txt +1 -0
- package/tests/config_test/media/ba70f293-7a40-4a5d-9e60-9d9c3d1fd2c0.txt +1 -0
- package/tests/config_test/media/ba7cad62-385b-494c-9688-b008fbae10c9.txt +1 -0
- package/tests/config_test/media/bb07c0ca-4b9f-4888-9109-95087951d2a6.txt +1 -0
- package/tests/config_test/media/bcf860eb-13b6-44b7-9a58-f2b6422a4fb0.txt +1 -0
- package/tests/config_test/media/bd8a019f-c9fd-4289-bc38-cc222a247ba8.txt +1 -0
- package/tests/config_test/media/bda18b4f-b4f3-4095-8b9b-8d715945ded1.txt +1 -0
- package/tests/config_test/media/bf3e4228-17f4-40d6-9d23-7ba79a333be5.txt +1 -0
- package/tests/config_test/media/bfa2fe67-34fe-466c-b807-bea2ddfb0141.txt +1 -0
- package/tests/config_test/media/c15ecf6e-6167-42ad-ba24-161216dbabfb.txt +1 -0
- package/tests/config_test/media/c17436fb-113d-425e-b59b-cafe93e3418e.txt +1 -0
- package/tests/config_test/media/c22154ee-3f66-4996-8ed7-df6120806040.txt +1 -0
- package/tests/config_test/media/c2c47ffe-50a1-46f4-bace-d66008c3ce7b.txt +1 -0
- package/tests/config_test/media/c4e0c0bf-f9b0-4fec-8fbf-292d8d2fe254.txt +1 -0
- package/tests/config_test/media/c56803d2-29bc-4359-8cb4-ea9574a47b2d.txt +1 -0
- package/tests/config_test/media/c607d0ee-1641-47e1-83d5-66e9e4bed857.txt +1 -0
- package/tests/config_test/media/c62769c5-d469-4499-bf09-97f752a65397.txt +1 -0
- package/tests/config_test/media/c667bac7-c161-4f89-b311-9975dcac5865.txt +1 -0
- package/tests/config_test/media/c7485a24-95f6-45e7-90f2-6a4716e8971e.txt +1 -0
- package/tests/config_test/media/c80b124d-579a-4f7b-9743-5428be624edf.txt +1 -0
- package/tests/config_test/media/c8f6e757-0252-4ac6-a439-14a5cd406e16.txt +1 -0
- package/tests/config_test/media/c94c9c39-24e1-4ce3-94bd-e32db7052a9d.txt +1 -0
- package/tests/config_test/media/ca950ac2-312d-472f-ae0f-7604edd6eae8.txt +1 -0
- package/tests/config_test/media/cc1ffb29-8d6f-47cd-9efd-f38832045570.txt +1 -0
- package/tests/config_test/media/cf42859e-23b6-4f7b-9b00-4928b0fc33fd.txt +1 -0
- package/tests/config_test/media/d000b20e-fd2c-4d07-bb8c-fc48541fe420.txt +1 -0
- package/tests/config_test/media/d191b4ba-365d-4346-96c6-7ab4f27a163d.txt +1 -0
- package/tests/config_test/media/d2739585-5101-44b5-8dd1-bbb09a104978.txt +1 -0
- package/tests/config_test/media/d31d2bf6-bdb1-4de2-9942-3ab83e857a52.txt +1 -0
- package/tests/config_test/media/d4027635-8e25-4cf5-a3dc-73a826c5045c.txt +1 -0
- package/tests/config_test/media/d476077e-d4e9-42e8-a7db-ded7f075d88d.txt +1 -0
- package/tests/config_test/media/d4fe0fae-942f-4966-ab76-64ba34352269.txt +1 -0
- package/tests/config_test/media/d551ace3-b4bb-4306-ad17-4873cdbfa5f5.txt +1 -0
- package/tests/config_test/media/d5aabdf7-472d-4268-b542-ddce2b25c70e.txt +1 -0
- package/tests/config_test/media/d6279202-c868-4058-947d-d9e44acd26cc.txt +1 -0
- package/tests/config_test/media/d62ecbb0-df04-449c-91fa-5d60f96c717f.txt +1 -0
- package/tests/config_test/media/d6309af6-add5-4d3d-9596-92a3c1b785b8.txt +1 -0
- package/tests/config_test/media/d6f419fc-2441-4170-8967-1d3f2a232869.txt +1 -0
- package/tests/config_test/media/d78e034e-51e4-47e7-802b-2fb9ca7aeeb0.txt +1 -0
- package/tests/config_test/media/d7a5dea2-b545-4b1f-9f25-0ca31bfa9ba9.txt +1 -0
- package/tests/config_test/media/d7eff0e2-7e17-4364-995a-13608df42af3.txt +1 -0
- package/tests/config_test/media/d89b187c-f4e0-45c2-8622-8f6c05b3f8f8.txt +1 -0
- package/tests/config_test/media/d8e4f769-79a3-4577-ae6f-e21b6c373661.txt +1 -0
- package/tests/config_test/media/d9266efc-e275-4daf-bb58-a7d224649ac5.txt +1 -0
- package/tests/config_test/media/db04add1-1f89-4657-a897-4779001bd6cc.txt +1 -0
- package/tests/config_test/media/dc709e83-06c7-4371-95f4-c4982d094c7b.txt +1 -0
- package/tests/config_test/media/de3812df-b579-4203-98b1-7ee8821680a4.txt +1 -0
- package/tests/config_test/media/df1a21db-e3e1-4670-b909-da77c591486e.txt +1 -0
- package/tests/config_test/media/e033a02b-3a38-4b6f-8873-b121cc0cbcad.txt +1 -0
- package/tests/config_test/media/e13e2632-4aaf-4a79-b6b4-ef1f81028346.txt +1 -0
- package/tests/config_test/media/e19633b3-1ab1-4f18-86cd-e421633e96af.txt +1 -0
- package/tests/config_test/media/e1dc9b89-9563-4937-b529-43cd55f82a98.txt +1 -0
- package/tests/config_test/media/e37f9c75-0571-4336-b7a6-d431e295ba92.txt +1 -0
- package/tests/config_test/media/e3fb83b1-53ed-470d-b9f4-015f98c6a128.txt +1 -0
- package/tests/config_test/media/e6c964da-ab48-4779-9706-0ae9ab5f22bb.txt +1 -0
- package/tests/config_test/media/e732131f-d7e2-4969-9f0f-10672281405b.txt +1 -0
- package/tests/config_test/media/e73f5320-f030-43ae-9efe-002aeb6e0522.txt +1 -0
- package/tests/config_test/media/e98267b9-553f-4cd2-9277-2bee037b7003.txt +1 -0
- package/tests/config_test/media/ea3c4ac0-f63d-4a91-b015-345851856564.txt +1 -0
- package/tests/config_test/media/eacee16f-a2db-4d60-a36b-9b60ea2be330.txt +1 -0
- package/tests/config_test/media/eba1b05a-52aa-4f00-92f6-3d556ca2f366.txt +1 -0
- package/tests/config_test/media/ebf6e54b-0d1e-4d87-b206-34fa81c66dbb.txt +1 -0
- package/tests/config_test/media/ecbf0894-6d76-4141-875d-7691de63a8f7.txt +1 -0
- package/tests/config_test/media/ece7a87a-3490-4ac6-adaf-289b1e427325.txt +1 -0
- package/tests/config_test/media/ed59c963-3449-4431-8440-2cba7defdcae.txt +1 -0
- package/tests/config_test/media/eda09368-348b-4531-a062-a8aafbf9cb8a.txt +1 -0
- package/tests/config_test/media/edd1c2b2-179f-4d44-9ac0-72b4fe16c6f2.txt +1 -0
- package/tests/config_test/media/ee4e9f39-779e-4084-b696-f39abe74f545.txt +1 -0
- package/tests/config_test/media/ef08a195-fcc6-452f-b81e-9d4e97231327.txt +1 -0
- package/tests/config_test/media/ef518fee-57a4-47d3-bbb5-aef9b166ca49.txt +1 -0
- package/tests/config_test/media/efd77ad3-0e00-448f-a01d-4f363ad5c0b1.txt +1 -0
- package/tests/config_test/media/f0c18f54-1095-4787-891b-63c82ba6c153.txt +1 -0
- package/tests/config_test/media/f18dca67-521a-4e7f-8064-e6daa08ea3bc.txt +1 -0
- package/tests/config_test/media/f19a32ab-f345-4bcb-be01-58e62ade0285.txt +1 -0
- package/tests/config_test/media/f29ef9e1-4f84-4bb7-93ce-3693d7cd01f7.txt +1 -0
- package/tests/config_test/media/f2cd3857-386e-4d43-b5ee-cb54d1e7fa3c.txt +1 -0
- package/tests/config_test/media/f3c8b431-4b3a-43b9-a277-233daea240bb.txt +1 -0
- package/tests/config_test/media/f7344305-dde1-4b33-989e-b64b18447e2a.txt +1 -0
- package/tests/config_test/media/f829cdfe-a118-4751-a49f-565a617c2b99.txt +1 -0
- package/tests/config_test/media/f89206aa-0728-4215-a1df-c1f4315079b5.txt +1 -0
- package/tests/config_test/media/f89bb977-c022-471d-9972-d9417484f025.txt +1 -0
- package/tests/config_test/media/f960f026-724a-4630-b3ea-48d7ad60b022.txt +1 -0
- package/tests/config_test/media/fa343cd4-aca6-482b-9395-f221148fd0d8.txt +1 -0
- package/tests/config_test/media/fa802dcc-614e-4027-95fe-ce4f0da61bc9.txt +1 -0
- package/tests/config_test/media/ff1a47f0-9c4b-4c88-b0dc-b28d20a83509.txt +1 -0
- package/tests/config_test/media/ff8aa3b0-5c4d-4d39-be53-4e28e9ee02e7.txt +1 -0
- package/tests/config_test/media/ffb998c5-c98b-4442-b8ef-187bdc7e4c73.txt +1 -0
- package/tests/config_test/media/ffc43791-7d7b-4e13-a2ea-3bb952457e7f.txt +1 -0
- package/tests/config_test/package-lock.json +727 -688
- package/tests/config_test/package.json +2 -2
- package/tests/config_test/tsconfig.json +1 -1
- package/tests/isomorphic_queries.js +38 -0
- package/tests/isomorphic_queries.ts +28 -1
- package/tests/server/DBoGenerated.d.ts +135 -1
- package/tests/server/index.js +51 -27
- package/tests/server/index.ts +49 -26
- package/tests/server/init.sql +22 -7
- package/tests/server/media/35d7e3d7-64d3-4d4b-b564-5e810ca3671f.txt +1 -0
- package/tests/server/media/70ca7114-d6bc-4551-8170-cd7dcdff11dd.txt +1 -0
- package/tests/server/media/9e19f591-edc8-4ad7-ac4f-96c3078cb8ed.txt +1 -0
- package/tests/server/package-lock.json +166 -535
- package/tests/server/package.json +2 -2
- package/tests/config_test2/package-lock.json +0 -1999
|
@@ -0,0 +1,546 @@
|
|
|
1
|
+
|
|
2
|
+
import { S3 } from 'aws-sdk';
|
|
3
|
+
import { ManagedUpload } from 'aws-sdk/clients/s3';
|
|
4
|
+
import * as fs from 'fs';
|
|
5
|
+
|
|
6
|
+
import * as FileType from "file-type";
|
|
7
|
+
import * as sharp from "sharp";
|
|
8
|
+
|
|
9
|
+
import { Prostgles } from './Prostgles';
|
|
10
|
+
import { asName, AnyObject } from 'prostgles-types';
|
|
11
|
+
import { TableHandler } from './DboBuilder';
|
|
12
|
+
|
|
13
|
+
const HOUR = 3600 * 1000;
|
|
14
|
+
|
|
15
|
+
export type ImageOptions = {
|
|
16
|
+
keepMetadata?: boolean;
|
|
17
|
+
compression?:
|
|
18
|
+
/**
|
|
19
|
+
* Will resize image maintaing scale ratio
|
|
20
|
+
*/
|
|
21
|
+
| { inside: { width: number; height: number } }
|
|
22
|
+
| { contain:
|
|
23
|
+
| { width: number }
|
|
24
|
+
| { height: number }
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export type S3Config = {
|
|
29
|
+
region: string;
|
|
30
|
+
bucket: string;
|
|
31
|
+
accessKeyId: string;
|
|
32
|
+
secretAccessKey: string;
|
|
33
|
+
// onUploaded?: () => any;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export type LocalConfig = {
|
|
37
|
+
localFolderPath: string;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export type UploadItem = {
|
|
41
|
+
name: string;
|
|
42
|
+
content_type: string;
|
|
43
|
+
data: Buffer;
|
|
44
|
+
};
|
|
45
|
+
export type UploadedItem = {
|
|
46
|
+
/**
|
|
47
|
+
* Url that is passed to client
|
|
48
|
+
*/
|
|
49
|
+
url: string;
|
|
50
|
+
etag: string;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* S3 url of the resource
|
|
54
|
+
*/
|
|
55
|
+
s3_url?: string;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
export default class FileManager {
|
|
59
|
+
|
|
60
|
+
s3Client: S3;
|
|
61
|
+
|
|
62
|
+
config: S3Config | LocalConfig;
|
|
63
|
+
imageOptions: ImageOptions;
|
|
64
|
+
|
|
65
|
+
prostgles: Prostgles;
|
|
66
|
+
tableName: string;
|
|
67
|
+
|
|
68
|
+
private fileRoute: string;
|
|
69
|
+
|
|
70
|
+
constructor(config: FileManager["config"], imageOptions?: ImageOptions){
|
|
71
|
+
this.config = config;
|
|
72
|
+
this.imageOptions = imageOptions;
|
|
73
|
+
|
|
74
|
+
if("region" in config){
|
|
75
|
+
const { region,accessKeyId, secretAccessKey } = config;
|
|
76
|
+
this.s3Client = new S3({
|
|
77
|
+
region,
|
|
78
|
+
credentials: { accessKeyId, secretAccessKey },
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
async getMIME(
|
|
84
|
+
file: Buffer | String,
|
|
85
|
+
fileName: string,
|
|
86
|
+
allowedExtensions?: Array<ALLOWED_EXTENSION>,
|
|
87
|
+
dissallowedExtensions?: Array<ALLOWED_EXTENSION>,
|
|
88
|
+
onlyFromName = true
|
|
89
|
+
): Promise<{
|
|
90
|
+
mime: string;
|
|
91
|
+
ext: string | ALLOWED_EXTENSION;
|
|
92
|
+
fileName: string;
|
|
93
|
+
}> {
|
|
94
|
+
|
|
95
|
+
const nameParts = fileName.split(".");
|
|
96
|
+
|
|
97
|
+
const nameExt = nameParts[nameParts.length - 1].toLowerCase(),
|
|
98
|
+
mime = Object.keys(CONTENT_TYPE_TO_EXT).find(k => CONTENT_TYPE_TO_EXT[k].includes(nameExt));
|
|
99
|
+
|
|
100
|
+
let type = {
|
|
101
|
+
fileName,
|
|
102
|
+
mime,
|
|
103
|
+
ext: nameExt,
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
if(onlyFromName && !mime) throw `Invalid file extension: content_type could not be found for extension(${nameExt})`;
|
|
107
|
+
|
|
108
|
+
if(!mime){
|
|
109
|
+
/* Set correct/missing extension */
|
|
110
|
+
if(["xml", "txt", "csv", "tsv", "doc"].includes(nameExt)){
|
|
111
|
+
type = { ...type, mime: "text/" + nameExt, ext: nameExt };
|
|
112
|
+
} else if(["svg"].includes(nameExt)){
|
|
113
|
+
type = { ...type, mime: "image/svg+xml", ext: nameExt };
|
|
114
|
+
} else if(Buffer.isBuffer(file)){
|
|
115
|
+
const res = await FileType.fromBuffer(file);
|
|
116
|
+
type = {
|
|
117
|
+
...res,
|
|
118
|
+
fileName,
|
|
119
|
+
}
|
|
120
|
+
} else if(typeof file === "string"){
|
|
121
|
+
const res = await FileType.fromFile(file);
|
|
122
|
+
type = {
|
|
123
|
+
...res,
|
|
124
|
+
fileName,
|
|
125
|
+
}
|
|
126
|
+
} else {
|
|
127
|
+
throw "Unexpected file. Expecting: Buffer | String";
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
if(
|
|
132
|
+
allowedExtensions &&
|
|
133
|
+
!allowedExtensions.map(v => v.toLowerCase())?.includes(type.ext)
|
|
134
|
+
){
|
|
135
|
+
throw fileName + " -> File type ( " + type.ext + " ) not allowed. Expecting one of: " + allowedExtensions.map(v => v.toLowerCase()).join(", ");
|
|
136
|
+
|
|
137
|
+
} else if(
|
|
138
|
+
dissallowedExtensions &&
|
|
139
|
+
dissallowedExtensions.map(v => v.toLowerCase())?.includes(type.ext)
|
|
140
|
+
){
|
|
141
|
+
throw fileName + " -> File type ( " + type.ext + " ) not allowed";
|
|
142
|
+
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
if(!onlyFromName){
|
|
146
|
+
let { ext } = type;
|
|
147
|
+
if(nameExt !== ext) fileName = nameParts.slice(0, -1).join('') + "." + ext;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
return {
|
|
151
|
+
...type,
|
|
152
|
+
fileName
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// async getUploadURL(fileName: string): Promise<string> {
|
|
157
|
+
// const thisHour = new Date();
|
|
158
|
+
// thisHour.setMilliseconds(0);
|
|
159
|
+
// thisHour.setSeconds(0);
|
|
160
|
+
// thisHour.setMinutes(0);
|
|
161
|
+
// const now = Date.now();
|
|
162
|
+
// const HOUR = 60 * 60;
|
|
163
|
+
// const params = {
|
|
164
|
+
// Bucket: this.config.bucket,
|
|
165
|
+
// Key: fileName,
|
|
166
|
+
// Expires: Math.round(((now - (+thisHour))/1000 + 2 * HOUR )), // one hour
|
|
167
|
+
// ACL: "bucket-owner-full-control",
|
|
168
|
+
// ContentType: "image/png",
|
|
169
|
+
// };
|
|
170
|
+
// return await this.s3Client.getSignedUrlPromise("putObject", params)
|
|
171
|
+
// }
|
|
172
|
+
|
|
173
|
+
private async upload(
|
|
174
|
+
file: Buffer | String,
|
|
175
|
+
name: string,
|
|
176
|
+
mime: string
|
|
177
|
+
): Promise<UploadedItem> {
|
|
178
|
+
|
|
179
|
+
return new Promise(async (resolve, reject) => {
|
|
180
|
+
if(!file){
|
|
181
|
+
throw "No file. Expecting: Buffer | String";
|
|
182
|
+
}
|
|
183
|
+
if(!name){
|
|
184
|
+
throw "No name. Expecting: String";
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
// let type = await this.getMIME(file, name, allowedExtensions);
|
|
188
|
+
const url = `${this.fileRoute}/${name}`;
|
|
189
|
+
if(!this.s3Client){
|
|
190
|
+
const config = this.config as LocalConfig;
|
|
191
|
+
try {
|
|
192
|
+
await fs.promises.mkdir(config.localFolderPath, { recursive: true });
|
|
193
|
+
|
|
194
|
+
fs.writeFileSync(`${config.localFolderPath}/${name}`, file as any);
|
|
195
|
+
resolve({
|
|
196
|
+
url,
|
|
197
|
+
etag: `none`,
|
|
198
|
+
})
|
|
199
|
+
} catch(err){
|
|
200
|
+
console.error("Error saving file locally", err);
|
|
201
|
+
reject("Internal error")
|
|
202
|
+
}
|
|
203
|
+
} else {
|
|
204
|
+
|
|
205
|
+
/* S3 Upload */
|
|
206
|
+
// ACL: "public-read",
|
|
207
|
+
/* ACL needs this permission:
|
|
208
|
+
"s3:PutObject",
|
|
209
|
+
"s3:PutObjectAcl",
|
|
210
|
+
"s3:GetObject",
|
|
211
|
+
"s3:GetObjectAcl",
|
|
212
|
+
*/
|
|
213
|
+
const params = {
|
|
214
|
+
Bucket: (this.config as S3Config).bucket,
|
|
215
|
+
Key: name,
|
|
216
|
+
ContentType: mime,
|
|
217
|
+
Body: file
|
|
218
|
+
};
|
|
219
|
+
this.s3Client.upload(params, (err, res: ManagedUpload.SendData) => {
|
|
220
|
+
|
|
221
|
+
if(err){
|
|
222
|
+
reject("Something went wrong");
|
|
223
|
+
console.error(err)
|
|
224
|
+
} else {
|
|
225
|
+
// console.log("Uploaded file:", res)
|
|
226
|
+
resolve({
|
|
227
|
+
url,
|
|
228
|
+
etag: res.ETag,
|
|
229
|
+
s3_url: res.Location,
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
uploadAsMedia = async (params: {
|
|
239
|
+
item: UploadItem;
|
|
240
|
+
allowedExtensions?: Array<ALLOWED_EXTENSION>;
|
|
241
|
+
dissallowedExtensions?: Array<ALLOWED_EXTENSION>;
|
|
242
|
+
imageOptions?: ImageOptions;
|
|
243
|
+
}): Promise<UploadedItem> => {
|
|
244
|
+
const { item, imageOptions } = params;
|
|
245
|
+
const { name, data, content_type } = item;
|
|
246
|
+
if(!data) throw "No file provided";
|
|
247
|
+
if(!name || typeof name !== "string") throw "Expecting a string name";
|
|
248
|
+
|
|
249
|
+
// const type = await this.getMIME(data, name, allowedExtensions, dissallowedExtensions);
|
|
250
|
+
|
|
251
|
+
let _data = data;
|
|
252
|
+
|
|
253
|
+
if(content_type.startsWith("image")){
|
|
254
|
+
|
|
255
|
+
const compression = imageOptions?.compression
|
|
256
|
+
if(compression){
|
|
257
|
+
console.log("Resizing image")
|
|
258
|
+
let opts;
|
|
259
|
+
if("contain" in compression){
|
|
260
|
+
opts = {
|
|
261
|
+
fit: sharp.fit.contain,
|
|
262
|
+
...compression.contain
|
|
263
|
+
}
|
|
264
|
+
} else if("inside" in compression){
|
|
265
|
+
opts = {
|
|
266
|
+
fit: sharp.fit.inside,
|
|
267
|
+
...compression.inside
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
_data = await sharp(data)
|
|
271
|
+
.resize(opts)
|
|
272
|
+
.withMetadata(Boolean(imageOptions.keepMetadata))
|
|
273
|
+
// .jpeg({ quality: 80 })
|
|
274
|
+
.toBuffer()
|
|
275
|
+
} else if(!imageOptions?.keepMetadata) {
|
|
276
|
+
/**
|
|
277
|
+
* Remove exif
|
|
278
|
+
*/
|
|
279
|
+
_data = await sharp(data)
|
|
280
|
+
.clone()
|
|
281
|
+
.toBuffer()
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
const res = await this.upload(_data, name, content_type);
|
|
286
|
+
|
|
287
|
+
return res
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
private async getFileURL(fileName: string, expiresInSeconds: number = 30 * 60){
|
|
291
|
+
const params = {
|
|
292
|
+
Bucket: (this.config as S3Config).bucket,
|
|
293
|
+
Key: fileName,
|
|
294
|
+
Expires: expiresInSeconds || 30 * 60
|
|
295
|
+
};
|
|
296
|
+
return await this.s3Client.getSignedUrlPromise("getObject", params);
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
private parseSQLIdentifier = async (name: string ) => this.prostgles.dbo.sql<"value">("select format('%I', $1)", [name], { returnType: "value" } )
|
|
300
|
+
|
|
301
|
+
init = async (prg: Prostgles) => {
|
|
302
|
+
this.prostgles = prg;
|
|
303
|
+
const { dbo, db, opts } = prg;
|
|
304
|
+
const { fileTable } = opts;
|
|
305
|
+
const { tableName = "media", referencedTables = {} } = fileTable;
|
|
306
|
+
this.tableName = tableName;
|
|
307
|
+
|
|
308
|
+
const maxBfSizeMB = prg.opts.io?.engine?.opts?.maxHttpBufferSize/1e6;
|
|
309
|
+
console.log(`Prostgles: Initiated file manager. Max allowed file size: ${maxBfSizeMB}MB (maxHttpBufferSize = 1e6). To increase this set maxHttpBufferSize in socket.io server init options`);
|
|
310
|
+
|
|
311
|
+
// throw "Why are constraints dissapearing?"
|
|
312
|
+
/**
|
|
313
|
+
* 1. Create media table
|
|
314
|
+
*/
|
|
315
|
+
if(!dbo[tableName]){
|
|
316
|
+
console.log(`Creating fileTable ${asName(tableName)} ...`);
|
|
317
|
+
await db.any(`CREATE EXTENSION IF NOT EXISTS pgcrypto `);
|
|
318
|
+
await db.any(`CREATE TABLE IF NOT EXISTS ${asName(tableName)} (
|
|
319
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
320
|
+
name TEXT NOT NULL,
|
|
321
|
+
extension TEXT NOT NULL,
|
|
322
|
+
content_type TEXT NOT NULL,
|
|
323
|
+
url TEXT NOT NULL,
|
|
324
|
+
original_name TEXT NOT NULL,
|
|
325
|
+
|
|
326
|
+
description TEXT,
|
|
327
|
+
s3_url TEXT,
|
|
328
|
+
signed_url TEXT,
|
|
329
|
+
signed_url_expires BIGINT,
|
|
330
|
+
etag TEXT,
|
|
331
|
+
UNIQUE(name)
|
|
332
|
+
)`);
|
|
333
|
+
console.log(`Created fileTable ${asName(tableName)}`);
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
/**
|
|
337
|
+
* 2. Create media lookup tables
|
|
338
|
+
*/
|
|
339
|
+
await Promise.all(Object.keys(referencedTables).map(async refTable => {
|
|
340
|
+
if(!dbo[refTable]) throw `Referenced table (${refTable}) from fileTable.referencedTables record is missing`;
|
|
341
|
+
// const lookupTableName = asName(`lookup_${tableName}_${refTable}`);
|
|
342
|
+
|
|
343
|
+
const lookupTableName = await this.parseSQLIdentifier(`prostgles_lookup_${tableName}_${refTable}`);
|
|
344
|
+
const pKeyFields = (await (dbo[refTable] as unknown as TableHandler).getColumns()).filter(f => f.is_pkey);
|
|
345
|
+
|
|
346
|
+
if(pKeyFields.length !== 1) throw `Could not make link table for ${refTable}. ${pKeyFields} must have exactly one primary key column. Current pkeys: ${pKeyFields.map(f => f.name)}`;
|
|
347
|
+
|
|
348
|
+
const pkField = pKeyFields[0];
|
|
349
|
+
const refType = referencedTables[refTable];
|
|
350
|
+
|
|
351
|
+
if(!dbo[lookupTableName]){
|
|
352
|
+
// if(!(await dbo[lookupTableName].count())) await db.any(`DROP TABLE IF EXISTS ${lookupTableName};`);
|
|
353
|
+
const action = ` (${tableName} <-> ${refTable}) join table ${lookupTableName}`; // PRIMARY KEY
|
|
354
|
+
const query = `
|
|
355
|
+
CREATE TABLE ${lookupTableName} (
|
|
356
|
+
foreign_id ${pkField.udt_name} ${refType === "one"? " PRIMARY KEY " : ""} REFERENCES ${asName(refTable)}(${asName(pkField.name)}),
|
|
357
|
+
media_id UUID NOT NULL REFERENCES ${asName(tableName)}(id)
|
|
358
|
+
)
|
|
359
|
+
`
|
|
360
|
+
// console.log(`Creating ${action} ...`, lookupTableName);
|
|
361
|
+
await db.any(query);
|
|
362
|
+
console.log(`Created ${action}`);
|
|
363
|
+
|
|
364
|
+
} else {
|
|
365
|
+
const cols = await dbo[lookupTableName].getColumns();
|
|
366
|
+
const badCols = cols.filter(c => !c.references);
|
|
367
|
+
await Promise.all(badCols.map(async badCol => {
|
|
368
|
+
console.error(
|
|
369
|
+
`Prostgles: media ${lookupTableName} joining table has lost a reference constraint for column ${badCol.name}.` +
|
|
370
|
+
` This may have been caused by a DROP TABLE ... CASCADE.`
|
|
371
|
+
);
|
|
372
|
+
let q = `
|
|
373
|
+
ALTER TABLE ${asName(lookupTableName)}
|
|
374
|
+
ADD CONSTRAINT ${(lookupTableName + "_" + badCol.name + "_r")} FOREIGN KEY (${badCol.name})
|
|
375
|
+
`;
|
|
376
|
+
console.log("Trying to add the missing constraint back");
|
|
377
|
+
if(badCol.name === "foreign_id"){
|
|
378
|
+
q += `REFERENCES ${asName(refTable)}(${asName(pkField.name)}) `;
|
|
379
|
+
} else if(badCol.name === "media_id"){
|
|
380
|
+
q += `REFERENCES ${asName(tableName)}(id) `;
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
if(q){
|
|
384
|
+
|
|
385
|
+
try {
|
|
386
|
+
await db.any(q)
|
|
387
|
+
console.log("Added missing constraint back");
|
|
388
|
+
|
|
389
|
+
} catch(e){
|
|
390
|
+
console.error("Failed to add missing constraint", e)
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
}));
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
return true;
|
|
398
|
+
}));
|
|
399
|
+
|
|
400
|
+
/**
|
|
401
|
+
* 4. Serve media through express
|
|
402
|
+
*/
|
|
403
|
+
const {
|
|
404
|
+
fileUrlPath = `/${tableName}`,
|
|
405
|
+
expressApp: app
|
|
406
|
+
} = fileTable;
|
|
407
|
+
|
|
408
|
+
this.fileRoute = fileUrlPath;
|
|
409
|
+
|
|
410
|
+
if(app){
|
|
411
|
+
app.get(fileUrlPath + "/:name", async (req, res) => {
|
|
412
|
+
if(!dbo[tableName]){
|
|
413
|
+
res.status(500).json({ err: "Internal error: media table not valid" });
|
|
414
|
+
return false;
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
const mediaTable = dbo[tableName] as unknown as TableHandler;
|
|
418
|
+
|
|
419
|
+
try {
|
|
420
|
+
|
|
421
|
+
const { name } = req.params;
|
|
422
|
+
if(typeof name !== "string") throw "Invalid media name";
|
|
423
|
+
|
|
424
|
+
const media = await mediaTable.findOne({ name }, { select: { id: 1, name: 1, signed_url: 1, signed_url_expires: 1, content_type: 1 } }, { httpReq: req });
|
|
425
|
+
|
|
426
|
+
if(!media) throw "Invalid media";
|
|
427
|
+
|
|
428
|
+
if(this.s3Client){
|
|
429
|
+
let url = media.signed_url;
|
|
430
|
+
const expires = +(media.signed_url_expires || 0);
|
|
431
|
+
|
|
432
|
+
const EXPIRES = Date.now() + HOUR;
|
|
433
|
+
if(!url || expires < EXPIRES){
|
|
434
|
+
url = await this.getFileURL(media.name, 60 * 60);
|
|
435
|
+
await mediaTable.update({ name }, { signed_url: url, signed_url_expires: EXPIRES });
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
res.redirect(url);
|
|
439
|
+
|
|
440
|
+
} else {
|
|
441
|
+
const pth = `${(this.config as LocalConfig).localFolderPath}/${media.name}`;
|
|
442
|
+
|
|
443
|
+
res.contentType(media.content_type);
|
|
444
|
+
res.sendFile(pth);
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
} catch(e){
|
|
448
|
+
console.log(e)
|
|
449
|
+
res.status(404).json({ err: "Invalid media" });
|
|
450
|
+
}
|
|
451
|
+
});
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
const CONTENT_TYPE_TO_EXT = {
|
|
457
|
+
"text/html": ["html", "htm", "shtml"],
|
|
458
|
+
"text/css": ["css"],
|
|
459
|
+
"text/xml": ["xml"],
|
|
460
|
+
"image/gif": ["gif"],
|
|
461
|
+
"image/jpeg": ["jpeg", "jpg"],
|
|
462
|
+
"application/x-javascript": ["js"],
|
|
463
|
+
"application/atom+xml": ["atom"],
|
|
464
|
+
"application/rss+xml": ["rss"],
|
|
465
|
+
"text/mathml": ["mml"],
|
|
466
|
+
"text/plain": ["txt"],
|
|
467
|
+
"text/vnd.sun.j2me.app-descriptor": ["jad"],
|
|
468
|
+
"text/vnd.wap.wml": ["wml"],
|
|
469
|
+
"text/x-component": ["htc"],
|
|
470
|
+
"image/png": ["png"],
|
|
471
|
+
"image/tiff": ["tif", "tiff"],
|
|
472
|
+
"image/vnd.wap.wbmp": ["wbmp"],
|
|
473
|
+
"image/x-icon": ["ico"],
|
|
474
|
+
"image/x-jng": ["jng"],
|
|
475
|
+
"image/x-ms-bmp": ["bmp"],
|
|
476
|
+
"image/svg+xml": ["svg"],
|
|
477
|
+
"image/webp": ["webp"],
|
|
478
|
+
"application/java-archive": ["jar", "war", "ear"],
|
|
479
|
+
"application/mac-binhex40": ["hqx"],
|
|
480
|
+
"application/msword": ["doc"],
|
|
481
|
+
"application/pdf": ["pdf"],
|
|
482
|
+
"application/postscript": ["ps", "eps", "ai"],
|
|
483
|
+
"application/rtf": ["rtf"],
|
|
484
|
+
"application/vnd.ms-excel": ["xls"],
|
|
485
|
+
"application/vnd.ms-powerpoint": ["ppt"],
|
|
486
|
+
"application/vnd.wap.wmlc": ["wmlc"],
|
|
487
|
+
"application/vnd.google-earth.kml+xml": ["kml"],
|
|
488
|
+
"application/vnd.google-earth.kmz": ["kmz"],
|
|
489
|
+
"application/x-7z-compressed": ["7z"],
|
|
490
|
+
"application/x-cocoa": ["cco"],
|
|
491
|
+
"application/x-java-archive-diff": ["jardiff"],
|
|
492
|
+
"application/x-java-jnlp-file": ["jnlp"],
|
|
493
|
+
"application/x-makeself": ["run"],
|
|
494
|
+
"application/x-perl": ["pl", "pm"],
|
|
495
|
+
"application/x-pilot": ["prc", "pdb"],
|
|
496
|
+
"application/x-rar-compressed": ["rar"],
|
|
497
|
+
"application/x-redhat-package-manager": ["rpm"],
|
|
498
|
+
"application/x-sea": ["sea"],
|
|
499
|
+
"application/x-shockwave-flash": ["swf"],
|
|
500
|
+
"application/x-stuffit": ["sit"],
|
|
501
|
+
"application/x-tcl": ["tcl", "tk"],
|
|
502
|
+
"application/x-x509-ca-cert": ["der", "pem", "crt"],
|
|
503
|
+
"application/x-xpinstall": ["xpi"],
|
|
504
|
+
"application/xhtml+xml": ["xhtml"],
|
|
505
|
+
"application/zip": ["zip"],
|
|
506
|
+
"application/octet-stream": ["bin", "exe", "dll", "deb", "dmg", "eot", "iso", "img", "msi", "msp", "msm"],
|
|
507
|
+
"audio/midi": ["mid", "midi", "kar"],
|
|
508
|
+
"audio/mpeg": ["mp3"],
|
|
509
|
+
"audio/ogg": ["ogg"],
|
|
510
|
+
"audio/x-realaudio": ["ra"],
|
|
511
|
+
"video/3gpp": ["3gpp", "3gp"],
|
|
512
|
+
"video/mpeg": ["mpeg", "mpg"],
|
|
513
|
+
"video/quicktime": ["mov"],
|
|
514
|
+
"video/x-flv": ["flv"],
|
|
515
|
+
"video/x-mng": ["mng"],
|
|
516
|
+
"video/x-ms-asf": ["asx", "asf"],
|
|
517
|
+
"video/x-ms-wmv": ["wmv"],
|
|
518
|
+
"video/x-msvideo": ["avi"],
|
|
519
|
+
"video/mp4": ["m4v", "mp4"],
|
|
520
|
+
} as const;
|
|
521
|
+
|
|
522
|
+
export type ALLOWED_CONTENT_TYPE = keyof typeof CONTENT_TYPE_TO_EXT;
|
|
523
|
+
export type ALLOWED_EXTENSION = (typeof CONTENT_TYPE_TO_EXT)[ALLOWED_CONTENT_TYPE][number];
|
|
524
|
+
|
|
525
|
+
|
|
526
|
+
|
|
527
|
+
/**
|
|
528
|
+
*
|
|
529
|
+
|
|
530
|
+
|
|
531
|
+
// if(content_type && typeof content_type !== "string") throw "Invalid content_type provided";
|
|
532
|
+
// if(title && typeof title !== "string") throw "Invalid title provided";
|
|
533
|
+
// let fExt = name.split(".").pop()
|
|
534
|
+
// if(content_type && name.split(".").length > 1 && fExt && fExt.length <= 4){
|
|
535
|
+
// type = {
|
|
536
|
+
// mime: content_type,
|
|
537
|
+
// ext: fExt,
|
|
538
|
+
// fileName: name,
|
|
539
|
+
// }
|
|
540
|
+
// } else {
|
|
541
|
+
// type = await this.getMIME(data, name);//, ["png", "jpg", "ogg", "webm", "pdf", "doc"]);
|
|
542
|
+
// }
|
|
543
|
+
|
|
544
|
+
|
|
545
|
+
|
|
546
|
+
*/
|