create-fluxstack 1.0.5 → 1.0.7
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/.claude/settings.local.json +2 -1
- package/create-fluxstack.ts +1 -0
- package/package.json +3 -3
- package/ENV_TESTING_REPORT.md +0 -292
- package/FRAMEWORK_ROADMAP.md +0 -183
- package/FRONTEND_TESTS_README.md +0 -287
- package/TEST_RESULTS.md +0 -130
- package/docs/dynamic-environment-variables.md +0 -380
- package/examples/dynamic-env-usage.ts +0 -283
- package/examples/hybrid-env-strategy.ts +0 -212
- package/examples/simplified-env-usage.ts +0 -251
- package/meu-app-teste/README.md +0 -44
- package/meu-app-teste/app/client/README.md +0 -69
- package/meu-app-teste/app/client/frontend-only.ts +0 -12
- package/meu-app-teste/app/client/index.html +0 -13
- package/meu-app-teste/app/client/public/vite.svg +0 -1
- package/meu-app-teste/app/client/src/App.css +0 -883
- package/meu-app-teste/app/client/src/App.tsx +0 -669
- package/meu-app-teste/app/client/src/assets/react.svg +0 -1
- package/meu-app-teste/app/client/src/components/TestPage.tsx +0 -453
- package/meu-app-teste/app/client/src/index.css +0 -51
- package/meu-app-teste/app/client/src/lib/eden-api.ts +0 -110
- package/meu-app-teste/app/client/src/main.tsx +0 -10
- package/meu-app-teste/app/client/src/vite-env.d.ts +0 -1
- package/meu-app-teste/app/client/tsconfig.app.json +0 -43
- package/meu-app-teste/app/client/tsconfig.json +0 -7
- package/meu-app-teste/app/client/tsconfig.node.json +0 -25
- package/meu-app-teste/app/server/app.ts +0 -10
- package/meu-app-teste/app/server/backend-only.ts +0 -15
- package/meu-app-teste/app/server/controllers/users.controller.ts +0 -69
- package/meu-app-teste/app/server/index.ts +0 -104
- package/meu-app-teste/app/server/routes/index.ts +0 -25
- package/meu-app-teste/app/server/routes/users.routes.ts +0 -121
- package/meu-app-teste/app/server/types/index.ts +0 -1
- package/meu-app-teste/app/shared/types/index.ts +0 -18
- package/meu-app-teste/bun.lock +0 -1053
- package/meu-app-teste/core/__tests__/integration.test.ts +0 -227
- package/meu-app-teste/core/build/index.ts +0 -186
- package/meu-app-teste/core/cli/command-registry.ts +0 -334
- package/meu-app-teste/core/cli/index.ts +0 -394
- package/meu-app-teste/core/cli/plugin-discovery.ts +0 -200
- package/meu-app-teste/core/client/standalone.ts +0 -57
- package/meu-app-teste/core/config/__tests__/config-loader.test.ts +0 -591
- package/meu-app-teste/core/config/__tests__/config-merger.test.ts +0 -657
- package/meu-app-teste/core/config/__tests__/env-converter.test.ts +0 -372
- package/meu-app-teste/core/config/__tests__/env-processor.test.ts +0 -431
- package/meu-app-teste/core/config/__tests__/env.test.ts +0 -452
- package/meu-app-teste/core/config/__tests__/integration.test.ts +0 -418
- package/meu-app-teste/core/config/__tests__/loader.test.ts +0 -331
- package/meu-app-teste/core/config/__tests__/schema.test.ts +0 -129
- package/meu-app-teste/core/config/__tests__/validator.test.ts +0 -318
- package/meu-app-teste/core/config/env-dynamic.ts +0 -326
- package/meu-app-teste/core/config/env.ts +0 -597
- package/meu-app-teste/core/config/index.ts +0 -317
- package/meu-app-teste/core/config/loader.ts +0 -546
- package/meu-app-teste/core/config/runtime-config.ts +0 -322
- package/meu-app-teste/core/config/schema.ts +0 -694
- package/meu-app-teste/core/config/validator.ts +0 -540
- package/meu-app-teste/core/framework/__tests__/server.test.ts +0 -233
- package/meu-app-teste/core/framework/client.ts +0 -132
- package/meu-app-teste/core/framework/index.ts +0 -8
- package/meu-app-teste/core/framework/server.ts +0 -501
- package/meu-app-teste/core/framework/types.ts +0 -63
- package/meu-app-teste/core/plugins/__tests__/built-in.test.ts.disabled +0 -366
- package/meu-app-teste/core/plugins/__tests__/manager.test.ts +0 -398
- package/meu-app-teste/core/plugins/__tests__/monitoring.test.ts +0 -401
- package/meu-app-teste/core/plugins/__tests__/registry.test.ts +0 -335
- package/meu-app-teste/core/plugins/built-in/index.ts +0 -142
- package/meu-app-teste/core/plugins/built-in/logger/index.ts +0 -180
- package/meu-app-teste/core/plugins/built-in/monitoring/README.md +0 -193
- package/meu-app-teste/core/plugins/built-in/monitoring/index.ts +0 -912
- package/meu-app-teste/core/plugins/built-in/static/index.ts +0 -289
- package/meu-app-teste/core/plugins/built-in/swagger/index.ts +0 -229
- package/meu-app-teste/core/plugins/built-in/vite/index.ts +0 -316
- package/meu-app-teste/core/plugins/config.ts +0 -348
- package/meu-app-teste/core/plugins/discovery.ts +0 -350
- package/meu-app-teste/core/plugins/executor.ts +0 -351
- package/meu-app-teste/core/plugins/index.ts +0 -195
- package/meu-app-teste/core/plugins/manager.ts +0 -583
- package/meu-app-teste/core/plugins/registry.ts +0 -424
- package/meu-app-teste/core/plugins/types.ts +0 -254
- package/meu-app-teste/core/server/framework.ts +0 -123
- package/meu-app-teste/core/server/index.ts +0 -8
- package/meu-app-teste/core/server/plugins/database.ts +0 -182
- package/meu-app-teste/core/server/plugins/logger.ts +0 -47
- package/meu-app-teste/core/server/plugins/swagger.ts +0 -34
- package/meu-app-teste/core/server/standalone.ts +0 -91
- package/meu-app-teste/core/templates/create-project.ts +0 -455
- package/meu-app-teste/core/types/api.ts +0 -169
- package/meu-app-teste/core/types/build.ts +0 -174
- package/meu-app-teste/core/types/config.ts +0 -68
- package/meu-app-teste/core/types/index.ts +0 -127
- package/meu-app-teste/core/types/plugin.ts +0 -94
- package/meu-app-teste/core/utils/__tests__/errors.test.ts +0 -139
- package/meu-app-teste/core/utils/__tests__/helpers.test.ts +0 -297
- package/meu-app-teste/core/utils/__tests__/logger.test.ts +0 -141
- package/meu-app-teste/core/utils/env-runtime-v2.ts +0 -232
- package/meu-app-teste/core/utils/env-runtime.ts +0 -252
- package/meu-app-teste/core/utils/errors/codes.ts +0 -115
- package/meu-app-teste/core/utils/errors/handlers.ts +0 -63
- package/meu-app-teste/core/utils/errors/index.ts +0 -81
- package/meu-app-teste/core/utils/helpers.ts +0 -180
- package/meu-app-teste/core/utils/index.ts +0 -18
- package/meu-app-teste/core/utils/logger/index.ts +0 -161
- package/meu-app-teste/core/utils/logger.ts +0 -106
- package/meu-app-teste/core/utils/monitoring/index.ts +0 -212
- package/meu-app-teste/package.json +0 -92
- package/meu-app-teste/tsconfig.json +0 -51
- package/meu-app-teste/vite.config.ts +0 -42
- package/my-final-test/README.md +0 -44
- package/my-final-test/app/client/README.md +0 -69
- package/my-final-test/app/client/frontend-only.ts +0 -12
- package/my-final-test/app/client/index.html +0 -13
- package/my-final-test/app/client/public/vite.svg +0 -1
- package/my-final-test/app/client/src/App.css +0 -883
- package/my-final-test/app/client/src/App.tsx +0 -669
- package/my-final-test/app/client/src/assets/react.svg +0 -1
- package/my-final-test/app/client/src/components/TestPage.tsx +0 -453
- package/my-final-test/app/client/src/index.css +0 -51
- package/my-final-test/app/client/src/lib/eden-api.ts +0 -110
- package/my-final-test/app/client/src/main.tsx +0 -10
- package/my-final-test/app/client/src/vite-env.d.ts +0 -1
- package/my-final-test/app/client/tsconfig.app.json +0 -43
- package/my-final-test/app/client/tsconfig.json +0 -7
- package/my-final-test/app/client/tsconfig.node.json +0 -25
- package/my-final-test/app/server/app.ts +0 -10
- package/my-final-test/app/server/backend-only.ts +0 -15
- package/my-final-test/app/server/controllers/users.controller.ts +0 -69
- package/my-final-test/app/server/index.ts +0 -104
- package/my-final-test/app/server/routes/index.ts +0 -25
- package/my-final-test/app/server/routes/users.routes.ts +0 -121
- package/my-final-test/app/server/types/index.ts +0 -1
- package/my-final-test/app/shared/types/index.ts +0 -18
- package/my-final-test/bun.lock +0 -993
- package/my-final-test/core/__tests__/integration.test.ts +0 -227
- package/my-final-test/core/build/index.ts +0 -186
- package/my-final-test/core/cli/command-registry.ts +0 -334
- package/my-final-test/core/cli/index.ts +0 -394
- package/my-final-test/core/cli/plugin-discovery.ts +0 -200
- package/my-final-test/core/client/standalone.ts +0 -57
- package/my-final-test/core/config/__tests__/config-loader.test.ts +0 -591
- package/my-final-test/core/config/__tests__/config-merger.test.ts +0 -657
- package/my-final-test/core/config/__tests__/env-converter.test.ts +0 -372
- package/my-final-test/core/config/__tests__/env-processor.test.ts +0 -431
- package/my-final-test/core/config/__tests__/env.test.ts +0 -452
- package/my-final-test/core/config/__tests__/integration.test.ts +0 -418
- package/my-final-test/core/config/__tests__/loader.test.ts +0 -331
- package/my-final-test/core/config/__tests__/schema.test.ts +0 -129
- package/my-final-test/core/config/__tests__/validator.test.ts +0 -318
- package/my-final-test/core/config/env-dynamic.ts +0 -326
- package/my-final-test/core/config/env.ts +0 -597
- package/my-final-test/core/config/index.ts +0 -317
- package/my-final-test/core/config/loader.ts +0 -546
- package/my-final-test/core/config/runtime-config.ts +0 -322
- package/my-final-test/core/config/schema.ts +0 -694
- package/my-final-test/core/config/validator.ts +0 -540
- package/my-final-test/core/framework/__tests__/server.test.ts +0 -233
- package/my-final-test/core/framework/client.ts +0 -132
- package/my-final-test/core/framework/index.ts +0 -8
- package/my-final-test/core/framework/server.ts +0 -501
- package/my-final-test/core/framework/types.ts +0 -63
- package/my-final-test/core/plugins/__tests__/built-in.test.ts.disabled +0 -366
- package/my-final-test/core/plugins/__tests__/manager.test.ts +0 -398
- package/my-final-test/core/plugins/__tests__/monitoring.test.ts +0 -401
- package/my-final-test/core/plugins/__tests__/registry.test.ts +0 -335
- package/my-final-test/core/plugins/built-in/index.ts +0 -142
- package/my-final-test/core/plugins/built-in/logger/index.ts +0 -180
- package/my-final-test/core/plugins/built-in/monitoring/README.md +0 -193
- package/my-final-test/core/plugins/built-in/monitoring/index.ts +0 -912
- package/my-final-test/core/plugins/built-in/static/index.ts +0 -289
- package/my-final-test/core/plugins/built-in/swagger/index.ts +0 -229
- package/my-final-test/core/plugins/built-in/vite/index.ts +0 -316
- package/my-final-test/core/plugins/config.ts +0 -348
- package/my-final-test/core/plugins/discovery.ts +0 -350
- package/my-final-test/core/plugins/executor.ts +0 -351
- package/my-final-test/core/plugins/index.ts +0 -195
- package/my-final-test/core/plugins/manager.ts +0 -583
- package/my-final-test/core/plugins/registry.ts +0 -424
- package/my-final-test/core/plugins/types.ts +0 -254
- package/my-final-test/core/server/framework.ts +0 -123
- package/my-final-test/core/server/index.ts +0 -8
- package/my-final-test/core/server/plugins/database.ts +0 -182
- package/my-final-test/core/server/plugins/logger.ts +0 -47
- package/my-final-test/core/server/plugins/swagger.ts +0 -34
- package/my-final-test/core/server/standalone.ts +0 -91
- package/my-final-test/core/templates/create-project.ts +0 -455
- package/my-final-test/core/types/api.ts +0 -169
- package/my-final-test/core/types/build.ts +0 -174
- package/my-final-test/core/types/config.ts +0 -68
- package/my-final-test/core/types/index.ts +0 -127
- package/my-final-test/core/types/plugin.ts +0 -94
- package/my-final-test/core/utils/__tests__/errors.test.ts +0 -139
- package/my-final-test/core/utils/__tests__/helpers.test.ts +0 -297
- package/my-final-test/core/utils/__tests__/logger.test.ts +0 -141
- package/my-final-test/core/utils/env-runtime-v2.ts +0 -232
- package/my-final-test/core/utils/env-runtime.ts +0 -252
- package/my-final-test/core/utils/errors/codes.ts +0 -115
- package/my-final-test/core/utils/errors/handlers.ts +0 -63
- package/my-final-test/core/utils/errors/index.ts +0 -81
- package/my-final-test/core/utils/helpers.ts +0 -180
- package/my-final-test/core/utils/index.ts +0 -18
- package/my-final-test/core/utils/logger/index.ts +0 -161
- package/my-final-test/core/utils/logger.ts +0 -106
- package/my-final-test/core/utils/monitoring/index.ts +0 -212
- package/my-final-test/package.json +0 -68
- package/my-final-test/tsconfig.json +0 -51
- package/my-final-test/vite.config.ts +0 -42
- package/publish-setup.md +0 -111
- package/teste-corrigido/README.md +0 -44
- package/teste-corrigido/app/client/README.md +0 -69
- package/teste-corrigido/app/client/frontend-only.ts +0 -12
- package/teste-corrigido/app/client/index.html +0 -13
- package/teste-corrigido/app/client/public/vite.svg +0 -1
- package/teste-corrigido/app/client/src/App.css +0 -883
- package/teste-corrigido/app/client/src/App.tsx +0 -669
- package/teste-corrigido/app/client/src/assets/react.svg +0 -1
- package/teste-corrigido/app/client/src/components/TestPage.tsx +0 -453
- package/teste-corrigido/app/client/src/index.css +0 -51
- package/teste-corrigido/app/client/src/lib/eden-api.ts +0 -110
- package/teste-corrigido/app/client/src/main.tsx +0 -10
- package/teste-corrigido/app/client/src/vite-env.d.ts +0 -1
- package/teste-corrigido/app/client/tsconfig.app.json +0 -43
- package/teste-corrigido/app/client/tsconfig.json +0 -7
- package/teste-corrigido/app/client/tsconfig.node.json +0 -25
- package/teste-corrigido/app/server/app.ts +0 -10
- package/teste-corrigido/app/server/backend-only.ts +0 -15
- package/teste-corrigido/app/server/controllers/users.controller.ts +0 -69
- package/teste-corrigido/app/server/index.ts +0 -104
- package/teste-corrigido/app/server/routes/index.ts +0 -25
- package/teste-corrigido/app/server/routes/users.routes.ts +0 -121
- package/teste-corrigido/app/server/types/index.ts +0 -1
- package/teste-corrigido/app/shared/types/index.ts +0 -18
- package/teste-corrigido/bun.lock +0 -1053
- package/teste-corrigido/core/__tests__/integration.test.ts +0 -227
- package/teste-corrigido/core/build/index.ts +0 -186
- package/teste-corrigido/core/cli/command-registry.ts +0 -334
- package/teste-corrigido/core/cli/index.ts +0 -394
- package/teste-corrigido/core/cli/plugin-discovery.ts +0 -200
- package/teste-corrigido/core/client/standalone.ts +0 -57
- package/teste-corrigido/core/config/__tests__/config-loader.test.ts +0 -591
- package/teste-corrigido/core/config/__tests__/config-merger.test.ts +0 -657
- package/teste-corrigido/core/config/__tests__/env-converter.test.ts +0 -372
- package/teste-corrigido/core/config/__tests__/env-processor.test.ts +0 -431
- package/teste-corrigido/core/config/__tests__/env.test.ts +0 -452
- package/teste-corrigido/core/config/__tests__/integration.test.ts +0 -418
- package/teste-corrigido/core/config/__tests__/loader.test.ts +0 -331
- package/teste-corrigido/core/config/__tests__/schema.test.ts +0 -129
- package/teste-corrigido/core/config/__tests__/validator.test.ts +0 -318
- package/teste-corrigido/core/config/env-dynamic.ts +0 -326
- package/teste-corrigido/core/config/env.ts +0 -597
- package/teste-corrigido/core/config/index.ts +0 -317
- package/teste-corrigido/core/config/loader.ts +0 -546
- package/teste-corrigido/core/config/runtime-config.ts +0 -322
- package/teste-corrigido/core/config/schema.ts +0 -694
- package/teste-corrigido/core/config/validator.ts +0 -540
- package/teste-corrigido/core/framework/__tests__/server.test.ts +0 -233
- package/teste-corrigido/core/framework/client.ts +0 -132
- package/teste-corrigido/core/framework/index.ts +0 -8
- package/teste-corrigido/core/framework/server.ts +0 -501
- package/teste-corrigido/core/framework/types.ts +0 -63
- package/teste-corrigido/core/plugins/__tests__/built-in.test.ts.disabled +0 -366
- package/teste-corrigido/core/plugins/__tests__/manager.test.ts +0 -398
- package/teste-corrigido/core/plugins/__tests__/monitoring.test.ts +0 -401
- package/teste-corrigido/core/plugins/__tests__/registry.test.ts +0 -335
- package/teste-corrigido/core/plugins/built-in/index.ts +0 -142
- package/teste-corrigido/core/plugins/built-in/logger/index.ts +0 -180
- package/teste-corrigido/core/plugins/built-in/monitoring/README.md +0 -193
- package/teste-corrigido/core/plugins/built-in/monitoring/index.ts +0 -912
- package/teste-corrigido/core/plugins/built-in/static/index.ts +0 -289
- package/teste-corrigido/core/plugins/built-in/swagger/index.ts +0 -229
- package/teste-corrigido/core/plugins/built-in/vite/index.ts +0 -316
- package/teste-corrigido/core/plugins/config.ts +0 -348
- package/teste-corrigido/core/plugins/discovery.ts +0 -350
- package/teste-corrigido/core/plugins/executor.ts +0 -351
- package/teste-corrigido/core/plugins/index.ts +0 -195
- package/teste-corrigido/core/plugins/manager.ts +0 -583
- package/teste-corrigido/core/plugins/registry.ts +0 -424
- package/teste-corrigido/core/plugins/types.ts +0 -254
- package/teste-corrigido/core/server/framework.ts +0 -123
- package/teste-corrigido/core/server/index.ts +0 -8
- package/teste-corrigido/core/server/plugins/database.ts +0 -182
- package/teste-corrigido/core/server/plugins/logger.ts +0 -47
- package/teste-corrigido/core/server/plugins/swagger.ts +0 -34
- package/teste-corrigido/core/server/standalone.ts +0 -91
- package/teste-corrigido/core/templates/create-project.ts +0 -455
- package/teste-corrigido/core/types/api.ts +0 -169
- package/teste-corrigido/core/types/build.ts +0 -174
- package/teste-corrigido/core/types/config.ts +0 -68
- package/teste-corrigido/core/types/index.ts +0 -127
- package/teste-corrigido/core/types/plugin.ts +0 -94
- package/teste-corrigido/core/utils/__tests__/errors.test.ts +0 -139
- package/teste-corrigido/core/utils/__tests__/helpers.test.ts +0 -297
- package/teste-corrigido/core/utils/__tests__/logger.test.ts +0 -141
- package/teste-corrigido/core/utils/env-runtime-v2.ts +0 -232
- package/teste-corrigido/core/utils/env-runtime.ts +0 -252
- package/teste-corrigido/core/utils/errors/codes.ts +0 -115
- package/teste-corrigido/core/utils/errors/handlers.ts +0 -63
- package/teste-corrigido/core/utils/errors/index.ts +0 -81
- package/teste-corrigido/core/utils/helpers.ts +0 -180
- package/teste-corrigido/core/utils/index.ts +0 -18
- package/teste-corrigido/core/utils/logger/index.ts +0 -161
- package/teste-corrigido/core/utils/logger.ts +0 -106
- package/teste-corrigido/core/utils/monitoring/index.ts +0 -212
- package/teste-corrigido/package-template.json +0 -51
- package/teste-corrigido/package.json +0 -51
- package/teste-corrigido/tsconfig.json +0 -51
- package/teste-corrigido/vite.config.ts +0 -42
- package/teste-final-npm/README.md +0 -44
- package/teste-final-npm/app/client/README.md +0 -69
- package/teste-final-npm/app/client/frontend-only.ts +0 -12
- package/teste-final-npm/app/client/index.html +0 -13
- package/teste-final-npm/app/client/public/vite.svg +0 -1
- package/teste-final-npm/app/client/src/App.css +0 -883
- package/teste-final-npm/app/client/src/App.tsx +0 -669
- package/teste-final-npm/app/client/src/assets/react.svg +0 -1
- package/teste-final-npm/app/client/src/components/TestPage.tsx +0 -453
- package/teste-final-npm/app/client/src/index.css +0 -51
- package/teste-final-npm/app/client/src/lib/eden-api.ts +0 -110
- package/teste-final-npm/app/client/src/main.tsx +0 -10
- package/teste-final-npm/app/client/src/vite-env.d.ts +0 -1
- package/teste-final-npm/app/client/tsconfig.app.json +0 -43
- package/teste-final-npm/app/client/tsconfig.json +0 -7
- package/teste-final-npm/app/client/tsconfig.node.json +0 -25
- package/teste-final-npm/app/server/app.ts +0 -10
- package/teste-final-npm/app/server/backend-only.ts +0 -15
- package/teste-final-npm/app/server/controllers/users.controller.ts +0 -69
- package/teste-final-npm/app/server/index.ts +0 -104
- package/teste-final-npm/app/server/routes/index.ts +0 -25
- package/teste-final-npm/app/server/routes/users.routes.ts +0 -121
- package/teste-final-npm/app/server/types/index.ts +0 -1
- package/teste-final-npm/app/shared/types/index.ts +0 -18
- package/teste-final-npm/bun.lock +0 -1053
- package/teste-final-npm/core/__tests__/integration.test.ts +0 -227
- package/teste-final-npm/core/build/index.ts +0 -186
- package/teste-final-npm/core/cli/command-registry.ts +0 -334
- package/teste-final-npm/core/cli/index.ts +0 -394
- package/teste-final-npm/core/cli/plugin-discovery.ts +0 -200
- package/teste-final-npm/core/client/standalone.ts +0 -57
- package/teste-final-npm/core/config/__tests__/config-loader.test.ts +0 -591
- package/teste-final-npm/core/config/__tests__/config-merger.test.ts +0 -657
- package/teste-final-npm/core/config/__tests__/env-converter.test.ts +0 -372
- package/teste-final-npm/core/config/__tests__/env-processor.test.ts +0 -431
- package/teste-final-npm/core/config/__tests__/env.test.ts +0 -452
- package/teste-final-npm/core/config/__tests__/integration.test.ts +0 -418
- package/teste-final-npm/core/config/__tests__/loader.test.ts +0 -331
- package/teste-final-npm/core/config/__tests__/schema.test.ts +0 -129
- package/teste-final-npm/core/config/__tests__/validator.test.ts +0 -318
- package/teste-final-npm/core/config/env-dynamic.ts +0 -326
- package/teste-final-npm/core/config/env.ts +0 -597
- package/teste-final-npm/core/config/index.ts +0 -317
- package/teste-final-npm/core/config/loader.ts +0 -546
- package/teste-final-npm/core/config/runtime-config.ts +0 -322
- package/teste-final-npm/core/config/schema.ts +0 -694
- package/teste-final-npm/core/config/validator.ts +0 -540
- package/teste-final-npm/core/framework/__tests__/server.test.ts +0 -233
- package/teste-final-npm/core/framework/client.ts +0 -132
- package/teste-final-npm/core/framework/index.ts +0 -8
- package/teste-final-npm/core/framework/server.ts +0 -501
- package/teste-final-npm/core/framework/types.ts +0 -63
- package/teste-final-npm/core/plugins/__tests__/built-in.test.ts.disabled +0 -366
- package/teste-final-npm/core/plugins/__tests__/manager.test.ts +0 -398
- package/teste-final-npm/core/plugins/__tests__/monitoring.test.ts +0 -401
- package/teste-final-npm/core/plugins/__tests__/registry.test.ts +0 -335
- package/teste-final-npm/core/plugins/built-in/index.ts +0 -142
- package/teste-final-npm/core/plugins/built-in/logger/index.ts +0 -180
- package/teste-final-npm/core/plugins/built-in/monitoring/README.md +0 -193
- package/teste-final-npm/core/plugins/built-in/monitoring/index.ts +0 -912
- package/teste-final-npm/core/plugins/built-in/static/index.ts +0 -289
- package/teste-final-npm/core/plugins/built-in/swagger/index.ts +0 -229
- package/teste-final-npm/core/plugins/built-in/vite/index.ts +0 -316
- package/teste-final-npm/core/plugins/config.ts +0 -348
- package/teste-final-npm/core/plugins/discovery.ts +0 -350
- package/teste-final-npm/core/plugins/executor.ts +0 -351
- package/teste-final-npm/core/plugins/index.ts +0 -195
- package/teste-final-npm/core/plugins/manager.ts +0 -583
- package/teste-final-npm/core/plugins/registry.ts +0 -424
- package/teste-final-npm/core/plugins/types.ts +0 -254
- package/teste-final-npm/core/server/framework.ts +0 -123
- package/teste-final-npm/core/server/index.ts +0 -8
- package/teste-final-npm/core/server/plugins/database.ts +0 -182
- package/teste-final-npm/core/server/plugins/logger.ts +0 -47
- package/teste-final-npm/core/server/plugins/swagger.ts +0 -34
- package/teste-final-npm/core/server/standalone.ts +0 -91
- package/teste-final-npm/core/templates/create-project.ts +0 -455
- package/teste-final-npm/core/types/api.ts +0 -169
- package/teste-final-npm/core/types/build.ts +0 -174
- package/teste-final-npm/core/types/config.ts +0 -68
- package/teste-final-npm/core/types/index.ts +0 -127
- package/teste-final-npm/core/types/plugin.ts +0 -94
- package/teste-final-npm/core/utils/__tests__/errors.test.ts +0 -139
- package/teste-final-npm/core/utils/__tests__/helpers.test.ts +0 -297
- package/teste-final-npm/core/utils/__tests__/logger.test.ts +0 -141
- package/teste-final-npm/core/utils/env-runtime-v2.ts +0 -232
- package/teste-final-npm/core/utils/env-runtime.ts +0 -252
- package/teste-final-npm/core/utils/errors/codes.ts +0 -115
- package/teste-final-npm/core/utils/errors/handlers.ts +0 -63
- package/teste-final-npm/core/utils/errors/index.ts +0 -81
- package/teste-final-npm/core/utils/helpers.ts +0 -180
- package/teste-final-npm/core/utils/index.ts +0 -18
- package/teste-final-npm/core/utils/logger/index.ts +0 -161
- package/teste-final-npm/core/utils/logger.ts +0 -106
- package/teste-final-npm/core/utils/monitoring/index.ts +0 -212
- package/teste-final-npm/package-template.json +0 -51
- package/teste-final-npm/package.json +0 -51
- package/teste-final-npm/tsconfig.json +0 -51
- package/teste-final-npm/vite.config.ts +0 -42
|
@@ -1,546 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Configuration Loader for FluxStack
|
|
3
|
-
* Handles loading, merging, and environment variable integration
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { existsSync } from 'fs'
|
|
7
|
-
import { join } from 'path'
|
|
8
|
-
import type {
|
|
9
|
-
FluxStackConfig
|
|
10
|
-
} from './schema'
|
|
11
|
-
import {
|
|
12
|
-
defaultFluxStackConfig,
|
|
13
|
-
environmentDefaults
|
|
14
|
-
} from './schema'
|
|
15
|
-
|
|
16
|
-
export interface ConfigLoadOptions {
|
|
17
|
-
configPath?: string
|
|
18
|
-
environment?: string
|
|
19
|
-
envPrefix?: string
|
|
20
|
-
validateSchema?: boolean
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export interface ConfigLoadResult {
|
|
24
|
-
config: FluxStackConfig
|
|
25
|
-
sources: string[]
|
|
26
|
-
warnings: string[]
|
|
27
|
-
errors: string[]
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
export interface ValidationResult {
|
|
31
|
-
valid: boolean
|
|
32
|
-
errors: ValidationError[]
|
|
33
|
-
warnings: ValidationWarning[]
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export interface ValidationError {
|
|
37
|
-
path: string
|
|
38
|
-
message: string
|
|
39
|
-
value?: any
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export interface ValidationWarning {
|
|
43
|
-
path: string
|
|
44
|
-
message: string
|
|
45
|
-
value?: any
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Environment variable mapping for FluxStack configuration
|
|
50
|
-
*/
|
|
51
|
-
const ENV_MAPPINGS = {
|
|
52
|
-
// App configuration
|
|
53
|
-
'FLUXSTACK_APP_NAME': 'app.name',
|
|
54
|
-
'FLUXSTACK_APP_VERSION': 'app.version',
|
|
55
|
-
'FLUXSTACK_APP_DESCRIPTION': 'app.description',
|
|
56
|
-
|
|
57
|
-
// Server configuration
|
|
58
|
-
'PORT': 'server.port',
|
|
59
|
-
'HOST': 'server.host',
|
|
60
|
-
'FLUXSTACK_API_PREFIX': 'server.apiPrefix',
|
|
61
|
-
'CORS_ORIGINS': 'server.cors.origins',
|
|
62
|
-
'FLUXSTACK_CORS_ORIGINS': 'server.cors.origins',
|
|
63
|
-
'CORS_METHODS': 'server.cors.methods',
|
|
64
|
-
'FLUXSTACK_CORS_METHODS': 'server.cors.methods',
|
|
65
|
-
'CORS_HEADERS': 'server.cors.headers',
|
|
66
|
-
'FLUXSTACK_CORS_HEADERS': 'server.cors.headers',
|
|
67
|
-
'CORS_CREDENTIALS': 'server.cors.credentials',
|
|
68
|
-
'FLUXSTACK_CORS_CREDENTIALS': 'server.cors.credentials',
|
|
69
|
-
'CORS_MAX_AGE': 'server.cors.maxAge',
|
|
70
|
-
'FLUXSTACK_CORS_MAX_AGE': 'server.cors.maxAge',
|
|
71
|
-
|
|
72
|
-
// Client configuration
|
|
73
|
-
'VITE_PORT': 'client.port',
|
|
74
|
-
'FLUXSTACK_CLIENT_PORT': 'client.port',
|
|
75
|
-
'FLUXSTACK_PROXY_TARGET': 'client.proxy.target',
|
|
76
|
-
'FLUXSTACK_CLIENT_SOURCEMAPS': 'client.build.sourceMaps',
|
|
77
|
-
'FLUXSTACK_CLIENT_MINIFY': 'client.build.minify',
|
|
78
|
-
'FLUXSTACK_CLIENT_TARGET': 'client.build.target',
|
|
79
|
-
'FLUXSTACK_CLIENT_OUTDIR': 'client.build.outDir',
|
|
80
|
-
|
|
81
|
-
// Build configuration
|
|
82
|
-
'FLUXSTACK_BUILD_TARGET': 'build.target',
|
|
83
|
-
'FLUXSTACK_BUILD_OUTDIR': 'build.outDir',
|
|
84
|
-
'FLUXSTACK_BUILD_SOURCEMAPS': 'build.sourceMaps',
|
|
85
|
-
'FLUXSTACK_BUILD_CLEAN': 'build.clean',
|
|
86
|
-
'FLUXSTACK_BUILD_MINIFY': 'build.optimization.minify',
|
|
87
|
-
'FLUXSTACK_BUILD_TREESHAKE': 'build.optimization.treeshake',
|
|
88
|
-
'FLUXSTACK_BUILD_COMPRESS': 'build.optimization.compress',
|
|
89
|
-
'FLUXSTACK_BUILD_SPLIT_CHUNKS': 'build.optimization.splitChunks',
|
|
90
|
-
'FLUXSTACK_BUILD_ANALYZER': 'build.optimization.bundleAnalyzer',
|
|
91
|
-
|
|
92
|
-
// Logging configuration
|
|
93
|
-
'LOG_LEVEL': 'logging.level',
|
|
94
|
-
'FLUXSTACK_LOG_LEVEL': 'logging.level',
|
|
95
|
-
'LOG_FORMAT': 'logging.format',
|
|
96
|
-
'FLUXSTACK_LOG_FORMAT': 'logging.format',
|
|
97
|
-
|
|
98
|
-
// Monitoring configuration
|
|
99
|
-
'MONITORING_ENABLED': 'monitoring.enabled',
|
|
100
|
-
'FLUXSTACK_MONITORING_ENABLED': 'monitoring.enabled',
|
|
101
|
-
'METRICS_ENABLED': 'monitoring.metrics.enabled',
|
|
102
|
-
'FLUXSTACK_METRICS_ENABLED': 'monitoring.metrics.enabled',
|
|
103
|
-
'METRICS_INTERVAL': 'monitoring.metrics.collectInterval',
|
|
104
|
-
'FLUXSTACK_METRICS_INTERVAL': 'monitoring.metrics.collectInterval',
|
|
105
|
-
'PROFILING_ENABLED': 'monitoring.profiling.enabled',
|
|
106
|
-
'FLUXSTACK_PROFILING_ENABLED': 'monitoring.profiling.enabled',
|
|
107
|
-
'PROFILING_SAMPLE_RATE': 'monitoring.profiling.sampleRate',
|
|
108
|
-
'FLUXSTACK_PROFILING_SAMPLE_RATE': 'monitoring.profiling.sampleRate',
|
|
109
|
-
|
|
110
|
-
// Database configuration
|
|
111
|
-
'DATABASE_URL': 'database.url',
|
|
112
|
-
'DATABASE_HOST': 'database.host',
|
|
113
|
-
'DATABASE_PORT': 'database.port',
|
|
114
|
-
'DATABASE_NAME': 'database.database',
|
|
115
|
-
'DATABASE_USER': 'database.user',
|
|
116
|
-
'DATABASE_PASSWORD': 'database.password',
|
|
117
|
-
'DATABASE_SSL': 'database.ssl',
|
|
118
|
-
'DATABASE_POOL_SIZE': 'database.poolSize',
|
|
119
|
-
|
|
120
|
-
// Auth configuration
|
|
121
|
-
'JWT_SECRET': 'auth.secret',
|
|
122
|
-
'JWT_EXPIRES_IN': 'auth.expiresIn',
|
|
123
|
-
'JWT_ALGORITHM': 'auth.algorithm',
|
|
124
|
-
'JWT_ISSUER': 'auth.issuer',
|
|
125
|
-
|
|
126
|
-
// Email configuration
|
|
127
|
-
'SMTP_HOST': 'email.host',
|
|
128
|
-
'SMTP_PORT': 'email.port',
|
|
129
|
-
'SMTP_USER': 'email.user',
|
|
130
|
-
'SMTP_PASSWORD': 'email.password',
|
|
131
|
-
'SMTP_SECURE': 'email.secure',
|
|
132
|
-
'SMTP_FROM': 'email.from',
|
|
133
|
-
|
|
134
|
-
// Storage configuration
|
|
135
|
-
'UPLOAD_PATH': 'storage.uploadPath',
|
|
136
|
-
'MAX_FILE_SIZE': 'storage.maxFileSize',
|
|
137
|
-
'STORAGE_PROVIDER': 'storage.provider'
|
|
138
|
-
} as const
|
|
139
|
-
|
|
140
|
-
/**
|
|
141
|
-
* Parse environment variable value to appropriate type
|
|
142
|
-
*/
|
|
143
|
-
function parseEnvValue(value: string, targetType?: string): any {
|
|
144
|
-
if (!value) return undefined
|
|
145
|
-
|
|
146
|
-
// Handle different types based on target or value format
|
|
147
|
-
if (targetType === 'number' || /^\d+$/.test(value)) {
|
|
148
|
-
const parsed = parseInt(value, 10)
|
|
149
|
-
return isNaN(parsed) ? undefined : parsed
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
if (targetType === 'boolean' || ['true', 'false', '1', '0'].includes(value.toLowerCase())) {
|
|
153
|
-
return ['true', '1'].includes(value.toLowerCase())
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
if (targetType === 'array' || value.includes(',')) {
|
|
157
|
-
return value.split(',').map(v => v.trim()).filter(Boolean)
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
// Try to parse as JSON for complex objects
|
|
161
|
-
if (value.startsWith('{') || value.startsWith('[')) {
|
|
162
|
-
try {
|
|
163
|
-
return JSON.parse(value)
|
|
164
|
-
} catch {
|
|
165
|
-
// Fall back to string if JSON parsing fails
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
return value
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
/**
|
|
173
|
-
* Set nested object property using dot notation
|
|
174
|
-
*/
|
|
175
|
-
function setNestedProperty(obj: any, path: string, value: any): void {
|
|
176
|
-
const keys = path.split('.')
|
|
177
|
-
let current = obj
|
|
178
|
-
|
|
179
|
-
for (let i = 0; i < keys.length - 1; i++) {
|
|
180
|
-
const key = keys[i]
|
|
181
|
-
if (!(key in current) || typeof current[key] !== 'object') {
|
|
182
|
-
current[key] = {}
|
|
183
|
-
}
|
|
184
|
-
current = current[key]
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
current[keys[keys.length - 1]] = value
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
/**
|
|
191
|
-
* Get nested object property using dot notation
|
|
192
|
-
*/
|
|
193
|
-
function getNestedProperty(obj: any, path: string): any {
|
|
194
|
-
return path.split('.').reduce((current, key) => current?.[key], obj)
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
/**
|
|
198
|
-
* Deep merge two configuration objects
|
|
199
|
-
*/
|
|
200
|
-
function deepMerge(target: any, source: any): any {
|
|
201
|
-
if (!source || typeof source !== 'object') return target
|
|
202
|
-
if (!target || typeof target !== 'object') return source
|
|
203
|
-
|
|
204
|
-
const result = { ...target }
|
|
205
|
-
|
|
206
|
-
for (const key in source) {
|
|
207
|
-
if (source.hasOwnProperty(key)) {
|
|
208
|
-
if (Array.isArray(source[key])) {
|
|
209
|
-
result[key] = [...source[key]]
|
|
210
|
-
} else if (typeof source[key] === 'object' && source[key] !== null) {
|
|
211
|
-
result[key] = deepMerge(target[key], source[key])
|
|
212
|
-
} else {
|
|
213
|
-
result[key] = source[key]
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
return result
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
/**
|
|
222
|
-
* Load configuration from environment variables
|
|
223
|
-
*/
|
|
224
|
-
function loadFromEnvironment(prefix = 'FLUXSTACK_'): Partial<FluxStackConfig> {
|
|
225
|
-
const config: any = {}
|
|
226
|
-
|
|
227
|
-
// Process known environment variable mappings
|
|
228
|
-
for (const [envKey, configPath] of Object.entries(ENV_MAPPINGS)) {
|
|
229
|
-
const envValue = process.env[envKey]
|
|
230
|
-
if (envValue !== undefined && envValue !== '') {
|
|
231
|
-
try {
|
|
232
|
-
// Determine target type from config path
|
|
233
|
-
let targetType = 'string'
|
|
234
|
-
if (configPath.includes('port') || configPath.includes('maxAge') || configPath.includes('collectInterval') || configPath.includes('sampleRate') || configPath.includes('poolSize')) {
|
|
235
|
-
targetType = 'number'
|
|
236
|
-
} else if (configPath.includes('enabled') || configPath.includes('credentials') || configPath.includes('ssl') || configPath.includes('secure') || configPath.includes('minify') || configPath.includes('treeshake') || configPath.includes('compress') || configPath.includes('splitChunks') || configPath.includes('bundleAnalyzer') || configPath.includes('sourceMaps') || configPath.includes('clean')) {
|
|
237
|
-
targetType = 'boolean'
|
|
238
|
-
} else if (configPath.includes('origins') || configPath.includes('methods') || configPath.includes('headers') || configPath.includes('exporters')) {
|
|
239
|
-
targetType = 'array'
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
const parsedValue = parseEnvValue(envValue, targetType)
|
|
243
|
-
if (parsedValue !== undefined) {
|
|
244
|
-
setNestedProperty(config, configPath, parsedValue)
|
|
245
|
-
}
|
|
246
|
-
} catch (error) {
|
|
247
|
-
console.warn(`Failed to parse environment variable ${envKey}: ${error}`)
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
// Process custom environment variables with prefix
|
|
253
|
-
for (const [key, value] of Object.entries(process.env)) {
|
|
254
|
-
if (key.startsWith(prefix) && !ENV_MAPPINGS[key as keyof typeof ENV_MAPPINGS] && value !== undefined && value !== '') {
|
|
255
|
-
const configKey = key.slice(prefix.length).toLowerCase().replace(/_/g, '.')
|
|
256
|
-
try {
|
|
257
|
-
const parsedValue = parseEnvValue(value!)
|
|
258
|
-
if (parsedValue !== undefined) {
|
|
259
|
-
if (!config.custom) config.custom = {}
|
|
260
|
-
config.custom[configKey] = parsedValue
|
|
261
|
-
}
|
|
262
|
-
} catch (error) {
|
|
263
|
-
console.warn(`Failed to parse custom environment variable ${key}: ${error}`)
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
return config
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
/**
|
|
272
|
-
* Load configuration from file
|
|
273
|
-
*/
|
|
274
|
-
async function loadFromFile(configPath: string): Promise<Partial<FluxStackConfig>> {
|
|
275
|
-
if (!existsSync(configPath)) {
|
|
276
|
-
throw new Error(`Configuration file not found: ${configPath}`)
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
try {
|
|
280
|
-
// Dynamic import to support both .ts and .js files
|
|
281
|
-
const configModule = await import(configPath)
|
|
282
|
-
const config = configModule.default || configModule.config || configModule
|
|
283
|
-
|
|
284
|
-
if (typeof config === 'function') {
|
|
285
|
-
return config()
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
return config
|
|
289
|
-
} catch (error) {
|
|
290
|
-
throw new Error(`Failed to load configuration from ${configPath}: ${error}`)
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
/**
|
|
295
|
-
* Find configuration file in common locations
|
|
296
|
-
*/
|
|
297
|
-
function findConfigFile(startDir = process.cwd()): string | null {
|
|
298
|
-
const configNames = [
|
|
299
|
-
'fluxstack.config.ts',
|
|
300
|
-
'fluxstack.config.js',
|
|
301
|
-
'fluxstack.config.mjs',
|
|
302
|
-
'config/fluxstack.config.ts',
|
|
303
|
-
'config/fluxstack.config.js'
|
|
304
|
-
]
|
|
305
|
-
|
|
306
|
-
for (const name of configNames) {
|
|
307
|
-
const fullPath = join(startDir, name)
|
|
308
|
-
if (existsSync(fullPath)) {
|
|
309
|
-
return fullPath
|
|
310
|
-
}
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
return null
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
/**
|
|
317
|
-
* Apply environment-specific configuration
|
|
318
|
-
*/
|
|
319
|
-
export function applyEnvironmentConfig(
|
|
320
|
-
config: FluxStackConfig,
|
|
321
|
-
environment: string
|
|
322
|
-
): FluxStackConfig {
|
|
323
|
-
const envDefaults = environmentDefaults[environment as keyof typeof environmentDefaults]
|
|
324
|
-
const envOverrides = config.environments?.[environment]
|
|
325
|
-
|
|
326
|
-
let result = config
|
|
327
|
-
|
|
328
|
-
// Apply environment defaults only for values that haven't been explicitly set
|
|
329
|
-
if (envDefaults) {
|
|
330
|
-
result = smartMerge(result, envDefaults)
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
// Apply environment-specific overrides from config
|
|
334
|
-
if (envOverrides) {
|
|
335
|
-
result = deepMerge(result, envOverrides)
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
return result
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
/**
|
|
342
|
-
* Smart merge that only applies defaults for undefined values
|
|
343
|
-
*/
|
|
344
|
-
function smartMerge(target: any, defaults: any): any {
|
|
345
|
-
if (!defaults || typeof defaults !== 'object') return target
|
|
346
|
-
if (!target || typeof target !== 'object') return defaults
|
|
347
|
-
|
|
348
|
-
const result = { ...target }
|
|
349
|
-
|
|
350
|
-
for (const key in defaults) {
|
|
351
|
-
if (defaults.hasOwnProperty(key)) {
|
|
352
|
-
if (target[key] === undefined) {
|
|
353
|
-
// Value not set in target, use default
|
|
354
|
-
result[key] = defaults[key]
|
|
355
|
-
} else if (typeof defaults[key] === 'object' && defaults[key] !== null && !Array.isArray(defaults[key])) {
|
|
356
|
-
// Recursively merge nested objects
|
|
357
|
-
result[key] = smartMerge(target[key], defaults[key])
|
|
358
|
-
}
|
|
359
|
-
// Otherwise keep the target value (don't override)
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
return result
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
/**
|
|
367
|
-
* Main configuration loader
|
|
368
|
-
*/
|
|
369
|
-
export async function loadConfig(options: ConfigLoadOptions = {}): Promise<ConfigLoadResult> {
|
|
370
|
-
const {
|
|
371
|
-
configPath,
|
|
372
|
-
environment = process.env.NODE_ENV || 'development',
|
|
373
|
-
envPrefix = 'FLUXSTACK_',
|
|
374
|
-
validateSchema = true
|
|
375
|
-
} = options
|
|
376
|
-
|
|
377
|
-
const sources: string[] = []
|
|
378
|
-
const warnings: string[] = []
|
|
379
|
-
const errors: string[] = []
|
|
380
|
-
|
|
381
|
-
try {
|
|
382
|
-
// Start with default configuration
|
|
383
|
-
let config: FluxStackConfig = JSON.parse(JSON.stringify(defaultFluxStackConfig))
|
|
384
|
-
sources.push('defaults')
|
|
385
|
-
|
|
386
|
-
// Load from configuration file
|
|
387
|
-
let fileConfig: any = null
|
|
388
|
-
const actualConfigPath = configPath || findConfigFile()
|
|
389
|
-
if (actualConfigPath) {
|
|
390
|
-
try {
|
|
391
|
-
fileConfig = await loadFromFile(actualConfigPath)
|
|
392
|
-
config = deepMerge(config, fileConfig)
|
|
393
|
-
sources.push(`file:${actualConfigPath}`)
|
|
394
|
-
} catch (error) {
|
|
395
|
-
errors.push(`Failed to load config file: ${error}`)
|
|
396
|
-
}
|
|
397
|
-
} else if (configPath) {
|
|
398
|
-
errors.push(`Specified config file not found: ${configPath}`)
|
|
399
|
-
}
|
|
400
|
-
|
|
401
|
-
// Load from environment variables
|
|
402
|
-
const envConfig = loadFromEnvironment(envPrefix)
|
|
403
|
-
if (Object.keys(envConfig).length > 0) {
|
|
404
|
-
config = deepMerge(config, envConfig)
|
|
405
|
-
sources.push('environment')
|
|
406
|
-
}
|
|
407
|
-
|
|
408
|
-
// Apply environment-specific configuration (only if no file config or env vars override)
|
|
409
|
-
const envDefaults = environmentDefaults[environment as keyof typeof environmentDefaults]
|
|
410
|
-
if (envDefaults) {
|
|
411
|
-
// Apply environment defaults but don't override existing values
|
|
412
|
-
config = smartMerge(config, envDefaults)
|
|
413
|
-
sources.push(`environment:${environment}`)
|
|
414
|
-
}
|
|
415
|
-
|
|
416
|
-
// Validate configuration if requested
|
|
417
|
-
if (validateSchema) {
|
|
418
|
-
try {
|
|
419
|
-
const { validateConfig } = await import('./validator')
|
|
420
|
-
const validationResult = validateConfig(config)
|
|
421
|
-
|
|
422
|
-
if (!validationResult.valid) {
|
|
423
|
-
errors.push(...validationResult.errors)
|
|
424
|
-
}
|
|
425
|
-
|
|
426
|
-
warnings.push(...validationResult.warnings)
|
|
427
|
-
} catch (error) {
|
|
428
|
-
warnings.push(`Validation failed: ${error}`)
|
|
429
|
-
}
|
|
430
|
-
}
|
|
431
|
-
|
|
432
|
-
return {
|
|
433
|
-
config,
|
|
434
|
-
sources,
|
|
435
|
-
warnings,
|
|
436
|
-
errors
|
|
437
|
-
}
|
|
438
|
-
} catch (error) {
|
|
439
|
-
errors.push(`Configuration loading failed: ${error}`)
|
|
440
|
-
|
|
441
|
-
return {
|
|
442
|
-
config: defaultFluxStackConfig,
|
|
443
|
-
sources: ['defaults'],
|
|
444
|
-
warnings,
|
|
445
|
-
errors
|
|
446
|
-
}
|
|
447
|
-
}
|
|
448
|
-
}
|
|
449
|
-
|
|
450
|
-
/**
|
|
451
|
-
* Load configuration synchronously (limited functionality)
|
|
452
|
-
*/
|
|
453
|
-
export function loadConfigSync(options: ConfigLoadOptions = {}): ConfigLoadResult {
|
|
454
|
-
const {
|
|
455
|
-
environment = process.env.NODE_ENV || 'development',
|
|
456
|
-
envPrefix = 'FLUXSTACK_'
|
|
457
|
-
} = options
|
|
458
|
-
|
|
459
|
-
const sources: string[] = []
|
|
460
|
-
const warnings: string[] = []
|
|
461
|
-
const errors: string[] = []
|
|
462
|
-
|
|
463
|
-
try {
|
|
464
|
-
// Start with default configuration
|
|
465
|
-
let config: FluxStackConfig = JSON.parse(JSON.stringify(defaultFluxStackConfig))
|
|
466
|
-
sources.push('defaults')
|
|
467
|
-
|
|
468
|
-
// Load from environment variables
|
|
469
|
-
const envConfig = loadFromEnvironment(envPrefix)
|
|
470
|
-
if (Object.keys(envConfig).length > 0) {
|
|
471
|
-
config = deepMerge(config, envConfig)
|
|
472
|
-
sources.push('environment')
|
|
473
|
-
}
|
|
474
|
-
|
|
475
|
-
// Apply environment-specific configuration
|
|
476
|
-
const envDefaults = environmentDefaults[environment as keyof typeof environmentDefaults]
|
|
477
|
-
if (envDefaults) {
|
|
478
|
-
// Apply environment defaults first
|
|
479
|
-
const configWithEnvDefaults = deepMerge(config, envDefaults)
|
|
480
|
-
|
|
481
|
-
// Re-apply environment variables last (highest priority)
|
|
482
|
-
if (Object.keys(envConfig).length > 0) {
|
|
483
|
-
config = deepMerge(configWithEnvDefaults, envConfig)
|
|
484
|
-
} else {
|
|
485
|
-
config = configWithEnvDefaults
|
|
486
|
-
}
|
|
487
|
-
|
|
488
|
-
sources.push(`environment:${environment}`)
|
|
489
|
-
} else if (environment !== 'development') {
|
|
490
|
-
// Still add the environment source even if no defaults
|
|
491
|
-
sources.push(`environment:${environment}`)
|
|
492
|
-
}
|
|
493
|
-
|
|
494
|
-
return {
|
|
495
|
-
config,
|
|
496
|
-
sources,
|
|
497
|
-
warnings,
|
|
498
|
-
errors
|
|
499
|
-
}
|
|
500
|
-
} catch (error) {
|
|
501
|
-
errors.push(`Synchronous configuration loading failed: ${error}`)
|
|
502
|
-
|
|
503
|
-
return {
|
|
504
|
-
config: defaultFluxStackConfig,
|
|
505
|
-
sources: ['defaults'],
|
|
506
|
-
warnings,
|
|
507
|
-
errors
|
|
508
|
-
}
|
|
509
|
-
}
|
|
510
|
-
}
|
|
511
|
-
|
|
512
|
-
/**
|
|
513
|
-
* Get configuration value using dot notation
|
|
514
|
-
*/
|
|
515
|
-
export function getConfigValue<T = any>(config: FluxStackConfig, path: string): T | undefined
|
|
516
|
-
export function getConfigValue<T = any>(config: FluxStackConfig, path: string, defaultValue: T): T
|
|
517
|
-
export function getConfigValue<T = any>(config: FluxStackConfig, path: string, defaultValue?: T): T | undefined {
|
|
518
|
-
const value = getNestedProperty(config, path)
|
|
519
|
-
return value !== undefined ? value : defaultValue
|
|
520
|
-
}
|
|
521
|
-
|
|
522
|
-
/**
|
|
523
|
-
* Check if configuration has a specific value
|
|
524
|
-
*/
|
|
525
|
-
export function hasConfigValue(config: FluxStackConfig, path: string): boolean {
|
|
526
|
-
return getNestedProperty(config, path) !== undefined
|
|
527
|
-
}
|
|
528
|
-
|
|
529
|
-
/**
|
|
530
|
-
* Create a configuration subset for a specific plugin or module
|
|
531
|
-
*/
|
|
532
|
-
export function createConfigSubset(
|
|
533
|
-
config: FluxStackConfig,
|
|
534
|
-
paths: string[]
|
|
535
|
-
): Record<string, any> {
|
|
536
|
-
const subset: Record<string, any> = {}
|
|
537
|
-
|
|
538
|
-
for (const path of paths) {
|
|
539
|
-
const value = getNestedProperty(config, path)
|
|
540
|
-
if (value !== undefined) {
|
|
541
|
-
setNestedProperty(subset, path, value)
|
|
542
|
-
}
|
|
543
|
-
}
|
|
544
|
-
|
|
545
|
-
return subset
|
|
546
|
-
}
|