@kvishal04/library-core 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +458 -0
- package/dist/appConfig.d.ts +16 -0
- package/dist/appConfig.d.ts.map +1 -0
- package/dist/appConfig.js +37 -0
- package/dist/appConfig.js.map +1 -0
- package/dist/configmanager/index.d.ts +38 -0
- package/dist/configmanager/index.d.ts.map +1 -0
- package/dist/configmanager/index.js +52 -0
- package/dist/configmanager/index.js.map +1 -0
- package/dist/configmanager/src/events/config.events.d.ts +19 -0
- package/dist/configmanager/src/events/config.events.d.ts.map +1 -0
- package/dist/configmanager/src/events/config.events.js +22 -0
- package/dist/configmanager/src/events/config.events.js.map +1 -0
- package/dist/configmanager/src/models/config.cache.d.ts +16 -0
- package/dist/configmanager/src/models/config.cache.d.ts.map +1 -0
- package/dist/configmanager/src/models/config.cache.js +37 -0
- package/dist/configmanager/src/models/config.cache.js.map +1 -0
- package/dist/configmanager/src/models/config.meta.d.ts +13 -0
- package/dist/configmanager/src/models/config.meta.d.ts.map +1 -0
- package/dist/configmanager/src/models/config.meta.js +30 -0
- package/dist/configmanager/src/models/config.meta.js.map +1 -0
- package/dist/configmanager/src/models/config.registry.d.ts +29 -0
- package/dist/configmanager/src/models/config.registry.d.ts.map +1 -0
- package/dist/configmanager/src/models/config.registry.js +121 -0
- package/dist/configmanager/src/models/config.registry.js.map +1 -0
- package/dist/configmanager/src/routes.d.ts +4 -0
- package/dist/configmanager/src/routes.d.ts.map +1 -0
- package/dist/configmanager/src/routes.js +292 -0
- package/dist/configmanager/src/routes.js.map +1 -0
- package/dist/configmanager/src/service.d.ts +90 -0
- package/dist/configmanager/src/service.d.ts.map +1 -0
- package/dist/configmanager/src/service.js +163 -0
- package/dist/configmanager/src/service.js.map +1 -0
- package/dist/configmanager/src/types/api.types.d.ts +11 -0
- package/dist/configmanager/src/types/api.types.d.ts.map +1 -0
- package/dist/configmanager/src/types/api.types.js +4 -0
- package/dist/configmanager/src/types/api.types.js.map +1 -0
- package/dist/configmanager/src/types/config.meta.types.d.ts +12 -0
- package/dist/configmanager/src/types/config.meta.types.d.ts.map +1 -0
- package/dist/configmanager/src/types/config.meta.types.js +5 -0
- package/dist/configmanager/src/types/config.meta.types.js.map +1 -0
- package/dist/configmanager/src/types/config.types.d.ts +17 -0
- package/dist/configmanager/src/types/config.types.d.ts.map +1 -0
- package/dist/configmanager/src/types/config.types.js +5 -0
- package/dist/configmanager/src/types/config.types.js.map +1 -0
- package/dist/configmanager/src/utils/config.file.d.ts +72 -0
- package/dist/configmanager/src/utils/config.file.d.ts.map +1 -0
- package/dist/configmanager/src/utils/config.file.js +238 -0
- package/dist/configmanager/src/utils/config.file.js.map +1 -0
- package/dist/configmanager/src/utils/config.loader.d.ts +20 -0
- package/dist/configmanager/src/utils/config.loader.d.ts.map +1 -0
- package/dist/configmanager/src/utils/config.loader.js +116 -0
- package/dist/configmanager/src/utils/config.loader.js.map +1 -0
- package/dist/configmanager/src/utils/config.parser.d.ts +10 -0
- package/dist/configmanager/src/utils/config.parser.d.ts.map +1 -0
- package/dist/configmanager/src/utils/config.parser.js +52 -0
- package/dist/configmanager/src/utils/config.parser.js.map +1 -0
- package/dist/configmanager/src/utils/config.path.d.ts +18 -0
- package/dist/configmanager/src/utils/config.path.d.ts.map +1 -0
- package/dist/configmanager/src/utils/config.path.js +68 -0
- package/dist/configmanager/src/utils/config.path.js.map +1 -0
- package/dist/configmanager/src/utils/config.serializer.d.ts +15 -0
- package/dist/configmanager/src/utils/config.serializer.d.ts.map +1 -0
- package/dist/configmanager/src/utils/config.serializer.js +51 -0
- package/dist/configmanager/src/utils/config.serializer.js.map +1 -0
- package/dist/configmanager/src/utils/config.validator.d.ts +11 -0
- package/dist/configmanager/src/utils/config.validator.d.ts.map +1 -0
- package/dist/configmanager/src/utils/config.validator.js +20 -0
- package/dist/configmanager/src/utils/config.validator.js.map +1 -0
- package/dist/connectors.d.ts +4 -0
- package/dist/connectors.d.ts.map +1 -0
- package/dist/connectors.js +29 -0
- package/dist/connectors.js.map +1 -0
- package/dist/constant.d.ts +43 -0
- package/dist/constant.d.ts.map +1 -0
- package/dist/constant.js +45 -0
- package/dist/constant.js.map +1 -0
- package/dist/crons/task-scheduler.cron.d.ts +2 -0
- package/dist/crons/task-scheduler.cron.d.ts.map +1 -0
- package/dist/crons/task-scheduler.cron.js +53 -0
- package/dist/crons/task-scheduler.cron.js.map +1 -0
- package/dist/db/index.d.ts +8 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +18 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/pool.d.ts +2 -0
- package/dist/db/pool.d.ts.map +1 -0
- package/dist/db/pool.js +8 -0
- package/dist/db/pool.js.map +1 -0
- package/dist/db/src/Controller.d.ts +22 -0
- package/dist/db/src/Controller.d.ts.map +1 -0
- package/dist/db/src/Controller.js +43 -0
- package/dist/db/src/Controller.js.map +1 -0
- package/dist/db/src/config/adaptor.base.d.ts +18 -0
- package/dist/db/src/config/adaptor.base.d.ts.map +1 -0
- package/dist/db/src/config/adaptor.base.js +64 -0
- package/dist/db/src/config/adaptor.base.js.map +1 -0
- package/dist/db/src/config/connection.db.d.ts +17 -0
- package/dist/db/src/config/connection.db.d.ts.map +1 -0
- package/dist/db/src/config/connection.db.js +25 -0
- package/dist/db/src/config/connection.db.js.map +1 -0
- package/dist/db/src/config/main.db.d.ts +7 -0
- package/dist/db/src/config/main.db.d.ts.map +1 -0
- package/dist/db/src/config/main.db.js +53 -0
- package/dist/db/src/config/main.db.js.map +1 -0
- package/dist/db/src/config/transaction.db.d.ts +11 -0
- package/dist/db/src/config/transaction.db.d.ts.map +1 -0
- package/dist/db/src/config/transaction.db.js +24 -0
- package/dist/db/src/config/transaction.db.js.map +1 -0
- package/dist/db/src/models/index.d.ts +4 -0
- package/dist/db/src/models/index.d.ts.map +1 -0
- package/dist/db/src/models/index.js +3 -0
- package/dist/db/src/models/index.js.map +1 -0
- package/dist/db/src/pool.d.ts +8 -0
- package/dist/db/src/pool.d.ts.map +1 -0
- package/dist/db/src/pool.js +34 -0
- package/dist/db/src/pool.js.map +1 -0
- package/dist/db/src/utils/binding.wrapper.d.ts +7 -0
- package/dist/db/src/utils/binding.wrapper.d.ts.map +1 -0
- package/dist/db/src/utils/binding.wrapper.js +28 -0
- package/dist/db/src/utils/binding.wrapper.js.map +1 -0
- package/dist/db/src/utils/logger.db.d.ts +11 -0
- package/dist/db/src/utils/logger.db.d.ts.map +1 -0
- package/dist/db/src/utils/logger.db.js +51 -0
- package/dist/db/src/utils/logger.db.js.map +1 -0
- package/dist/db/src/utils/result.wrapper.d.ts +9 -0
- package/dist/db/src/utils/result.wrapper.d.ts.map +1 -0
- package/dist/db/src/utils/result.wrapper.js +40 -0
- package/dist/db/src/utils/result.wrapper.js.map +1 -0
- package/dist/db.d.ts +10 -0
- package/dist/db.d.ts.map +1 -0
- package/dist/db.js +20 -0
- package/dist/db.js.map +1 -0
- package/dist/defaults/application.config.d.ts +3 -0
- package/dist/defaults/application.config.d.ts.map +1 -0
- package/dist/defaults/application.config.js +35 -0
- package/dist/defaults/application.config.js.map +1 -0
- package/dist/encryption.d.ts +3 -0
- package/dist/encryption.d.ts.map +1 -0
- package/dist/encryption.js +30 -0
- package/dist/encryption.js.map +1 -0
- package/dist/excelUtil.d.ts +33 -0
- package/dist/excelUtil.d.ts.map +1 -0
- package/dist/excelUtil.js +197 -0
- package/dist/excelUtil.js.map +1 -0
- package/dist/geoLocation.d.ts +16 -0
- package/dist/geoLocation.d.ts.map +1 -0
- package/dist/geoLocation.js +38 -0
- package/dist/geoLocation.js.map +1 -0
- package/dist/imageResizer.d.ts +15 -0
- package/dist/imageResizer.d.ts.map +1 -0
- package/dist/imageResizer.js +47 -0
- package/dist/imageResizer.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +56 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/application.interfaces.d.ts +70 -0
- package/dist/interfaces/application.interfaces.d.ts.map +1 -0
- package/dist/interfaces/application.interfaces.js +3 -0
- package/dist/interfaces/application.interfaces.js.map +1 -0
- package/dist/middleware/application.middleware.d.ts +4 -0
- package/dist/middleware/application.middleware.d.ts.map +1 -0
- package/dist/middleware/application.middleware.js +14 -0
- package/dist/middleware/application.middleware.js.map +1 -0
- package/dist/middleware/auth.d.ts +19 -0
- package/dist/middleware/auth.d.ts.map +1 -0
- package/dist/middleware/auth.js +191 -0
- package/dist/middleware/auth.js.map +1 -0
- package/dist/middleware/core.middleware.d.ts +4 -0
- package/dist/middleware/core.middleware.d.ts.map +1 -0
- package/dist/middleware/core.middleware.js +8 -0
- package/dist/middleware/core.middleware.js.map +1 -0
- package/dist/middleware/error.d.ts +4 -0
- package/dist/middleware/error.d.ts.map +1 -0
- package/dist/middleware/error.js +9 -0
- package/dist/middleware/error.js.map +1 -0
- package/dist/middleware/index.d.ts +7 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +25 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/multipart.d.ts +6 -0
- package/dist/middleware/multipart.d.ts.map +1 -0
- package/dist/middleware/multipart.js +59 -0
- package/dist/middleware/multipart.js.map +1 -0
- package/dist/middleware/system.middleware.d.ts +4 -0
- package/dist/middleware/system.middleware.d.ts.map +1 -0
- package/dist/middleware/system.middleware.js +14 -0
- package/dist/middleware/system.middleware.js.map +1 -0
- package/dist/responseHandler.d.ts +46 -0
- package/dist/responseHandler.d.ts.map +1 -0
- package/dist/responseHandler.js +105 -0
- package/dist/responseHandler.js.map +1 -0
- package/dist/session.d.ts +59 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +262 -0
- package/dist/session.js.map +1 -0
- package/dist/spreadsheet/index.d.ts +15 -0
- package/dist/spreadsheet/index.d.ts.map +1 -0
- package/dist/spreadsheet/index.js +37 -0
- package/dist/spreadsheet/index.js.map +1 -0
- package/dist/spreadsheet/src/SpreadsheetRouter.d.ts +3 -0
- package/dist/spreadsheet/src/SpreadsheetRouter.d.ts.map +1 -0
- package/dist/spreadsheet/src/SpreadsheetRouter.js +262 -0
- package/dist/spreadsheet/src/SpreadsheetRouter.js.map +1 -0
- package/dist/spreadsheet/src/models/SpreadsheetTypes.d.ts +74 -0
- package/dist/spreadsheet/src/models/SpreadsheetTypes.d.ts.map +1 -0
- package/dist/spreadsheet/src/models/SpreadsheetTypes.js +3 -0
- package/dist/spreadsheet/src/models/SpreadsheetTypes.js.map +1 -0
- package/dist/spreadsheet/src/models/index.d.ts +2 -0
- package/dist/spreadsheet/src/models/index.d.ts.map +1 -0
- package/dist/spreadsheet/src/models/index.js +18 -0
- package/dist/spreadsheet/src/models/index.js.map +1 -0
- package/dist/spreadsheet/src/service/SpreadsheetService.d.ts +72 -0
- package/dist/spreadsheet/src/service/SpreadsheetService.d.ts.map +1 -0
- package/dist/spreadsheet/src/service/SpreadsheetService.js +232 -0
- package/dist/spreadsheet/src/service/SpreadsheetService.js.map +1 -0
- package/dist/spreadsheet/src/utils/styleUtils.d.ts +31 -0
- package/dist/spreadsheet/src/utils/styleUtils.d.ts.map +1 -0
- package/dist/spreadsheet/src/utils/styleUtils.js +84 -0
- package/dist/spreadsheet/src/utils/styleUtils.js.map +1 -0
- package/dist/system/config-manager/config-loader.d.ts +57 -0
- package/dist/system/config-manager/config-loader.d.ts.map +1 -0
- package/dist/system/config-manager/config-loader.js +217 -0
- package/dist/system/config-manager/config-loader.js.map +1 -0
- package/dist/system/config-manager/handlers/file.d.ts +4 -0
- package/dist/system/config-manager/handlers/file.d.ts.map +1 -0
- package/dist/system/config-manager/handlers/file.js +70 -0
- package/dist/system/config-manager/handlers/file.js.map +1 -0
- package/dist/system/config-manager/handlers/reload-configs.d.ts +4 -0
- package/dist/system/config-manager/handlers/reload-configs.d.ts.map +1 -0
- package/dist/system/config-manager/handlers/reload-configs.js +63 -0
- package/dist/system/config-manager/handlers/reload-configs.js.map +1 -0
- package/dist/system/config-manager/handlers/rename.d.ts +3 -0
- package/dist/system/config-manager/handlers/rename.d.ts.map +1 -0
- package/dist/system/config-manager/handlers/rename.js +80 -0
- package/dist/system/config-manager/handlers/rename.js.map +1 -0
- package/dist/system/config-manager/handlers/status.d.ts +3 -0
- package/dist/system/config-manager/handlers/status.d.ts.map +1 -0
- package/dist/system/config-manager/handlers/status.js +55 -0
- package/dist/system/config-manager/handlers/status.js.map +1 -0
- package/dist/system/config-manager/handlers/tree.d.ts +4 -0
- package/dist/system/config-manager/handlers/tree.d.ts.map +1 -0
- package/dist/system/config-manager/handlers/tree.js +64 -0
- package/dist/system/config-manager/handlers/tree.js.map +1 -0
- package/dist/system/config-manager/helpers.d.ts +20 -0
- package/dist/system/config-manager/helpers.d.ts.map +1 -0
- package/dist/system/config-manager/helpers.js +123 -0
- package/dist/system/config-manager/helpers.js.map +1 -0
- package/dist/system/config-manager/index.d.ts +3 -0
- package/dist/system/config-manager/index.d.ts.map +1 -0
- package/dist/system/config-manager/index.js +22 -0
- package/dist/system/config-manager/index.js.map +1 -0
- package/dist/system.applications/configure-app-cors.d.ts +3 -0
- package/dist/system.applications/configure-app-cors.d.ts.map +1 -0
- package/dist/system.applications/configure-app-cors.js +35 -0
- package/dist/system.applications/configure-app-cors.js.map +1 -0
- package/dist/system.applications/controller.d.ts +48 -0
- package/dist/system.applications/controller.d.ts.map +1 -0
- package/dist/system.applications/controller.js +165 -0
- package/dist/system.applications/controller.js.map +1 -0
- package/dist/system.applications/requestContext.d.ts +41 -0
- package/dist/system.applications/requestContext.d.ts.map +1 -0
- package/dist/system.applications/requestContext.js +78 -0
- package/dist/system.applications/requestContext.js.map +1 -0
- package/dist/system.applications/response.helpers.d.ts +22 -0
- package/dist/system.applications/response.helpers.d.ts.map +1 -0
- package/dist/system.applications/response.helpers.js +53 -0
- package/dist/system.applications/response.helpers.js.map +1 -0
- package/dist/system.applications/response.types.d.ts +33 -0
- package/dist/system.applications/response.types.d.ts.map +1 -0
- package/dist/system.applications/response.types.js +3 -0
- package/dist/system.applications/response.types.js.map +1 -0
- package/dist/system.applications/sessions.d.ts +29 -0
- package/dist/system.applications/sessions.d.ts.map +1 -0
- package/dist/system.applications/sessions.js +129 -0
- package/dist/system.applications/sessions.js.map +1 -0
- package/dist/system.applications/util.d.ts +7 -0
- package/dist/system.applications/util.d.ts.map +1 -0
- package/dist/system.applications/util.js +35 -0
- package/dist/system.applications/util.js.map +1 -0
- package/dist/types/response.types.d.ts +19 -0
- package/dist/types/response.types.d.ts.map +1 -0
- package/dist/types/response.types.js +3 -0
- package/dist/types/response.types.js.map +1 -0
- package/dist/util.d.ts +13 -0
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +69 -0
- package/dist/util.js.map +1 -0
- package/dist/validator/index.d.ts +3 -0
- package/dist/validator/index.d.ts.map +1 -0
- package/dist/validator/index.js +9 -0
- package/dist/validator/index.js.map +1 -0
- package/dist/validator/src/errors/validation.d.ts +6 -0
- package/dist/validator/src/errors/validation.d.ts.map +1 -0
- package/dist/validator/src/errors/validation.js +14 -0
- package/dist/validator/src/errors/validation.js.map +1 -0
- package/dist/validator/src/main.d.ts +61 -0
- package/dist/validator/src/main.d.ts.map +1 -0
- package/dist/validator/src/main.js +65 -0
- package/dist/validator/src/main.js.map +1 -0
- package/dist/validator/src/rules/array.d.ts +2 -0
- package/dist/validator/src/rules/array.d.ts.map +1 -0
- package/dist/validator/src/rules/array.js +15 -0
- package/dist/validator/src/rules/array.js.map +1 -0
- package/dist/validator/src/rules/between.d.ts +6 -0
- package/dist/validator/src/rules/between.d.ts.map +1 -0
- package/dist/validator/src/rules/between.js +15 -0
- package/dist/validator/src/rules/between.js.map +1 -0
- package/dist/validator/src/rules/boolean.d.ts +2 -0
- package/dist/validator/src/rules/boolean.d.ts.map +1 -0
- package/dist/validator/src/rules/boolean.js +15 -0
- package/dist/validator/src/rules/boolean.js.map +1 -0
- package/dist/validator/src/rules/check.d.ts +7 -0
- package/dist/validator/src/rules/check.d.ts.map +1 -0
- package/dist/validator/src/rules/check.js +15 -0
- package/dist/validator/src/rules/check.js.map +1 -0
- package/dist/validator/src/rules/custom.d.ts +15 -0
- package/dist/validator/src/rules/custom.d.ts.map +1 -0
- package/dist/validator/src/rules/custom.js +47 -0
- package/dist/validator/src/rules/custom.js.map +1 -0
- package/dist/validator/src/rules/email.d.ts +2 -0
- package/dist/validator/src/rules/email.d.ts.map +1 -0
- package/dist/validator/src/rules/email.js +15 -0
- package/dist/validator/src/rules/email.js.map +1 -0
- package/dist/validator/src/rules/enum.d.ts +6 -0
- package/dist/validator/src/rules/enum.d.ts.map +1 -0
- package/dist/validator/src/rules/enum.js +15 -0
- package/dist/validator/src/rules/enum.js.map +1 -0
- package/dist/validator/src/rules/file.d.ts +2 -0
- package/dist/validator/src/rules/file.d.ts.map +1 -0
- package/dist/validator/src/rules/file.js +29 -0
- package/dist/validator/src/rules/file.js.map +1 -0
- package/dist/validator/src/rules/notEmpty.d.ts +2 -0
- package/dist/validator/src/rules/notEmpty.d.ts.map +1 -0
- package/dist/validator/src/rules/notEmpty.js +15 -0
- package/dist/validator/src/rules/notEmpty.js.map +1 -0
- package/dist/validator/src/rules/number.d.ts +2 -0
- package/dist/validator/src/rules/number.d.ts.map +1 -0
- package/dist/validator/src/rules/number.js +15 -0
- package/dist/validator/src/rules/number.js.map +1 -0
- package/dist/validator/src/rules/object.d.ts +2 -0
- package/dist/validator/src/rules/object.d.ts.map +1 -0
- package/dist/validator/src/rules/object.js +15 -0
- package/dist/validator/src/rules/object.js.map +1 -0
- package/dist/validator/src/rules/pattern.d.ts +6 -0
- package/dist/validator/src/rules/pattern.d.ts.map +1 -0
- package/dist/validator/src/rules/pattern.js +15 -0
- package/dist/validator/src/rules/pattern.js.map +1 -0
- package/dist/validator/src/rules/phone.d.ts +2 -0
- package/dist/validator/src/rules/phone.d.ts.map +1 -0
- package/dist/validator/src/rules/phone.js +15 -0
- package/dist/validator/src/rules/phone.js.map +1 -0
- package/dist/validator/src/rules/required.d.ts +2 -0
- package/dist/validator/src/rules/required.d.ts.map +1 -0
- package/dist/validator/src/rules/required.js +12 -0
- package/dist/validator/src/rules/required.js.map +1 -0
- package/dist/validator/src/rules/string.d.ts +2 -0
- package/dist/validator/src/rules/string.d.ts.map +1 -0
- package/dist/validator/src/rules/string.js +15 -0
- package/dist/validator/src/rules/string.js.map +1 -0
- package/dist/validator/src/rules/url.d.ts +2 -0
- package/dist/validator/src/rules/url.d.ts.map +1 -0
- package/dist/validator/src/rules/url.js +15 -0
- package/dist/validator/src/rules/url.js.map +1 -0
- package/package.json +46 -0
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Config Loader
|
|
4
|
+
*
|
|
5
|
+
* Scans all .config files under APP_CONFIG_ROOT recursively at startup,
|
|
6
|
+
* evaluates them (supports JS object expression format: `({...})`),
|
|
7
|
+
* and stores them in AppConfig as a key→value map where:
|
|
8
|
+
* key = relative path e.g. "myapp/all/vi.config"
|
|
9
|
+
* value = evaluated JS object from the file
|
|
10
|
+
*
|
|
11
|
+
* Usage anywhere in the app:
|
|
12
|
+
* import { getConfig, getAllConfigs, reloadConfigs } from '@server/core/config-loader';
|
|
13
|
+
* const viConfig = getConfig('myapp/all/vi.config');
|
|
14
|
+
*/
|
|
15
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
16
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
17
|
+
};
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.loadAllConfigs = loadAllConfigs;
|
|
20
|
+
exports.reloadConfigs = reloadConfigs;
|
|
21
|
+
exports.reloadConfig = reloadConfig;
|
|
22
|
+
exports.getConfig = getConfig;
|
|
23
|
+
exports.getAllConfigs = getAllConfigs;
|
|
24
|
+
exports.getAllConfigsSafe = getAllConfigsSafe;
|
|
25
|
+
exports.renameConfigInMemory = renameConfigInMemory;
|
|
26
|
+
exports.unloadConfig = unloadConfig;
|
|
27
|
+
const fs_1 = __importDefault(require("fs"));
|
|
28
|
+
const path_1 = __importDefault(require("path"));
|
|
29
|
+
const vm_1 = __importDefault(require("vm"));
|
|
30
|
+
const appConfig_1 = __importDefault(require("../../appConfig"));
|
|
31
|
+
/** Internal App_Configurator key used in AppConfig */
|
|
32
|
+
const STORAGE_KEY = 'APP_CONFIG_MAP';
|
|
33
|
+
/** Reads the :status ADS of a file synchronously. Returns 'active' | 'inactive' | null. */
|
|
34
|
+
function readFileStatusSync(filePath) {
|
|
35
|
+
try {
|
|
36
|
+
const raw = fs_1.default.readFileSync(`${filePath}:status`, 'utf-8').trim().toLowerCase();
|
|
37
|
+
if (raw === 'active' || raw === 'inactive')
|
|
38
|
+
return raw;
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/** Recursively collect all .config file paths relative to `dir` */
|
|
46
|
+
function scanConfigFiles(dir, base = '') {
|
|
47
|
+
const results = [];
|
|
48
|
+
if (!fs_1.default.existsSync(dir))
|
|
49
|
+
return results;
|
|
50
|
+
const entries = fs_1.default.readdirSync(dir, { withFileTypes: true });
|
|
51
|
+
for (const entry of entries) {
|
|
52
|
+
const rel = base ? `${base}/${entry.name}` : entry.name;
|
|
53
|
+
if (entry.isDirectory()) {
|
|
54
|
+
results.push(...scanConfigFiles(path_1.default.join(dir, entry.name), rel));
|
|
55
|
+
}
|
|
56
|
+
else if (entry.name.endsWith('.config')) {
|
|
57
|
+
results.push(rel);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return results;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Loads (or reloads) all .config files from APP_CONFIG_ROOT into AppConfig.
|
|
64
|
+
* Called once at startup and again via the /reload-configs API.
|
|
65
|
+
* Returns the full map of { relativePath → configObject }.
|
|
66
|
+
*/
|
|
67
|
+
function loadAllConfigs() {
|
|
68
|
+
const configRoot = appConfig_1.default.get('APP_CONFIG_ROOT');
|
|
69
|
+
const files = scanConfigFiles(configRoot);
|
|
70
|
+
const map = {};
|
|
71
|
+
for (const relPath of files) {
|
|
72
|
+
try {
|
|
73
|
+
const fullPath = path_1.default.join(configRoot, relPath);
|
|
74
|
+
const stats = fs_1.default.statSync(fullPath);
|
|
75
|
+
const normalizedRelPath = relPath.toLowerCase();
|
|
76
|
+
// Check :status ADS — default to 'active' if stream is absent
|
|
77
|
+
const fileStatus = readFileStatusSync(fullPath);
|
|
78
|
+
const isActive = fileStatus === null || fileStatus === 'active';
|
|
79
|
+
if (!isActive) {
|
|
80
|
+
// File is inactive: ensure it is removed from the map if present
|
|
81
|
+
const existingMap = appConfig_1.default.get(STORAGE_KEY) || {};
|
|
82
|
+
if (Object.prototype.hasOwnProperty.call(existingMap, normalizedRelPath)) {
|
|
83
|
+
delete existingMap[normalizedRelPath];
|
|
84
|
+
appConfig_1.default.set(STORAGE_KEY, existingMap);
|
|
85
|
+
console.log(`[ConfigLoader] Removed inactive config from map: "${relPath}"`);
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
console.log(`[ConfigLoader] Skipped inactive config: "${relPath}"`);
|
|
89
|
+
}
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
console.log(`[ConfigLoader] Loading "${relPath}" (${stats.size} bytes)`);
|
|
93
|
+
const content = fs_1.default.readFileSync(fullPath, 'utf-8');
|
|
94
|
+
const config = vm_1.default.runInNewContext(content);
|
|
95
|
+
map[normalizedRelPath] = config;
|
|
96
|
+
}
|
|
97
|
+
catch (err) {
|
|
98
|
+
console.warn(`[ConfigLoader] Skipped "${relPath}": ${err.message}`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
appConfig_1.default.set(STORAGE_KEY, map);
|
|
102
|
+
console.log(`[ConfigLoader] Loaded ${files.length} config file(s)`);
|
|
103
|
+
return map;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Re-scans and re-evaluates all config files.
|
|
107
|
+
* Call this from the reload API after adding or editing a file.
|
|
108
|
+
*/
|
|
109
|
+
function reloadConfigs() {
|
|
110
|
+
return loadAllConfigs();
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Reloads a single config file by its relative path into the in-memory map.
|
|
114
|
+
* Returns the updated config object, or null if the file doesn't exist.
|
|
115
|
+
*/
|
|
116
|
+
function reloadConfig(relativePath) {
|
|
117
|
+
const configRoot = appConfig_1.default.get('APP_CONFIG_ROOT');
|
|
118
|
+
const key = relativePath.replace(/\\/g, '/');
|
|
119
|
+
const normalized = path_1.default.normalize(key);
|
|
120
|
+
if (normalized.startsWith('..') || path_1.default.isAbsolute(normalized)) {
|
|
121
|
+
throw new Error('Invalid config path');
|
|
122
|
+
}
|
|
123
|
+
const fullPath = path_1.default.join(configRoot, normalized);
|
|
124
|
+
if (!fullPath.startsWith(path_1.default.resolve(configRoot))) {
|
|
125
|
+
throw new Error('Path outside config root is not allowed');
|
|
126
|
+
}
|
|
127
|
+
if (!fs_1.default.existsSync(fullPath)) {
|
|
128
|
+
throw new Error(`Config file not found: ${key}`);
|
|
129
|
+
}
|
|
130
|
+
const content = fs_1.default.readFileSync(fullPath, 'utf-8');
|
|
131
|
+
const config = vm_1.default.runInNewContext(content);
|
|
132
|
+
const map = appConfig_1.default.get(STORAGE_KEY) || {};
|
|
133
|
+
const normalizedKey = key.toLowerCase(); // normalise to lowercase for consistent access
|
|
134
|
+
map[normalizedKey] = config;
|
|
135
|
+
appConfig_1.default.set(STORAGE_KEY, map);
|
|
136
|
+
console.log(`[ConfigLoader] Reloaded "${key}"`);
|
|
137
|
+
return config;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Get a single config by its relative path.
|
|
141
|
+
* Returns null if not found — call reloadConfigs() first if you just added the file.
|
|
142
|
+
*/
|
|
143
|
+
function getConfig(relativePath) {
|
|
144
|
+
const map = appConfig_1.default.get(STORAGE_KEY) || {};
|
|
145
|
+
// normalise separators so both "myapp/all/vi.config" and "myapp\all\vi.config" work
|
|
146
|
+
const key = relativePath.replace(/\\/g, '/').toLowerCase();
|
|
147
|
+
return map[key] ?? null;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Returns the full key→value map of all loaded configs.
|
|
151
|
+
* Functions inside configs (e.g. `load`) are present but will be stripped
|
|
152
|
+
* by JSON.stringify — use getConfig() and call them directly server-side.
|
|
153
|
+
*/
|
|
154
|
+
function getAllConfigs() {
|
|
155
|
+
return appConfig_1.default.get(STORAGE_KEY) || {};
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Returns a JSON-safe summary of all loaded configs.
|
|
159
|
+
* Functions are replaced with the string "[Function]" so the output is serialisable.
|
|
160
|
+
*/
|
|
161
|
+
function getAllConfigsSafe() {
|
|
162
|
+
const map = getAllConfigs();
|
|
163
|
+
const safe = {};
|
|
164
|
+
for (const [key, value] of Object.entries(map)) {
|
|
165
|
+
const normalizedKey = key.toLowerCase(); // normalise to lowercase for consistent access
|
|
166
|
+
safe[normalizedKey] = sanitize(value);
|
|
167
|
+
}
|
|
168
|
+
return safe;
|
|
169
|
+
}
|
|
170
|
+
function sanitize(obj) {
|
|
171
|
+
if (typeof obj === 'function')
|
|
172
|
+
return '[Function]';
|
|
173
|
+
if (Array.isArray(obj))
|
|
174
|
+
return obj.map(sanitize);
|
|
175
|
+
if (obj && typeof obj === 'object') {
|
|
176
|
+
const out = {};
|
|
177
|
+
for (const [k, v] of Object.entries(obj)) {
|
|
178
|
+
out[k] = sanitize(v);
|
|
179
|
+
}
|
|
180
|
+
return out;
|
|
181
|
+
}
|
|
182
|
+
return obj;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Renames a key inside the in-memory map: removes the old key and adds the
|
|
186
|
+
* evaluated content under the new key. The caller is responsible for the
|
|
187
|
+
* actual file rename on disk before calling this.
|
|
188
|
+
*/
|
|
189
|
+
function renameConfigInMemory(oldRelativePath, newRelativePath) {
|
|
190
|
+
const oldKey = oldRelativePath.replace(/\\/g, '/').toLowerCase();
|
|
191
|
+
const newKey = newRelativePath.replace(/\\/g, '/').toLowerCase();
|
|
192
|
+
const configRoot = appConfig_1.default.get('APP_CONFIG_ROOT');
|
|
193
|
+
const map = appConfig_1.default.get(STORAGE_KEY) || {};
|
|
194
|
+
// Load the content from the already-renamed file on disk
|
|
195
|
+
const fullPath = path_1.default.join(configRoot, path_1.default.normalize(newRelativePath));
|
|
196
|
+
const content = fs_1.default.readFileSync(fullPath, 'utf-8');
|
|
197
|
+
const config = vm_1.default.runInNewContext(content);
|
|
198
|
+
delete map[oldKey];
|
|
199
|
+
map[newKey] = config;
|
|
200
|
+
appConfig_1.default.set(STORAGE_KEY, map);
|
|
201
|
+
console.log(`[ConfigLoader] Renamed in memory: "${oldKey}" → "${newKey}"`);
|
|
202
|
+
return config;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Removes a single config from the in-memory map without touching the file.
|
|
206
|
+
* Call this when a config file is marked inactive.
|
|
207
|
+
*/
|
|
208
|
+
function unloadConfig(relativePath) {
|
|
209
|
+
const key = relativePath.replace(/\\/g, '/').toLowerCase();
|
|
210
|
+
const map = appConfig_1.default.get(STORAGE_KEY) || {};
|
|
211
|
+
if (Object.prototype.hasOwnProperty.call(map, key)) {
|
|
212
|
+
delete map[key];
|
|
213
|
+
appConfig_1.default.set(STORAGE_KEY, map);
|
|
214
|
+
console.log(`[ConfigLoader] Unloaded "${key}" from memory`);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=config-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../../../core/system/config-manager/config-loader.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;;;;AA2CH,wCAwCC;AAMD,sCAEC;AAMD,oCA4BC;AAMD,8BAKC;AAOD,sCAEC;AAMD,8CAQC;AAoBD,oDAgBC;AAMD,oCAQC;AA/MD,4CAAoB;AACpB,gDAAwB;AACxB,4CAAoB;AACpB,gEAA+C;AAE/C,sDAAsD;AACtD,MAAM,WAAW,GAAG,gBAAgB,CAAC;AAErC,2FAA2F;AAC3F,SAAS,kBAAkB,CAAC,QAAgB;IAC1C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAE,CAAC,YAAY,CAAC,GAAG,QAAQ,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAChF,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,UAAU;YAAE,OAAO,GAA4B,CAAC;QAChF,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,mEAAmE;AACnE,SAAS,eAAe,CAAC,GAAW,EAAE,IAAI,GAAG,EAAE;IAC7C,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC;IAExC,MAAM,OAAO,GAAG,YAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;QACxD,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACpE,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,SAAgB,cAAc;IAC5B,MAAM,UAAU,GAAG,mBAAgB,CAAC,GAAG,CAAC,iBAAiB,CAAW,CAAC;IACrE,MAAM,KAAK,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IAC1C,MAAM,GAAG,GAAwB,EAAE,CAAC;IAEpC,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAChD,MAAM,KAAK,GAAG,YAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACpC,MAAM,iBAAiB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;YAEhD,8DAA8D;YAC9D,MAAM,UAAU,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YAChD,MAAM,QAAQ,GAAG,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,QAAQ,CAAC;YAEhE,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,iEAAiE;gBACjE,MAAM,WAAW,GAAG,mBAAgB,CAAC,GAAG,CAAsB,WAAW,CAAC,IAAI,EAAE,CAAC;gBACjF,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,iBAAiB,CAAC,EAAE,CAAC;oBACzE,OAAO,WAAW,CAAC,iBAAiB,CAAC,CAAC;oBACtC,mBAAgB,CAAC,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;oBAC/C,OAAO,CAAC,GAAG,CAAC,qDAAqD,OAAO,GAAG,CAAC,CAAC;gBAC/E,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,4CAA4C,OAAO,GAAG,CAAC,CAAC;gBACtE,CAAC;gBACD,SAAS;YACX,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,2BAA2B,OAAO,MAAM,KAAK,CAAC,IAAI,SAAS,CAAC,CAAC;YACzE,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACnD,MAAM,MAAM,GAAG,YAAE,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAC3C,GAAG,CAAC,iBAAiB,CAAC,GAAG,MAAM,CAAC;QAClC,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC,2BAA2B,OAAO,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAED,mBAAgB,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,yBAAyB,KAAK,CAAC,MAAM,iBAAiB,CAAC,CAAC;IACpE,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,SAAgB,aAAa;IAC3B,OAAO,cAAc,EAAE,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACH,SAAgB,YAAY,CAAC,YAAoB;IAC/C,MAAM,UAAU,GAAG,mBAAgB,CAAC,GAAG,CAAC,iBAAiB,CAAW,CAAC;IACrE,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAE7C,MAAM,UAAU,GAAG,cAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACvC,IAAI,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,cAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/D,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACnD,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,cAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,YAAE,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAE3C,MAAM,GAAG,GAAG,mBAAgB,CAAC,GAAG,CAAsB,WAAW,CAAC,IAAI,EAAE,CAAC;IACzE,MAAM,aAAa,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,+CAA+C;IACxF,GAAG,CAAC,aAAa,CAAC,GAAG,MAAM,CAAC;IAC5B,mBAAgB,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IAEvC,OAAO,CAAC,GAAG,CAAC,4BAA4B,GAAG,GAAG,CAAC,CAAC;IAChD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,SAAgB,SAAS,CAAC,YAAoB;IAC5C,MAAM,GAAG,GAAG,mBAAgB,CAAC,GAAG,CAAsB,WAAW,CAAC,IAAI,EAAE,CAAC;IACzE,oFAAoF;IACpF,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAC3D,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;AAC1B,CAAC;AAED;;;;GAIG;AACH,SAAgB,aAAa;IAC3B,OAAO,mBAAgB,CAAC,GAAG,CAAsB,WAAW,CAAC,IAAI,EAAE,CAAC;AACtE,CAAC;AAED;;;GAGG;AACH,SAAgB,iBAAiB;IAC/B,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;IAC5B,MAAM,IAAI,GAAwB,EAAE,CAAC;IACrC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,MAAM,aAAa,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,+CAA+C;QACxF,IAAI,CAAC,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,QAAQ,CAAC,GAAQ;IACxB,IAAI,OAAO,GAAG,KAAK,UAAU;QAAE,OAAO,YAAY,CAAC;IACnD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACjD,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACnC,MAAM,GAAG,GAAQ,EAAE,CAAC;QACpB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACzC,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,SAAgB,oBAAoB,CAAC,eAAuB,EAAE,eAAuB;IACnF,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IACjE,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IACjE,MAAM,UAAU,GAAG,mBAAgB,CAAC,GAAG,CAAC,iBAAiB,CAAW,CAAC;IACrE,MAAM,GAAG,GAAG,mBAAgB,CAAC,GAAG,CAAsB,WAAW,CAAC,IAAI,EAAE,CAAC;IAEzE,yDAAyD;IACzD,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC;IACxE,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,YAAE,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAE3C,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC;IACnB,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;IACrB,mBAAgB,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,sCAAsC,MAAM,QAAQ,MAAM,GAAG,CAAC,CAAC;IAC3E,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,SAAgB,YAAY,CAAC,YAAoB;IAC/C,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAC3D,MAAM,GAAG,GAAG,mBAAgB,CAAC,GAAG,CAAsB,WAAW,CAAC,IAAI,EAAE,CAAC;IACzE,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;QACnD,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;QAChB,mBAAgB,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,4BAA4B,GAAG,eAAe,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Request, Response } from 'express';
|
|
2
|
+
export declare function fileHandler(req: Request, res: Response): Promise<Response<any, Record<string, any>>>;
|
|
3
|
+
export declare function saveHandler(req: Request, res: Response): Promise<Response<any, Record<string, any>>>;
|
|
4
|
+
//# sourceMappingURL=file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../../../core/system/config-manager/handlers/file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAc5C,wBAAsB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,+CA4B5D;AAKD,wBAAsB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,+CA6B5D"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.fileHandler = fileHandler;
|
|
7
|
+
exports.saveHandler = saveHandler;
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const promises_1 = __importDefault(require("fs/promises"));
|
|
10
|
+
const helpers_1 = require("../helpers");
|
|
11
|
+
// POST /config-manager/file
|
|
12
|
+
// Returns file content. Path in body.path (appends .config if missing).
|
|
13
|
+
async function fileHandler(req, res) {
|
|
14
|
+
try {
|
|
15
|
+
const relativePath = String(req.body.path || '');
|
|
16
|
+
if (!relativePath)
|
|
17
|
+
return res.status(400).json({ status: false, error: 'Relative path is required' });
|
|
18
|
+
const effectiveRelative = (0, helpers_1.normalizeToConfigFile)(relativePath);
|
|
19
|
+
const targetPath = (0, helpers_1.resolveConfigPath)(effectiveRelative);
|
|
20
|
+
(0, helpers_1.ensurePathInsideRoot)(targetPath);
|
|
21
|
+
const stat = await promises_1.default.stat(targetPath).catch(() => null);
|
|
22
|
+
if (!stat)
|
|
23
|
+
return res.status(404).json({ status: false, error: 'File not found' });
|
|
24
|
+
if (stat.isDirectory())
|
|
25
|
+
return res.status(400).json({ status: false, error: 'Path is a directory' });
|
|
26
|
+
const content = await promises_1.default.readFile(targetPath, 'utf8');
|
|
27
|
+
const configStatus = await (0, helpers_1.readFileStatus)(targetPath);
|
|
28
|
+
return res.json({
|
|
29
|
+
status: true,
|
|
30
|
+
path: effectiveRelative,
|
|
31
|
+
content,
|
|
32
|
+
configStatus: configStatus ?? 'active',
|
|
33
|
+
size: stat.size,
|
|
34
|
+
modifiedAt: stat.mtime,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
return res.status(500).json({ status: false, error: error.message });
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// POST /config-manager/save
|
|
42
|
+
// Create or overwrite a .config file. Stamps status: 'active' into the content.
|
|
43
|
+
// Path comes from the "path" request header; raw text body is the file content.
|
|
44
|
+
async function saveHandler(req, res) {
|
|
45
|
+
try {
|
|
46
|
+
let relativePath = String(req.headers['path'] || '');
|
|
47
|
+
relativePath = relativePath.trim().toLowerCase();
|
|
48
|
+
const content = typeof req.body === 'string' ? req.body : '';
|
|
49
|
+
if (!relativePath)
|
|
50
|
+
return res.status(400).json({ status: false, error: '"path" header is required' });
|
|
51
|
+
const effectiveRelative = (0, helpers_1.normalizeToConfigFile)(relativePath);
|
|
52
|
+
const targetPath = (0, helpers_1.resolveConfigPath)(effectiveRelative);
|
|
53
|
+
(0, helpers_1.ensurePathInsideRoot)(targetPath);
|
|
54
|
+
await (0, helpers_1.ensureFolder)(path_1.default.dirname(targetPath));
|
|
55
|
+
await promises_1.default.writeFile(targetPath, content, 'utf8');
|
|
56
|
+
await (0, helpers_1.writeFileStatus)(targetPath, 'active');
|
|
57
|
+
const stat = await promises_1.default.stat(targetPath);
|
|
58
|
+
return res.json({
|
|
59
|
+
status: true,
|
|
60
|
+
message: 'File saved',
|
|
61
|
+
path: effectiveRelative,
|
|
62
|
+
size: stat.size,
|
|
63
|
+
modifiedAt: stat.mtime,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
return res.status(500).json({ status: false, error: error.message });
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file.js","sourceRoot":"","sources":["../../../../core/system/config-manager/handlers/file.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Request, Response } from 'express';
|
|
2
|
+
export declare function reloadConfigsHandler(req: Request, res: Response): Promise<Response<any, Record<string, any>>>;
|
|
3
|
+
export declare function getConfigHandler(req: Request, res: Response): Response<any, Record<string, any>>;
|
|
4
|
+
//# sourceMappingURL=reload-configs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reload-configs.d.ts","sourceRoot":"","sources":["../../../../core/system/config-manager/handlers/reload-configs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAY5C,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,+CA+BrE;AAKD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,sCAsB3D"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.reloadConfigsHandler = reloadConfigsHandler;
|
|
4
|
+
exports.getConfigHandler = getConfigHandler;
|
|
5
|
+
const config_loader_1 = require("../config-loader");
|
|
6
|
+
// POST /config-manager/reload-configs
|
|
7
|
+
// Reloads .config files into the in-memory AppConfig store.
|
|
8
|
+
// "path" header provided → reload that single file only.
|
|
9
|
+
// no "path" header → reload ALL config files.
|
|
10
|
+
async function reloadConfigsHandler(req, res) {
|
|
11
|
+
const singlePath = String(req.headers['path'] || '').trim();
|
|
12
|
+
if (singlePath) {
|
|
13
|
+
try {
|
|
14
|
+
const config = (0, config_loader_1.reloadConfig)(singlePath);
|
|
15
|
+
const safe = JSON.parse(JSON.stringify(config, (_k, v) => (typeof v === 'function' ? '[Function]' : v)));
|
|
16
|
+
return res.json({
|
|
17
|
+
status: true,
|
|
18
|
+
message: `Config reloaded: ${singlePath}`,
|
|
19
|
+
path: singlePath,
|
|
20
|
+
output: safe,
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
return res.status(400).json({ status: false, error: error.message });
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
try {
|
|
28
|
+
const map = (0, config_loader_1.reloadConfigs)();
|
|
29
|
+
const keys = Object.keys(map);
|
|
30
|
+
return res.json({
|
|
31
|
+
status: true,
|
|
32
|
+
message: `${keys.length} config file(s) reloaded into memory`,
|
|
33
|
+
configs: (0, config_loader_1.getAllConfigsSafe)(),
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
return res.status(500).json({ status: false, error: error.message });
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
// POST /config-manager/get-config
|
|
41
|
+
// Returns the in-memory value of a specific config file by relative path.
|
|
42
|
+
// Body: { "path": "myapp/all/vi.config" }
|
|
43
|
+
function getConfigHandler(req, res) {
|
|
44
|
+
try {
|
|
45
|
+
const relativePath = String(req.body?.path || '');
|
|
46
|
+
if (!relativePath) {
|
|
47
|
+
return res.status(400).json({ status: false, error: '"path" is required in the request body' });
|
|
48
|
+
}
|
|
49
|
+
const config = (0, config_loader_1.getConfig)(relativePath);
|
|
50
|
+
if (config === null) {
|
|
51
|
+
return res.status(404).json({
|
|
52
|
+
status: false,
|
|
53
|
+
error: `Config not found in memory: ${relativePath}. Try calling /reload-configs first.`,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
const safe = JSON.parse(JSON.stringify(config, (_k, v) => (typeof v === 'function' ? '[Function]' : v)));
|
|
57
|
+
return res.json({ status: true, path: relativePath, output: safe });
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
return res.status(500).json({ status: false, error: error.message });
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=reload-configs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reload-configs.js","sourceRoot":"","sources":["../../../../core/system/config-manager/handlers/reload-configs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rename.d.ts","sourceRoot":"","sources":["../../../../core/system/config-manager/handlers/rename.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAmB5C,wBAAsB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,+CAuE9D"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.renameHandler = renameHandler;
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const promises_1 = __importDefault(require("fs/promises"));
|
|
9
|
+
const helpers_1 = require("../helpers");
|
|
10
|
+
const config_loader_1 = require("../config-loader");
|
|
11
|
+
// POST /config-manager/rename
|
|
12
|
+
// Renames a .config file on disk and updates the in-memory App_Configurator map.
|
|
13
|
+
// Body: { "path": "myapp/all/old-name.config", "newName": "new-name" }
|
|
14
|
+
// - "newName" is the filename only (no directory, no extension needed)
|
|
15
|
+
// - Case-sensitive conflict check: if the new path already exists, returns 409
|
|
16
|
+
// - Carries the :status ADS stream over to the new file
|
|
17
|
+
// - Removes the old key from App_Configurator and adds the new key
|
|
18
|
+
async function renameHandler(req, res) {
|
|
19
|
+
try {
|
|
20
|
+
const rawPath = String(req.body?.path || '').trim().toLowerCase();
|
|
21
|
+
const rawNewName = String(req.body?.newName || '').trim();
|
|
22
|
+
if (!rawPath)
|
|
23
|
+
return res.status(400).json({ status: false, error: '"path" is required in the request body' });
|
|
24
|
+
if (!rawNewName)
|
|
25
|
+
return res.status(400).json({ status: false, error: '"newName" is required in the request body' });
|
|
26
|
+
// newName must be a plain filename — no slashes, no path traversal
|
|
27
|
+
if (rawNewName.includes('/') || rawNewName.includes('\\') || rawNewName.includes('..'))
|
|
28
|
+
return res.status(400).json({ status: false, error: '"newName" must be a filename only, not a path' });
|
|
29
|
+
// Resolve source
|
|
30
|
+
const effectiveOld = (0, helpers_1.normalizeToConfigFile)(rawPath);
|
|
31
|
+
const oldAbsolute = (0, helpers_1.resolveConfigPath)(effectiveOld);
|
|
32
|
+
(0, helpers_1.ensurePathInsideRoot)(oldAbsolute);
|
|
33
|
+
const oldStat = await promises_1.default.stat(oldAbsolute).catch(() => null);
|
|
34
|
+
if (!oldStat)
|
|
35
|
+
return res.status(404).json({ status: false, error: 'Source config file not found' });
|
|
36
|
+
if (oldStat.isDirectory())
|
|
37
|
+
return res.status(400).json({ status: false, error: 'Source path is a directory' });
|
|
38
|
+
// Build new relative path: same directory, different filename
|
|
39
|
+
const dir = path_1.default.dirname(effectiveOld);
|
|
40
|
+
const newBaseName = path_1.default.extname(rawNewName) === '.config' ? rawNewName : `${rawNewName}.config`;
|
|
41
|
+
const effectiveNew = dir === '.' ? newBaseName : `${dir}/${newBaseName}`;
|
|
42
|
+
const newAbsolute = (0, helpers_1.resolveConfigPath)(effectiveNew);
|
|
43
|
+
(0, helpers_1.ensurePathInsideRoot)(newAbsolute);
|
|
44
|
+
// Case-sensitive conflict check (fs.stat is case-sensitive on Linux; on Windows
|
|
45
|
+
// we read the directory and compare exact names to enforce case-sensitivity)
|
|
46
|
+
const parentDir = path_1.default.dirname(newAbsolute);
|
|
47
|
+
const targetName = path_1.default.basename(newAbsolute);
|
|
48
|
+
const siblings = await promises_1.default.readdir(parentDir).catch(() => []);
|
|
49
|
+
const conflict = siblings.find((n) => n === targetName); // exact, case-sensitive match
|
|
50
|
+
if (conflict)
|
|
51
|
+
return res.status(409).json({
|
|
52
|
+
status: false,
|
|
53
|
+
error: `A file named "${targetName}" already exists (case-sensitive check)`,
|
|
54
|
+
});
|
|
55
|
+
// Read ADS status before rename (rename does not copy ADS on all platforms)
|
|
56
|
+
const existingStatus = await (0, helpers_1.readFileStatus)(oldAbsolute);
|
|
57
|
+
// Rename the file on disk
|
|
58
|
+
await promises_1.default.rename(oldAbsolute, newAbsolute);
|
|
59
|
+
// Restore ADS status on the new file path
|
|
60
|
+
if (existingStatus) {
|
|
61
|
+
await (0, helpers_1.writeFileStatus)(newAbsolute, existingStatus);
|
|
62
|
+
}
|
|
63
|
+
// Update App_Configurator: remove old key, load new key
|
|
64
|
+
(0, config_loader_1.renameConfigInMemory)(effectiveOld, effectiveNew);
|
|
65
|
+
const stat = await promises_1.default.stat(newAbsolute);
|
|
66
|
+
return res.json({
|
|
67
|
+
status: true,
|
|
68
|
+
message: `Renamed "${effectiveOld}" → "${effectiveNew}"`,
|
|
69
|
+
oldPath: effectiveOld,
|
|
70
|
+
newPath: effectiveNew,
|
|
71
|
+
configStatus: existingStatus ?? 'active',
|
|
72
|
+
size: stat.size,
|
|
73
|
+
modifiedAt: stat.mtime,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
return res.status(500).json({ status: false, error: error.message });
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=rename.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rename.js","sourceRoot":"","sources":["../../../../core/system/config-manager/handlers/rename.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../../core/system/config-manager/handlers/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAkB5C,wBAAsB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,+CA4C9D"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.statusHandler = statusHandler;
|
|
7
|
+
const promises_1 = __importDefault(require("fs/promises"));
|
|
8
|
+
const helpers_1 = require("../helpers");
|
|
9
|
+
const config_loader_1 = require("../config-loader");
|
|
10
|
+
// POST /config-manager/status
|
|
11
|
+
// Update the `status` property of a config file and sync with the in-memory map.
|
|
12
|
+
// Body: { "path": "myapp/all/vi.config", "status": "active" | "inactive" }
|
|
13
|
+
// active → write status into file + load into App_Configurator map
|
|
14
|
+
// inactive → write status into file + remove from App_Configurator map
|
|
15
|
+
async function statusHandler(req, res) {
|
|
16
|
+
console.log('Received status update request:', req.body, req);
|
|
17
|
+
try {
|
|
18
|
+
const relativePath = String(req.body?.path || req.headers['path'] || '').trim().toLowerCase();
|
|
19
|
+
const newStatus = String(req.headers['status'] || '').trim().toLowerCase();
|
|
20
|
+
console.log('Received status update request:', { relativePath, newStatus }, req);
|
|
21
|
+
if (!relativePath)
|
|
22
|
+
return res.status(400).json({ status: false, error: '"path" is required in the request body' });
|
|
23
|
+
if (newStatus !== 'active' && newStatus !== 'inactive')
|
|
24
|
+
return res.status(400).json({ status: false, error: '"status" must be "active" or "inactive"' });
|
|
25
|
+
const effectiveRelative = (0, helpers_1.normalizeToConfigFile)(relativePath);
|
|
26
|
+
const targetPath = (0, helpers_1.resolveConfigPath)(effectiveRelative);
|
|
27
|
+
(0, helpers_1.ensurePathInsideRoot)(targetPath);
|
|
28
|
+
const fileStat = await promises_1.default.stat(targetPath).catch(() => null);
|
|
29
|
+
if (!fileStat)
|
|
30
|
+
return res.status(404).json({ status: false, error: 'Config file not found' });
|
|
31
|
+
if (fileStat.isDirectory())
|
|
32
|
+
return res.status(400).json({ status: false, error: 'Path is a directory' });
|
|
33
|
+
// Write status into the file's alternate data stream (does not touch file content)
|
|
34
|
+
await (0, helpers_1.writeFileStatus)(targetPath, newStatus);
|
|
35
|
+
if (newStatus === 'active') {
|
|
36
|
+
(0, config_loader_1.reloadConfig)(effectiveRelative);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
(0, config_loader_1.unloadConfig)(effectiveRelative);
|
|
40
|
+
}
|
|
41
|
+
const stat = await promises_1.default.stat(targetPath);
|
|
42
|
+
return res.json({
|
|
43
|
+
status: true,
|
|
44
|
+
message: `Config status set to "${newStatus}"`,
|
|
45
|
+
path: effectiveRelative,
|
|
46
|
+
configStatus: newStatus,
|
|
47
|
+
size: stat.size,
|
|
48
|
+
modifiedAt: stat.mtime,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
return res.status(500).json({ status: false, error: error.message });
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../../core/system/config-manager/handlers/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Request, Response } from 'express';
|
|
2
|
+
export declare function treeHandler(req: Request, res: Response): Promise<Response<any, Record<string, any>>>;
|
|
3
|
+
export declare function reloadHandler(_req: Request, res: Response): Promise<Response<any, Record<string, any>>>;
|
|
4
|
+
//# sourceMappingURL=tree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../../../../core/system/config-manager/handlers/tree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAc5C,wBAAsB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,+CA6B5D;AAID,wBAAsB,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,+CAoB/D"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.treeHandler = treeHandler;
|
|
7
|
+
exports.reloadHandler = reloadHandler;
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const promises_1 = __importDefault(require("fs/promises"));
|
|
10
|
+
const helpers_1 = require("../helpers");
|
|
11
|
+
// POST /config-manager/tree
|
|
12
|
+
// Returns recursive tree of files/directories under a given path (body.path). Root if omitted.
|
|
13
|
+
async function treeHandler(req, res) {
|
|
14
|
+
try {
|
|
15
|
+
const relativePath = String(req.body.path || '.');
|
|
16
|
+
const targetPath = (0, helpers_1.resolveConfigPath)(relativePath || '.');
|
|
17
|
+
(0, helpers_1.ensurePathInsideRoot)(targetPath);
|
|
18
|
+
const stat = await promises_1.default.stat(targetPath).catch(() => null);
|
|
19
|
+
if (!stat)
|
|
20
|
+
return res.status(404).json({ status: false, error: 'Path not found' });
|
|
21
|
+
if (stat.isDirectory()) {
|
|
22
|
+
const tree = await (0, helpers_1.buildTree)(targetPath, relativePath === '.' ? '' : relativePath);
|
|
23
|
+
return res.json({ status: true, path: relativePath === '.' ? '' : relativePath, tree });
|
|
24
|
+
}
|
|
25
|
+
const configStatus = await (0, helpers_1.readFileStatus)(targetPath);
|
|
26
|
+
return res.json({
|
|
27
|
+
status: true,
|
|
28
|
+
path: relativePath,
|
|
29
|
+
file: {
|
|
30
|
+
name: path_1.default.basename(relativePath),
|
|
31
|
+
path: relativePath,
|
|
32
|
+
size: stat.size,
|
|
33
|
+
modifiedAt: stat.mtime,
|
|
34
|
+
configStatus: configStatus ?? 'active',
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
return res.status(500).json({ status: false, error: error.message });
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// POST /config-manager/reload
|
|
43
|
+
// Rescans the config root directory and returns the fresh file tree.
|
|
44
|
+
async function reloadHandler(_req, res) {
|
|
45
|
+
try {
|
|
46
|
+
const stat = await promises_1.default.stat(helpers_1.CONFIG_ROOT).catch(() => null);
|
|
47
|
+
if (!stat || !stat.isDirectory()) {
|
|
48
|
+
return res.status(500).json({ status: false, error: 'Config root directory not found' });
|
|
49
|
+
}
|
|
50
|
+
const tree = await (0, helpers_1.buildTree)(helpers_1.CONFIG_ROOT, '');
|
|
51
|
+
const summary = (0, helpers_1.countTreeItems)(tree);
|
|
52
|
+
return res.json({
|
|
53
|
+
status: true,
|
|
54
|
+
message: 'Config root rescanned successfully',
|
|
55
|
+
configRoot: helpers_1.CONFIG_ROOT,
|
|
56
|
+
summary,
|
|
57
|
+
tree,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
return res.status(500).json({ status: false, error: error.message });
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=tree.js.map
|