@ug.software/opposer 3.0.10
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/README.md +504 -0
- package/lib/bin/commands/build.js +75 -0
- package/lib/bin/commands/generate/api-key.js +28 -0
- package/lib/bin/commands/generate/jwt-key.js +46 -0
- package/lib/bin/commands/init.js +169 -0
- package/lib/bin/helpers/crypto.js +33 -0
- package/lib/bin/opposer.js +26 -0
- package/lib/cjs/examples/full-app/index.d.ts +1 -0
- package/lib/cjs/examples/full-app/index.js +102 -0
- package/lib/cjs/examples/full-app/models/author.d.ts +7 -0
- package/lib/cjs/examples/full-app/models/author.js +42 -0
- package/lib/cjs/examples/full-app/models/book.d.ts +9 -0
- package/lib/cjs/examples/full-app/models/book.js +51 -0
- package/lib/cjs/examples/full-app/models/category.d.ts +4 -0
- package/lib/cjs/examples/full-app/models/category.js +26 -0
- package/lib/cjs/examples/full-app/schedules/catalog-refresh.d.ts +28 -0
- package/lib/cjs/examples/full-app/schedules/catalog-refresh.js +149 -0
- package/lib/cjs/examples/full-app/schedules/inventory-sync.d.ts +12 -0
- package/lib/cjs/examples/full-app/schedules/inventory-sync.js +61 -0
- package/lib/cjs/examples/full-app/schedules/library-alerts.d.ts +11 -0
- package/lib/cjs/examples/full-app/schedules/library-alerts.js +55 -0
- package/lib/cjs/examples/minimal/src/handlers/book.d.ts +11 -0
- package/lib/cjs/examples/minimal/src/handlers/book.js +51 -0
- package/lib/cjs/examples/minimal/src/index.d.ts +1 -0
- package/lib/cjs/examples/minimal/src/index.js +14 -0
- package/lib/cjs/examples/minimal/src/models/books.d.ts +4 -0
- package/lib/cjs/examples/minimal/src/models/books.js +26 -0
- package/lib/cjs/examples/orm/models/permission.d.ts +6 -0
- package/lib/cjs/examples/orm/models/permission.js +38 -0
- package/lib/cjs/examples/orm/models/profile.d.ts +7 -0
- package/lib/cjs/examples/orm/models/profile.js +42 -0
- package/lib/cjs/examples/orm/models/user.d.ts +11 -0
- package/lib/cjs/examples/orm/models/user.js +70 -0
- package/lib/cjs/examples/orm/mysql/index.d.ts +1 -0
- package/lib/cjs/examples/orm/mysql/index.js +44 -0
- package/lib/cjs/examples/orm/postgres/index.d.ts +1 -0
- package/lib/cjs/examples/orm/postgres/index.js +40 -0
- package/lib/cjs/examples/orm/sqlite/index.d.ts +1 -0
- package/lib/cjs/examples/orm/sqlite/index.js +41 -0
- package/lib/cjs/index.d.ts +2 -0
- package/lib/cjs/index.js +23 -0
- package/lib/cjs/interfaces/controller.d.ts +109 -0
- package/lib/cjs/interfaces/controller.js +2 -0
- package/lib/cjs/interfaces/field.d.ts +23 -0
- package/lib/cjs/interfaces/field.js +2 -0
- package/lib/cjs/interfaces/handler.d.ts +18 -0
- package/lib/cjs/interfaces/handler.js +2 -0
- package/lib/cjs/interfaces/jwt.d.ts +21 -0
- package/lib/cjs/interfaces/jwt.js +2 -0
- package/lib/cjs/interfaces/model.d.ts +9 -0
- package/lib/cjs/interfaces/model.js +2 -0
- package/lib/cjs/interfaces/request.d.ts +13 -0
- package/lib/cjs/interfaces/request.js +2 -0
- package/lib/cjs/interfaces/schema.d.ts +9 -0
- package/lib/cjs/interfaces/schema.js +2 -0
- package/lib/cjs/interfaces/security.d.ts +32 -0
- package/lib/cjs/interfaces/security.js +2 -0
- package/lib/cjs/interfaces/server.d.ts +37 -0
- package/lib/cjs/interfaces/server.js +2 -0
- package/lib/cjs/interfaces/system.d.ts +41 -0
- package/lib/cjs/interfaces/system.js +2 -0
- package/lib/cjs/orm/decorators/index.d.ts +33 -0
- package/lib/cjs/orm/decorators/index.js +131 -0
- package/lib/cjs/orm/driver/mysql.d.ts +14 -0
- package/lib/cjs/orm/driver/mysql.js +103 -0
- package/lib/cjs/orm/driver/postgres.d.ts +14 -0
- package/lib/cjs/orm/driver/postgres.js +105 -0
- package/lib/cjs/orm/driver/sqlite.d.ts +14 -0
- package/lib/cjs/orm/driver/sqlite.js +143 -0
- package/lib/cjs/orm/index.d.ts +8 -0
- package/lib/cjs/orm/index.js +28 -0
- package/lib/cjs/orm/metadata.d.ts +47 -0
- package/lib/cjs/orm/metadata.js +47 -0
- package/lib/cjs/orm/opposer.d.ts +30 -0
- package/lib/cjs/orm/opposer.js +33 -0
- package/lib/cjs/orm/query-builder.d.ts +32 -0
- package/lib/cjs/orm/query-builder.js +278 -0
- package/lib/cjs/orm/repository.d.ts +54 -0
- package/lib/cjs/orm/repository.js +325 -0
- package/lib/cjs/orm/validation.d.ts +44 -0
- package/lib/cjs/orm/validation.js +128 -0
- package/lib/cjs/package.json +3 -0
- package/lib/cjs/persistent/cache/core-context.d.ts +17 -0
- package/lib/cjs/persistent/cache/core-context.js +39 -0
- package/lib/cjs/persistent/cache/global.d.ts +18 -0
- package/lib/cjs/persistent/cache/global.js +22 -0
- package/lib/cjs/persistent/cache/index.d.ts +3 -0
- package/lib/cjs/persistent/cache/index.js +12 -0
- package/lib/cjs/persistent/cache/session.d.ts +19 -0
- package/lib/cjs/persistent/cache/session.js +39 -0
- package/lib/cjs/persistent/cache/storage.d.ts +14 -0
- package/lib/cjs/persistent/cache/storage.js +88 -0
- package/lib/cjs/persistent/cache/store.d.ts +16 -0
- package/lib/cjs/persistent/cache/store.js +112 -0
- package/lib/cjs/persistent/context/index.d.ts +3 -0
- package/lib/cjs/persistent/context/index.js +5 -0
- package/lib/cjs/persistent/decorators/global.d.ts +1 -0
- package/lib/cjs/persistent/decorators/global.js +25 -0
- package/lib/cjs/persistent/decorators/session.d.ts +1 -0
- package/lib/cjs/persistent/decorators/session.js +27 -0
- package/lib/cjs/persistent/index.d.ts +6 -0
- package/lib/cjs/persistent/index.js +18 -0
- package/lib/cjs/persistent/interfaces/context.d.ts +5 -0
- package/lib/cjs/persistent/interfaces/context.js +2 -0
- package/lib/cjs/persistent/interfaces/system.d.ts +47 -0
- package/lib/cjs/persistent/interfaces/system.js +29 -0
- package/lib/cjs/persistent/system/index.d.ts +7 -0
- package/lib/cjs/persistent/system/index.js +44 -0
- package/lib/cjs/persistent/utils/memory.d.ts +8 -0
- package/lib/cjs/persistent/utils/memory.js +44 -0
- package/lib/cjs/persistent/utils/timer.d.ts +14 -0
- package/lib/cjs/persistent/utils/timer.js +21 -0
- package/lib/cjs/playground/build/client/assets/AddRounded-ByHfnsiW.js +4 -0
- package/lib/cjs/playground/build/client/assets/Button-DLrxHRm7.js +1 -0
- package/lib/cjs/playground/build/client/assets/Container-CgITmmbk.js +1 -0
- package/lib/cjs/playground/build/client/assets/Divider-B_Wx9srO.js +1 -0
- package/lib/cjs/playground/build/client/assets/List-juBjUmfP.js +1 -0
- package/lib/cjs/playground/build/client/assets/ListItemText-DgWZmgzc.js +1 -0
- package/lib/cjs/playground/build/client/assets/MenuItem-D_5SuVKQ.js +1 -0
- package/lib/cjs/playground/build/client/assets/Modal-BwXR_5Bh.js +1 -0
- package/lib/cjs/playground/build/client/assets/TableRow-B9hAmlnV.js +2 -0
- package/lib/cjs/playground/build/client/assets/TextField-UybdTIGB.js +3 -0
- package/lib/cjs/playground/build/client/assets/Tooltip-BGcUWUcF.js +1 -0
- package/lib/cjs/playground/build/client/assets/auth-CD1rXHzz.js +1 -0
- package/lib/cjs/playground/build/client/assets/auth-GyTIVKy5.js +1 -0
- package/lib/cjs/playground/build/client/assets/confirm-Dr0pbiV6.js +1 -0
- package/lib/cjs/playground/build/client/assets/dividerClasses-CIiqeEPO.js +1 -0
- package/lib/cjs/playground/build/client/assets/entry.client-D6FYz1yh.js +13 -0
- package/lib/cjs/playground/build/client/assets/index-CJ0wdt6Z.js +1 -0
- package/lib/cjs/playground/build/client/assets/index-CQc11yq_.js +1153 -0
- package/lib/cjs/playground/build/client/assets/index-Cr4I-4J2.js +1 -0
- package/lib/cjs/playground/build/client/assets/index-CtPqstFl.js +26 -0
- package/lib/cjs/playground/build/client/assets/index-Ct_NE85o.js +1 -0
- package/lib/cjs/playground/build/client/assets/index-D0I6xwmb.js +1 -0
- package/lib/cjs/playground/build/client/assets/index-DmDCpKb3.js +1 -0
- package/lib/cjs/playground/build/client/assets/index-DsSkAwyn.js +1 -0
- package/lib/cjs/playground/build/client/assets/index-_DMgWZ3Y.js +1 -0
- package/lib/cjs/playground/build/client/assets/listItemIconClasses-39Itzgzt.js +1 -0
- package/lib/cjs/playground/build/client/assets/listItemTextClasses-EQFLPLzt.js +1 -0
- package/lib/cjs/playground/build/client/assets/manifest-c06e9a7f.js +1 -0
- package/lib/cjs/playground/build/client/assets/mergeSlotProps-DptgQgAT.js +1 -0
- package/lib/cjs/playground/build/client/assets/playground-Hl52p9f5.js +108 -0
- package/lib/cjs/playground/build/client/assets/root-CQTBmuv8.js +1 -0
- package/lib/cjs/playground/build/client/assets/toast-CsAH5FIf.js +1 -0
- package/lib/cjs/playground/build/client/assets/use-request-BZNkzlTr.js +1 -0
- package/lib/cjs/playground/build/client/favicon.ico +0 -0
- package/lib/cjs/playground/build/client/index.html +6 -0
- package/lib/cjs/playground/index.d.ts +2 -0
- package/lib/cjs/playground/index.js +135 -0
- package/lib/cjs/scheduler/controllers/index.d.ts +19 -0
- package/lib/cjs/scheduler/controllers/index.js +62 -0
- package/lib/cjs/scheduler/decorators/index.d.ts +9 -0
- package/lib/cjs/scheduler/decorators/index.js +21 -0
- package/lib/cjs/scheduler/handlers/index.d.ts +19 -0
- package/lib/cjs/scheduler/handlers/index.js +62 -0
- package/lib/cjs/scheduler/index.d.ts +24 -0
- package/lib/cjs/scheduler/index.js +110 -0
- package/lib/cjs/scheduler/models/history.d.ts +10 -0
- package/lib/cjs/scheduler/models/history.js +50 -0
- package/lib/cjs/server/constants/index.d.ts +78 -0
- package/lib/cjs/server/constants/index.js +372 -0
- package/lib/cjs/server/context/index.d.ts +17 -0
- package/lib/cjs/server/context/index.js +33 -0
- package/lib/cjs/server/controller/index.d.ts +3 -0
- package/lib/cjs/server/controller/index.js +217 -0
- package/lib/cjs/server/controllers/index.d.ts +5 -0
- package/lib/cjs/server/controllers/index.js +72 -0
- package/lib/cjs/server/core/index.d.ts +16 -0
- package/lib/cjs/server/core/index.js +110 -0
- package/lib/cjs/server/core/middleware/body-parser.d.ts +2 -0
- package/lib/cjs/server/core/middleware/body-parser.js +27 -0
- package/lib/cjs/server/core/middleware/cors.d.ts +4 -0
- package/lib/cjs/server/core/middleware/cors.js +32 -0
- package/lib/cjs/server/core/middleware/logger.d.ts +2 -0
- package/lib/cjs/server/core/middleware/logger.js +15 -0
- package/lib/cjs/server/decorators/controller.d.ts +3 -0
- package/lib/cjs/server/decorators/controller.js +14 -0
- package/lib/cjs/server/decorators/field.d.ts +2 -0
- package/lib/cjs/server/decorators/field.js +36 -0
- package/lib/cjs/server/decorators/handler.d.ts +3 -0
- package/lib/cjs/server/decorators/handler.js +14 -0
- package/lib/cjs/server/decorators/index.d.ts +7 -0
- package/lib/cjs/server/decorators/index.js +26 -0
- package/lib/cjs/server/decorators/is-public-method.d.ts +3 -0
- package/lib/cjs/server/decorators/is-public-method.js +16 -0
- package/lib/cjs/server/decorators/is-public.d.ts +3 -0
- package/lib/cjs/server/decorators/is-public.js +14 -0
- package/lib/cjs/server/decorators/method.d.ts +3 -0
- package/lib/cjs/server/decorators/method.js +16 -0
- package/lib/cjs/server/decorators/payload.d.ts +3 -0
- package/lib/cjs/server/decorators/payload.js +15 -0
- package/lib/cjs/server/handlers/index.d.ts +5 -0
- package/lib/cjs/server/handlers/index.js +72 -0
- package/lib/cjs/server/helpers/index.d.ts +17 -0
- package/lib/cjs/server/helpers/index.js +39 -0
- package/lib/cjs/server/index.d.ts +12 -0
- package/lib/cjs/server/index.js +176 -0
- package/lib/cjs/server/security/controller/auth.d.ts +76 -0
- package/lib/cjs/server/security/controller/auth.js +346 -0
- package/lib/cjs/server/security/index.d.ts +2 -0
- package/lib/cjs/server/security/index.js +10 -0
- package/lib/cjs/server/security/jwt/index.d.ts +23 -0
- package/lib/cjs/server/security/jwt/index.js +108 -0
- package/lib/cjs/server/security/middleware/autorization.d.ts +3 -0
- package/lib/cjs/server/security/middleware/autorization.js +46 -0
- package/lib/cjs/server/security/middleware/permission.d.ts +3 -0
- package/lib/cjs/server/security/middleware/permission.js +138 -0
- package/lib/cjs/server/security/models/crp.d.ts +8 -0
- package/lib/cjs/server/security/models/crp.js +42 -0
- package/lib/cjs/server/security/models/ke.d.ts +7 -0
- package/lib/cjs/server/security/models/ke.js +38 -0
- package/lib/cjs/server/security/models/rl.d.ts +9 -0
- package/lib/cjs/server/security/models/rl.js +50 -0
- package/lib/cjs/server/security/models/se.d.ts +11 -0
- package/lib/cjs/server/security/models/se.js +54 -0
- package/lib/cjs/server/security/models/usr.d.ts +14 -0
- package/lib/cjs/server/security/models/usr.js +82 -0
- package/lib/cjs/server/services/delete.d.ts +13 -0
- package/lib/cjs/server/services/delete.js +49 -0
- package/lib/cjs/server/services/get.d.ts +4 -0
- package/lib/cjs/server/services/get.js +145 -0
- package/lib/cjs/server/services/insert.d.ts +13 -0
- package/lib/cjs/server/services/insert.js +74 -0
- package/lib/cjs/server/services/update.d.ts +13 -0
- package/lib/cjs/server/services/update.js +60 -0
- package/lib/cjs/system/index.d.ts +13 -0
- package/lib/cjs/system/index.js +237 -0
- package/lib/esm/examples/full-app/index.d.ts +1 -0
- package/lib/esm/examples/full-app/index.js +64 -0
- package/lib/esm/examples/full-app/models/author.d.ts +7 -0
- package/lib/esm/examples/full-app/models/author.js +37 -0
- package/lib/esm/examples/full-app/models/book.d.ts +9 -0
- package/lib/esm/examples/full-app/models/book.js +46 -0
- package/lib/esm/examples/full-app/models/category.d.ts +4 -0
- package/lib/esm/examples/full-app/models/category.js +24 -0
- package/lib/esm/examples/full-app/schedules/catalog-refresh.d.ts +28 -0
- package/lib/esm/examples/full-app/schedules/catalog-refresh.js +143 -0
- package/lib/esm/examples/full-app/schedules/inventory-sync.d.ts +12 -0
- package/lib/esm/examples/full-app/schedules/inventory-sync.js +55 -0
- package/lib/esm/examples/full-app/schedules/library-alerts.d.ts +11 -0
- package/lib/esm/examples/full-app/schedules/library-alerts.js +52 -0
- package/lib/esm/examples/minimal/src/handlers/book.d.ts +11 -0
- package/lib/esm/examples/minimal/src/handlers/book.js +49 -0
- package/lib/esm/examples/minimal/src/index.d.ts +1 -0
- package/lib/esm/examples/minimal/src/index.js +9 -0
- package/lib/esm/examples/minimal/src/models/books.d.ts +4 -0
- package/lib/esm/examples/minimal/src/models/books.js +24 -0
- package/lib/esm/examples/orm/models/permission.d.ts +6 -0
- package/lib/esm/examples/orm/models/permission.js +33 -0
- package/lib/esm/examples/orm/models/profile.d.ts +7 -0
- package/lib/esm/examples/orm/models/profile.js +37 -0
- package/lib/esm/examples/orm/models/user.d.ts +11 -0
- package/lib/esm/examples/orm/models/user.js +65 -0
- package/lib/esm/examples/orm/mysql/index.d.ts +1 -0
- package/lib/esm/examples/orm/mysql/index.js +39 -0
- package/lib/esm/examples/orm/postgres/index.d.ts +1 -0
- package/lib/esm/examples/orm/postgres/index.js +35 -0
- package/lib/esm/examples/orm/sqlite/index.d.ts +1 -0
- package/lib/esm/examples/orm/sqlite/index.js +36 -0
- package/lib/esm/index.d.ts +2 -0
- package/lib/esm/index.js +2 -0
- package/lib/esm/interfaces/controller.d.ts +109 -0
- package/lib/esm/interfaces/controller.js +1 -0
- package/lib/esm/interfaces/field.d.ts +23 -0
- package/lib/esm/interfaces/field.js +1 -0
- package/lib/esm/interfaces/handler.d.ts +18 -0
- package/lib/esm/interfaces/handler.js +1 -0
- package/lib/esm/interfaces/jwt.d.ts +21 -0
- package/lib/esm/interfaces/jwt.js +1 -0
- package/lib/esm/interfaces/model.d.ts +9 -0
- package/lib/esm/interfaces/model.js +1 -0
- package/lib/esm/interfaces/request.d.ts +13 -0
- package/lib/esm/interfaces/request.js +1 -0
- package/lib/esm/interfaces/schema.d.ts +9 -0
- package/lib/esm/interfaces/schema.js +1 -0
- package/lib/esm/interfaces/security.d.ts +32 -0
- package/lib/esm/interfaces/security.js +1 -0
- package/lib/esm/interfaces/server.d.ts +37 -0
- package/lib/esm/interfaces/server.js +1 -0
- package/lib/esm/interfaces/system.d.ts +41 -0
- package/lib/esm/interfaces/system.js +1 -0
- package/lib/esm/orm/decorators/index.d.ts +33 -0
- package/lib/esm/orm/decorators/index.js +118 -0
- package/lib/esm/orm/driver/mysql.d.ts +14 -0
- package/lib/esm/orm/driver/mysql.js +66 -0
- package/lib/esm/orm/driver/postgres.d.ts +14 -0
- package/lib/esm/orm/driver/postgres.js +68 -0
- package/lib/esm/orm/driver/sqlite.d.ts +14 -0
- package/lib/esm/orm/driver/sqlite.js +106 -0
- package/lib/esm/orm/index.d.ts +8 -0
- package/lib/esm/orm/index.js +8 -0
- package/lib/esm/orm/metadata.d.ts +47 -0
- package/lib/esm/orm/metadata.js +43 -0
- package/lib/esm/orm/opposer.d.ts +30 -0
- package/lib/esm/orm/opposer.js +29 -0
- package/lib/esm/orm/query-builder.d.ts +32 -0
- package/lib/esm/orm/query-builder.js +274 -0
- package/lib/esm/orm/repository.d.ts +54 -0
- package/lib/esm/orm/repository.js +318 -0
- package/lib/esm/orm/validation.d.ts +44 -0
- package/lib/esm/orm/validation.js +122 -0
- package/lib/esm/persistent/cache/core-context.d.ts +17 -0
- package/lib/esm/persistent/cache/core-context.js +34 -0
- package/lib/esm/persistent/cache/global.d.ts +18 -0
- package/lib/esm/persistent/cache/global.js +17 -0
- package/lib/esm/persistent/cache/index.d.ts +3 -0
- package/lib/esm/persistent/cache/index.js +3 -0
- package/lib/esm/persistent/cache/session.d.ts +19 -0
- package/lib/esm/persistent/cache/session.js +34 -0
- package/lib/esm/persistent/cache/storage.d.ts +14 -0
- package/lib/esm/persistent/cache/storage.js +82 -0
- package/lib/esm/persistent/cache/store.d.ts +16 -0
- package/lib/esm/persistent/cache/store.js +106 -0
- package/lib/esm/persistent/context/index.d.ts +3 -0
- package/lib/esm/persistent/context/index.js +3 -0
- package/lib/esm/persistent/decorators/global.d.ts +1 -0
- package/lib/esm/persistent/decorators/global.js +19 -0
- package/lib/esm/persistent/decorators/session.d.ts +1 -0
- package/lib/esm/persistent/decorators/session.js +21 -0
- package/lib/esm/persistent/index.d.ts +6 -0
- package/lib/esm/persistent/index.js +6 -0
- package/lib/esm/persistent/interfaces/context.d.ts +5 -0
- package/lib/esm/persistent/interfaces/context.js +1 -0
- package/lib/esm/persistent/interfaces/system.d.ts +47 -0
- package/lib/esm/persistent/interfaces/system.js +26 -0
- package/lib/esm/persistent/system/index.d.ts +7 -0
- package/lib/esm/persistent/system/index.js +39 -0
- package/lib/esm/persistent/utils/memory.d.ts +8 -0
- package/lib/esm/persistent/utils/memory.js +42 -0
- package/lib/esm/persistent/utils/timer.d.ts +14 -0
- package/lib/esm/persistent/utils/timer.js +16 -0
- package/lib/esm/playground/build/client/assets/AddRounded-ByHfnsiW.js +4 -0
- package/lib/esm/playground/build/client/assets/Button-DLrxHRm7.js +1 -0
- package/lib/esm/playground/build/client/assets/Container-CgITmmbk.js +1 -0
- package/lib/esm/playground/build/client/assets/Divider-B_Wx9srO.js +1 -0
- package/lib/esm/playground/build/client/assets/List-juBjUmfP.js +1 -0
- package/lib/esm/playground/build/client/assets/ListItemText-DgWZmgzc.js +1 -0
- package/lib/esm/playground/build/client/assets/MenuItem-D_5SuVKQ.js +1 -0
- package/lib/esm/playground/build/client/assets/Modal-BwXR_5Bh.js +1 -0
- package/lib/esm/playground/build/client/assets/TableRow-B9hAmlnV.js +2 -0
- package/lib/esm/playground/build/client/assets/TextField-UybdTIGB.js +3 -0
- package/lib/esm/playground/build/client/assets/Tooltip-BGcUWUcF.js +1 -0
- package/lib/esm/playground/build/client/assets/auth-CD1rXHzz.js +1 -0
- package/lib/esm/playground/build/client/assets/auth-GyTIVKy5.js +1 -0
- package/lib/esm/playground/build/client/assets/confirm-Dr0pbiV6.js +1 -0
- package/lib/esm/playground/build/client/assets/dividerClasses-CIiqeEPO.js +1 -0
- package/lib/esm/playground/build/client/assets/entry.client-D6FYz1yh.js +13 -0
- package/lib/esm/playground/build/client/assets/index-CJ0wdt6Z.js +1 -0
- package/lib/esm/playground/build/client/assets/index-CQc11yq_.js +1153 -0
- package/lib/esm/playground/build/client/assets/index-Cr4I-4J2.js +1 -0
- package/lib/esm/playground/build/client/assets/index-CtPqstFl.js +26 -0
- package/lib/esm/playground/build/client/assets/index-Ct_NE85o.js +1 -0
- package/lib/esm/playground/build/client/assets/index-D0I6xwmb.js +1 -0
- package/lib/esm/playground/build/client/assets/index-DmDCpKb3.js +1 -0
- package/lib/esm/playground/build/client/assets/index-DsSkAwyn.js +1 -0
- package/lib/esm/playground/build/client/assets/index-_DMgWZ3Y.js +1 -0
- package/lib/esm/playground/build/client/assets/listItemIconClasses-39Itzgzt.js +1 -0
- package/lib/esm/playground/build/client/assets/listItemTextClasses-EQFLPLzt.js +1 -0
- package/lib/esm/playground/build/client/assets/manifest-c06e9a7f.js +1 -0
- package/lib/esm/playground/build/client/assets/mergeSlotProps-DptgQgAT.js +1 -0
- package/lib/esm/playground/build/client/assets/playground-Hl52p9f5.js +108 -0
- package/lib/esm/playground/build/client/assets/root-CQTBmuv8.js +1 -0
- package/lib/esm/playground/build/client/assets/toast-CsAH5FIf.js +1 -0
- package/lib/esm/playground/build/client/assets/use-request-BZNkzlTr.js +1 -0
- package/lib/esm/playground/build/client/favicon.ico +0 -0
- package/lib/esm/playground/build/client/index.html +6 -0
- package/lib/esm/playground/index.d.ts +2 -0
- package/lib/esm/playground/index.js +129 -0
- package/lib/esm/scheduler/controllers/index.d.ts +19 -0
- package/lib/esm/scheduler/controllers/index.js +57 -0
- package/lib/esm/scheduler/decorators/index.d.ts +9 -0
- package/lib/esm/scheduler/decorators/index.js +16 -0
- package/lib/esm/scheduler/handlers/index.d.ts +19 -0
- package/lib/esm/scheduler/handlers/index.js +57 -0
- package/lib/esm/scheduler/index.d.ts +24 -0
- package/lib/esm/scheduler/index.js +89 -0
- package/lib/esm/scheduler/models/history.d.ts +10 -0
- package/lib/esm/scheduler/models/history.js +48 -0
- package/lib/esm/server/constants/index.d.ts +78 -0
- package/lib/esm/server/constants/index.js +369 -0
- package/lib/esm/server/context/index.d.ts +17 -0
- package/lib/esm/server/context/index.js +31 -0
- package/lib/esm/server/controller/index.d.ts +3 -0
- package/lib/esm/server/controller/index.js +179 -0
- package/lib/esm/server/controllers/index.d.ts +5 -0
- package/lib/esm/server/controllers/index.js +31 -0
- package/lib/esm/server/core/index.d.ts +16 -0
- package/lib/esm/server/core/index.js +103 -0
- package/lib/esm/server/core/middleware/body-parser.d.ts +2 -0
- package/lib/esm/server/core/middleware/body-parser.js +24 -0
- package/lib/esm/server/core/middleware/cors.d.ts +4 -0
- package/lib/esm/server/core/middleware/cors.js +29 -0
- package/lib/esm/server/core/middleware/logger.d.ts +2 -0
- package/lib/esm/server/core/middleware/logger.js +12 -0
- package/lib/esm/server/decorators/controller.d.ts +3 -0
- package/lib/esm/server/decorators/controller.js +10 -0
- package/lib/esm/server/decorators/field.d.ts +2 -0
- package/lib/esm/server/decorators/field.js +32 -0
- package/lib/esm/server/decorators/handler.d.ts +3 -0
- package/lib/esm/server/decorators/handler.js +10 -0
- package/lib/esm/server/decorators/index.d.ts +7 -0
- package/lib/esm/server/decorators/index.js +7 -0
- package/lib/esm/server/decorators/is-public-method.d.ts +3 -0
- package/lib/esm/server/decorators/is-public-method.js +12 -0
- package/lib/esm/server/decorators/is-public.d.ts +3 -0
- package/lib/esm/server/decorators/is-public.js +10 -0
- package/lib/esm/server/decorators/method.d.ts +3 -0
- package/lib/esm/server/decorators/method.js +12 -0
- package/lib/esm/server/decorators/payload.d.ts +3 -0
- package/lib/esm/server/decorators/payload.js +11 -0
- package/lib/esm/server/handlers/index.d.ts +5 -0
- package/lib/esm/server/handlers/index.js +31 -0
- package/lib/esm/server/helpers/index.d.ts +17 -0
- package/lib/esm/server/helpers/index.js +34 -0
- package/lib/esm/server/index.d.ts +12 -0
- package/lib/esm/server/index.js +147 -0
- package/lib/esm/server/security/controller/auth.d.ts +76 -0
- package/lib/esm/server/security/controller/auth.js +341 -0
- package/lib/esm/server/security/index.d.ts +2 -0
- package/lib/esm/server/security/index.js +2 -0
- package/lib/esm/server/security/jwt/index.d.ts +23 -0
- package/lib/esm/server/security/jwt/index.js +103 -0
- package/lib/esm/server/security/middleware/autorization.d.ts +3 -0
- package/lib/esm/server/security/middleware/autorization.js +41 -0
- package/lib/esm/server/security/middleware/permission.d.ts +3 -0
- package/lib/esm/server/security/middleware/permission.js +133 -0
- package/lib/esm/server/security/models/crp.d.ts +8 -0
- package/lib/esm/server/security/models/crp.js +40 -0
- package/lib/esm/server/security/models/ke.d.ts +7 -0
- package/lib/esm/server/security/models/ke.js +36 -0
- package/lib/esm/server/security/models/rl.d.ts +9 -0
- package/lib/esm/server/security/models/rl.js +45 -0
- package/lib/esm/server/security/models/se.d.ts +11 -0
- package/lib/esm/server/security/models/se.js +52 -0
- package/lib/esm/server/security/models/usr.d.ts +14 -0
- package/lib/esm/server/security/models/usr.js +77 -0
- package/lib/esm/server/services/delete.d.ts +13 -0
- package/lib/esm/server/services/delete.js +44 -0
- package/lib/esm/server/services/get.d.ts +4 -0
- package/lib/esm/server/services/get.js +140 -0
- package/lib/esm/server/services/insert.d.ts +13 -0
- package/lib/esm/server/services/insert.js +69 -0
- package/lib/esm/server/services/update.d.ts +13 -0
- package/lib/esm/server/services/update.js +55 -0
- package/lib/esm/system/index.d.ts +13 -0
- package/lib/esm/system/index.js +197 -0
- package/package.json +95 -0
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import http from 'http';
|
|
2
|
+
import system from '../../system/index.js';
|
|
3
|
+
import Context from '../../persistent/context/index.js';
|
|
4
|
+
export class OpposerServer {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.middlewares = [];
|
|
7
|
+
this.settings = system.getSettingsFile();
|
|
8
|
+
}
|
|
9
|
+
use(middleware) {
|
|
10
|
+
this.middlewares.push(middleware);
|
|
11
|
+
return this;
|
|
12
|
+
}
|
|
13
|
+
async runMiddlewares(req, res) {
|
|
14
|
+
let index = 0;
|
|
15
|
+
const next = async () => {
|
|
16
|
+
if (index < this.middlewares.length) {
|
|
17
|
+
const middleware = this.middlewares[index++];
|
|
18
|
+
await middleware(req, res, next);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
await next();
|
|
22
|
+
}
|
|
23
|
+
async handleRequest(req, res) {
|
|
24
|
+
const extendedReq = req;
|
|
25
|
+
const extendedRes = res;
|
|
26
|
+
await Context.run({ server: this, req: extendedReq, res: extendedRes }, async () => {
|
|
27
|
+
// Inject server instance into request for easy access
|
|
28
|
+
extendedReq.server = this;
|
|
29
|
+
// Request properties
|
|
30
|
+
extendedReq.ip = req.socket.remoteAddress;
|
|
31
|
+
extendedReq.cookies = this.parseCookies(req.headers.cookie || '');
|
|
32
|
+
// Response helpers
|
|
33
|
+
extendedRes.status = (code) => {
|
|
34
|
+
extendedRes.statusCode = code;
|
|
35
|
+
return extendedRes;
|
|
36
|
+
};
|
|
37
|
+
extendedRes.json = (data) => {
|
|
38
|
+
if (!res.writableEnded) {
|
|
39
|
+
extendedRes.setHeader('Content-Type', 'application/json');
|
|
40
|
+
extendedRes.end(JSON.stringify(data));
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
extendedRes.send = (data) => {
|
|
44
|
+
if (!res.writableEnded) {
|
|
45
|
+
if (typeof data === 'object')
|
|
46
|
+
return extendedRes.json(data);
|
|
47
|
+
extendedRes.end(data);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
extendedRes.cookie = (name, value, options = {}) => {
|
|
51
|
+
let cookieStr = `${name}=${value}`;
|
|
52
|
+
if (options.httpOnly)
|
|
53
|
+
cookieStr += '; HttpOnly';
|
|
54
|
+
if (options.secure)
|
|
55
|
+
cookieStr += '; Secure';
|
|
56
|
+
if (options.path)
|
|
57
|
+
cookieStr += `; Path=${options.path}`;
|
|
58
|
+
if (options.expires)
|
|
59
|
+
cookieStr += `; Expires=${options.expires.toUTCString()}`;
|
|
60
|
+
if (options.sameSite)
|
|
61
|
+
cookieStr += `; SameSite=${options.sameSite}`;
|
|
62
|
+
const existing = res.getHeader('Set-Cookie');
|
|
63
|
+
if (!existing) {
|
|
64
|
+
res.setHeader('Set-Cookie', [cookieStr]);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
const cookies = Array.isArray(existing) ? existing : [String(existing)];
|
|
68
|
+
cookies.push(cookieStr);
|
|
69
|
+
res.setHeader('Set-Cookie', cookies);
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
extendedRes.clearCookie = (name, options = {}) => {
|
|
73
|
+
extendedRes.cookie(name, '', { ...options, expires: new Date(0) });
|
|
74
|
+
};
|
|
75
|
+
try {
|
|
76
|
+
await this.runMiddlewares(extendedReq, extendedRes);
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
console.error('[core] Server error:', error);
|
|
80
|
+
if (!res.writableEnded) {
|
|
81
|
+
extendedRes.status(500).json({ message: error.message || 'Internal Server Error' });
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
parseCookies(cookieHeader) {
|
|
87
|
+
const cookies = {};
|
|
88
|
+
cookieHeader.split(';').forEach((cookie) => {
|
|
89
|
+
const parts = cookie.split('=');
|
|
90
|
+
if (parts.length === 2) {
|
|
91
|
+
cookies[parts[0].trim()] = parts[1].trim();
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
return cookies;
|
|
95
|
+
}
|
|
96
|
+
listen(port, callback) {
|
|
97
|
+
const server = http.createServer((req, res) => this.handleRequest(req, res));
|
|
98
|
+
server.listen(port, callback);
|
|
99
|
+
return server;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
const instance = new OpposerServer();
|
|
103
|
+
export default instance;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export default function bodyParser() {
|
|
2
|
+
return async (req, res, next) => {
|
|
3
|
+
if (req.method === "POST" || req.method === "PUT") {
|
|
4
|
+
const chunks = [];
|
|
5
|
+
req.on("data", (chunk) => chunks.push(chunk));
|
|
6
|
+
req.on("end", () => {
|
|
7
|
+
const bodyStr = Buffer.concat(chunks).toString();
|
|
8
|
+
try {
|
|
9
|
+
if (bodyStr) {
|
|
10
|
+
req.body = JSON.parse(bodyStr);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
catch (e) {
|
|
14
|
+
console.error("[core] JSON parsing error:", e);
|
|
15
|
+
req.body = {};
|
|
16
|
+
}
|
|
17
|
+
next();
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
next();
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export default function cors(options) {
|
|
2
|
+
return (req, res, next) => {
|
|
3
|
+
const originHeader = req.headers.origin;
|
|
4
|
+
let allowedOrigin = "*";
|
|
5
|
+
if (options?.origin) {
|
|
6
|
+
if (Array.isArray(options.origin)) {
|
|
7
|
+
if (originHeader && options.origin.includes(originHeader)) {
|
|
8
|
+
allowedOrigin = originHeader;
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
allowedOrigin = options.origin[0]; // Fallback to first one
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
allowedOrigin = options.origin;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
res.setHeader("Access-Control-Allow-Origin", allowedOrigin);
|
|
19
|
+
res.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
|
|
20
|
+
res.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization, opposer-key");
|
|
21
|
+
res.setHeader("Access-Control-Allow-Credentials", "true");
|
|
22
|
+
if (req.method === "OPTIONS") {
|
|
23
|
+
res.statusCode = 204;
|
|
24
|
+
res.end();
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
next();
|
|
28
|
+
};
|
|
29
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export default function logger() {
|
|
2
|
+
return (req, res, next) => {
|
|
3
|
+
const start = Date.now();
|
|
4
|
+
const { method, url } = req;
|
|
5
|
+
res.on("finish", () => {
|
|
6
|
+
const duration = Date.now() - start;
|
|
7
|
+
const status = res.statusCode;
|
|
8
|
+
console.log(`[${new Date().toISOString()}] ${method} ${url} - ${status} (${duration}ms)`);
|
|
9
|
+
});
|
|
10
|
+
next();
|
|
11
|
+
};
|
|
12
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import "reflect-metadata";
|
|
2
|
+
const CONTROLLER_KEY = Symbol("controller");
|
|
3
|
+
export default function Controller(name) {
|
|
4
|
+
return function (constructor) {
|
|
5
|
+
Reflect.defineMetadata(CONTROLLER_KEY, { name }, constructor);
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
export function getControllerMetadata(target) {
|
|
9
|
+
return Reflect.getMetadata(CONTROLLER_KEY, target) || [];
|
|
10
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Field as OrmField, MetadataStore } from "../../orm/index.js";
|
|
2
|
+
const FIELD_KEY = Symbol("field");
|
|
3
|
+
export default function Field(model) {
|
|
4
|
+
return (target, name, context) => {
|
|
5
|
+
// 1. Legacy server metadata (for existing code that uses getFieldsMetadata)
|
|
6
|
+
const fields = Reflect.getMetadata(FIELD_KEY, target.constructor) || [];
|
|
7
|
+
fields.push({ name, model: typeof model === 'function' ? model() : model });
|
|
8
|
+
Reflect.defineMetadata(FIELD_KEY, fields, target.constructor);
|
|
9
|
+
// 2. ORM metadata (calling the ORM decorator logic)
|
|
10
|
+
const ormDecorator = OrmField(typeof model === 'function' ? { validation: model } : model);
|
|
11
|
+
return ormDecorator(target, name);
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export function getFieldsMetadata(target) {
|
|
15
|
+
// Try to get from the constructor if target is an instance
|
|
16
|
+
const constructor = typeof target === 'function' ? target : target.constructor;
|
|
17
|
+
// 1. Get from legacy metadata
|
|
18
|
+
const legacyFields = Reflect.getMetadata(FIELD_KEY, constructor) || [];
|
|
19
|
+
// 2. Get from ORM MetadataStore
|
|
20
|
+
const ormFields = MetadataStore.getFields(constructor).map(f => ({
|
|
21
|
+
name: f.name,
|
|
22
|
+
model: { type: f.type }
|
|
23
|
+
}));
|
|
24
|
+
// Combine and remove duplicates (by name)
|
|
25
|
+
const allFields = [...legacyFields];
|
|
26
|
+
ormFields.forEach(of => {
|
|
27
|
+
if (!allFields.find(lf => lf.name === of.name)) {
|
|
28
|
+
allFields.push(of);
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
return allFields;
|
|
32
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import "reflect-metadata";
|
|
2
|
+
const CONTROLLER_KEY = Symbol("controller");
|
|
3
|
+
export default function Controller(name) {
|
|
4
|
+
return function (constructor) {
|
|
5
|
+
Reflect.defineMetadata(CONTROLLER_KEY, { name }, constructor);
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
export function getControllerMetadata(target) {
|
|
9
|
+
return Reflect.getMetadata(CONTROLLER_KEY, target) || [];
|
|
10
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { default as Method, getMethodMetadata } from "./method.js";
|
|
2
|
+
export { default as Controller, getControllerMetadata } from "./controller.js";
|
|
3
|
+
export { default as Payload, getPayloadMetadata } from "./payload.js";
|
|
4
|
+
export { default as IsPublic, getIsPublicMetadata } from "./is-public.js";
|
|
5
|
+
export { default as IsPublicMethod, getIsPublicMethodMetadata, } from "./is-public-method.js";
|
|
6
|
+
export { default as Field, getFieldsMetadata } from "./field.js";
|
|
7
|
+
export { f } from "../../orm/index.js";
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { default as Method, getMethodMetadata } from "./method.js";
|
|
2
|
+
export { default as Controller, getControllerMetadata } from "./controller.js";
|
|
3
|
+
export { default as Payload, getPayloadMetadata } from "./payload.js";
|
|
4
|
+
export { default as IsPublic, getIsPublicMetadata } from "./is-public.js";
|
|
5
|
+
export { default as IsPublicMethod, getIsPublicMethodMetadata, } from "./is-public-method.js";
|
|
6
|
+
export { default as Field, getFieldsMetadata } from "./field.js";
|
|
7
|
+
export { f } from "../../orm/index.js";
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import "reflect-metadata";
|
|
2
|
+
const PUBLIC_METHOD_KEY = Symbol("method");
|
|
3
|
+
export default function IsPublicMethod() {
|
|
4
|
+
return function (target, name, context) {
|
|
5
|
+
const methods = Reflect.getMetadata(PUBLIC_METHOD_KEY, target.constructor) || [];
|
|
6
|
+
methods.push({ name });
|
|
7
|
+
Reflect.defineMetadata(PUBLIC_METHOD_KEY, methods, target.constructor);
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
export function getIsPublicMethodMetadata(target) {
|
|
11
|
+
return Reflect.getMetadata(PUBLIC_METHOD_KEY, target) || [];
|
|
12
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import "reflect-metadata";
|
|
2
|
+
const PUBLIC_KEY = Symbol("is-public");
|
|
3
|
+
export default function IsPublic() {
|
|
4
|
+
return (target) => {
|
|
5
|
+
Reflect.defineMetadata(PUBLIC_KEY, true, target);
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
export function getIsPublicMetadata(target) {
|
|
9
|
+
return Reflect.getMetadata(PUBLIC_KEY, target) === true;
|
|
10
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import "reflect-metadata";
|
|
2
|
+
const METHOD_KEY = Symbol("method");
|
|
3
|
+
export default function Method() {
|
|
4
|
+
return function (target, name, context) {
|
|
5
|
+
const methods = Reflect.getMetadata(METHOD_KEY, target.constructor) || [];
|
|
6
|
+
methods.push({ name });
|
|
7
|
+
Reflect.defineMetadata(METHOD_KEY, methods, target.constructor);
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
export function getMethodMetadata(target) {
|
|
11
|
+
return Reflect.getMetadata(METHOD_KEY, target) || [];
|
|
12
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
const PAYLOAD_KEY = Symbol("method");
|
|
2
|
+
export default function Payload(dto) {
|
|
3
|
+
return function (target, name, context) {
|
|
4
|
+
const payloads = Reflect.getMetadata(PAYLOAD_KEY, target.constructor) || [];
|
|
5
|
+
payloads.push({ name, dto });
|
|
6
|
+
Reflect.defineMetadata(PAYLOAD_KEY, payloads, target.constructor);
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
export function getPayloadMetadata(target) {
|
|
10
|
+
return Reflect.getMetadata(PAYLOAD_KEY, target) || [];
|
|
11
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { ResultGetAllControllers } from "../../interfaces/controller.js";
|
|
2
|
+
import { ClassType } from "../../interfaces/system.js";
|
|
3
|
+
export declare function toKebabCase(str: string): string;
|
|
4
|
+
export declare function toCamelCase(str: string): string;
|
|
5
|
+
export declare function loadControllers(customControllers?: string | ClassType<unknown>[]): Promise<ResultGetAllControllers>;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import system from "../../system/index.js";
|
|
2
|
+
import * as decorator from "../decorators/index.js";
|
|
3
|
+
const controllers = {};
|
|
4
|
+
export function toKebabCase(str) {
|
|
5
|
+
return str
|
|
6
|
+
.replace(/([a-z0-9])([A-Z])/g, "$1-$2") // adiciona hífen antes de maiúsculas
|
|
7
|
+
.replace(/([A-Z])([A-Z][a-z])/g, "$1-$2") // caso AAAa
|
|
8
|
+
.toLowerCase();
|
|
9
|
+
}
|
|
10
|
+
export function toCamelCase(str) {
|
|
11
|
+
return str
|
|
12
|
+
.toLowerCase()
|
|
13
|
+
.replace(/-([a-z0-9])/g, (_, char) => char.toUpperCase());
|
|
14
|
+
}
|
|
15
|
+
// function responsible per cache controllers in project;
|
|
16
|
+
export async function loadControllers(customControllers) {
|
|
17
|
+
var __allControllers = await system.getAllControllers(customControllers);
|
|
18
|
+
if (Array.isArray(__allControllers) && Object.keys(controllers).length === 0) {
|
|
19
|
+
return __allControllers.reduce((controllers, controller) => {
|
|
20
|
+
var controllerMetadata = decorator.getControllerMetadata(controller);
|
|
21
|
+
var methodsMetadata = decorator.getMethodMetadata(controller);
|
|
22
|
+
controllers[controllerMetadata.name] = {
|
|
23
|
+
metadata: controllerMetadata,
|
|
24
|
+
methods: Array.isArray(methodsMetadata) ? methodsMetadata : [],
|
|
25
|
+
controller: controller,
|
|
26
|
+
};
|
|
27
|
+
return controllers;
|
|
28
|
+
}, controllers);
|
|
29
|
+
}
|
|
30
|
+
return controllers;
|
|
31
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { HandleRequestResultError } from "../../interfaces/request.js";
|
|
2
|
+
export declare function Success(data: any): {
|
|
3
|
+
readonly success: true;
|
|
4
|
+
readonly data: any;
|
|
5
|
+
};
|
|
6
|
+
export declare function Exception(error: HandleRequestResultError["error"]): {
|
|
7
|
+
readonly success: false;
|
|
8
|
+
readonly error: {
|
|
9
|
+
name: string;
|
|
10
|
+
code: number;
|
|
11
|
+
message: any;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Validates data against a model (Entity or DTO) decorated with @Field
|
|
16
|
+
*/
|
|
17
|
+
export declare function validateData(model: any, values: Record<string, any>): Record<string, string[]>;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { MetadataStore } from "../../orm/index.js";
|
|
2
|
+
export function Success(data) {
|
|
3
|
+
return {
|
|
4
|
+
success: true,
|
|
5
|
+
data,
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
export function Exception(error) {
|
|
9
|
+
return {
|
|
10
|
+
success: false,
|
|
11
|
+
error: error,
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Validates data against a model (Entity or DTO) decorated with @Field
|
|
16
|
+
*/
|
|
17
|
+
export function validateData(model, values) {
|
|
18
|
+
const errors = {};
|
|
19
|
+
// Get fields from MetadataStore (supports both legacy and new ORM decorators)
|
|
20
|
+
const fields = MetadataStore.getFields(model);
|
|
21
|
+
for (const field of fields) {
|
|
22
|
+
const value = values[field.name || field.propertyKey];
|
|
23
|
+
if (field.validation) {
|
|
24
|
+
const validator = typeof field.validation === 'function' ? field.validation() : field.validation;
|
|
25
|
+
if (validator && typeof validator.validate === 'function') {
|
|
26
|
+
const fieldErrors = validator.validate(value, values);
|
|
27
|
+
if (fieldErrors && fieldErrors.length > 0) {
|
|
28
|
+
errors[field.name || field.propertyKey] = fieldErrors;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return errors;
|
|
34
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { CreateServerProps, ServerInstance } from '../interfaces/server.js';
|
|
2
|
+
import Auth from './security/controller/auth.js';
|
|
3
|
+
export default function Server(props: CreateServerProps): Promise<ServerInstance>;
|
|
4
|
+
export declare const auth: {
|
|
5
|
+
social: typeof Auth.social;
|
|
6
|
+
};
|
|
7
|
+
export * from './constants/index.js';
|
|
8
|
+
export * from './helpers/index.js';
|
|
9
|
+
export type { ModelResult } from '../interfaces/model.js';
|
|
10
|
+
export { Method, Controller, Field, Payload, IsPublic, IsPublicMethod, f } from './decorators/index.js';
|
|
11
|
+
export type { PayloadRequest } from '../interfaces/controller.js';
|
|
12
|
+
export { default as Context } from './context/index.js';
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import Controller from './controller/index.js';
|
|
2
|
+
import system from '../system/index.js';
|
|
3
|
+
import permission from './security/middleware/permission.js';
|
|
4
|
+
import autorization from './security/middleware/autorization.js';
|
|
5
|
+
import Auth from './security/controller/auth.js';
|
|
6
|
+
import scheduler from '../scheduler/index.js';
|
|
7
|
+
import { OpposerDatabase, PostgresDriver, SQLiteDriver, MySQLDriver } from '../orm/index.js';
|
|
8
|
+
// Core
|
|
9
|
+
import opposerServer from './core/index.js';
|
|
10
|
+
import corsMiddleware from './core/middleware/cors.js';
|
|
11
|
+
import bodyParser from './core/middleware/body-parser.js';
|
|
12
|
+
import loggerMiddleware from './core/middleware/logger.js';
|
|
13
|
+
import Context from './context/index.js';
|
|
14
|
+
// Playground
|
|
15
|
+
import Playground from '../playground/index.js';
|
|
16
|
+
async function initializeDatabase(props, models) {
|
|
17
|
+
const settings = system.getSettingsFile();
|
|
18
|
+
const allModels = await system.getAllModels(models);
|
|
19
|
+
const entities = allModels.map((x) => x.entity);
|
|
20
|
+
let driver;
|
|
21
|
+
const type = props.type || settings.database?.type;
|
|
22
|
+
switch (type) {
|
|
23
|
+
case 'postgres':
|
|
24
|
+
driver = new PostgresDriver(props);
|
|
25
|
+
break;
|
|
26
|
+
case 'sqlite':
|
|
27
|
+
driver = new SQLiteDriver(props);
|
|
28
|
+
break;
|
|
29
|
+
case 'mysql':
|
|
30
|
+
driver = new MySQLDriver(props);
|
|
31
|
+
break;
|
|
32
|
+
default:
|
|
33
|
+
throw new Error(`[database] Unsupported database type: ${type}`);
|
|
34
|
+
}
|
|
35
|
+
const db = new OpposerDatabase(driver, entities);
|
|
36
|
+
await db.connect();
|
|
37
|
+
return db;
|
|
38
|
+
}
|
|
39
|
+
async function ensureManager(db, settings, models) {
|
|
40
|
+
if (!settings.auth)
|
|
41
|
+
return;
|
|
42
|
+
try {
|
|
43
|
+
const allModels = await system.getAllModels(models);
|
|
44
|
+
const userEntity = allModels.find((x) => x.name === 'User' || x.name === 'usr');
|
|
45
|
+
const roleEntity = allModels.find((x) => x.name === 'Role' || x.name === 'rl');
|
|
46
|
+
if (userEntity && roleEntity) {
|
|
47
|
+
const userRepository = db.getRepository(userEntity.entity);
|
|
48
|
+
const roleRepository = db.getRepository(roleEntity.entity);
|
|
49
|
+
let login = process.env.MANAGER_LOGIN || settings.manager?.login;
|
|
50
|
+
let firstName = process.env.MANAGER_FIRST_NAME || settings.manager?.firstName;
|
|
51
|
+
let lastName = process.env.MANAGER_LAST_NAME || settings.manager?.lastName;
|
|
52
|
+
let password = process.env.MANAGER_PASSWORD || settings.manager?.password;
|
|
53
|
+
let manager = await userRepository.findOne({
|
|
54
|
+
where: { lg: login },
|
|
55
|
+
});
|
|
56
|
+
if (!manager) {
|
|
57
|
+
console.log('-> Creating manager account.');
|
|
58
|
+
manager = await userRepository.insert({
|
|
59
|
+
fn: firstName,
|
|
60
|
+
ln: lastName,
|
|
61
|
+
lg: login,
|
|
62
|
+
ps: password,
|
|
63
|
+
ac: true,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
const hasAllRole = await roleRepository.findOne({
|
|
67
|
+
where: { usr: manager.id, sm: 'all', mt: 'all' },
|
|
68
|
+
});
|
|
69
|
+
if (!hasAllRole) {
|
|
70
|
+
console.log('-> Creating all-access role for manager.');
|
|
71
|
+
await roleRepository.insert({
|
|
72
|
+
usr: manager.id,
|
|
73
|
+
sm: 'all',
|
|
74
|
+
mt: 'all',
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
console.error('[database] Manager creation failed:', error);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
export default async function Server(props) {
|
|
84
|
+
console.log('-> Initializing database connection.');
|
|
85
|
+
const settings = system.getSettingsFile();
|
|
86
|
+
if (!settings.database) {
|
|
87
|
+
throw new Error('-> It is necessary to inform database properties.');
|
|
88
|
+
}
|
|
89
|
+
const db = await initializeDatabase(settings.database, props.models);
|
|
90
|
+
await ensureManager(db, settings, props.models);
|
|
91
|
+
// Store database in server context
|
|
92
|
+
Context.set('db', db);
|
|
93
|
+
Context.set('models', props.models);
|
|
94
|
+
Context.set('controllers', props.controllers);
|
|
95
|
+
console.log('-> Initializing scheduler.');
|
|
96
|
+
await scheduler.initialize(props.schedules);
|
|
97
|
+
scheduler.start();
|
|
98
|
+
console.log('-> Initializing core server.');
|
|
99
|
+
let url = '/opposer';
|
|
100
|
+
if (settings.url) {
|
|
101
|
+
url = settings.url;
|
|
102
|
+
}
|
|
103
|
+
// 1. Logger
|
|
104
|
+
if (settings.logger) {
|
|
105
|
+
opposerServer.use(loggerMiddleware());
|
|
106
|
+
}
|
|
107
|
+
// 2. CORS (Global)
|
|
108
|
+
if (props.cors || settings.cors) {
|
|
109
|
+
opposerServer.use(corsMiddleware(props.cors || settings.cors));
|
|
110
|
+
}
|
|
111
|
+
// 3. Body Parser
|
|
112
|
+
opposerServer.use(bodyParser());
|
|
113
|
+
// 4. Playground
|
|
114
|
+
opposerServer.use(Playground);
|
|
115
|
+
// 5. Auth/Security Middlewares
|
|
116
|
+
if (settings.auth) {
|
|
117
|
+
opposerServer.use(autorization);
|
|
118
|
+
opposerServer.use(permission);
|
|
119
|
+
}
|
|
120
|
+
// 6. Main Route Handler
|
|
121
|
+
opposerServer.use(async (req, res, next) => {
|
|
122
|
+
if (req.url === url && req.method === 'POST') {
|
|
123
|
+
await Controller(req, res);
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
next();
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
// 7. 404 Handler
|
|
130
|
+
opposerServer.use((req, res) => {
|
|
131
|
+
res.status(404).json({ message: `Route ${req.method} ${req.url} not found` });
|
|
132
|
+
});
|
|
133
|
+
function initialize() {
|
|
134
|
+
opposerServer.listen(settings.port, () => {
|
|
135
|
+
console.log(`⚡Opposer Core is running in port ${settings.port}`);
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
return {
|
|
139
|
+
opposer: opposerServer,
|
|
140
|
+
initialize,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
export const auth = { social: Auth.social };
|
|
144
|
+
export * from './constants/index.js';
|
|
145
|
+
export * from './helpers/index.js';
|
|
146
|
+
export { Method, Controller, Field, Payload, IsPublic, IsPublicMethod, f } from './decorators/index.js';
|
|
147
|
+
export { default as Context } from './context/index.js';
|