@raclettejs/core 0.0.1
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 +435 -0
- package/bin/check-dependencies.sh +184 -0
- package/bin/cli.js +11 -0
- package/dist/cli.js +1569 -0
- package/dist/cli.js.map +7 -0
- package/dist/index.js +452 -0
- package/dist/index.js.map +7 -0
- package/index.js +11 -0
- package/package.json +90 -0
- package/scripts/docker-monitoring.js +92 -0
- package/scripts/find-i18n-keys.cjs +183 -0
- package/scripts/sync-exports.js +31 -0
- package/services/.DS_Store +0 -0
- package/services/.dockerignore +6 -0
- package/services/backend/.DS_Store +0 -0
- package/services/backend/.dockerignore +12 -0
- package/services/backend/.env +5 -0
- package/services/backend/.gitignore +17 -0
- package/services/backend/.vscode/launch.json +18 -0
- package/services/backend/Dockerfile +41 -0
- package/services/backend/README.md +172 -0
- package/services/backend/delay-api-debugger.sh +2 -0
- package/services/backend/dist/src/app.d.ts +9 -0
- package/services/backend/dist/src/app.js +164 -0
- package/services/backend/dist/src/core/backgroundTasks/taskManager.d.ts +12 -0
- package/services/backend/dist/src/core/backgroundTasks/taskManager.js +135 -0
- package/services/backend/dist/src/core/backgroundTasks/taskManagerTypes.d.ts +19 -0
- package/services/backend/dist/src/core/backgroundTasks/taskManagerTypes.js +2 -0
- package/services/backend/dist/src/core/backgroundTasks/toadSchedulerTypes.d.ts +7 -0
- package/services/backend/dist/src/core/backgroundTasks/toadSchedulerTypes.js +1 -0
- package/services/backend/dist/src/core/config/configService.d.ts +38 -0
- package/services/backend/dist/src/core/config/configService.js +98 -0
- package/services/backend/dist/src/core/config/configTypes.d.ts +33 -0
- package/services/backend/dist/src/core/config/configTypes.js +5 -0
- package/services/backend/dist/src/core/contracting/contractRegistrar.d.ts +13 -0
- package/services/backend/dist/src/core/contracting/contractRegistrar.js +83 -0
- package/services/backend/dist/src/core/contracting/contractTypes.d.ts +18 -0
- package/services/backend/dist/src/core/contracting/contractTypes.js +1 -0
- package/services/backend/dist/src/core/crud/crudRegistrar.d.ts +6 -0
- package/services/backend/dist/src/core/crud/crudRegistrar.js +16 -0
- package/services/backend/dist/src/core/crud/crudTypes.d.ts +8 -0
- package/services/backend/dist/src/core/crud/crudTypes.js +1 -0
- package/services/backend/dist/src/core/eventBus/eventBusEventMap.d.ts +65 -0
- package/services/backend/dist/src/core/eventBus/eventBusEventMap.js +64 -0
- package/services/backend/dist/src/core/eventBus/index.d.ts +3 -0
- package/services/backend/dist/src/core/eventBus/index.js +7 -0
- package/services/backend/dist/src/core/events/eventEmitter.d.ts +13 -0
- package/services/backend/dist/src/core/events/eventEmitter.js +120 -0
- package/services/backend/dist/src/core/http/headers.d.ts +3 -0
- package/services/backend/dist/src/core/http/headers.js +22 -0
- package/services/backend/dist/src/core/http/httpService.d.ts +4 -0
- package/services/backend/dist/src/core/http/httpService.js +28 -0
- package/services/backend/dist/src/core/http/httpTypes.d.ts +15 -0
- package/services/backend/dist/src/core/http/httpTypes.js +1 -0
- package/services/backend/dist/src/core/http/request-params.plugin.d.ts +2 -0
- package/services/backend/dist/src/core/http/request-params.plugin.js +34 -0
- package/services/backend/dist/src/core/payload/payloadRegistrar.d.ts +45 -0
- package/services/backend/dist/src/core/payload/payloadRegistrar.js +121 -0
- package/services/backend/dist/src/core/payload/payloadTypes.d.ts +42 -0
- package/services/backend/dist/src/core/payload/payloadTypes.js +1 -0
- package/services/backend/dist/src/core/pluginSystem/configGenerator/generatorTypes.d.ts +49 -0
- package/services/backend/dist/src/core/pluginSystem/configGenerator/generatorTypes.js +1 -0
- package/services/backend/dist/src/core/pluginSystem/configGenerator/index.d.ts +14 -0
- package/services/backend/dist/src/core/pluginSystem/configGenerator/index.js +342 -0
- package/services/backend/dist/src/core/pluginSystem/pluginFastifyInstance.d.ts +3 -0
- package/services/backend/dist/src/core/pluginSystem/pluginFastifyInstance.js +161 -0
- package/services/backend/dist/src/core/pluginSystem/pluginLoader.d.ts +5 -0
- package/services/backend/dist/src/core/pluginSystem/pluginLoader.js +317 -0
- package/services/backend/dist/src/core/pluginSystem/pluginTypes.d.ts +51 -0
- package/services/backend/dist/src/core/pluginSystem/pluginTypes.js +6 -0
- package/services/backend/dist/src/core/sockets/createSystemEventHandlers.d.ts +20 -0
- package/services/backend/dist/src/core/sockets/createSystemEventHandlers.js +74 -0
- package/services/backend/dist/src/core/sockets/index.d.ts +2 -0
- package/services/backend/dist/src/core/sockets/index.js +65 -0
- package/services/backend/dist/src/core/sockets/socketManager.d.ts +3 -0
- package/services/backend/dist/src/core/sockets/socketManager.js +125 -0
- package/services/backend/dist/src/core/sockets/socketTypes.d.ts +32 -0
- package/services/backend/dist/src/core/sockets/socketTypes.js +1 -0
- package/services/backend/dist/src/core/validation/schemaGenerator.d.ts +6 -0
- package/services/backend/dist/src/core/validation/schemaGenerator.js +242 -0
- package/services/backend/dist/src/core/validation/schemaTypes.d.ts +15 -0
- package/services/backend/dist/src/core/validation/schemaTypes.js +1 -0
- package/services/backend/dist/src/core/validation/sharedSchemas.d.ts +8 -0
- package/services/backend/dist/src/core/validation/sharedSchemas.js +7 -0
- package/services/backend/dist/src/corePlugins/raclette__core/client/generated-config.d.ts +304 -0
- package/services/backend/dist/src/corePlugins/raclette__core/client/generated-config.js +359 -0
- package/services/backend/dist/src/corePlugins/raclette__core/client/index.d.ts +2 -0
- package/services/backend/dist/src/corePlugins/raclette__core/client/index.js +2 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/account/account.model.d.ts +3 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/account/account.model.js +33 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/account/account.schema.d.ts +36 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/account/account.schema.js +29 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/account/account.service.d.ts +74 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/account/account.service.js +242 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/account/events/index.d.ts +3 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/account/events/index.js +31 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/account/helpers/crud.d.ts +2 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/account/helpers/crud.js +9 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/account/helpers/payload.d.ts +4 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/account/helpers/payload.js +13 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/account/index.d.ts +16 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/account/index.js +48 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/account/routes/index.d.ts +3 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/account/routes/index.js +15 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/account/routes/route.account.get.d.ts +24 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/account/routes/route.account.get.js +33 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/account/routes/route.account.getAll.d.ts +15 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/account/routes/route.account.getAll.js +25 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/account/routes/route.account.hardDelete.d.ts +26 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/account/routes/route.account.hardDelete.js +32 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/account/routes/route.account.patch.d.ts +39 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/account/routes/route.account.patch.js +33 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/account/routes/route.account.post.d.ts +30 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/account/routes/route.account.post.js +27 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/account/routes/route.account.remove.d.ts +25 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/account/routes/route.account.remove.js +31 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/composition/composition.model.d.ts +3 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/composition/composition.model.js +92 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/composition/composition.schema.d.ts +128 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/composition/composition.schema.js +97 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/composition/composition.service.d.ts +63 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/composition/composition.service.js +212 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/composition/events/index.d.ts +3 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/composition/events/index.js +22 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/composition/helpers/crud.d.ts +2 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/composition/helpers/crud.js +10 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/composition/helpers/payload.d.ts +4 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/composition/helpers/payload.js +11 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/composition/index.d.ts +46 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/composition/index.js +51 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/composition/routes/index.d.ts +3 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/composition/routes/index.js +15 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/composition/routes/route.composition.get.d.ts +24 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/composition/routes/route.composition.get.js +33 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/composition/routes/route.composition.getAll.d.ts +15 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/composition/routes/route.composition.getAll.js +25 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/composition/routes/route.composition.hardDelete.d.ts +25 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/composition/routes/route.composition.hardDelete.js +31 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/composition/routes/route.composition.patch.d.ts +49 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/composition/routes/route.composition.patch.js +33 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/composition/routes/route.composition.post.d.ts +40 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/composition/routes/route.composition.post.js +27 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/composition/routes/route.composition.remove.d.ts +25 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/composition/routes/route.composition.remove.js +31 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/interactionLink/events/index.d.ts +3 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/interactionLink/events/index.js +22 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/interactionLink/helpers/crud.d.ts +2 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/interactionLink/helpers/crud.js +9 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/interactionLink/helpers/payload.d.ts +4 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/interactionLink/helpers/payload.js +11 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/interactionLink/index.d.ts +16 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/interactionLink/index.js +48 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/interactionLink/interactionLink.model.d.ts +3 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/interactionLink/interactionLink.model.js +61 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/interactionLink/interactionLink.schema.d.ts +86 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/interactionLink/interactionLink.schema.js +74 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/interactionLink/interactionLink.service.d.ts +79 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/interactionLink/interactionLink.service.js +272 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/interactionLink/routes/index.d.ts +3 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/interactionLink/routes/index.js +15 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/interactionLink/routes/route.interactionLink.get.d.ts +24 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/interactionLink/routes/route.interactionLink.get.js +33 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/interactionLink/routes/route.interactionLink.getAll.d.ts +15 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/interactionLink/routes/route.interactionLink.getAll.js +25 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/interactionLink/routes/route.interactionLink.hardDelete.d.ts +25 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/interactionLink/routes/route.interactionLink.hardDelete.js +31 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/interactionLink/routes/route.interactionLink.patch.d.ts +39 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/interactionLink/routes/route.interactionLink.patch.js +33 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/interactionLink/routes/route.interactionLink.post.d.ts +30 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/interactionLink/routes/route.interactionLink.post.js +27 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/interactionLink/routes/route.interactionLink.remove.d.ts +25 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/interactionLink/routes/route.interactionLink.remove.js +31 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/project/events/index.d.ts +3 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/project/events/index.js +31 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/project/helpers/crud.d.ts +2 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/project/helpers/crud.js +9 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/project/helpers/payload.d.ts +4 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/project/helpers/payload.js +13 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/project/index.d.ts +17 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/project/index.js +49 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/project/project.model.d.ts +3 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/project/project.model.js +30 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/project/project.schema.d.ts +61 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/project/project.schema.js +65 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/project/project.service.d.ts +68 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/project/project.service.js +230 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/project/routes/index.d.ts +3 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/project/routes/index.js +15 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/project/routes/route.project.get.d.ts +24 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/project/routes/route.project.get.js +33 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/project/routes/route.project.getAll.d.ts +15 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/project/routes/route.project.getAll.js +28 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/project/routes/route.project.hardDelete.d.ts +26 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/project/routes/route.project.hardDelete.js +32 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/project/routes/route.project.patch.d.ts +38 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/project/routes/route.project.patch.js +33 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/project/routes/route.project.post.d.ts +25 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/project/routes/route.project.post.js +27 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/project/routes/route.project.remove.d.ts +25 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/project/routes/route.project.remove.js +31 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/tag/events/index.d.ts +3 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/tag/events/index.js +39 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/tag/helpers/crud.d.ts +2 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/tag/helpers/crud.js +9 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/tag/helpers/payload.d.ts +4 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/tag/helpers/payload.js +13 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/tag/index.d.ts +17 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/tag/index.js +49 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/tag/routes/index.d.ts +3 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/tag/routes/index.js +15 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/tag/routes/route.tag.get.d.ts +24 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/tag/routes/route.tag.get.js +31 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/tag/routes/route.tag.getAll.d.ts +15 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/tag/routes/route.tag.getAll.js +28 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/tag/routes/route.tag.hardDelete.d.ts +26 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/tag/routes/route.tag.hardDelete.js +32 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/tag/routes/route.tag.patch.d.ts +39 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/tag/routes/route.tag.patch.js +34 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/tag/routes/route.tag.post.d.ts +40 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/tag/routes/route.tag.post.js +35 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/tag/routes/route.tag.remove.d.ts +26 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/tag/routes/route.tag.remove.js +32 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/tag/tag.model.d.ts +3 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/tag/tag.model.js +74 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/tag/tag.schema.d.ts +68 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/tag/tag.schema.js +71 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/tag/tag.service.d.ts +65 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/tag/tag.service.js +232 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/user/events/index.d.ts +3 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/user/events/index.js +31 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/user/helpers/crud.d.ts +2 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/user/helpers/crud.js +9 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/user/helpers/payload.d.ts +4 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/user/helpers/payload.js +11 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/user/index.d.ts +17 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/user/index.js +51 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/user/routes/index.d.ts +3 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/user/routes/index.js +15 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/user/routes/route.user.get.d.ts +33 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/user/routes/route.user.get.js +33 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/user/routes/route.user.getAll.d.ts +25 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/user/routes/route.user.getAll.js +35 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/user/routes/route.user.patch.d.ts +43 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/user/routes/route.user.patch.js +37 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/user/routes/route.user.patchLastProject.d.ts +23 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/user/routes/route.user.patchLastProject.js +29 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/user/routes/route.user.post.d.ts +34 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/user/routes/route.user.post.js +28 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/user/routes/route.user.remove.d.ts +26 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/user/routes/route.user.remove.js +35 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/user/user.model.d.ts +3 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/user/user.model.js +145 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/user/user.schema.d.ts +120 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/user/user.schema.js +109 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/user/user.service.d.ts +69 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/datatypes/user/user.service.js +225 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/index.d.ts +3 -0
- package/services/backend/dist/src/corePlugins/raclette__core/server/index.js +32 -0
- package/services/backend/dist/src/domains/index.d.ts +3 -0
- package/services/backend/dist/src/domains/index.js +8 -0
- package/services/backend/dist/src/domains/system/index.d.ts +3 -0
- package/services/backend/dist/src/domains/system/index.js +5 -0
- package/services/backend/dist/src/domains/system/routes/index.d.ts +3 -0
- package/services/backend/dist/src/domains/system/routes/index.js +13 -0
- package/services/backend/dist/src/domains/system/routes/route.admin.redis.d.ts +47 -0
- package/services/backend/dist/src/domains/system/routes/route.admin.redis.js +81 -0
- package/services/backend/dist/src/domains/system/routes/route.deploy.d.ts +14 -0
- package/services/backend/dist/src/domains/system/routes/route.deploy.js +20 -0
- package/services/backend/dist/src/domains/system/routes/route.user.checkToken.d.ts +12 -0
- package/services/backend/dist/src/domains/system/routes/route.user.checkToken.js +40 -0
- package/services/backend/dist/src/domains/system/routes/route.user.login.d.ts +44 -0
- package/services/backend/dist/src/domains/system/routes/route.user.login.js +163 -0
- package/services/backend/dist/src/helpers/index.d.ts +11 -0
- package/services/backend/dist/src/helpers/index.js +13 -0
- package/services/backend/dist/src/index.d.ts +3 -0
- package/services/backend/dist/src/index.js +3 -0
- package/services/backend/dist/src/modules/authentication/index.d.ts +4 -0
- package/services/backend/dist/src/modules/authentication/index.js +80 -0
- package/services/backend/dist/src/modules/cache/cacheManager.d.ts +6 -0
- package/services/backend/dist/src/modules/cache/cacheManager.js +131 -0
- package/services/backend/dist/src/modules/cache/cacheTypes.d.ts +102 -0
- package/services/backend/dist/src/modules/cache/cacheTypes.js +1 -0
- package/services/backend/dist/src/modules/cache/providers/redis/redisConfig.d.ts +11 -0
- package/services/backend/dist/src/modules/cache/providers/redis/redisConfig.js +17 -0
- package/services/backend/dist/src/modules/cache/providers/redis/redisConnection.d.ts +4 -0
- package/services/backend/dist/src/modules/cache/providers/redis/redisConnection.js +65 -0
- package/services/backend/dist/src/modules/cache/providers/redis/redisTypes.d.ts +18 -0
- package/services/backend/dist/src/modules/cache/providers/redis/redisTypes.js +1 -0
- package/services/backend/dist/src/modules/database/providers/mongodb/mongoConnection.d.ts +4 -0
- package/services/backend/dist/src/modules/database/providers/mongodb/mongoConnection.js +21 -0
- package/services/backend/dist/src/modules/database/providers/mongodb/service.d.ts +7 -0
- package/services/backend/dist/src/modules/database/providers/mongodb/service.js +1 -0
- package/services/backend/dist/src/server.d.ts +1 -0
- package/services/backend/dist/src/server.js +98 -0
- package/services/backend/dist/src/shared/helper/mongoHelper.d.ts +3 -0
- package/services/backend/dist/src/shared/helper/mongoHelper.js +59 -0
- package/services/backend/dist/src/shared/helper/pluginHelper.d.ts +19 -0
- package/services/backend/dist/src/shared/helper/pluginHelper.js +33 -0
- package/services/backend/dist/src/shared/schemas/core/Account.schema.d.ts +63 -0
- package/services/backend/dist/src/shared/schemas/core/Account.schema.js +74 -0
- package/services/backend/dist/src/shared/schemas/core/Composition.schema.d.ts +103 -0
- package/services/backend/dist/src/shared/schemas/core/Composition.schema.js +132 -0
- package/services/backend/dist/src/shared/schemas/core/CompositionCreate.schema.d.ts +82 -0
- package/services/backend/dist/src/shared/schemas/core/CompositionCreate.schema.js +105 -0
- package/services/backend/dist/src/shared/schemas/core/CompositionUpdate.schema.d.ts +78 -0
- package/services/backend/dist/src/shared/schemas/core/CompositionUpdate.schema.js +95 -0
- package/services/backend/dist/src/shared/schemas/core/InteractionLink.schema.d.ts +84 -0
- package/services/backend/dist/src/shared/schemas/core/InteractionLink.schema.js +97 -0
- package/services/backend/dist/src/shared/schemas/core/InteractionLinkCreate.schema.d.ts +63 -0
- package/services/backend/dist/src/shared/schemas/core/InteractionLinkCreate.schema.js +70 -0
- package/services/backend/dist/src/shared/schemas/core/InteractionLinkUpdate.schema.d.ts +63 -0
- package/services/backend/dist/src/shared/schemas/core/InteractionLinkUpdate.schema.js +70 -0
- package/services/backend/dist/src/shared/schemas/core/Project.schema.d.ts +53 -0
- package/services/backend/dist/src/shared/schemas/core/Project.schema.js +58 -0
- package/services/backend/dist/src/shared/schemas/core/ProjectCreate.schema.d.ts +41 -0
- package/services/backend/dist/src/shared/schemas/core/ProjectCreate.schema.js +41 -0
- package/services/backend/dist/src/shared/schemas/core/ProjectUpdate.schema.d.ts +38 -0
- package/services/backend/dist/src/shared/schemas/core/ProjectUpdate.schema.js +38 -0
- package/services/backend/dist/src/shared/schemas/core/Tag.schema.d.ts +68 -0
- package/services/backend/dist/src/shared/schemas/core/Tag.schema.js +81 -0
- package/services/backend/dist/src/shared/schemas/core/TagCreate.schema.d.ts +52 -0
- package/services/backend/dist/src/shared/schemas/core/TagCreate.schema.js +60 -0
- package/services/backend/dist/src/shared/schemas/core/TagUpdate.schema.d.ts +47 -0
- package/services/backend/dist/src/shared/schemas/core/TagUpdate.schema.js +55 -0
- package/services/backend/dist/src/shared/schemas/core/Trigger.schema.d.ts +25 -0
- package/services/backend/dist/src/shared/schemas/core/Trigger.schema.js +27 -0
- package/services/backend/dist/src/shared/schemas/core/User.schema.d.ts +161 -0
- package/services/backend/dist/src/shared/schemas/core/User.schema.js +185 -0
- package/services/backend/dist/src/shared/schemas/core/UserCreate.schema.d.ts +59 -0
- package/services/backend/dist/src/shared/schemas/core/UserCreate.schema.js +67 -0
- package/services/backend/dist/src/shared/schemas/core/UserUpdate.schema.d.ts +52 -0
- package/services/backend/dist/src/shared/schemas/core/UserUpdate.schema.js +52 -0
- package/services/backend/dist/src/shared/schemas/core/Widget.schema.d.ts +25 -0
- package/services/backend/dist/src/shared/schemas/core/Widget.schema.js +29 -0
- package/services/backend/dist/src/shared/schemas/core/WidgetLayout.schema.d.ts +34 -0
- package/services/backend/dist/src/shared/schemas/core/WidgetLayout.schema.js +41 -0
- package/services/backend/dist/src/shared/types/core/Account.types.d.ts +19 -0
- package/services/backend/dist/src/shared/types/core/Account.types.js +8 -0
- package/services/backend/dist/src/shared/types/core/Composition.types.d.ts +31 -0
- package/services/backend/dist/src/shared/types/core/Composition.types.js +8 -0
- package/services/backend/dist/src/shared/types/core/CompositionCreate.types.d.ts +25 -0
- package/services/backend/dist/src/shared/types/core/CompositionCreate.types.js +8 -0
- package/services/backend/dist/src/shared/types/core/CompositionUpdate.types.d.ts +25 -0
- package/services/backend/dist/src/shared/types/core/CompositionUpdate.types.js +8 -0
- package/services/backend/dist/src/shared/types/core/InteractionLink.types.d.ts +25 -0
- package/services/backend/dist/src/shared/types/core/InteractionLink.types.js +8 -0
- package/services/backend/dist/src/shared/types/core/InteractionLinkCreate.types.d.ts +19 -0
- package/services/backend/dist/src/shared/types/core/InteractionLinkCreate.types.js +8 -0
- package/services/backend/dist/src/shared/types/core/InteractionLinkUpdate.types.d.ts +19 -0
- package/services/backend/dist/src/shared/types/core/InteractionLinkUpdate.types.js +8 -0
- package/services/backend/dist/src/shared/types/core/Project.types.d.ts +18 -0
- package/services/backend/dist/src/shared/types/core/Project.types.js +8 -0
- package/services/backend/dist/src/shared/types/core/ProjectCreate.types.d.ts +15 -0
- package/services/backend/dist/src/shared/types/core/ProjectCreate.types.js +8 -0
- package/services/backend/dist/src/shared/types/core/ProjectUpdate.types.d.ts +15 -0
- package/services/backend/dist/src/shared/types/core/ProjectUpdate.types.js +8 -0
- package/services/backend/dist/src/shared/types/core/Tag.types.d.ts +21 -0
- package/services/backend/dist/src/shared/types/core/Tag.types.js +8 -0
- package/services/backend/dist/src/shared/types/core/TagCreate.types.d.ts +17 -0
- package/services/backend/dist/src/shared/types/core/TagCreate.types.js +8 -0
- package/services/backend/dist/src/shared/types/core/TagUpdate.types.d.ts +17 -0
- package/services/backend/dist/src/shared/types/core/TagUpdate.types.js +8 -0
- package/services/backend/dist/src/shared/types/core/Trigger.types.d.ts +11 -0
- package/services/backend/dist/src/shared/types/core/Trigger.types.js +8 -0
- package/services/backend/dist/src/shared/types/core/User.types.d.ts +50 -0
- package/services/backend/dist/src/shared/types/core/User.types.js +8 -0
- package/services/backend/dist/src/shared/types/core/UserCreate.types.d.ts +22 -0
- package/services/backend/dist/src/shared/types/core/UserCreate.types.js +8 -0
- package/services/backend/dist/src/shared/types/core/UserUpdate.types.d.ts +21 -0
- package/services/backend/dist/src/shared/types/core/UserUpdate.types.js +8 -0
- package/services/backend/dist/src/shared/types/core/Widget.types.d.ts +14 -0
- package/services/backend/dist/src/shared/types/core/Widget.types.js +8 -0
- package/services/backend/dist/src/shared/types/core/WidgetLayout.types.d.ts +17 -0
- package/services/backend/dist/src/shared/types/core/WidgetLayout.types.js +8 -0
- package/services/backend/dist/src/shared/types/core/index.d.ts +26 -0
- package/services/backend/dist/src/shared/types/core/index.js +8 -0
- package/services/backend/dist/src/shared/types/dataTypes/index.d.ts +5 -0
- package/services/backend/dist/src/shared/types/dataTypes/index.js +6 -0
- package/services/backend/dist/src/shared/types/dataTypes/tags.d.ts +12 -0
- package/services/backend/dist/src/shared/types/dataTypes/tags.js +17 -0
- package/services/backend/dist/src/shared/types/global/api.d.ts +10 -0
- package/services/backend/dist/src/shared/types/global/api.js +1 -0
- package/services/backend/dist/src/shared/types/global/search.d.ts +7 -0
- package/services/backend/dist/src/shared/types/global/search.js +13 -0
- package/services/backend/dist/src/shared/types/index.d.ts +9 -0
- package/services/backend/dist/src/shared/types/index.js +8 -0
- package/services/backend/dist/src/shared/types/plugins/index.d.ts +8 -0
- package/services/backend/dist/src/shared/types/plugins/index.js +8 -0
- package/services/backend/dist/src/types/index.d.ts +12 -0
- package/services/backend/dist/src/types/index.js +12 -0
- package/services/backend/dist/src/utils/errors.d.ts +16 -0
- package/services/backend/dist/src/utils/errors.js +28 -0
- package/services/backend/dist/src/utils/index.d.ts +2 -0
- package/services/backend/dist/src/utils/index.js +2 -0
- package/services/backend/dist/src/utils/request.utils.d.ts +8 -0
- package/services/backend/dist/src/utils/request.utils.js +12 -0
- package/services/backend/dist/types/index.d.ts +3 -0
- package/services/backend/dist/types/index.js +2 -0
- package/services/backend/eslint.config.js +52 -0
- package/services/backend/package.json +77 -0
- package/services/backend/src/.DS_Store +0 -0
- package/services/backend/src/app.ts +253 -0
- package/services/backend/src/core/.DS_Store +0 -0
- package/services/backend/src/core/backgroundTasks/taskManager.ts +174 -0
- package/services/backend/src/core/backgroundTasks/taskManagerTypes.ts +34 -0
- package/services/backend/src/core/backgroundTasks/toadSchedulerTypes.ts +8 -0
- package/services/backend/src/core/config/configService.ts +154 -0
- package/services/backend/src/core/config/configTypes.ts +52 -0
- package/services/backend/src/core/contracting/contractRegistrar.ts +140 -0
- package/services/backend/src/core/contracting/contractTypes.ts +28 -0
- package/services/backend/src/core/crud/crudRegistrar.ts +32 -0
- package/services/backend/src/core/crud/crudTypes.ts +32 -0
- package/services/backend/src/core/eventBus/eventBusEventMap.ts +82 -0
- package/services/backend/src/core/eventBus/index.ts +14 -0
- package/services/backend/src/core/events/eventEmitter.ts +141 -0
- package/services/backend/src/core/http/headers.ts +30 -0
- package/services/backend/src/core/http/httpService.ts +56 -0
- package/services/backend/src/core/http/httpTypes.ts +33 -0
- package/services/backend/src/core/http/request-params.plugin.ts +55 -0
- package/services/backend/src/core/payload/payloadRegistrar.ts +252 -0
- package/services/backend/src/core/payload/payloadTypes.ts +44 -0
- package/services/backend/src/core/pluginSystem/.DS_Store +0 -0
- package/services/backend/src/core/pluginSystem/configGenerator/generatorTypes.ts +54 -0
- package/services/backend/src/core/pluginSystem/configGenerator/index.ts +514 -0
- package/services/backend/src/core/pluginSystem/pluginFastifyInstance.ts +240 -0
- package/services/backend/src/core/pluginSystem/pluginLoader.ts +780 -0
- package/services/backend/src/core/pluginSystem/pluginTypes.ts +91 -0
- package/services/backend/src/core/sockets/createSystemEventHandlers.ts +104 -0
- package/services/backend/src/core/sockets/index.ts +83 -0
- package/services/backend/src/core/sockets/socketManager.ts +181 -0
- package/services/backend/src/core/sockets/socketTypes.ts +32 -0
- package/services/backend/src/core/validation/schemaGenerator.ts +314 -0
- package/services/backend/src/core/validation/schemaTypes.ts +19 -0
- package/services/backend/src/core/validation/sharedSchemas.ts +17 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/account/account.model.ts +47 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/account/account.schema.ts +58 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/account/account.service.ts +381 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/account/events/index.ts +45 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/account/helpers/crud.ts +12 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/account/helpers/payload.ts +21 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/account/index.ts +55 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/account/routes/index.ts +18 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/account/routes/route.account.get.ts +52 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/account/routes/route.account.getAll.ts +33 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/account/routes/route.account.hardDelete.ts +51 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/account/routes/route.account.patch.ts +56 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/account/routes/route.account.post.ts +44 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/account/routes/route.account.remove.ts +50 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/composition/composition.model.ts +117 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/composition/composition.schema.ts +131 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/composition/composition.service.ts +335 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/composition/events/index.ts +33 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/composition/helpers/crud.ts +13 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/composition/helpers/payload.ts +19 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/composition/index.ts +59 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/composition/routes/index.ts +18 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/composition/routes/route.composition.get.ts +53 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/composition/routes/route.composition.getAll.ts +33 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/composition/routes/route.composition.hardDelete.ts +50 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/composition/routes/route.composition.patch.ts +58 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/composition/routes/route.composition.post.ts +44 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/composition/routes/route.composition.remove.ts +50 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/interactionLink/events/index.ts +33 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/interactionLink/helpers/crud.ts +12 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/interactionLink/helpers/payload.ts +21 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/interactionLink/index.ts +64 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/interactionLink/interactionLink.model.ts +81 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/interactionLink/interactionLink.schema.ts +130 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/interactionLink/interactionLink.service.ts +439 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/interactionLink/routes/index.ts +18 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/interactionLink/routes/route.interactionLink.get.ts +53 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/interactionLink/routes/route.interactionLink.getAll.ts +33 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/interactionLink/routes/route.interactionLink.hardDelete.ts +50 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/interactionLink/routes/route.interactionLink.patch.ts +55 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/interactionLink/routes/route.interactionLink.post.ts +44 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/interactionLink/routes/route.interactionLink.remove.ts +50 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/project/events/index.ts +45 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/project/helpers/crud.ts +12 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/project/helpers/payload.ts +21 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/project/index.ts +56 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/project/project.model.ts +43 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/project/project.schema.ts +107 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/project/project.service.ts +351 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/project/routes/index.ts +20 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/project/routes/route.project.get.ts +53 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/project/routes/route.project.getAll.ts +37 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/project/routes/route.project.hardDelete.ts +51 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/project/routes/route.project.patch.ts +56 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/project/routes/route.project.post.ts +42 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/project/routes/route.project.remove.ts +50 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/tag/events/index.ts +47 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/tag/helpers/crud.ts +12 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/tag/helpers/payload.ts +21 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/tag/index.ts +56 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/tag/routes/index.ts +18 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/tag/routes/route.tag.get.ts +41 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/tag/routes/route.tag.getAll.ts +35 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/tag/routes/route.tag.hardDelete.ts +49 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/tag/routes/route.tag.patch.ts +56 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/tag/routes/route.tag.post.ts +54 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/tag/routes/route.tag.remove.ts +49 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/tag/tag.model.ts +87 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/tag/tag.schema.ts +117 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/tag/tag.service.ts +346 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/user/events/index.ts +39 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/user/helpers/crud.ts +12 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/user/helpers/payload.ts +20 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/user/index.ts +59 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/user/routes/index.ts +21 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/user/routes/route.user.get.ts +52 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/user/routes/route.user.getAll.ts +51 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/user/routes/route.user.patch.ts +58 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/user/routes/route.user.patchLastProject.ts +44 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/user/routes/route.user.post.ts +40 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/user/routes/route.user.remove.ts +54 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/user/user.model.ts +187 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/user/user.schema.ts +171 -0
- package/services/backend/src/corePlugins/raclette__core/backend/datatypes/user/user.service.ts +342 -0
- package/services/backend/src/corePlugins/raclette__core/backend/index.ts +47 -0
- package/services/backend/src/corePlugins/raclette__core/frontend/generated-config.ts +396 -0
- package/services/backend/src/corePlugins/raclette__core/raclette.plugin.ts +7 -0
- package/services/backend/src/domains/.DS_Store +0 -0
- package/services/backend/src/domains/index.ts +12 -0
- package/services/backend/src/domains/system/.DS_Store +0 -0
- package/services/backend/src/domains/system/index.ts +8 -0
- package/services/backend/src/domains/system/routes/index.ts +21 -0
- package/services/backend/src/domains/system/routes/route.admin.cache.ts +105 -0
- package/services/backend/src/domains/system/routes/route.deploy.ts +24 -0
- package/services/backend/src/domains/system/routes/route.user.checkToken.ts +49 -0
- package/services/backend/src/domains/system/routes/route.user.login.ts +243 -0
- package/services/backend/src/helpers/cors.ts +28 -0
- package/services/backend/src/helpers/index.ts +19 -0
- package/services/backend/src/index.ts +3 -0
- package/services/backend/src/modules/authentication/index.ts +99 -0
- package/services/backend/src/modules/cache/cacheManager.ts +207 -0
- package/services/backend/src/modules/cache/cacheTypes.ts +122 -0
- package/services/backend/src/modules/cache/providers/redis/redisConfig.ts +17 -0
- package/services/backend/src/modules/cache/providers/redis/redisConnection.ts +59 -0
- package/services/backend/src/modules/cache/providers/redis/redisTypes.ts +20 -0
- package/services/backend/src/modules/cache/providers/valkey/valkeyConfig.ts +17 -0
- package/services/backend/src/modules/cache/providers/valkey/valkeyConnection.ts +59 -0
- package/services/backend/src/modules/cache/providers/valkey/valkeyTypes.ts +20 -0
- package/services/backend/src/modules/database/providers/mongodb/mongoConnection.ts +29 -0
- package/services/backend/src/modules/database/providers/mongodb/mongooseMpath.d.ts +83 -0
- package/services/backend/src/modules/database/providers/mongodb/service.ts +12 -0
- package/services/backend/src/server.ts +114 -0
- package/services/backend/src/shared/helper/mongoHelper.ts +61 -0
- package/services/backend/src/shared/helper/pluginHelper.ts +54 -0
- package/services/backend/src/shared/schemas/core/Account.schema.ts +80 -0
- package/services/backend/src/shared/schemas/core/Composition.schema.ts +139 -0
- package/services/backend/src/shared/schemas/core/CompositionCreate.schema.ts +112 -0
- package/services/backend/src/shared/schemas/core/CompositionUpdate.schema.ts +112 -0
- package/services/backend/src/shared/schemas/core/InteractionLink.schema.ts +103 -0
- package/services/backend/src/shared/schemas/core/InteractionLinkCreate.schema.ts +76 -0
- package/services/backend/src/shared/schemas/core/InteractionLinkUpdate.schema.ts +76 -0
- package/services/backend/src/shared/schemas/core/Project.schema.ts +64 -0
- package/services/backend/src/shared/schemas/core/ProjectCreate.schema.ts +47 -0
- package/services/backend/src/shared/schemas/core/ProjectUpdate.schema.ts +44 -0
- package/services/backend/src/shared/schemas/core/Tag.schema.ts +87 -0
- package/services/backend/src/shared/schemas/core/TagCreate.schema.ts +66 -0
- package/services/backend/src/shared/schemas/core/TagUpdate.schema.ts +61 -0
- package/services/backend/src/shared/schemas/core/Trigger.schema.ts +33 -0
- package/services/backend/src/shared/schemas/core/User.schema.ts +190 -0
- package/services/backend/src/shared/schemas/core/UserCreate.schema.ts +73 -0
- package/services/backend/src/shared/schemas/core/UserUpdate.schema.ts +58 -0
- package/services/backend/src/shared/schemas/core/Widget.schema.ts +35 -0
- package/services/backend/src/shared/schemas/core/WidgetLayout.schema.ts +47 -0
- package/services/backend/src/shared/types/core/Account.types.ts +22 -0
- package/services/backend/src/shared/types/core/Composition.types.ts +34 -0
- package/services/backend/src/shared/types/core/CompositionCreate.types.ts +28 -0
- package/services/backend/src/shared/types/core/CompositionUpdate.types.ts +28 -0
- package/services/backend/src/shared/types/core/InteractionLink.types.ts +28 -0
- package/services/backend/src/shared/types/core/InteractionLinkCreate.types.ts +22 -0
- package/services/backend/src/shared/types/core/InteractionLinkUpdate.types.ts +22 -0
- package/services/backend/src/shared/types/core/Project.types.ts +21 -0
- package/services/backend/src/shared/types/core/ProjectCreate.types.ts +18 -0
- package/services/backend/src/shared/types/core/ProjectUpdate.types.ts +18 -0
- package/services/backend/src/shared/types/core/Tag.types.ts +24 -0
- package/services/backend/src/shared/types/core/TagCreate.types.ts +20 -0
- package/services/backend/src/shared/types/core/TagUpdate.types.ts +20 -0
- package/services/backend/src/shared/types/core/Trigger.types.ts +14 -0
- package/services/backend/src/shared/types/core/User.types.ts +52 -0
- package/services/backend/src/shared/types/core/UserCreate.types.ts +25 -0
- package/services/backend/src/shared/types/core/UserUpdate.types.ts +24 -0
- package/services/backend/src/shared/types/core/Widget.types.ts +17 -0
- package/services/backend/src/shared/types/core/WidgetLayout.types.ts +20 -0
- package/services/backend/src/shared/types/core/index.ts +27 -0
- package/services/backend/src/shared/types/dataTypes/index.ts +6 -0
- package/services/backend/src/shared/types/dataTypes/tags.ts +22 -0
- package/services/backend/src/shared/types/global/api.ts +11 -0
- package/services/backend/src/shared/types/global/search.ts +13 -0
- package/services/backend/src/shared/types/index.ts +13 -0
- package/services/backend/src/shared/types/plugins/index.ts +9 -0
- package/services/backend/src/ssh-keys/krake +8 -0
- package/services/backend/src/ssh-keys/krake.pub +1 -0
- package/services/backend/src/types/core.ts +1 -0
- package/services/backend/src/types/custom-fastify-jwt.d.ts +8 -0
- package/services/backend/src/types/custom-fastify.d.ts +45 -0
- package/services/backend/src/types/index.ts +12 -0
- package/services/backend/src/utils/errors.ts +33 -0
- package/services/backend/src/utils/index.ts +2 -0
- package/services/backend/src/utils/request.utils.ts +24 -0
- package/services/backend/tsconfig.build.json +33 -0
- package/services/backend/tsconfig.json +32 -0
- package/services/backend/types/index.d.ts +1 -0
- package/services/backend/yarn.lock +4425 -0
- package/services/frontend/.DS_Store +0 -0
- package/services/frontend/.dockerignore +13 -0
- package/services/frontend/.gitattributes +4 -0
- package/services/frontend/.gitignore +35 -0
- package/services/frontend/.prettierrc +6 -0
- package/services/frontend/Dockerfile +56 -0
- package/services/frontend/README.md +511 -0
- package/services/frontend/devTools/eslint/groupByRuleFormatter.cjs +109 -0
- package/services/frontend/eslint.config.js +95 -0
- package/services/frontend/index.html +18 -0
- package/services/frontend/manifest.json +15 -0
- package/services/frontend/package.json +72 -0
- package/services/frontend/provision/entrypoint.sh +104 -0
- package/services/frontend/provision/nginx.conf +22 -0
- package/services/frontend/public/favicon.png +0 -0
- package/services/frontend/public/home-icon.png +0 -0
- package/services/frontend/public/index.html +13 -0
- package/services/frontend/public/login-logo.png +0 -0
- package/services/frontend/raclette.config.js +23 -0
- package/services/frontend/src/.DS_Store +0 -0
- package/services/frontend/src/core/.DS_Store +0 -0
- package/services/frontend/src/core/constants/ApiClient.ts +11 -0
- package/services/frontend/src/core/constants/index.ts +1 -0
- package/services/frontend/src/core/exports.ts +9 -0
- package/services/frontend/src/core/helpers/devMode.ts +14 -0
- package/services/frontend/src/core/index.ts +1 -0
- package/services/frontend/src/core/lib/.DS_Store +0 -0
- package/services/frontend/src/core/lib/configService.ts +101 -0
- package/services/frontend/src/core/lib/createStableHash.ts +44 -0
- package/services/frontend/src/core/lib/data/dataApi.ts +76 -0
- package/services/frontend/src/core/lib/data/fetchDataHandler.ts +419 -0
- package/services/frontend/src/core/lib/data/queryApi.ts +99 -0
- package/services/frontend/src/core/lib/data/responseTypeHandler.ts +354 -0
- package/services/frontend/src/core/lib/data/writeDataHandler.ts +131 -0
- package/services/frontend/src/core/lib/dataHelper.ts +464 -0
- package/services/frontend/src/core/lib/easteregg.ts +34 -0
- package/services/frontend/src/core/lib/eggs/asteroids/gameObjects.ts +334 -0
- package/services/frontend/src/core/lib/eggs/asteroids/index.ts +533 -0
- package/services/frontend/src/core/lib/eggs/asteroids/objectPool.ts +53 -0
- package/services/frontend/src/core/lib/eggs/asteroids/renderer.ts +289 -0
- package/services/frontend/src/core/lib/eggs/asteroids/spatialGrid.ts +107 -0
- package/services/frontend/src/core/lib/eggs/asteroids/types.ts +106 -0
- package/services/frontend/src/core/lib/eggs/asteroids/utils.ts +162 -0
- package/services/frontend/src/core/lib/eggs/chadsay.ts +56 -0
- package/services/frontend/src/core/lib/eggs/old_smoke.ts +173 -0
- package/services/frontend/src/core/lib/eggs/readme.md +75 -0
- package/services/frontend/src/core/lib/eggs/smoke.ts +222 -0
- package/services/frontend/src/core/lib/eggs/snow.ts +157 -0
- package/services/frontend/src/core/lib/eventEmitter.ts +148 -0
- package/services/frontend/src/core/lib/eventWhitelist.ts +28 -0
- package/services/frontend/src/core/lib/getEnvVariable.ts +50 -0
- package/services/frontend/src/core/lib/httpClient.ts +391 -0
- package/services/frontend/src/core/lib/logger.ts +260 -0
- package/services/frontend/src/core/lib/observableHelpers/getStateObservable.ts +255 -0
- package/services/frontend/src/core/lib/projectDataHelper.ts +92 -0
- package/services/frontend/src/core/lib/reducerFromMap.ts +13 -0
- package/services/frontend/src/core/lib/uriParser.ts +35 -0
- package/services/frontend/src/core/lib/userNotifier.ts +351 -0
- package/services/frontend/src/core/main.ts +279 -0
- package/services/frontend/src/core/setup/plugin-system/api/plugin-data.ts +204 -0
- package/services/frontend/src/core/setup/plugin-system/api/wrappers.ts +64 -0
- package/services/frontend/src/core/setup/plugin-system/constants/index.ts +25 -0
- package/services/frontend/src/core/setup/plugin-system/discovery/app-plugins.ts +62 -0
- package/services/frontend/src/core/setup/plugin-system/discovery/core-plugins.ts +59 -0
- package/services/frontend/src/core/setup/plugin-system/discovery/index.ts +43 -0
- package/services/frontend/src/core/setup/plugin-system/discovery/npm-plugins.ts +117 -0
- package/services/frontend/src/core/setup/plugin-system/index.ts +53 -0
- package/services/frontend/src/core/setup/plugin-system/registration/error-handling.ts +26 -0
- package/services/frontend/src/core/setup/plugin-system/registration/index.ts +181 -0
- package/services/frontend/src/core/setup/plugin-system/registration/loader.ts +86 -0
- package/services/frontend/src/core/setup/plugin-system/state/index.ts +43 -0
- package/services/frontend/src/core/setup/plugin-system/types/index.ts +56 -0
- package/services/frontend/src/core/setup/plugin-system/utils/operations.ts +92 -0
- package/services/frontend/src/core/setup/sessionHandler.ts +52 -0
- package/services/frontend/src/core/setup/socket.ts +37 -0
- package/services/frontend/src/core/setup/socketClient.ts +35 -0
- package/services/frontend/src/core/setup/socketEvents.ts +279 -0
- package/services/frontend/src/core/store/index.ts +185 -0
- package/services/frontend/src/core/store/reducers/backend/index.ts +36 -0
- package/services/frontend/src/core/store/reducers/compositionSlots/reducers.ts +39 -0
- package/services/frontend/src/core/store/reducers/compositions/index.ts +85 -0
- package/services/frontend/src/core/store/reducers/compositions/reducers.ts +52 -0
- package/services/frontend/src/core/store/reducers/compositions/selectors.ts +83 -0
- package/services/frontend/src/core/store/reducers/data/dbItems/cluster.ts +23 -0
- package/services/frontend/src/core/store/reducers/data/dbItems/composition.ts +12 -0
- package/services/frontend/src/core/store/reducers/data/dbItems/defaultItem.ts +14 -0
- package/services/frontend/src/core/store/reducers/data/dbItems/index.ts +18 -0
- package/services/frontend/src/core/store/reducers/data/dbItems/interactionLink.ts +12 -0
- package/services/frontend/src/core/store/reducers/data/dbItems/payloadHeader.ts +15 -0
- package/services/frontend/src/core/store/reducers/data/dbItems/project.ts +27 -0
- package/services/frontend/src/core/store/reducers/data/dbItems/tag.ts +24 -0
- package/services/frontend/src/core/store/reducers/data/dbItems/user.ts +27 -0
- package/services/frontend/src/core/store/reducers/data/index.ts +23 -0
- package/services/frontend/src/core/store/reducers/data/reducers.ts +553 -0
- package/services/frontend/src/core/store/reducers/interactionLinks/effects.ts +37 -0
- package/services/frontend/src/core/store/reducers/interactionLinks/index.ts +18 -0
- package/services/frontend/src/core/store/reducers/interactionLinks/reducers.ts +39 -0
- package/services/frontend/src/core/store/reducers/metaReducer.ts +64 -0
- package/services/frontend/src/core/store/reducers/notifications/index.ts +20 -0
- package/services/frontend/src/core/store/reducers/notifications/reducers.ts +170 -0
- package/services/frontend/src/core/store/reducers/project/index.ts +129 -0
- package/services/frontend/src/core/store/reducers/projects/index.ts +45 -0
- package/services/frontend/src/core/store/reducers/queries/effects.ts +40 -0
- package/services/frontend/src/core/store/reducers/queries/index.ts +22 -0
- package/services/frontend/src/core/store/reducers/queries/reducers.ts +225 -0
- package/services/frontend/src/core/store/reducers/queriesCache/index.ts +15 -0
- package/services/frontend/src/core/store/reducers/queriesCache/queryCacheHelper.ts +68 -0
- package/services/frontend/src/core/store/reducers/queriesCache/reducers.ts +137 -0
- package/services/frontend/src/core/store/reducers/ui/index.ts +18 -0
- package/services/frontend/src/core/store/reducers/ui/reducers.ts +66 -0
- package/services/frontend/src/core/store/reducers/user/index.ts +37 -0
- package/services/frontend/src/core/store/reducers/widgets/index.ts +28 -0
- package/services/frontend/src/core/store/reducers/widgets/reducers.ts +92 -0
- package/services/frontend/src/core/store/state.ts +181 -0
- package/services/frontend/src/core/store/types/index.ts +113 -0
- package/services/frontend/src/core/store/types/user.ts +46 -0
- package/services/frontend/src/core/types/ApiClient.ts +20 -0
- package/services/frontend/src/core/types/DataApi.ts +18 -0
- package/services/frontend/src/core/types/PluginRegistrar.ts +112 -0
- package/services/frontend/src/core/types/Queries.ts +1 -0
- package/services/frontend/src/core/types/Store.ts +17 -0
- package/services/frontend/src/core/types/index.ts +6 -0
- package/services/frontend/src/orchestrator/.DS_Store +0 -0
- package/services/frontend/src/orchestrator/App.vue +5 -0
- package/services/frontend/src/orchestrator/LoginApp.vue +66 -0
- package/services/frontend/src/orchestrator/ProductOrchestrator.vue +239 -0
- package/services/frontend/src/orchestrator/WelcomeScreen.vue +3 -0
- package/services/frontend/src/orchestrator/assets/fonts/.DS_Store +0 -0
- package/services/frontend/src/orchestrator/assets/fonts/klingon/klingon.woff2 +0 -0
- package/services/frontend/src/orchestrator/assets/fonts/quicksand/Quicksand-Bold.woff2 +0 -0
- package/services/frontend/src/orchestrator/assets/fonts/roboto/Roboto-Black.woff +0 -0
- package/services/frontend/src/orchestrator/assets/fonts/roboto/Roboto-Black.woff2 +0 -0
- package/services/frontend/src/orchestrator/assets/fonts/roboto/Roboto-BlackItalic.woff +0 -0
- package/services/frontend/src/orchestrator/assets/fonts/roboto/Roboto-BlackItalic.woff2 +0 -0
- package/services/frontend/src/orchestrator/assets/fonts/roboto/Roboto-Bold.woff +0 -0
- package/services/frontend/src/orchestrator/assets/fonts/roboto/Roboto-Bold.woff2 +0 -0
- package/services/frontend/src/orchestrator/assets/fonts/roboto/Roboto-BoldItalic.woff +0 -0
- package/services/frontend/src/orchestrator/assets/fonts/roboto/Roboto-BoldItalic.woff2 +0 -0
- package/services/frontend/src/orchestrator/assets/fonts/roboto/Roboto-Light.woff +0 -0
- package/services/frontend/src/orchestrator/assets/fonts/roboto/Roboto-Light.woff2 +0 -0
- package/services/frontend/src/orchestrator/assets/fonts/roboto/Roboto-LightItalic.woff +0 -0
- package/services/frontend/src/orchestrator/assets/fonts/roboto/Roboto-LightItalic.woff2 +0 -0
- package/services/frontend/src/orchestrator/assets/fonts/roboto/Roboto-Medium.woff +0 -0
- package/services/frontend/src/orchestrator/assets/fonts/roboto/Roboto-Medium.woff2 +0 -0
- package/services/frontend/src/orchestrator/assets/fonts/roboto/Roboto-MediumItalic.woff +0 -0
- package/services/frontend/src/orchestrator/assets/fonts/roboto/Roboto-MediumItalic.woff2 +0 -0
- package/services/frontend/src/orchestrator/assets/fonts/roboto/Roboto-Regular.woff +0 -0
- package/services/frontend/src/orchestrator/assets/fonts/roboto/Roboto-Regular.woff2 +0 -0
- package/services/frontend/src/orchestrator/assets/fonts/roboto/Roboto-RegularItalic.woff +0 -0
- package/services/frontend/src/orchestrator/assets/fonts/roboto/Roboto-RegularItalic.woff2 +0 -0
- package/services/frontend/src/orchestrator/assets/fonts/roboto/Roboto-Thin.woff +0 -0
- package/services/frontend/src/orchestrator/assets/fonts/roboto/Roboto-Thin.woff2 +0 -0
- package/services/frontend/src/orchestrator/assets/fonts/roboto/Roboto-ThinItalic.woff +0 -0
- package/services/frontend/src/orchestrator/assets/fonts/roboto/Roboto-ThinItalic.woff2 +0 -0
- package/services/frontend/src/orchestrator/assets/iconMappings/flags.json +91 -0
- package/services/frontend/src/orchestrator/assets/styles/.DS_Store +0 -0
- package/services/frontend/src/orchestrator/assets/styles/fonts/klingon.scss +6 -0
- package/services/frontend/src/orchestrator/assets/styles/fonts/quicksand.scss +6 -0
- package/services/frontend/src/orchestrator/assets/styles/fonts/roboto-fontface.scss +191 -0
- package/services/frontend/src/orchestrator/assets/styles/main.scss +14 -0
- package/services/frontend/src/orchestrator/assets/styles/tailwindStyles.css +16 -0
- package/services/frontend/src/orchestrator/assets/styles/themes/dark.ts +39 -0
- package/services/frontend/src/orchestrator/assets/styles/themes/highContrast.ts +38 -0
- package/services/frontend/src/orchestrator/assets/styles/themes/light.ts +39 -0
- package/services/frontend/src/orchestrator/assets/styles/vuetifyStyles.scss +5 -0
- package/services/frontend/src/orchestrator/components/.DS_Store +0 -0
- package/services/frontend/src/orchestrator/components/ErrorWidgetState.vue +87 -0
- package/services/frontend/src/orchestrator/components/LoadingWidgetState.vue +34 -0
- package/services/frontend/src/orchestrator/components/authentication/LoginForm.vue +80 -0
- package/services/frontend/src/orchestrator/components/chip/UserChip.vue +46 -0
- package/services/frontend/src/orchestrator/components/composition/CompositionOverlay.vue +21 -0
- package/services/frontend/src/orchestrator/components/composition/WidgetsLayoutLoader.vue +109 -0
- package/services/frontend/src/orchestrator/components/dragAndDrop/DraggableElement.vue +86 -0
- package/services/frontend/src/orchestrator/components/dragAndDrop/DropzoneElement.vue +36 -0
- package/services/frontend/src/orchestrator/components/index.ts +35 -0
- package/services/frontend/src/orchestrator/components/input/SimpleSearchInput.vue +42 -0
- package/services/frontend/src/orchestrator/components/menu/DevIndicator.vue +65 -0
- package/services/frontend/src/orchestrator/components/menu/ServerStatus.vue +89 -0
- package/services/frontend/src/orchestrator/components/menu/UserMenu.vue +194 -0
- package/services/frontend/src/orchestrator/components/menu/UserNotifications.vue +201 -0
- package/services/frontend/src/orchestrator/components/modal/DefaultModal.vue +81 -0
- package/services/frontend/src/orchestrator/components/navigation/PageNavigationSidebar.vue +87 -0
- package/services/frontend/src/orchestrator/components/snackbar/SnackStack.vue +86 -0
- package/services/frontend/src/orchestrator/components/time/TimeAgo.vue +73 -0
- package/services/frontend/src/orchestrator/components/utils/.DS_Store +0 -0
- package/services/frontend/src/orchestrator/composables/.DS_Store +0 -0
- package/services/frontend/src/orchestrator/composables/index.ts +5 -0
- package/services/frontend/src/orchestrator/composables/useAuthentication.ts +23 -0
- package/services/frontend/src/orchestrator/composables/useCurrentComposition.ts +44 -0
- package/services/frontend/src/orchestrator/composables/useDragAndDrop/helperFunctions.ts +247 -0
- package/services/frontend/src/orchestrator/composables/useDragAndDrop/index.ts +272 -0
- package/services/frontend/src/orchestrator/composables/useDragAndDrop/types.ts +55 -0
- package/services/frontend/src/orchestrator/composables/useInteractionLinks.ts +55 -0
- package/services/frontend/src/orchestrator/composables/useNamespacedI18n.ts +138 -0
- package/services/frontend/src/orchestrator/composables/usePageNavigation.ts +73 -0
- package/services/frontend/src/orchestrator/composables/usePluginApi.ts +238 -0
- package/services/frontend/src/orchestrator/composables/useRouteState.ts +129 -0
- package/services/frontend/src/orchestrator/composables/useStateBinding.ts +17 -0
- package/services/frontend/src/orchestrator/composables/useStateSubscriber.ts +33 -0
- package/services/frontend/src/orchestrator/composables/useUiState.ts +28 -0
- package/services/frontend/src/orchestrator/composables/useVueQueryObservableHelper.ts +75 -0
- package/services/frontend/src/orchestrator/composables/useVueStateObservableHelper.ts +75 -0
- package/services/frontend/src/orchestrator/composables/useVueWriteOperationHelper.ts +82 -0
- package/services/frontend/src/orchestrator/composables/useWidgets/helperFunctions.ts +236 -0
- package/services/frontend/src/orchestrator/composables/useWidgets/index.ts +18 -0
- package/services/frontend/src/orchestrator/exports.ts +6 -0
- package/services/frontend/src/orchestrator/helpers/date-fns.ts +113 -0
- package/services/frontend/src/orchestrator/helpers/errorBoundary.ts +87 -0
- package/services/frontend/src/orchestrator/helpers/index.ts +1 -0
- package/services/frontend/src/orchestrator/helpers/loginUserNotifications.ts +19 -0
- package/services/frontend/src/orchestrator/helpers/staticWidgetRegistry.ts +349 -0
- package/services/frontend/src/orchestrator/helpers/uiHelper.ts +12 -0
- package/services/frontend/src/orchestrator/helpers/widgetLoader.ts +118 -0
- package/services/frontend/src/orchestrator/helpers/widgetUtils.ts +36 -0
- package/services/frontend/src/orchestrator/i18n/dateTimeFormats.ts +32 -0
- package/services/frontend/src/orchestrator/i18n/de-DE.json +167 -0
- package/services/frontend/src/orchestrator/i18n/en-EU.json +167 -0
- package/services/frontend/src/orchestrator/i18n/numberFormats.ts +20 -0
- package/services/frontend/src/orchestrator/i18n/sk-SK.json +167 -0
- package/services/frontend/src/orchestrator/i18n/tl-TL.json +76 -0
- package/services/frontend/src/orchestrator/index.ts +31 -0
- package/services/frontend/src/orchestrator/main.ts +62 -0
- package/services/frontend/src/orchestrator/router/index.ts +19 -0
- package/services/frontend/src/orchestrator/router/routeParser.ts +119 -0
- package/services/frontend/src/orchestrator/router/routeParserHelper.ts +74 -0
- package/services/frontend/src/orchestrator/router/routeStore.ts +118 -0
- package/services/frontend/src/orchestrator/router/routerHooks/afterEach.ts +26 -0
- package/services/frontend/src/orchestrator/router/routerHooks/beforeEach.ts +28 -0
- package/services/frontend/src/orchestrator/router/routerHooks/index.ts +7 -0
- package/services/frontend/src/orchestrator/router/routes.ts +26 -0
- package/services/frontend/src/orchestrator/scripts/analyseBundleComponents.js +243 -0
- package/services/frontend/src/orchestrator/scripts/bundleCheck.js +104 -0
- package/services/frontend/src/orchestrator/scripts/debugRouter.js +257 -0
- package/services/frontend/src/orchestrator/setup/application.ts +3 -0
- package/services/frontend/src/orchestrator/setup/i18n.ts +312 -0
- package/services/frontend/src/orchestrator/setup/loginApp.ts +26 -0
- package/services/frontend/src/orchestrator/setup/vuetify.ts +47 -0
- package/services/frontend/src/orchestrator/types/Composables.ts +20 -0
- package/services/frontend/src/orchestrator/types/PluginApi.ts +48 -0
- package/services/frontend/src/orchestrator/types/Widgets.ts +54 -0
- package/services/frontend/src/orchestrator/types/index.ts +3 -0
- package/services/frontend/tsconfig.app.json +19 -0
- package/services/frontend/tsconfig.json +19 -0
- package/services/frontend/tsconfig.node.json +21 -0
- package/services/frontend/types.ts +2 -0
- package/services/frontend/vite-env.d.ts +12 -0
- package/services/frontend/vite-plugin-component-path.ts +162 -0
- package/services/frontend/vite.config.ts +58 -0
- package/services/frontend/vue3-component-style-guide.md +350 -0
- package/services/frontend/yarn.lock +4398 -0
- package/src/types.ts +315 -0
- package/types/core.ts +2 -0
- package/types/index.ts +8 -0
- package/yarn.lock +3120 -0
package/dist/cli.js
ADDED
|
@@ -0,0 +1,1569 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
3
|
+
var hf=Object.create;var Hn=Object.defineProperty;var mf=Object.getOwnPropertyDescriptor;var gf=Object.getOwnPropertyNames;var yf=Object.getPrototypeOf,bf=Object.prototype.hasOwnProperty;var I=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,r)=>(typeof require<"u"?require:t)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var tt=(e,t)=>()=>(e&&(t=e(e=0)),t);var E=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),vf=(e,t)=>{for(var r in t)Hn(e,r,{get:t[r],enumerable:!0})},_f=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of gf(t))!bf.call(e,o)&&o!==r&&Hn(e,o,{get:()=>t[o],enumerable:!(n=mf(t,o))||n.enumerable});return e};var qt=(e,t,r)=>(r=e!=null?hf(yf(e)):{},_f(t||!e||!e.__esModule?Hn(r,"default",{value:e,enumerable:!0}):r,e));var Xt=E(Yn=>{var Sr=class extends Error{constructor(t,r,n){super(n),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=r,this.exitCode=t,this.nestedError=void 0}},qn=class extends Sr{constructor(t){super(1,"commander.invalidArgument",t),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}};Yn.CommanderError=Sr;Yn.InvalidArgumentError=qn});var Rr=E(Xn=>{var{InvalidArgumentError:If}=Xt(),Kn=class{constructor(t,r){switch(this.description=r||"",this.variadic=!1,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,t[0]){case"<":this.required=!0,this._name=t.slice(1,-1);break;case"[":this.required=!1,this._name=t.slice(1,-1);break;default:this.required=!0,this._name=t;break}this._name.length>3&&this._name.slice(-3)==="..."&&(this.variadic=!0,this._name=this._name.slice(0,-3))}name(){return this._name}_concatValue(t,r){return r===this.defaultValue||!Array.isArray(r)?[t]:r.concat(t)}default(t,r){return this.defaultValue=t,this.defaultValueDescription=r,this}argParser(t){return this.parseArg=t,this}choices(t){return this.argChoices=t.slice(),this.parseArg=(r,n)=>{if(!this.argChoices.includes(r))throw new If(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._concatValue(r,n):r},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}};function jf(e){let t=e.name()+(e.variadic===!0?"...":"");return e.required?"<"+t+">":"["+t+"]"}Xn.Argument=Kn;Xn.humanReadableArgName=jf});var Jn=E(Qn=>{var{humanReadableArgName:Ff}=Rr(),zn=class{constructor(){this.helpWidth=void 0,this.minWidthToWrap=40,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}prepareContext(t){this.helpWidth=this.helpWidth??t.helpWidth??80}visibleCommands(t){let r=t.commands.filter(o=>!o._hidden),n=t._getHelpCommand();return n&&!n._hidden&&r.push(n),this.sortSubcommands&&r.sort((o,i)=>o.name().localeCompare(i.name())),r}compareOptions(t,r){let n=o=>o.short?o.short.replace(/^-/,""):o.long.replace(/^--/,"");return n(t).localeCompare(n(r))}visibleOptions(t){let r=t.options.filter(o=>!o.hidden),n=t._getHelpOption();if(n&&!n.hidden){let o=n.short&&t._findOption(n.short),i=n.long&&t._findOption(n.long);!o&&!i?r.push(n):n.long&&!i?r.push(t.createOption(n.long,n.description)):n.short&&!o&&r.push(t.createOption(n.short,n.description))}return this.sortOptions&&r.sort(this.compareOptions),r}visibleGlobalOptions(t){if(!this.showGlobalOptions)return[];let r=[];for(let n=t.parent;n;n=n.parent){let o=n.options.filter(i=>!i.hidden);r.push(...o)}return this.sortOptions&&r.sort(this.compareOptions),r}visibleArguments(t){return t._argsDescription&&t.registeredArguments.forEach(r=>{r.description=r.description||t._argsDescription[r.name()]||""}),t.registeredArguments.find(r=>r.description)?t.registeredArguments:[]}subcommandTerm(t){let r=t.registeredArguments.map(n=>Ff(n)).join(" ");return t._name+(t._aliases[0]?"|"+t._aliases[0]:"")+(t.options.length?" [options]":"")+(r?" "+r:"")}optionTerm(t){return t.flags}argumentTerm(t){return t.name()}longestSubcommandTermLength(t,r){return r.visibleCommands(t).reduce((n,o)=>Math.max(n,this.displayWidth(r.styleSubcommandTerm(r.subcommandTerm(o)))),0)}longestOptionTermLength(t,r){return r.visibleOptions(t).reduce((n,o)=>Math.max(n,this.displayWidth(r.styleOptionTerm(r.optionTerm(o)))),0)}longestGlobalOptionTermLength(t,r){return r.visibleGlobalOptions(t).reduce((n,o)=>Math.max(n,this.displayWidth(r.styleOptionTerm(r.optionTerm(o)))),0)}longestArgumentTermLength(t,r){return r.visibleArguments(t).reduce((n,o)=>Math.max(n,this.displayWidth(r.styleArgumentTerm(r.argumentTerm(o)))),0)}commandUsage(t){let r=t._name;t._aliases[0]&&(r=r+"|"+t._aliases[0]);let n="";for(let o=t.parent;o;o=o.parent)n=o.name()+" "+n;return n+r+" "+t.usage()}commandDescription(t){return t.description()}subcommandDescription(t){return t.summary()||t.description()}optionDescription(t){let r=[];if(t.argChoices&&r.push(`choices: ${t.argChoices.map(n=>JSON.stringify(n)).join(", ")}`),t.defaultValue!==void 0&&(t.required||t.optional||t.isBoolean()&&typeof t.defaultValue=="boolean")&&r.push(`default: ${t.defaultValueDescription||JSON.stringify(t.defaultValue)}`),t.presetArg!==void 0&&t.optional&&r.push(`preset: ${JSON.stringify(t.presetArg)}`),t.envVar!==void 0&&r.push(`env: ${t.envVar}`),r.length>0){let n=`(${r.join(", ")})`;return t.description?`${t.description} ${n}`:n}return t.description}argumentDescription(t){let r=[];if(t.argChoices&&r.push(`choices: ${t.argChoices.map(n=>JSON.stringify(n)).join(", ")}`),t.defaultValue!==void 0&&r.push(`default: ${t.defaultValueDescription||JSON.stringify(t.defaultValue)}`),r.length>0){let n=`(${r.join(", ")})`;return t.description?`${t.description} ${n}`:n}return t.description}formatItemList(t,r,n){return r.length===0?[]:[n.styleTitle(t),...r,""]}groupItems(t,r,n){let o=new Map;return t.forEach(i=>{let s=n(i);o.has(s)||o.set(s,[])}),r.forEach(i=>{let s=n(i);o.has(s)||o.set(s,[]),o.get(s).push(i)}),o}formatHelp(t,r){let n=r.padWidth(t,r),o=r.helpWidth??80;function i(p,d){return r.formatItem(p,n,d,r)}let s=[`${r.styleTitle("Usage:")} ${r.styleUsage(r.commandUsage(t))}`,""],a=r.commandDescription(t);a.length>0&&(s=s.concat([r.boxWrap(r.styleCommandDescription(a),o),""]));let c=r.visibleArguments(t).map(p=>i(r.styleArgumentTerm(r.argumentTerm(p)),r.styleArgumentDescription(r.argumentDescription(p))));if(s=s.concat(this.formatItemList("Arguments:",c,r)),this.groupItems(t.options,r.visibleOptions(t),p=>p.helpGroupHeading??"Options:").forEach((p,d)=>{let g=p.map(m=>i(r.styleOptionTerm(r.optionTerm(m)),r.styleOptionDescription(r.optionDescription(m))));s=s.concat(this.formatItemList(d,g,r))}),r.showGlobalOptions){let p=r.visibleGlobalOptions(t).map(d=>i(r.styleOptionTerm(r.optionTerm(d)),r.styleOptionDescription(r.optionDescription(d))));s=s.concat(this.formatItemList("Global Options:",p,r))}return this.groupItems(t.commands,r.visibleCommands(t),p=>p.helpGroup()||"Commands:").forEach((p,d)=>{let g=p.map(m=>i(r.styleSubcommandTerm(r.subcommandTerm(m)),r.styleSubcommandDescription(r.subcommandDescription(m))));s=s.concat(this.formatItemList(d,g,r))}),s.join(`
|
|
4
|
+
`)}displayWidth(t){return oa(t).length}styleTitle(t){return t}styleUsage(t){return t.split(" ").map(r=>r==="[options]"?this.styleOptionText(r):r==="[command]"?this.styleSubcommandText(r):r[0]==="["||r[0]==="<"?this.styleArgumentText(r):this.styleCommandText(r)).join(" ")}styleCommandDescription(t){return this.styleDescriptionText(t)}styleOptionDescription(t){return this.styleDescriptionText(t)}styleSubcommandDescription(t){return this.styleDescriptionText(t)}styleArgumentDescription(t){return this.styleDescriptionText(t)}styleDescriptionText(t){return t}styleOptionTerm(t){return this.styleOptionText(t)}styleSubcommandTerm(t){return t.split(" ").map(r=>r==="[options]"?this.styleOptionText(r):r[0]==="["||r[0]==="<"?this.styleArgumentText(r):this.styleSubcommandText(r)).join(" ")}styleArgumentTerm(t){return this.styleArgumentText(t)}styleOptionText(t){return t}styleArgumentText(t){return t}styleSubcommandText(t){return t}styleCommandText(t){return t}padWidth(t,r){return Math.max(r.longestOptionTermLength(t,r),r.longestGlobalOptionTermLength(t,r),r.longestSubcommandTermLength(t,r),r.longestArgumentTermLength(t,r))}preformatted(t){return/\n[^\S\r\n]/.test(t)}formatItem(t,r,n,o){let s=" ".repeat(2);if(!n)return s+t;let a=t.padEnd(r+t.length-o.displayWidth(t)),c=2,u=(this.helpWidth??80)-r-c-2,p;return u<this.minWidthToWrap||o.preformatted(n)?p=n:p=o.boxWrap(n,u).replace(/\n/g,`
|
|
5
|
+
`+" ".repeat(r+c)),s+a+" ".repeat(c)+p.replace(/\n/g,`
|
|
6
|
+
${s}`)}boxWrap(t,r){if(r<this.minWidthToWrap)return t;let n=t.split(/\r\n|\n/),o=/[\s]*[^\s]+/g,i=[];return n.forEach(s=>{let a=s.match(o);if(a===null){i.push("");return}let c=[a.shift()],l=this.displayWidth(c[0]);a.forEach(u=>{let p=this.displayWidth(u);if(l+p<=r){c.push(u),l+=p;return}i.push(c.join(""));let d=u.trimStart();c=[d],l=this.displayWidth(d)}),i.push(c.join(""))}),i.join(`
|
|
7
|
+
`)}};function oa(e){let t=/\x1b\[\d*(;\d*)*m/g;return e.replace(t,"")}Qn.Help=zn;Qn.stripColor=oa});var ro=E(to=>{var{InvalidArgumentError:Mf}=Xt(),Zn=class{constructor(t,r){this.flags=t,this.description=r||"",this.required=t.includes("<"),this.optional=t.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test(t),this.mandatory=!1;let n=Bf(t);this.short=n.shortFlag,this.long=n.longFlag,this.negate=!1,this.long&&(this.negate=this.long.startsWith("--no-")),this.defaultValue=void 0,this.defaultValueDescription=void 0,this.presetArg=void 0,this.envVar=void 0,this.parseArg=void 0,this.hidden=!1,this.argChoices=void 0,this.conflictsWith=[],this.implied=void 0,this.helpGroupHeading=void 0}default(t,r){return this.defaultValue=t,this.defaultValueDescription=r,this}preset(t){return this.presetArg=t,this}conflicts(t){return this.conflictsWith=this.conflictsWith.concat(t),this}implies(t){let r=t;return typeof t=="string"&&(r={[t]:!0}),this.implied=Object.assign(this.implied||{},r),this}env(t){return this.envVar=t,this}argParser(t){return this.parseArg=t,this}makeOptionMandatory(t=!0){return this.mandatory=!!t,this}hideHelp(t=!0){return this.hidden=!!t,this}_concatValue(t,r){return r===this.defaultValue||!Array.isArray(r)?[t]:r.concat(t)}choices(t){return this.argChoices=t.slice(),this.parseArg=(r,n)=>{if(!this.argChoices.includes(r))throw new Mf(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._concatValue(r,n):r},this}name(){return this.long?this.long.replace(/^--/,""):this.short.replace(/^-/,"")}attributeName(){return this.negate?ia(this.name().replace(/^no-/,"")):ia(this.name())}helpGroup(t){return this.helpGroupHeading=t,this}is(t){return this.short===t||this.long===t}isBoolean(){return!this.required&&!this.optional&&!this.negate}},eo=class{constructor(t){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,t.forEach(r=>{r.negate?this.negativeOptions.set(r.attributeName(),r):this.positiveOptions.set(r.attributeName(),r)}),this.negativeOptions.forEach((r,n)=>{this.positiveOptions.has(n)&&this.dualOptions.add(n)})}valueFromOption(t,r){let n=r.attributeName();if(!this.dualOptions.has(n))return!0;let o=this.negativeOptions.get(n).presetArg,i=o!==void 0?o:!1;return r.negate===(i===t)}};function ia(e){return e.split("-").reduce((t,r)=>t+r[0].toUpperCase()+r.slice(1))}function Bf(e){let t,r,n=/^-[^-]$/,o=/^--[^-]/,i=e.split(/[ |,]+/).concat("guard");if(n.test(i[0])&&(t=i.shift()),o.test(i[0])&&(r=i.shift()),!t&&n.test(i[0])&&(t=i.shift()),!t&&o.test(i[0])&&(t=r,r=i.shift()),i[0].startsWith("-")){let s=i[0],a=`option creation failed due to '${s}' in option flags '${e}'`;throw/^-[^-][^-]/.test(s)?new Error(`${a}
|
|
8
|
+
- a short flag is a single dash and a single character
|
|
9
|
+
- either use a single dash and a single character (for a short flag)
|
|
10
|
+
- or use a double dash for a long option (and can have two, like '--ws, --workspace')`):n.test(s)?new Error(`${a}
|
|
11
|
+
- too many short flags`):o.test(s)?new Error(`${a}
|
|
12
|
+
- too many long flags`):new Error(`${a}
|
|
13
|
+
- unrecognised flag format`)}if(t===void 0&&r===void 0)throw new Error(`option creation failed due to no flags found in '${e}'.`);return{shortFlag:t,longFlag:r}}to.Option=Zn;to.DualOptions=eo});var aa=E(sa=>{function Hf(e,t){if(Math.abs(e.length-t.length)>3)return Math.max(e.length,t.length);let r=[];for(let n=0;n<=e.length;n++)r[n]=[n];for(let n=0;n<=t.length;n++)r[0][n]=n;for(let n=1;n<=t.length;n++)for(let o=1;o<=e.length;o++){let i=1;e[o-1]===t[n-1]?i=0:i=1,r[o][n]=Math.min(r[o-1][n]+1,r[o][n-1]+1,r[o-1][n-1]+i),o>1&&n>1&&e[o-1]===t[n-2]&&e[o-2]===t[n-1]&&(r[o][n]=Math.min(r[o][n],r[o-2][n-2]+1))}return r[e.length][t.length]}function Vf(e,t){if(!t||t.length===0)return"";t=Array.from(new Set(t));let r=e.startsWith("--");r&&(e=e.slice(2),t=t.map(s=>s.slice(2)));let n=[],o=3,i=.4;return t.forEach(s=>{if(s.length<=1)return;let a=Hf(e,s),c=Math.max(e.length,s.length);(c-a)/c>i&&(a<o?(o=a,n=[s]):a===o&&n.push(s))}),n.sort((s,a)=>s.localeCompare(a)),r&&(n=n.map(s=>`--${s}`)),n.length>1?`
|
|
14
|
+
(Did you mean one of ${n.join(", ")}?)`:n.length===1?`
|
|
15
|
+
(Did you mean ${n[0]}?)`:""}sa.suggestSimilar=Vf});var pa=E(ao=>{var Gf=I("node:events").EventEmitter,no=I("node:child_process"),We=I("node:path"),Or=I("node:fs"),F=I("node:process"),{Argument:Uf,humanReadableArgName:Wf}=Rr(),{CommanderError:oo}=Xt(),{Help:qf,stripColor:Yf}=Jn(),{Option:ca,DualOptions:Kf}=ro(),{suggestSimilar:la}=aa(),io=class e extends Gf{constructor(t){super(),this.commands=[],this.options=[],this.parent=null,this._allowUnknownOption=!1,this._allowExcessArguments=!1,this.registeredArguments=[],this._args=this.registeredArguments,this.args=[],this.rawArgs=[],this.processedArgs=[],this._scriptPath=null,this._name=t||"",this._optionValues={},this._optionValueSources={},this._storeOptionsAsProperties=!1,this._actionHandler=null,this._executableHandler=!1,this._executableFile=null,this._executableDir=null,this._defaultCommandName=null,this._exitCallback=null,this._aliases=[],this._combineFlagAndOptionalValue=!0,this._description="",this._summary="",this._argsDescription=void 0,this._enablePositionalOptions=!1,this._passThroughOptions=!1,this._lifeCycleHooks={},this._showHelpAfterError=!1,this._showSuggestionAfterError=!0,this._savedState=null,this._outputConfiguration={writeOut:r=>F.stdout.write(r),writeErr:r=>F.stderr.write(r),outputError:(r,n)=>n(r),getOutHelpWidth:()=>F.stdout.isTTY?F.stdout.columns:void 0,getErrHelpWidth:()=>F.stderr.isTTY?F.stderr.columns:void 0,getOutHasColors:()=>so()??(F.stdout.isTTY&&F.stdout.hasColors?.()),getErrHasColors:()=>so()??(F.stderr.isTTY&&F.stderr.hasColors?.()),stripColor:r=>Yf(r)},this._hidden=!1,this._helpOption=void 0,this._addImplicitHelpCommand=void 0,this._helpCommand=void 0,this._helpConfiguration={},this._helpGroupHeading=void 0,this._defaultCommandGroup=void 0,this._defaultOptionGroup=void 0}copyInheritedSettings(t){return this._outputConfiguration=t._outputConfiguration,this._helpOption=t._helpOption,this._helpCommand=t._helpCommand,this._helpConfiguration=t._helpConfiguration,this._exitCallback=t._exitCallback,this._storeOptionsAsProperties=t._storeOptionsAsProperties,this._combineFlagAndOptionalValue=t._combineFlagAndOptionalValue,this._allowExcessArguments=t._allowExcessArguments,this._enablePositionalOptions=t._enablePositionalOptions,this._showHelpAfterError=t._showHelpAfterError,this._showSuggestionAfterError=t._showSuggestionAfterError,this}_getCommandAndAncestors(){let t=[];for(let r=this;r;r=r.parent)t.push(r);return t}command(t,r,n){let o=r,i=n;typeof o=="object"&&o!==null&&(i=o,o=null),i=i||{};let[,s,a]=t.match(/([^ ]+) *(.*)/),c=this.createCommand(s);return o&&(c.description(o),c._executableHandler=!0),i.isDefault&&(this._defaultCommandName=c._name),c._hidden=!!(i.noHelp||i.hidden),c._executableFile=i.executableFile||null,a&&c.arguments(a),this._registerCommand(c),c.parent=this,c.copyInheritedSettings(this),o?this:c}createCommand(t){return new e(t)}createHelp(){return Object.assign(new qf,this.configureHelp())}configureHelp(t){return t===void 0?this._helpConfiguration:(this._helpConfiguration=t,this)}configureOutput(t){return t===void 0?this._outputConfiguration:(this._outputConfiguration=Object.assign({},this._outputConfiguration,t),this)}showHelpAfterError(t=!0){return typeof t!="string"&&(t=!!t),this._showHelpAfterError=t,this}showSuggestionAfterError(t=!0){return this._showSuggestionAfterError=!!t,this}addCommand(t,r){if(!t._name)throw new Error(`Command passed to .addCommand() must have a name
|
|
16
|
+
- specify the name in Command constructor or using .name()`);return r=r||{},r.isDefault&&(this._defaultCommandName=t._name),(r.noHelp||r.hidden)&&(t._hidden=!0),this._registerCommand(t),t.parent=this,t._checkForBrokenPassThrough(),this}createArgument(t,r){return new Uf(t,r)}argument(t,r,n,o){let i=this.createArgument(t,r);return typeof n=="function"?i.default(o).argParser(n):i.default(n),this.addArgument(i),this}arguments(t){return t.trim().split(/ +/).forEach(r=>{this.argument(r)}),this}addArgument(t){let r=this.registeredArguments.slice(-1)[0];if(r&&r.variadic)throw new Error(`only the last argument can be variadic '${r.name()}'`);if(t.required&&t.defaultValue!==void 0&&t.parseArg===void 0)throw new Error(`a default value for a required argument is never used: '${t.name()}'`);return this.registeredArguments.push(t),this}helpCommand(t,r){if(typeof t=="boolean")return this._addImplicitHelpCommand=t,t&&this._defaultCommandGroup&&this._initCommandGroup(this._getHelpCommand()),this;let n=t??"help [command]",[,o,i]=n.match(/([^ ]+) *(.*)/),s=r??"display help for command",a=this.createCommand(o);return a.helpOption(!1),i&&a.arguments(i),s&&a.description(s),this._addImplicitHelpCommand=!0,this._helpCommand=a,(t||r)&&this._initCommandGroup(a),this}addHelpCommand(t,r){return typeof t!="object"?(this.helpCommand(t,r),this):(this._addImplicitHelpCommand=!0,this._helpCommand=t,this._initCommandGroup(t),this)}_getHelpCommand(){return this._addImplicitHelpCommand??(this.commands.length&&!this._actionHandler&&!this._findCommand("help"))?(this._helpCommand===void 0&&this.helpCommand(void 0,void 0),this._helpCommand):null}hook(t,r){let n=["preSubcommand","preAction","postAction"];if(!n.includes(t))throw new Error(`Unexpected value for event passed to hook : '${t}'.
|
|
17
|
+
Expecting one of '${n.join("', '")}'`);return this._lifeCycleHooks[t]?this._lifeCycleHooks[t].push(r):this._lifeCycleHooks[t]=[r],this}exitOverride(t){return t?this._exitCallback=t:this._exitCallback=r=>{if(r.code!=="commander.executeSubCommandAsync")throw r},this}_exit(t,r,n){this._exitCallback&&this._exitCallback(new oo(t,r,n)),F.exit(t)}action(t){let r=n=>{let o=this.registeredArguments.length,i=n.slice(0,o);return this._storeOptionsAsProperties?i[o]=this:i[o]=this.opts(),i.push(this),t.apply(this,i)};return this._actionHandler=r,this}createOption(t,r){return new ca(t,r)}_callParseArg(t,r,n,o){try{return t.parseArg(r,n)}catch(i){if(i.code==="commander.invalidArgument"){let s=`${o} ${i.message}`;this.error(s,{exitCode:i.exitCode,code:i.code})}throw i}}_registerOption(t){let r=t.short&&this._findOption(t.short)||t.long&&this._findOption(t.long);if(r){let n=t.long&&this._findOption(t.long)?t.long:t.short;throw new Error(`Cannot add option '${t.flags}'${this._name&&` to command '${this._name}'`} due to conflicting flag '${n}'
|
|
18
|
+
- already used by option '${r.flags}'`)}this._initOptionGroup(t),this.options.push(t)}_registerCommand(t){let r=o=>[o.name()].concat(o.aliases()),n=r(t).find(o=>this._findCommand(o));if(n){let o=r(this._findCommand(n)).join("|"),i=r(t).join("|");throw new Error(`cannot add command '${i}' as already have command '${o}'`)}this._initCommandGroup(t),this.commands.push(t)}addOption(t){this._registerOption(t);let r=t.name(),n=t.attributeName();if(t.negate){let i=t.long.replace(/^--no-/,"--");this._findOption(i)||this.setOptionValueWithSource(n,t.defaultValue===void 0?!0:t.defaultValue,"default")}else t.defaultValue!==void 0&&this.setOptionValueWithSource(n,t.defaultValue,"default");let o=(i,s,a)=>{i==null&&t.presetArg!==void 0&&(i=t.presetArg);let c=this.getOptionValue(n);i!==null&&t.parseArg?i=this._callParseArg(t,i,c,s):i!==null&&t.variadic&&(i=t._concatValue(i,c)),i==null&&(t.negate?i=!1:t.isBoolean()||t.optional?i=!0:i=""),this.setOptionValueWithSource(n,i,a)};return this.on("option:"+r,i=>{let s=`error: option '${t.flags}' argument '${i}' is invalid.`;o(i,s,"cli")}),t.envVar&&this.on("optionEnv:"+r,i=>{let s=`error: option '${t.flags}' value '${i}' from env '${t.envVar}' is invalid.`;o(i,s,"env")}),this}_optionEx(t,r,n,o,i){if(typeof r=="object"&&r instanceof ca)throw new Error("To add an Option object use addOption() instead of option() or requiredOption()");let s=this.createOption(r,n);if(s.makeOptionMandatory(!!t.mandatory),typeof o=="function")s.default(i).argParser(o);else if(o instanceof RegExp){let a=o;o=(c,l)=>{let u=a.exec(c);return u?u[0]:l},s.default(i).argParser(o)}else s.default(o);return this.addOption(s)}option(t,r,n,o){return this._optionEx({},t,r,n,o)}requiredOption(t,r,n,o){return this._optionEx({mandatory:!0},t,r,n,o)}combineFlagAndOptionalValue(t=!0){return this._combineFlagAndOptionalValue=!!t,this}allowUnknownOption(t=!0){return this._allowUnknownOption=!!t,this}allowExcessArguments(t=!0){return this._allowExcessArguments=!!t,this}enablePositionalOptions(t=!0){return this._enablePositionalOptions=!!t,this}passThroughOptions(t=!0){return this._passThroughOptions=!!t,this._checkForBrokenPassThrough(),this}_checkForBrokenPassThrough(){if(this.parent&&this._passThroughOptions&&!this.parent._enablePositionalOptions)throw new Error(`passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`)}storeOptionsAsProperties(t=!0){if(this.options.length)throw new Error("call .storeOptionsAsProperties() before adding options");if(Object.keys(this._optionValues).length)throw new Error("call .storeOptionsAsProperties() before setting option values");return this._storeOptionsAsProperties=!!t,this}getOptionValue(t){return this._storeOptionsAsProperties?this[t]:this._optionValues[t]}setOptionValue(t,r){return this.setOptionValueWithSource(t,r,void 0)}setOptionValueWithSource(t,r,n){return this._storeOptionsAsProperties?this[t]=r:this._optionValues[t]=r,this._optionValueSources[t]=n,this}getOptionValueSource(t){return this._optionValueSources[t]}getOptionValueSourceWithGlobals(t){let r;return this._getCommandAndAncestors().forEach(n=>{n.getOptionValueSource(t)!==void 0&&(r=n.getOptionValueSource(t))}),r}_prepareUserArgs(t,r){if(t!==void 0&&!Array.isArray(t))throw new Error("first parameter to parse must be array or undefined");if(r=r||{},t===void 0&&r.from===void 0){F.versions?.electron&&(r.from="electron");let o=F.execArgv??[];(o.includes("-e")||o.includes("--eval")||o.includes("-p")||o.includes("--print"))&&(r.from="eval")}t===void 0&&(t=F.argv),this.rawArgs=t.slice();let n;switch(r.from){case void 0:case"node":this._scriptPath=t[1],n=t.slice(2);break;case"electron":F.defaultApp?(this._scriptPath=t[1],n=t.slice(2)):n=t.slice(1);break;case"user":n=t.slice(0);break;case"eval":n=t.slice(1);break;default:throw new Error(`unexpected parse option { from: '${r.from}' }`)}return!this._name&&this._scriptPath&&this.nameFromFilename(this._scriptPath),this._name=this._name||"program",n}parse(t,r){this._prepareForParse();let n=this._prepareUserArgs(t,r);return this._parseCommand([],n),this}async parseAsync(t,r){this._prepareForParse();let n=this._prepareUserArgs(t,r);return await this._parseCommand([],n),this}_prepareForParse(){this._savedState===null?this.saveStateBeforeParse():this.restoreStateBeforeParse()}saveStateBeforeParse(){this._savedState={_name:this._name,_optionValues:{...this._optionValues},_optionValueSources:{...this._optionValueSources}}}restoreStateBeforeParse(){if(this._storeOptionsAsProperties)throw new Error(`Can not call parse again when storeOptionsAsProperties is true.
|
|
19
|
+
- either make a new Command for each call to parse, or stop storing options as properties`);this._name=this._savedState._name,this._scriptPath=null,this.rawArgs=[],this._optionValues={...this._savedState._optionValues},this._optionValueSources={...this._savedState._optionValueSources},this.args=[],this.processedArgs=[]}_checkForMissingExecutable(t,r,n){if(Or.existsSync(t))return;let o=r?`searched for local subcommand relative to directory '${r}'`:"no directory for search for local subcommand, use .executableDir() to supply a custom directory",i=`'${t}' does not exist
|
|
20
|
+
- if '${n}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead
|
|
21
|
+
- if the default executable name is not suitable, use the executableFile option to supply a custom name or path
|
|
22
|
+
- ${o}`;throw new Error(i)}_executeSubCommand(t,r){r=r.slice();let n=!1,o=[".js",".ts",".tsx",".mjs",".cjs"];function i(u,p){let d=We.resolve(u,p);if(Or.existsSync(d))return d;if(o.includes(We.extname(p)))return;let g=o.find(m=>Or.existsSync(`${d}${m}`));if(g)return`${d}${g}`}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let s=t._executableFile||`${this._name}-${t._name}`,a=this._executableDir||"";if(this._scriptPath){let u;try{u=Or.realpathSync(this._scriptPath)}catch{u=this._scriptPath}a=We.resolve(We.dirname(u),a)}if(a){let u=i(a,s);if(!u&&!t._executableFile&&this._scriptPath){let p=We.basename(this._scriptPath,We.extname(this._scriptPath));p!==this._name&&(u=i(a,`${p}-${t._name}`))}s=u||s}n=o.includes(We.extname(s));let c;F.platform!=="win32"?n?(r.unshift(s),r=ua(F.execArgv).concat(r),c=no.spawn(F.argv[0],r,{stdio:"inherit"})):c=no.spawn(s,r,{stdio:"inherit"}):(this._checkForMissingExecutable(s,a,t._name),r.unshift(s),r=ua(F.execArgv).concat(r),c=no.spawn(F.execPath,r,{stdio:"inherit"})),c.killed||["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach(p=>{F.on(p,()=>{c.killed===!1&&c.exitCode===null&&c.kill(p)})});let l=this._exitCallback;c.on("close",u=>{u=u??1,l?l(new oo(u,"commander.executeSubCommandAsync","(close)")):F.exit(u)}),c.on("error",u=>{if(u.code==="ENOENT")this._checkForMissingExecutable(s,a,t._name);else if(u.code==="EACCES")throw new Error(`'${s}' not executable`);if(!l)F.exit(1);else{let p=new oo(1,"commander.executeSubCommandAsync","(error)");p.nestedError=u,l(p)}}),this.runningCommand=c}_dispatchSubcommand(t,r,n){let o=this._findCommand(t);o||this.help({error:!0}),o._prepareForParse();let i;return i=this._chainOrCallSubCommandHook(i,o,"preSubcommand"),i=this._chainOrCall(i,()=>{if(o._executableHandler)this._executeSubCommand(o,r.concat(n));else return o._parseCommand(r,n)}),i}_dispatchHelpCommand(t){t||this.help();let r=this._findCommand(t);return r&&!r._executableHandler&&r.help(),this._dispatchSubcommand(t,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){this.registeredArguments.forEach((t,r)=>{t.required&&this.args[r]==null&&this.missingArgument(t.name())}),!(this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic)&&this.args.length>this.registeredArguments.length&&this._excessArguments(this.args)}_processArguments(){let t=(n,o,i)=>{let s=o;if(o!==null&&n.parseArg){let a=`error: command-argument value '${o}' is invalid for argument '${n.name()}'.`;s=this._callParseArg(n,o,i,a)}return s};this._checkNumberOfArguments();let r=[];this.registeredArguments.forEach((n,o)=>{let i=n.defaultValue;n.variadic?o<this.args.length?(i=this.args.slice(o),n.parseArg&&(i=i.reduce((s,a)=>t(n,a,s),n.defaultValue))):i===void 0&&(i=[]):o<this.args.length&&(i=this.args[o],n.parseArg&&(i=t(n,i,n.defaultValue))),r[o]=i}),this.processedArgs=r}_chainOrCall(t,r){return t&&t.then&&typeof t.then=="function"?t.then(()=>r()):r()}_chainOrCallHooks(t,r){let n=t,o=[];return this._getCommandAndAncestors().reverse().filter(i=>i._lifeCycleHooks[r]!==void 0).forEach(i=>{i._lifeCycleHooks[r].forEach(s=>{o.push({hookedCommand:i,callback:s})})}),r==="postAction"&&o.reverse(),o.forEach(i=>{n=this._chainOrCall(n,()=>i.callback(i.hookedCommand,this))}),n}_chainOrCallSubCommandHook(t,r,n){let o=t;return this._lifeCycleHooks[n]!==void 0&&this._lifeCycleHooks[n].forEach(i=>{o=this._chainOrCall(o,()=>i(this,r))}),o}_parseCommand(t,r){let n=this.parseOptions(r);if(this._parseOptionsEnv(),this._parseOptionsImplied(),t=t.concat(n.operands),r=n.unknown,this.args=t.concat(r),t&&this._findCommand(t[0]))return this._dispatchSubcommand(t[0],t.slice(1),r);if(this._getHelpCommand()&&t[0]===this._getHelpCommand().name())return this._dispatchHelpCommand(t[1]);if(this._defaultCommandName)return this._outputHelpIfRequested(r),this._dispatchSubcommand(this._defaultCommandName,t,r);this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName&&this.help({error:!0}),this._outputHelpIfRequested(n.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let o=()=>{n.unknown.length>0&&this.unknownOption(n.unknown[0])},i=`command:${this.name()}`;if(this._actionHandler){o(),this._processArguments();let s;return s=this._chainOrCallHooks(s,"preAction"),s=this._chainOrCall(s,()=>this._actionHandler(this.processedArgs)),this.parent&&(s=this._chainOrCall(s,()=>{this.parent.emit(i,t,r)})),s=this._chainOrCallHooks(s,"postAction"),s}if(this.parent&&this.parent.listenerCount(i))o(),this._processArguments(),this.parent.emit(i,t,r);else if(t.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",t,r);this.listenerCount("command:*")?this.emit("command:*",t,r):this.commands.length?this.unknownCommand():(o(),this._processArguments())}else this.commands.length?(o(),this.help({error:!0})):(o(),this._processArguments())}_findCommand(t){if(t)return this.commands.find(r=>r._name===t||r._aliases.includes(t))}_findOption(t){return this.options.find(r=>r.is(t))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach(t=>{t.options.forEach(r=>{r.mandatory&&t.getOptionValue(r.attributeName())===void 0&&t.missingMandatoryOptionValue(r)})})}_checkForConflictingLocalOptions(){let t=this.options.filter(n=>{let o=n.attributeName();return this.getOptionValue(o)===void 0?!1:this.getOptionValueSource(o)!=="default"});t.filter(n=>n.conflictsWith.length>0).forEach(n=>{let o=t.find(i=>n.conflictsWith.includes(i.attributeName()));o&&this._conflictingOption(n,o)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach(t=>{t._checkForConflictingLocalOptions()})}parseOptions(t){let r=[],n=[],o=r,i=t.slice();function s(l){return l.length>1&&l[0]==="-"}let a=l=>/^-\d*\.?\d+(e[+-]?\d+)?$/.test(l)?!this._getCommandAndAncestors().some(u=>u.options.map(p=>p.short).some(p=>/^-\d$/.test(p))):!1,c=null;for(;i.length;){let l=i.shift();if(l==="--"){o===n&&o.push(l),o.push(...i);break}if(c&&(!s(l)||a(l))){this.emit(`option:${c.name()}`,l);continue}if(c=null,s(l)){let u=this._findOption(l);if(u){if(u.required){let p=i.shift();p===void 0&&this.optionMissingArgument(u),this.emit(`option:${u.name()}`,p)}else if(u.optional){let p=null;i.length>0&&(!s(i[0])||a(i[0]))&&(p=i.shift()),this.emit(`option:${u.name()}`,p)}else this.emit(`option:${u.name()}`);c=u.variadic?u:null;continue}}if(l.length>2&&l[0]==="-"&&l[1]!=="-"){let u=this._findOption(`-${l[1]}`);if(u){u.required||u.optional&&this._combineFlagAndOptionalValue?this.emit(`option:${u.name()}`,l.slice(2)):(this.emit(`option:${u.name()}`),i.unshift(`-${l.slice(2)}`));continue}}if(/^--[^=]+=/.test(l)){let u=l.indexOf("="),p=this._findOption(l.slice(0,u));if(p&&(p.required||p.optional)){this.emit(`option:${p.name()}`,l.slice(u+1));continue}}if(o===r&&s(l)&&!(this.commands.length===0&&a(l))&&(o=n),(this._enablePositionalOptions||this._passThroughOptions)&&r.length===0&&n.length===0){if(this._findCommand(l)){r.push(l),i.length>0&&n.push(...i);break}else if(this._getHelpCommand()&&l===this._getHelpCommand().name()){r.push(l),i.length>0&&r.push(...i);break}else if(this._defaultCommandName){n.push(l),i.length>0&&n.push(...i);break}}if(this._passThroughOptions){o.push(l),i.length>0&&o.push(...i);break}o.push(l)}return{operands:r,unknown:n}}opts(){if(this._storeOptionsAsProperties){let t={},r=this.options.length;for(let n=0;n<r;n++){let o=this.options[n].attributeName();t[o]=o===this._versionOptionName?this._version:this[o]}return t}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce((t,r)=>Object.assign(t,r.opts()),{})}error(t,r){this._outputConfiguration.outputError(`${t}
|
|
23
|
+
`,this._outputConfiguration.writeErr),typeof this._showHelpAfterError=="string"?this._outputConfiguration.writeErr(`${this._showHelpAfterError}
|
|
24
|
+
`):this._showHelpAfterError&&(this._outputConfiguration.writeErr(`
|
|
25
|
+
`),this.outputHelp({error:!0}));let n=r||{},o=n.exitCode||1,i=n.code||"commander.error";this._exit(o,i,t)}_parseOptionsEnv(){this.options.forEach(t=>{if(t.envVar&&t.envVar in F.env){let r=t.attributeName();(this.getOptionValue(r)===void 0||["default","config","env"].includes(this.getOptionValueSource(r)))&&(t.required||t.optional?this.emit(`optionEnv:${t.name()}`,F.env[t.envVar]):this.emit(`optionEnv:${t.name()}`))}})}_parseOptionsImplied(){let t=new Kf(this.options),r=n=>this.getOptionValue(n)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(n));this.options.filter(n=>n.implied!==void 0&&r(n.attributeName())&&t.valueFromOption(this.getOptionValue(n.attributeName()),n)).forEach(n=>{Object.keys(n.implied).filter(o=>!r(o)).forEach(o=>{this.setOptionValueWithSource(o,n.implied[o],"implied")})})}missingArgument(t){let r=`error: missing required argument '${t}'`;this.error(r,{code:"commander.missingArgument"})}optionMissingArgument(t){let r=`error: option '${t.flags}' argument missing`;this.error(r,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(t){let r=`error: required option '${t.flags}' not specified`;this.error(r,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(t,r){let n=s=>{let a=s.attributeName(),c=this.getOptionValue(a),l=this.options.find(p=>p.negate&&a===p.attributeName()),u=this.options.find(p=>!p.negate&&a===p.attributeName());return l&&(l.presetArg===void 0&&c===!1||l.presetArg!==void 0&&c===l.presetArg)?l:u||s},o=s=>{let a=n(s),c=a.attributeName();return this.getOptionValueSource(c)==="env"?`environment variable '${a.envVar}'`:`option '${a.flags}'`},i=`error: ${o(t)} cannot be used with ${o(r)}`;this.error(i,{code:"commander.conflictingOption"})}unknownOption(t){if(this._allowUnknownOption)return;let r="";if(t.startsWith("--")&&this._showSuggestionAfterError){let o=[],i=this;do{let s=i.createHelp().visibleOptions(i).filter(a=>a.long).map(a=>a.long);o=o.concat(s),i=i.parent}while(i&&!i._enablePositionalOptions);r=la(t,o)}let n=`error: unknown option '${t}'${r}`;this.error(n,{code:"commander.unknownOption"})}_excessArguments(t){if(this._allowExcessArguments)return;let r=this.registeredArguments.length,n=r===1?"":"s",i=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${r} argument${n} but got ${t.length}.`;this.error(i,{code:"commander.excessArguments"})}unknownCommand(){let t=this.args[0],r="";if(this._showSuggestionAfterError){let o=[];this.createHelp().visibleCommands(this).forEach(i=>{o.push(i.name()),i.alias()&&o.push(i.alias())}),r=la(t,o)}let n=`error: unknown command '${t}'${r}`;this.error(n,{code:"commander.unknownCommand"})}version(t,r,n){if(t===void 0)return this._version;this._version=t,r=r||"-V, --version",n=n||"output the version number";let o=this.createOption(r,n);return this._versionOptionName=o.attributeName(),this._registerOption(o),this.on("option:"+o.name(),()=>{this._outputConfiguration.writeOut(`${t}
|
|
26
|
+
`),this._exit(0,"commander.version",t)}),this}description(t,r){return t===void 0&&r===void 0?this._description:(this._description=t,r&&(this._argsDescription=r),this)}summary(t){return t===void 0?this._summary:(this._summary=t,this)}alias(t){if(t===void 0)return this._aliases[0];let r=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler&&(r=this.commands[this.commands.length-1]),t===r._name)throw new Error("Command alias can't be the same as its name");let n=this.parent?._findCommand(t);if(n){let o=[n.name()].concat(n.aliases()).join("|");throw new Error(`cannot add alias '${t}' to command '${this.name()}' as already have command '${o}'`)}return r._aliases.push(t),this}aliases(t){return t===void 0?this._aliases:(t.forEach(r=>this.alias(r)),this)}usage(t){if(t===void 0){if(this._usage)return this._usage;let r=this.registeredArguments.map(n=>Wf(n));return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?r:[]).join(" ")}return this._usage=t,this}name(t){return t===void 0?this._name:(this._name=t,this)}helpGroup(t){return t===void 0?this._helpGroupHeading??"":(this._helpGroupHeading=t,this)}commandsGroup(t){return t===void 0?this._defaultCommandGroup??"":(this._defaultCommandGroup=t,this)}optionsGroup(t){return t===void 0?this._defaultOptionGroup??"":(this._defaultOptionGroup=t,this)}_initOptionGroup(t){this._defaultOptionGroup&&!t.helpGroupHeading&&t.helpGroup(this._defaultOptionGroup)}_initCommandGroup(t){this._defaultCommandGroup&&!t.helpGroup()&&t.helpGroup(this._defaultCommandGroup)}nameFromFilename(t){return this._name=We.basename(t,We.extname(t)),this}executableDir(t){return t===void 0?this._executableDir:(this._executableDir=t,this)}helpInformation(t){let r=this.createHelp(),n=this._getOutputContext(t);r.prepareContext({error:n.error,helpWidth:n.helpWidth,outputHasColors:n.hasColors});let o=r.formatHelp(this,r);return n.hasColors?o:this._outputConfiguration.stripColor(o)}_getOutputContext(t){t=t||{};let r=!!t.error,n,o,i;return r?(n=a=>this._outputConfiguration.writeErr(a),o=this._outputConfiguration.getErrHasColors(),i=this._outputConfiguration.getErrHelpWidth()):(n=a=>this._outputConfiguration.writeOut(a),o=this._outputConfiguration.getOutHasColors(),i=this._outputConfiguration.getOutHelpWidth()),{error:r,write:a=>(o||(a=this._outputConfiguration.stripColor(a)),n(a)),hasColors:o,helpWidth:i}}outputHelp(t){let r;typeof t=="function"&&(r=t,t=void 0);let n=this._getOutputContext(t),o={error:n.error,write:n.write,command:this};this._getCommandAndAncestors().reverse().forEach(s=>s.emit("beforeAllHelp",o)),this.emit("beforeHelp",o);let i=this.helpInformation({error:n.error});if(r&&(i=r(i),typeof i!="string"&&!Buffer.isBuffer(i)))throw new Error("outputHelp callback must return a string or a Buffer");n.write(i),this._getHelpOption()?.long&&this.emit(this._getHelpOption().long),this.emit("afterHelp",o),this._getCommandAndAncestors().forEach(s=>s.emit("afterAllHelp",o))}helpOption(t,r){return typeof t=="boolean"?(t?(this._helpOption===null&&(this._helpOption=void 0),this._defaultOptionGroup&&this._initOptionGroup(this._getHelpOption())):this._helpOption=null,this):(this._helpOption=this.createOption(t??"-h, --help",r??"display help for command"),(t||r)&&this._initOptionGroup(this._helpOption),this)}_getHelpOption(){return this._helpOption===void 0&&this.helpOption(void 0,void 0),this._helpOption}addHelpOption(t){return this._helpOption=t,this._initOptionGroup(t),this}help(t){this.outputHelp(t);let r=Number(F.exitCode??0);r===0&&t&&typeof t!="function"&&t.error&&(r=1),this._exit(r,"commander.help","(outputHelp)")}addHelpText(t,r){let n=["beforeAll","before","after","afterAll"];if(!n.includes(t))throw new Error(`Unexpected value for position to addHelpText.
|
|
27
|
+
Expecting one of '${n.join("', '")}'`);let o=`${t}Help`;return this.on(o,i=>{let s;typeof r=="function"?s=r({error:i.error,command:i.command}):s=r,s&&i.write(`${s}
|
|
28
|
+
`)}),this}_outputHelpIfRequested(t){let r=this._getHelpOption();r&&t.find(o=>r.is(o))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function ua(e){return e.map(t=>{if(!t.startsWith("--inspect"))return t;let r,n="127.0.0.1",o="9229",i;return(i=t.match(/^(--inspect(-brk)?)$/))!==null?r=i[1]:(i=t.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null?(r=i[1],/^\d+$/.test(i[3])?o=i[3]:n=i[3]):(i=t.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(r=i[1],n=i[3],o=i[4]),r&&o!=="0"?`${r}=${n}:${parseInt(o)+1}`:t})}function so(){if(F.env.NO_COLOR||F.env.FORCE_COLOR==="0"||F.env.FORCE_COLOR==="false")return!1;if(F.env.FORCE_COLOR||F.env.CLICOLOR_FORCE!==void 0)return!0}ao.Command=io;ao.useColor=so});var ma=E(Ce=>{var{Argument:da}=Rr(),{Command:co}=pa(),{CommanderError:Xf,InvalidArgumentError:fa}=Xt(),{Help:zf}=Jn(),{Option:ha}=ro();Ce.program=new co;Ce.createCommand=e=>new co(e);Ce.createOption=(e,t)=>new ha(e,t);Ce.createArgument=(e,t)=>new da(e,t);Ce.Command=co;Ce.Option=ha;Ce.Argument=da;Ce.Help=zf;Ce.CommanderError=Xf;Ce.InvalidArgumentError=fa;Ce.InvalidOptionArgumentError=fa});var ba=E((ew,Qf)=>{Qf.exports={name:"dotenv",version:"17.2.0",description:"Loads environment variables from .env file",main:"lib/main.js",types:"lib/main.d.ts",exports:{".":{types:"./lib/main.d.ts",require:"./lib/main.js",default:"./lib/main.js"},"./config":"./config.js","./config.js":"./config.js","./lib/env-options":"./lib/env-options.js","./lib/env-options.js":"./lib/env-options.js","./lib/cli-options":"./lib/cli-options.js","./lib/cli-options.js":"./lib/cli-options.js","./package.json":"./package.json"},scripts:{"dts-check":"tsc --project tests/types/tsconfig.json",lint:"standard",pretest:"npm run lint && npm run dts-check",test:"tap run --allow-empty-coverage --disable-coverage --timeout=60000","test:coverage":"tap run --show-full-coverage --timeout=60000 --coverage-report=text --coverage-report=lcov",prerelease:"npm test",release:"standard-version"},repository:{type:"git",url:"git://github.com/motdotla/dotenv.git"},homepage:"https://github.com/motdotla/dotenv#readme",funding:"https://dotenvx.com",keywords:["dotenv","env",".env","environment","variables","config","settings"],readmeFilename:"README.md",license:"BSD-2-Clause",devDependencies:{"@types/node":"^18.11.3",decache:"^4.6.2",sinon:"^14.0.1",standard:"^17.0.0","standard-version":"^9.5.0",tap:"^19.2.0",typescript:"^4.8.4"},engines:{node:">=12"},browser:{fs:!1}}});var wa=E((tw,qe)=>{var lo=I("fs"),Tr=I("path"),Jf=I("os"),Zf=I("crypto"),eh=ba(),uo=eh.version,va=["\u{1F510} encrypt with dotenvx: https://dotenvx.com","\u{1F510} prevent committing .env to code: https://dotenvx.com/precommit","\u{1F510} prevent building .env in docker: https://dotenvx.com/prebuild","\u{1F6E0}\uFE0F run anywhere with `dotenvx run -- yourcommand`","\u2699\uFE0F specify custom .env file path with { path: '/custom/path/.env' }","\u2699\uFE0F enable debug logging with { debug: true }","\u2699\uFE0F override existing env vars with { override: true }","\u2699\uFE0F suppress all logs with { quiet: true }","\u2699\uFE0F write to custom object with { processEnv: myObject }","\u2699\uFE0F load multiple .env files with { path: ['.env.local', '.env'] }"];function th(){return va[Math.floor(Math.random()*va.length)]}function xt(e){return typeof e=="string"?!["false","0","no","off",""].includes(e.toLowerCase()):!!e}function rh(){return process.stdout.isTTY}function nh(e){return rh()?`\x1B[2m${e}\x1B[0m`:e}var oh=/(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg;function ih(e){let t={},r=e.toString();r=r.replace(/\r\n?/mg,`
|
|
29
|
+
`);let n;for(;(n=oh.exec(r))!=null;){let o=n[1],i=n[2]||"";i=i.trim();let s=i[0];i=i.replace(/^(['"`])([\s\S]*)\1$/mg,"$2"),s==='"'&&(i=i.replace(/\\n/g,`
|
|
30
|
+
`),i=i.replace(/\\r/g,"\r")),t[o]=i}return t}function sh(e){e=e||{};let t=xa(e);e.path=t;let r=se.configDotenv(e);if(!r.parsed){let s=new Error(`MISSING_DATA: Cannot parse ${t} for an unknown reason`);throw s.code="MISSING_DATA",s}let n=ka(e).split(","),o=n.length,i;for(let s=0;s<o;s++)try{let a=n[s].trim(),c=ch(r,a);i=se.decrypt(c.ciphertext,c.key);break}catch(a){if(s+1>=o)throw a}return se.parse(i)}function ah(e){console.error(`[dotenv@${uo}][WARN] ${e}`)}function zt(e){console.log(`[dotenv@${uo}][DEBUG] ${e}`)}function Ea(e){console.log(`[dotenv@${uo}] ${e}`)}function ka(e){return e&&e.DOTENV_KEY&&e.DOTENV_KEY.length>0?e.DOTENV_KEY:process.env.DOTENV_KEY&&process.env.DOTENV_KEY.length>0?process.env.DOTENV_KEY:""}function ch(e,t){let r;try{r=new URL(t)}catch(a){if(a.code==="ERR_INVALID_URL"){let c=new Error("INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=development");throw c.code="INVALID_DOTENV_KEY",c}throw a}let n=r.password;if(!n){let a=new Error("INVALID_DOTENV_KEY: Missing key part");throw a.code="INVALID_DOTENV_KEY",a}let o=r.searchParams.get("environment");if(!o){let a=new Error("INVALID_DOTENV_KEY: Missing environment part");throw a.code="INVALID_DOTENV_KEY",a}let i=`DOTENV_VAULT_${o.toUpperCase()}`,s=e.parsed[i];if(!s){let a=new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${i} in your .env.vault file.`);throw a.code="NOT_FOUND_DOTENV_ENVIRONMENT",a}return{ciphertext:s,key:n}}function xa(e){let t=null;if(e&&e.path&&e.path.length>0)if(Array.isArray(e.path))for(let r of e.path)lo.existsSync(r)&&(t=r.endsWith(".vault")?r:`${r}.vault`);else t=e.path.endsWith(".vault")?e.path:`${e.path}.vault`;else t=Tr.resolve(process.cwd(),".env.vault");return lo.existsSync(t)?t:null}function _a(e){return e[0]==="~"?Tr.join(Jf.homedir(),e.slice(1)):e}function lh(e){let t=xt(process.env.DOTENV_CONFIG_DEBUG||e&&e.debug),r=xt(process.env.DOTENV_CONFIG_QUIET||e&&e.quiet);(t||!r)&&Ea("Loading env from encrypted .env.vault");let n=se._parseVault(e),o=process.env;return e&&e.processEnv!=null&&(o=e.processEnv),se.populate(o,n,e),{parsed:n}}function uh(e){let t=Tr.resolve(process.cwd(),".env"),r="utf8",n=process.env;e&&e.processEnv!=null&&(n=e.processEnv);let o=xt(n.DOTENV_CONFIG_DEBUG||e&&e.debug),i=xt(n.DOTENV_CONFIG_QUIET||e&&e.quiet);e&&e.encoding?r=e.encoding:o&&zt("No encoding is specified. UTF-8 is used by default");let s=[t];if(e&&e.path)if(!Array.isArray(e.path))s=[_a(e.path)];else{s=[];for(let u of e.path)s.push(_a(u))}let a,c={};for(let u of s)try{let p=se.parse(lo.readFileSync(u,{encoding:r}));se.populate(c,p,e)}catch(p){o&&zt(`Failed to load ${u} ${p.message}`),a=p}let l=se.populate(n,c,e);if(o=xt(n.DOTENV_CONFIG_DEBUG||o),i=xt(n.DOTENV_CONFIG_QUIET||i),o||!i){let u=Object.keys(l).length,p=[];for(let d of s)try{let g=Tr.relative(process.cwd(),d);p.push(g)}catch(g){o&&zt(`Failed to load ${d} ${g.message}`),a=g}Ea(`injecting env (${u}) from ${p.join(",")} ${nh(`(tip: ${th()})`)}`)}return a?{parsed:c,error:a}:{parsed:c}}function ph(e){if(ka(e).length===0)return se.configDotenv(e);let t=xa(e);return t?se._configVault(e):(ah(`You set DOTENV_KEY but you are missing a .env.vault file at ${t}. Did you forget to build it?`),se.configDotenv(e))}function dh(e,t){let r=Buffer.from(t.slice(-64),"hex"),n=Buffer.from(e,"base64"),o=n.subarray(0,12),i=n.subarray(-16);n=n.subarray(12,-16);try{let s=Zf.createDecipheriv("aes-256-gcm",r,o);return s.setAuthTag(i),`${s.update(n)}${s.final()}`}catch(s){let a=s instanceof RangeError,c=s.message==="Invalid key length",l=s.message==="Unsupported state or unable to authenticate data";if(a||c){let u=new Error("INVALID_DOTENV_KEY: It must be 64 characters long (or more)");throw u.code="INVALID_DOTENV_KEY",u}else if(l){let u=new Error("DECRYPTION_FAILED: Please check your DOTENV_KEY");throw u.code="DECRYPTION_FAILED",u}else throw s}}function fh(e,t,r={}){let n=!!(r&&r.debug),o=!!(r&&r.override),i={};if(typeof t!="object"){let s=new Error("OBJECT_REQUIRED: Please check the processEnv argument being passed to populate");throw s.code="OBJECT_REQUIRED",s}for(let s of Object.keys(t))Object.prototype.hasOwnProperty.call(e,s)?(o===!0&&(e[s]=t[s],i[s]=t[s]),n&&zt(o===!0?`"${s}" is already defined and WAS overwritten`:`"${s}" is already defined and was NOT overwritten`)):(e[s]=t[s],i[s]=t[s]);return i}var se={configDotenv:uh,_configVault:lh,_parseVault:sh,config:ph,decrypt:dh,parse:ih,populate:fh};qe.exports.configDotenv=se.configDotenv;qe.exports._configVault=se._configVault;qe.exports._parseVault=se._parseVault;qe.exports.config=se.config;qe.exports.decrypt=se.decrypt;qe.exports.parse=se.parse;qe.exports.populate=se.populate;qe.exports=se});import{on as oy,once as iy}from"node:events";import{PassThrough as sy}from"node:stream";import{finished as tl}from"node:stream/promises";function Io(e){if(!Array.isArray(e))throw new TypeError(`Expected an array, got \`${typeof e}\`.`);for(let o of e)No(o);let t=e.some(({readableObjectMode:o})=>o),r=ay(e,t),n=new Do({objectMode:t,writableHighWaterMark:r,readableHighWaterMark:r});for(let o of e)n.add(o);return e.length===0&&ol(n),n}var ay,Do,cy,ly,uy,No,py,rl,dy,fy,hy,nl,ol,Lo,il,my,Jr,Zc,el,sl=tt(()=>{ay=(e,t)=>{if(e.length===0)return 16384;let r=e.filter(({readableObjectMode:n})=>n===t).map(({readableHighWaterMark:n})=>n);return Math.max(...r)},Do=class extends sy{#e=new Set([]);#r=new Set([]);#n=new Set([]);#t;add(t){No(t),!this.#e.has(t)&&(this.#e.add(t),this.#t??=cy(this,this.#e),py({passThroughStream:this,stream:t,streams:this.#e,ended:this.#r,aborted:this.#n,onFinished:this.#t}),t.pipe(this,{end:!1}))}remove(t){return No(t),this.#e.has(t)?(t.unpipe(this),!0):!1}},cy=async(e,t)=>{Jr(e,Zc);let r=new AbortController;try{await Promise.race([ly(e,r),uy(e,t,r)])}finally{r.abort(),Jr(e,-Zc)}},ly=async(e,{signal:t})=>{await tl(e,{signal:t,cleanup:!0})},uy=async(e,t,{signal:r})=>{for await(let[n]of oy(e,"unpipe",{signal:r}))t.has(n)&&n.emit(nl)},No=e=>{if(typeof e?.pipe!="function")throw new TypeError(`Expected a readable stream, got: \`${typeof e}\`.`)},py=async({passThroughStream:e,stream:t,streams:r,ended:n,aborted:o,onFinished:i})=>{Jr(e,el);let s=new AbortController;try{await Promise.race([dy(i,t),fy({passThroughStream:e,stream:t,streams:r,ended:n,aborted:o,controller:s}),hy({stream:t,streams:r,ended:n,aborted:o,controller:s})])}finally{s.abort(),Jr(e,-el)}r.size===n.size+o.size&&(n.size===0&&o.size>0?Lo(e):ol(e))},rl=e=>e?.code==="ERR_STREAM_PREMATURE_CLOSE",dy=async(e,t)=>{try{await e,Lo(t)}catch(r){rl(r)?Lo(t):il(t,r)}},fy=async({passThroughStream:e,stream:t,streams:r,ended:n,aborted:o,controller:{signal:i}})=>{try{await tl(t,{signal:i,cleanup:!0,readable:!0,writable:!1}),r.has(t)&&n.add(t)}catch(s){if(i.aborted||!r.has(t))return;rl(s)?o.add(t):il(e,s)}},hy=async({stream:e,streams:t,ended:r,aborted:n,controller:{signal:o}})=>{await iy(e,nl,{signal:o}),t.delete(e),r.delete(e),n.delete(e)},nl=Symbol("unpipe"),ol=e=>{e.writable&&e.end()},Lo=e=>{(e.readable||e.writable)&&e.destroy()},il=(e,t)=>{e.destroyed||(e.once("error",my),e.destroy(t))},my=()=>{},Jr=(e,t)=>{let r=e.getMaxListeners();r!==0&&r!==Number.POSITIVE_INFINITY&&e.setMaxListeners(r+t)},Zc=2,el=1});var al=E($t=>{"use strict";Object.defineProperty($t,"__esModule",{value:!0});$t.splitWhen=$t.flatten=void 0;function gy(e){return e.reduce((t,r)=>[].concat(t,r),[])}$t.flatten=gy;function yy(e,t){let r=[[]],n=0;for(let o of e)t(o)?(n++,r[n]=[]):r[n].push(o);return r}$t.splitWhen=yy});var cl=E(Zr=>{"use strict";Object.defineProperty(Zr,"__esModule",{value:!0});Zr.isEnoentCodeError=void 0;function by(e){return e.code==="ENOENT"}Zr.isEnoentCodeError=by});var ll=E(en=>{"use strict";Object.defineProperty(en,"__esModule",{value:!0});en.createDirentFromStats=void 0;var jo=class{constructor(t,r){this.name=t,this.isBlockDevice=r.isBlockDevice.bind(r),this.isCharacterDevice=r.isCharacterDevice.bind(r),this.isDirectory=r.isDirectory.bind(r),this.isFIFO=r.isFIFO.bind(r),this.isFile=r.isFile.bind(r),this.isSocket=r.isSocket.bind(r),this.isSymbolicLink=r.isSymbolicLink.bind(r)}};function vy(e,t){return new jo(e,t)}en.createDirentFromStats=vy});var fl=E(oe=>{"use strict";Object.defineProperty(oe,"__esModule",{value:!0});oe.convertPosixPathToPattern=oe.convertWindowsPathToPattern=oe.convertPathToPattern=oe.escapePosixPath=oe.escapeWindowsPath=oe.escape=oe.removeLeadingDotSegment=oe.makeAbsolute=oe.unixify=void 0;var _y=I("os"),Ey=I("path"),ul=_y.platform()==="win32",ky=2,xy=/(\\?)([()*?[\]{|}]|^!|[!+@](?=\()|\\(?![!()*+?@[\]{|}]))/g,wy=/(\\?)([()[\]{}]|^!|[!+@](?=\())/g,Cy=/^\\\\([.?])/,Ay=/\\(?![!()+@[\]{}])/g;function Sy(e){return e.replace(/\\/g,"/")}oe.unixify=Sy;function Ry(e,t){return Ey.resolve(e,t)}oe.makeAbsolute=Ry;function Oy(e){if(e.charAt(0)==="."){let t=e.charAt(1);if(t==="/"||t==="\\")return e.slice(ky)}return e}oe.removeLeadingDotSegment=Oy;oe.escape=ul?Fo:Mo;function Fo(e){return e.replace(wy,"\\$2")}oe.escapeWindowsPath=Fo;function Mo(e){return e.replace(xy,"\\$2")}oe.escapePosixPath=Mo;oe.convertPathToPattern=ul?pl:dl;function pl(e){return Fo(e).replace(Cy,"//$1").replace(Ay,"/")}oe.convertWindowsPathToPattern=pl;function dl(e){return Mo(e)}oe.convertPosixPathToPattern=dl});var ml=E((PC,hl)=>{hl.exports=function(t){if(typeof t!="string"||t==="")return!1;for(var r;r=/(\\).|([@?!+*]\(.*\))/g.exec(t);){if(r[2])return!0;t=t.slice(r.index+r[0].length)}return!1}});var bl=E(($C,yl)=>{var Ty=ml(),gl={"{":"}","(":")","[":"]"},Py=function(e){if(e[0]==="!")return!0;for(var t=0,r=-2,n=-2,o=-2,i=-2,s=-2;t<e.length;){if(e[t]==="*"||e[t+1]==="?"&&/[\].+)]/.test(e[t])||n!==-1&&e[t]==="["&&e[t+1]!=="]"&&(n<t&&(n=e.indexOf("]",t)),n>t&&(s===-1||s>n||(s=e.indexOf("\\",t),s===-1||s>n)))||o!==-1&&e[t]==="{"&&e[t+1]!=="}"&&(o=e.indexOf("}",t),o>t&&(s=e.indexOf("\\",t),s===-1||s>o))||i!==-1&&e[t]==="("&&e[t+1]==="?"&&/[:!=]/.test(e[t+2])&&e[t+3]!==")"&&(i=e.indexOf(")",t),i>t&&(s=e.indexOf("\\",t),s===-1||s>i))||r!==-1&&e[t]==="("&&e[t+1]!=="|"&&(r<t&&(r=e.indexOf("|",t)),r!==-1&&e[r+1]!==")"&&(i=e.indexOf(")",r),i>r&&(s=e.indexOf("\\",r),s===-1||s>i))))return!0;if(e[t]==="\\"){var a=e[t+1];t+=2;var c=gl[a];if(c){var l=e.indexOf(c,t);l!==-1&&(t=l+1)}if(e[t]==="!")return!0}else t++}return!1},$y=function(e){if(e[0]==="!")return!0;for(var t=0;t<e.length;){if(/[*?{}()[\]]/.test(e[t]))return!0;if(e[t]==="\\"){var r=e[t+1];t+=2;var n=gl[r];if(n){var o=e.indexOf(n,t);o!==-1&&(t=o+1)}if(e[t]==="!")return!0}else t++}return!1};yl.exports=function(t,r){if(typeof t!="string"||t==="")return!1;if(Ty(t))return!0;var n=Py;return r&&r.strict===!1&&(n=$y),n(t)}});var _l=E((DC,vl)=>{"use strict";var Dy=bl(),Ny=I("path").posix.dirname,Ly=I("os").platform()==="win32",Bo="/",Iy=/\\/g,jy=/[\{\[].*[\}\]]$/,Fy=/(^|[^\\])([\{\[]|\([^\)]+$)/,My=/\\([\!\*\?\|\[\]\(\)\{\}])/g;vl.exports=function(t,r){var n=Object.assign({flipBackslashes:!0},r);n.flipBackslashes&&Ly&&t.indexOf(Bo)<0&&(t=t.replace(Iy,Bo)),jy.test(t)&&(t+=Bo),t+="a";do t=Ny(t);while(Dy(t)||Fy.test(t));return t.replace(My,"$1")}});var tn=E(Ae=>{"use strict";Ae.isInteger=e=>typeof e=="number"?Number.isInteger(e):typeof e=="string"&&e.trim()!==""?Number.isInteger(Number(e)):!1;Ae.find=(e,t)=>e.nodes.find(r=>r.type===t);Ae.exceedsLimit=(e,t,r=1,n)=>n===!1||!Ae.isInteger(e)||!Ae.isInteger(t)?!1:(Number(t)-Number(e))/Number(r)>=n;Ae.escapeNode=(e,t=0,r)=>{let n=e.nodes[t];n&&(r&&n.type===r||n.type==="open"||n.type==="close")&&n.escaped!==!0&&(n.value="\\"+n.value,n.escaped=!0)};Ae.encloseBrace=e=>e.type!=="brace"?!1:e.commas>>0+e.ranges>>0===0?(e.invalid=!0,!0):!1;Ae.isInvalidBrace=e=>e.type!=="brace"?!1:e.invalid===!0||e.dollar?!0:e.commas>>0+e.ranges>>0===0||e.open!==!0||e.close!==!0?(e.invalid=!0,!0):!1;Ae.isOpenOrClose=e=>e.type==="open"||e.type==="close"?!0:e.open===!0||e.close===!0;Ae.reduce=e=>e.reduce((t,r)=>(r.type==="text"&&t.push(r.value),r.type==="range"&&(r.type="text"),t),[]);Ae.flatten=(...e)=>{let t=[],r=n=>{for(let o=0;o<n.length;o++){let i=n[o];if(Array.isArray(i)){r(i);continue}i!==void 0&&t.push(i)}return t};return r(e),t}});var rn=E((LC,kl)=>{"use strict";var El=tn();kl.exports=(e,t={})=>{let r=(n,o={})=>{let i=t.escapeInvalid&&El.isInvalidBrace(o),s=n.invalid===!0&&t.escapeInvalid===!0,a="";if(n.value)return(i||s)&&El.isOpenOrClose(n)?"\\"+n.value:n.value;if(n.value)return n.value;if(n.nodes)for(let c of n.nodes)a+=r(c);return a};return r(e)}});var wl=E((IC,xl)=>{"use strict";xl.exports=function(e){return typeof e=="number"?e-e===0:typeof e=="string"&&e.trim()!==""?Number.isFinite?Number.isFinite(+e):isFinite(+e):!1}});var Dl=E((jC,$l)=>{"use strict";var Cl=wl(),bt=(e,t,r)=>{if(Cl(e)===!1)throw new TypeError("toRegexRange: expected the first argument to be a number");if(t===void 0||e===t)return String(e);if(Cl(t)===!1)throw new TypeError("toRegexRange: expected the second argument to be a number.");let n={relaxZeros:!0,...r};typeof n.strictZeros=="boolean"&&(n.relaxZeros=n.strictZeros===!1);let o=String(n.relaxZeros),i=String(n.shorthand),s=String(n.capture),a=String(n.wrap),c=e+":"+t+"="+o+i+s+a;if(bt.cache.hasOwnProperty(c))return bt.cache[c].result;let l=Math.min(e,t),u=Math.max(e,t);if(Math.abs(l-u)===1){let y=e+"|"+t;return n.capture?`(${y})`:n.wrap===!1?y:`(?:${y})`}let p=Pl(e)||Pl(t),d={min:e,max:t,a:l,b:u},g=[],m=[];if(p&&(d.isPadded=p,d.maxLen=String(d.max).length),l<0){let y=u<0?Math.abs(u):1;m=Al(y,Math.abs(l),d,n),l=d.a=0}return u>=0&&(g=Al(l,u,d,n)),d.negatives=m,d.positives=g,d.result=By(m,g,n),n.capture===!0?d.result=`(${d.result})`:n.wrap!==!1&&g.length+m.length>1&&(d.result=`(?:${d.result})`),bt.cache[c]=d,d.result};function By(e,t,r){let n=Ho(e,t,"-",!1,r)||[],o=Ho(t,e,"",!1,r)||[],i=Ho(e,t,"-?",!0,r)||[];return n.concat(i).concat(o).join("|")}function Hy(e,t){let r=1,n=1,o=Rl(e,r),i=new Set([t]);for(;e<=o&&o<=t;)i.add(o),r+=1,o=Rl(e,r);for(o=Ol(t+1,n)-1;e<o&&o<=t;)i.add(o),n+=1,o=Ol(t+1,n)-1;return i=[...i],i.sort(Uy),i}function Vy(e,t,r){if(e===t)return{pattern:e,count:[],digits:0};let n=Gy(e,t),o=n.length,i="",s=0;for(let a=0;a<o;a++){let[c,l]=n[a];c===l?i+=c:c!=="0"||l!=="9"?i+=Wy(c,l,r):s++}return s&&(i+=r.shorthand===!0?"\\d":"[0-9]"),{pattern:i,count:[s],digits:o}}function Al(e,t,r,n){let o=Hy(e,t),i=[],s=e,a;for(let c=0;c<o.length;c++){let l=o[c],u=Vy(String(s),String(l),n),p="";if(!r.isPadded&&a&&a.pattern===u.pattern){a.count.length>1&&a.count.pop(),a.count.push(u.count[0]),a.string=a.pattern+Tl(a.count),s=l+1;continue}r.isPadded&&(p=qy(l,r,n)),u.string=p+u.pattern+Tl(u.count),i.push(u),s=l+1,a=u}return i}function Ho(e,t,r,n,o){let i=[];for(let s of e){let{string:a}=s;!n&&!Sl(t,"string",a)&&i.push(r+a),n&&Sl(t,"string",a)&&i.push(r+a)}return i}function Gy(e,t){let r=[];for(let n=0;n<e.length;n++)r.push([e[n],t[n]]);return r}function Uy(e,t){return e>t?1:t>e?-1:0}function Sl(e,t,r){return e.some(n=>n[t]===r)}function Rl(e,t){return Number(String(e).slice(0,-t)+"9".repeat(t))}function Ol(e,t){return e-e%Math.pow(10,t)}function Tl(e){let[t=0,r=""]=e;return r||t>1?`{${t+(r?","+r:"")}}`:""}function Wy(e,t,r){return`[${e}${t-e===1?"":"-"}${t}]`}function Pl(e){return/^-?(0+)\d/.test(e)}function qy(e,t,r){if(!t.isPadded)return e;let n=Math.abs(t.maxLen-String(e).length),o=r.relaxZeros!==!1;switch(n){case 0:return"";case 1:return o?"0?":"0";case 2:return o?"0{0,2}":"00";default:return o?`0{0,${n}}`:`0{${n}}`}}bt.cache={};bt.clearCache=()=>bt.cache={};$l.exports=bt});var Uo=E((FC,Bl)=>{"use strict";var Yy=I("util"),Ll=Dl(),Nl=e=>e!==null&&typeof e=="object"&&!Array.isArray(e),Ky=e=>t=>e===!0?Number(t):String(t),Vo=e=>typeof e=="number"||typeof e=="string"&&e!=="",sr=e=>Number.isInteger(+e),Go=e=>{let t=`${e}`,r=-1;if(t[0]==="-"&&(t=t.slice(1)),t==="0")return!1;for(;t[++r]==="0";);return r>0},Xy=(e,t,r)=>typeof e=="string"||typeof t=="string"?!0:r.stringify===!0,zy=(e,t,r)=>{if(t>0){let n=e[0]==="-"?"-":"";n&&(e=e.slice(1)),e=n+e.padStart(n?t-1:t,"0")}return r===!1?String(e):e},on=(e,t)=>{let r=e[0]==="-"?"-":"";for(r&&(e=e.slice(1),t--);e.length<t;)e="0"+e;return r?"-"+e:e},Qy=(e,t,r)=>{e.negatives.sort((a,c)=>a<c?-1:a>c?1:0),e.positives.sort((a,c)=>a<c?-1:a>c?1:0);let n=t.capture?"":"?:",o="",i="",s;return e.positives.length&&(o=e.positives.map(a=>on(String(a),r)).join("|")),e.negatives.length&&(i=`-(${n}${e.negatives.map(a=>on(String(a),r)).join("|")})`),o&&i?s=`${o}|${i}`:s=o||i,t.wrap?`(${n}${s})`:s},Il=(e,t,r,n)=>{if(r)return Ll(e,t,{wrap:!1,...n});let o=String.fromCharCode(e);if(e===t)return o;let i=String.fromCharCode(t);return`[${o}-${i}]`},jl=(e,t,r)=>{if(Array.isArray(e)){let n=r.wrap===!0,o=r.capture?"":"?:";return n?`(${o}${e.join("|")})`:e.join("|")}return Ll(e,t,r)},Fl=(...e)=>new RangeError("Invalid range arguments: "+Yy.inspect(...e)),Ml=(e,t,r)=>{if(r.strictRanges===!0)throw Fl([e,t]);return[]},Jy=(e,t)=>{if(t.strictRanges===!0)throw new TypeError(`Expected step "${e}" to be a number`);return[]},Zy=(e,t,r=1,n={})=>{let o=Number(e),i=Number(t);if(!Number.isInteger(o)||!Number.isInteger(i)){if(n.strictRanges===!0)throw Fl([e,t]);return[]}o===0&&(o=0),i===0&&(i=0);let s=o>i,a=String(e),c=String(t),l=String(r);r=Math.max(Math.abs(r),1);let u=Go(a)||Go(c)||Go(l),p=u?Math.max(a.length,c.length,l.length):0,d=u===!1&&Xy(e,t,n)===!1,g=n.transform||Ky(d);if(n.toRegex&&r===1)return Il(on(e,p),on(t,p),!0,n);let m={negatives:[],positives:[]},y=R=>m[R<0?"negatives":"positives"].push(Math.abs(R)),k=[],C=0;for(;s?o>=i:o<=i;)n.toRegex===!0&&r>1?y(o):k.push(zy(g(o,C),p,d)),o=s?o-r:o+r,C++;return n.toRegex===!0?r>1?Qy(m,n,p):jl(k,null,{wrap:!1,...n}):k},eb=(e,t,r=1,n={})=>{if(!sr(e)&&e.length>1||!sr(t)&&t.length>1)return Ml(e,t,n);let o=n.transform||(d=>String.fromCharCode(d)),i=`${e}`.charCodeAt(0),s=`${t}`.charCodeAt(0),a=i>s,c=Math.min(i,s),l=Math.max(i,s);if(n.toRegex&&r===1)return Il(c,l,!1,n);let u=[],p=0;for(;a?i>=s:i<=s;)u.push(o(i,p)),i=a?i-r:i+r,p++;return n.toRegex===!0?jl(u,null,{wrap:!1,options:n}):u},nn=(e,t,r,n={})=>{if(t==null&&Vo(e))return[e];if(!Vo(e)||!Vo(t))return Ml(e,t,n);if(typeof r=="function")return nn(e,t,1,{transform:r});if(Nl(r))return nn(e,t,0,r);let o={...n};return o.capture===!0&&(o.wrap=!0),r=r||o.step||1,sr(r)?sr(e)&&sr(t)?Zy(e,t,r,o):eb(e,t,Math.max(Math.abs(r),1),o):r!=null&&!Nl(r)?Jy(r,o):nn(e,t,1,r)};Bl.exports=nn});var Gl=E((MC,Vl)=>{"use strict";var tb=Uo(),Hl=tn(),rb=(e,t={})=>{let r=(n,o={})=>{let i=Hl.isInvalidBrace(o),s=n.invalid===!0&&t.escapeInvalid===!0,a=i===!0||s===!0,c=t.escapeInvalid===!0?"\\":"",l="";if(n.isOpen===!0)return c+n.value;if(n.isClose===!0)return console.log("node.isClose",c,n.value),c+n.value;if(n.type==="open")return a?c+n.value:"(";if(n.type==="close")return a?c+n.value:")";if(n.type==="comma")return n.prev.type==="comma"?"":a?n.value:"|";if(n.value)return n.value;if(n.nodes&&n.ranges>0){let u=Hl.reduce(n.nodes),p=tb(...u,{...t,wrap:!1,toRegex:!0,strictZeros:!0});if(p.length!==0)return u.length>1&&p.length>1?`(${p})`:p}if(n.nodes)for(let u of n.nodes)l+=r(u,n);return l};return r(e)};Vl.exports=rb});var ql=E((BC,Wl)=>{"use strict";var nb=Uo(),Ul=rn(),Dt=tn(),vt=(e="",t="",r=!1)=>{let n=[];if(e=[].concat(e),t=[].concat(t),!t.length)return e;if(!e.length)return r?Dt.flatten(t).map(o=>`{${o}}`):t;for(let o of e)if(Array.isArray(o))for(let i of o)n.push(vt(i,t,r));else for(let i of t)r===!0&&typeof i=="string"&&(i=`{${i}}`),n.push(Array.isArray(i)?vt(o,i,r):o+i);return Dt.flatten(n)},ob=(e,t={})=>{let r=t.rangeLimit===void 0?1e3:t.rangeLimit,n=(o,i={})=>{o.queue=[];let s=i,a=i.queue;for(;s.type!=="brace"&&s.type!=="root"&&s.parent;)s=s.parent,a=s.queue;if(o.invalid||o.dollar){a.push(vt(a.pop(),Ul(o,t)));return}if(o.type==="brace"&&o.invalid!==!0&&o.nodes.length===2){a.push(vt(a.pop(),["{}"]));return}if(o.nodes&&o.ranges>0){let p=Dt.reduce(o.nodes);if(Dt.exceedsLimit(...p,t.step,r))throw new RangeError("expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.");let d=nb(...p,t);d.length===0&&(d=Ul(o,t)),a.push(vt(a.pop(),d)),o.nodes=[];return}let c=Dt.encloseBrace(o),l=o.queue,u=o;for(;u.type!=="brace"&&u.type!=="root"&&u.parent;)u=u.parent,l=u.queue;for(let p=0;p<o.nodes.length;p++){let d=o.nodes[p];if(d.type==="comma"&&o.type==="brace"){p===1&&l.push(""),l.push("");continue}if(d.type==="close"){a.push(vt(a.pop(),l,c));continue}if(d.value&&d.type!=="open"){l.push(vt(l.pop(),d.value));continue}d.nodes&&n(d,o)}return l};return Dt.flatten(n(e))};Wl.exports=ob});var Kl=E((HC,Yl)=>{"use strict";Yl.exports={MAX_LENGTH:1e4,CHAR_0:"0",CHAR_9:"9",CHAR_UPPERCASE_A:"A",CHAR_LOWERCASE_A:"a",CHAR_UPPERCASE_Z:"Z",CHAR_LOWERCASE_Z:"z",CHAR_LEFT_PARENTHESES:"(",CHAR_RIGHT_PARENTHESES:")",CHAR_ASTERISK:"*",CHAR_AMPERSAND:"&",CHAR_AT:"@",CHAR_BACKSLASH:"\\",CHAR_BACKTICK:"`",CHAR_CARRIAGE_RETURN:"\r",CHAR_CIRCUMFLEX_ACCENT:"^",CHAR_COLON:":",CHAR_COMMA:",",CHAR_DOLLAR:"$",CHAR_DOT:".",CHAR_DOUBLE_QUOTE:'"',CHAR_EQUAL:"=",CHAR_EXCLAMATION_MARK:"!",CHAR_FORM_FEED:"\f",CHAR_FORWARD_SLASH:"/",CHAR_HASH:"#",CHAR_HYPHEN_MINUS:"-",CHAR_LEFT_ANGLE_BRACKET:"<",CHAR_LEFT_CURLY_BRACE:"{",CHAR_LEFT_SQUARE_BRACKET:"[",CHAR_LINE_FEED:`
|
|
31
|
+
`,CHAR_NO_BREAK_SPACE:"\xA0",CHAR_PERCENT:"%",CHAR_PLUS:"+",CHAR_QUESTION_MARK:"?",CHAR_RIGHT_ANGLE_BRACKET:">",CHAR_RIGHT_CURLY_BRACE:"}",CHAR_RIGHT_SQUARE_BRACKET:"]",CHAR_SEMICOLON:";",CHAR_SINGLE_QUOTE:"'",CHAR_SPACE:" ",CHAR_TAB:" ",CHAR_UNDERSCORE:"_",CHAR_VERTICAL_LINE:"|",CHAR_ZERO_WIDTH_NOBREAK_SPACE:"\uFEFF"}});var Zl=E((VC,Jl)=>{"use strict";var ib=rn(),{MAX_LENGTH:Xl,CHAR_BACKSLASH:Wo,CHAR_BACKTICK:sb,CHAR_COMMA:ab,CHAR_DOT:cb,CHAR_LEFT_PARENTHESES:lb,CHAR_RIGHT_PARENTHESES:ub,CHAR_LEFT_CURLY_BRACE:pb,CHAR_RIGHT_CURLY_BRACE:db,CHAR_LEFT_SQUARE_BRACKET:zl,CHAR_RIGHT_SQUARE_BRACKET:Ql,CHAR_DOUBLE_QUOTE:fb,CHAR_SINGLE_QUOTE:hb,CHAR_NO_BREAK_SPACE:mb,CHAR_ZERO_WIDTH_NOBREAK_SPACE:gb}=Kl(),yb=(e,t={})=>{if(typeof e!="string")throw new TypeError("Expected a string");let r=t||{},n=typeof r.maxLength=="number"?Math.min(Xl,r.maxLength):Xl;if(e.length>n)throw new SyntaxError(`Input length (${e.length}), exceeds max characters (${n})`);let o={type:"root",input:e,nodes:[]},i=[o],s=o,a=o,c=0,l=e.length,u=0,p=0,d,g=()=>e[u++],m=y=>{if(y.type==="text"&&a.type==="dot"&&(a.type="text"),a&&a.type==="text"&&y.type==="text"){a.value+=y.value;return}return s.nodes.push(y),y.parent=s,y.prev=a,a=y,y};for(m({type:"bos"});u<l;)if(s=i[i.length-1],d=g(),!(d===gb||d===mb)){if(d===Wo){m({type:"text",value:(t.keepEscaping?d:"")+g()});continue}if(d===Ql){m({type:"text",value:"\\"+d});continue}if(d===zl){c++;let y;for(;u<l&&(y=g());){if(d+=y,y===zl){c++;continue}if(y===Wo){d+=g();continue}if(y===Ql&&(c--,c===0))break}m({type:"text",value:d});continue}if(d===lb){s=m({type:"paren",nodes:[]}),i.push(s),m({type:"text",value:d});continue}if(d===ub){if(s.type!=="paren"){m({type:"text",value:d});continue}s=i.pop(),m({type:"text",value:d}),s=i[i.length-1];continue}if(d===fb||d===hb||d===sb){let y=d,k;for(t.keepQuotes!==!0&&(d="");u<l&&(k=g());){if(k===Wo){d+=k+g();continue}if(k===y){t.keepQuotes===!0&&(d+=k);break}d+=k}m({type:"text",value:d});continue}if(d===pb){p++;let k={type:"brace",open:!0,close:!1,dollar:a.value&&a.value.slice(-1)==="$"||s.dollar===!0,depth:p,commas:0,ranges:0,nodes:[]};s=m(k),i.push(s),m({type:"open",value:d});continue}if(d===db){if(s.type!=="brace"){m({type:"text",value:d});continue}let y="close";s=i.pop(),s.close=!0,m({type:y,value:d}),p--,s=i[i.length-1];continue}if(d===ab&&p>0){if(s.ranges>0){s.ranges=0;let y=s.nodes.shift();s.nodes=[y,{type:"text",value:ib(s)}]}m({type:"comma",value:d}),s.commas++;continue}if(d===cb&&p>0&&s.commas===0){let y=s.nodes;if(p===0||y.length===0){m({type:"text",value:d});continue}if(a.type==="dot"){if(s.range=[],a.value+=d,a.type="range",s.nodes.length!==3&&s.nodes.length!==5){s.invalid=!0,s.ranges=0,a.type="text";continue}s.ranges++,s.args=[];continue}if(a.type==="range"){y.pop();let k=y[y.length-1];k.value+=a.value+d,a=k,s.ranges--;continue}m({type:"dot",value:d});continue}m({type:"text",value:d})}do if(s=i.pop(),s.type!=="root"){s.nodes.forEach(C=>{C.nodes||(C.type==="open"&&(C.isOpen=!0),C.type==="close"&&(C.isClose=!0),C.nodes||(C.type="text"),C.invalid=!0)});let y=i[i.length-1],k=y.nodes.indexOf(s);y.nodes.splice(k,1,...s.nodes)}while(i.length>0);return m({type:"eos"}),o};Jl.exports=yb});var ru=E((GC,tu)=>{"use strict";var eu=rn(),bb=Gl(),vb=ql(),_b=Zl(),Ee=(e,t={})=>{let r=[];if(Array.isArray(e))for(let n of e){let o=Ee.create(n,t);Array.isArray(o)?r.push(...o):r.push(o)}else r=[].concat(Ee.create(e,t));return t&&t.expand===!0&&t.nodupes===!0&&(r=[...new Set(r)]),r};Ee.parse=(e,t={})=>_b(e,t);Ee.stringify=(e,t={})=>eu(typeof e=="string"?Ee.parse(e,t):e,t);Ee.compile=(e,t={})=>(typeof e=="string"&&(e=Ee.parse(e,t)),bb(e,t));Ee.expand=(e,t={})=>{typeof e=="string"&&(e=Ee.parse(e,t));let r=vb(e,t);return t.noempty===!0&&(r=r.filter(Boolean)),t.nodupes===!0&&(r=[...new Set(r)]),r};Ee.create=(e,t={})=>e===""||e.length<3?[e]:t.expand!==!0?Ee.compile(e,t):Ee.expand(e,t);tu.exports=Ee});var ar=E((UC,au)=>{"use strict";var Eb=I("path"),He="\\\\/",nu=`[^${He}]`,Xe="\\.",kb="\\+",xb="\\?",sn="\\/",wb="(?=.)",ou="[^/]",qo=`(?:${sn}|$)`,iu=`(?:^|${sn})`,Yo=`${Xe}{1,2}${qo}`,Cb=`(?!${Xe})`,Ab=`(?!${iu}${Yo})`,Sb=`(?!${Xe}{0,1}${qo})`,Rb=`(?!${Yo})`,Ob=`[^.${sn}]`,Tb=`${ou}*?`,su={DOT_LITERAL:Xe,PLUS_LITERAL:kb,QMARK_LITERAL:xb,SLASH_LITERAL:sn,ONE_CHAR:wb,QMARK:ou,END_ANCHOR:qo,DOTS_SLASH:Yo,NO_DOT:Cb,NO_DOTS:Ab,NO_DOT_SLASH:Sb,NO_DOTS_SLASH:Rb,QMARK_NO_DOT:Ob,STAR:Tb,START_ANCHOR:iu},Pb={...su,SLASH_LITERAL:`[${He}]`,QMARK:nu,STAR:`${nu}*?`,DOTS_SLASH:`${Xe}{1,2}(?:[${He}]|$)`,NO_DOT:`(?!${Xe})`,NO_DOTS:`(?!(?:^|[${He}])${Xe}{1,2}(?:[${He}]|$))`,NO_DOT_SLASH:`(?!${Xe}{0,1}(?:[${He}]|$))`,NO_DOTS_SLASH:`(?!${Xe}{1,2}(?:[${He}]|$))`,QMARK_NO_DOT:`[^.${He}]`,START_ANCHOR:`(?:^|[${He}])`,END_ANCHOR:`(?:[${He}]|$)`},$b={alnum:"a-zA-Z0-9",alpha:"a-zA-Z",ascii:"\\x00-\\x7F",blank:" \\t",cntrl:"\\x00-\\x1F\\x7F",digit:"0-9",graph:"\\x21-\\x7E",lower:"a-z",print:"\\x20-\\x7E ",punct:"\\-!\"#$%&'()\\*+,./:;<=>?@[\\]^_`{|}~",space:" \\t\\r\\n\\v\\f",upper:"A-Z",word:"A-Za-z0-9_",xdigit:"A-Fa-f0-9"};au.exports={MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE:$b,REGEX_BACKSLASH:/\\(?![*+?^${}(|)[\]])/g,REGEX_NON_SPECIAL_CHARS:/^[^@![\].,$*+?^{}()|\\/]+/,REGEX_SPECIAL_CHARS:/[-*+?.^${}(|)[\]]/,REGEX_SPECIAL_CHARS_BACKREF:/(\\?)((\W)(\3*))/g,REGEX_SPECIAL_CHARS_GLOBAL:/([-*+?.^${}(|)[\]])/g,REGEX_REMOVE_BACKSLASH:/(?:\[.*?[^\\]\]|\\(?=.))/g,REPLACEMENTS:{"***":"*","**/**":"**","**/**/**":"**"},CHAR_0:48,CHAR_9:57,CHAR_UPPERCASE_A:65,CHAR_LOWERCASE_A:97,CHAR_UPPERCASE_Z:90,CHAR_LOWERCASE_Z:122,CHAR_LEFT_PARENTHESES:40,CHAR_RIGHT_PARENTHESES:41,CHAR_ASTERISK:42,CHAR_AMPERSAND:38,CHAR_AT:64,CHAR_BACKWARD_SLASH:92,CHAR_CARRIAGE_RETURN:13,CHAR_CIRCUMFLEX_ACCENT:94,CHAR_COLON:58,CHAR_COMMA:44,CHAR_DOT:46,CHAR_DOUBLE_QUOTE:34,CHAR_EQUAL:61,CHAR_EXCLAMATION_MARK:33,CHAR_FORM_FEED:12,CHAR_FORWARD_SLASH:47,CHAR_GRAVE_ACCENT:96,CHAR_HASH:35,CHAR_HYPHEN_MINUS:45,CHAR_LEFT_ANGLE_BRACKET:60,CHAR_LEFT_CURLY_BRACE:123,CHAR_LEFT_SQUARE_BRACKET:91,CHAR_LINE_FEED:10,CHAR_NO_BREAK_SPACE:160,CHAR_PERCENT:37,CHAR_PLUS:43,CHAR_QUESTION_MARK:63,CHAR_RIGHT_ANGLE_BRACKET:62,CHAR_RIGHT_CURLY_BRACE:125,CHAR_RIGHT_SQUARE_BRACKET:93,CHAR_SEMICOLON:59,CHAR_SINGLE_QUOTE:39,CHAR_SPACE:32,CHAR_TAB:9,CHAR_UNDERSCORE:95,CHAR_VERTICAL_LINE:124,CHAR_ZERO_WIDTH_NOBREAK_SPACE:65279,SEP:Eb.sep,extglobChars(e){return{"!":{type:"negate",open:"(?:(?!(?:",close:`))${e.STAR})`},"?":{type:"qmark",open:"(?:",close:")?"},"+":{type:"plus",open:"(?:",close:")+"},"*":{type:"star",open:"(?:",close:")*"},"@":{type:"at",open:"(?:",close:")"}}},globChars(e){return e===!0?Pb:su}}});var cr=E(ve=>{"use strict";var Db=I("path"),Nb=process.platform==="win32",{REGEX_BACKSLASH:Lb,REGEX_REMOVE_BACKSLASH:Ib,REGEX_SPECIAL_CHARS:jb,REGEX_SPECIAL_CHARS_GLOBAL:Fb}=ar();ve.isObject=e=>e!==null&&typeof e=="object"&&!Array.isArray(e);ve.hasRegexChars=e=>jb.test(e);ve.isRegexChar=e=>e.length===1&&ve.hasRegexChars(e);ve.escapeRegex=e=>e.replace(Fb,"\\$1");ve.toPosixSlashes=e=>e.replace(Lb,"/");ve.removeBackslashes=e=>e.replace(Ib,t=>t==="\\"?"":t);ve.supportsLookbehinds=()=>{let e=process.version.slice(1).split(".").map(Number);return e.length===3&&e[0]>=9||e[0]===8&&e[1]>=10};ve.isWindows=e=>e&&typeof e.windows=="boolean"?e.windows:Nb===!0||Db.sep==="\\";ve.escapeLast=(e,t,r)=>{let n=e.lastIndexOf(t,r);return n===-1?e:e[n-1]==="\\"?ve.escapeLast(e,t,n-1):`${e.slice(0,n)}\\${e.slice(n)}`};ve.removePrefix=(e,t={})=>{let r=e;return r.startsWith("./")&&(r=r.slice(2),t.prefix="./"),r};ve.wrapOutput=(e,t={},r={})=>{let n=r.contains?"":"^",o=r.contains?"":"$",i=`${n}(?:${e})${o}`;return t.negated===!0&&(i=`(?:^(?!${i}).*$)`),i}});var mu=E((qC,hu)=>{"use strict";var cu=cr(),{CHAR_ASTERISK:Ko,CHAR_AT:Mb,CHAR_BACKWARD_SLASH:lr,CHAR_COMMA:Bb,CHAR_DOT:Xo,CHAR_EXCLAMATION_MARK:zo,CHAR_FORWARD_SLASH:fu,CHAR_LEFT_CURLY_BRACE:Qo,CHAR_LEFT_PARENTHESES:Jo,CHAR_LEFT_SQUARE_BRACKET:Hb,CHAR_PLUS:Vb,CHAR_QUESTION_MARK:lu,CHAR_RIGHT_CURLY_BRACE:Gb,CHAR_RIGHT_PARENTHESES:uu,CHAR_RIGHT_SQUARE_BRACKET:Ub}=ar(),pu=e=>e===fu||e===lr,du=e=>{e.isPrefix!==!0&&(e.depth=e.isGlobstar?1/0:1)},Wb=(e,t)=>{let r=t||{},n=e.length-1,o=r.parts===!0||r.scanToEnd===!0,i=[],s=[],a=[],c=e,l=-1,u=0,p=0,d=!1,g=!1,m=!1,y=!1,k=!1,C=!1,R=!1,K=!1,xe=!1,N=!1,X=0,P,T,M={value:"",depth:0,isGlob:!1},le=()=>l>=n,_=()=>c.charCodeAt(l+1),z=()=>(P=T,c.charCodeAt(++l));for(;l<n;){T=z();let he;if(T===lr){R=M.backslashes=!0,T=z(),T===Qo&&(C=!0);continue}if(C===!0||T===Qo){for(X++;le()!==!0&&(T=z());){if(T===lr){R=M.backslashes=!0,z();continue}if(T===Qo){X++;continue}if(C!==!0&&T===Xo&&(T=z())===Xo){if(d=M.isBrace=!0,m=M.isGlob=!0,N=!0,o===!0)continue;break}if(C!==!0&&T===Bb){if(d=M.isBrace=!0,m=M.isGlob=!0,N=!0,o===!0)continue;break}if(T===Gb&&(X--,X===0)){C=!1,d=M.isBrace=!0,N=!0;break}}if(o===!0)continue;break}if(T===fu){if(i.push(l),s.push(M),M={value:"",depth:0,isGlob:!1},N===!0)continue;if(P===Xo&&l===u+1){u+=2;continue}p=l+1;continue}if(r.noext!==!0&&(T===Vb||T===Mb||T===Ko||T===lu||T===zo)===!0&&_()===Jo){if(m=M.isGlob=!0,y=M.isExtglob=!0,N=!0,T===zo&&l===u&&(xe=!0),o===!0){for(;le()!==!0&&(T=z());){if(T===lr){R=M.backslashes=!0,T=z();continue}if(T===uu){m=M.isGlob=!0,N=!0;break}}continue}break}if(T===Ko){if(P===Ko&&(k=M.isGlobstar=!0),m=M.isGlob=!0,N=!0,o===!0)continue;break}if(T===lu){if(m=M.isGlob=!0,N=!0,o===!0)continue;break}if(T===Hb){for(;le()!==!0&&(he=z());){if(he===lr){R=M.backslashes=!0,z();continue}if(he===Ub){g=M.isBracket=!0,m=M.isGlob=!0,N=!0;break}}if(o===!0)continue;break}if(r.nonegate!==!0&&T===zo&&l===u){K=M.negated=!0,u++;continue}if(r.noparen!==!0&&T===Jo){if(m=M.isGlob=!0,o===!0){for(;le()!==!0&&(T=z());){if(T===Jo){R=M.backslashes=!0,T=z();continue}if(T===uu){N=!0;break}}continue}break}if(m===!0){if(N=!0,o===!0)continue;break}}r.noext===!0&&(y=!1,m=!1);let W=c,et="",b="";u>0&&(et=c.slice(0,u),c=c.slice(u),p-=u),W&&m===!0&&p>0?(W=c.slice(0,p),b=c.slice(p)):m===!0?(W="",b=c):W=c,W&&W!==""&&W!=="/"&&W!==c&&pu(W.charCodeAt(W.length-1))&&(W=W.slice(0,-1)),r.unescape===!0&&(b&&(b=cu.removeBackslashes(b)),W&&R===!0&&(W=cu.removeBackslashes(W)));let v={prefix:et,input:e,start:u,base:W,glob:b,isBrace:d,isBracket:g,isGlob:m,isExtglob:y,isGlobstar:k,negated:K,negatedExtglob:xe};if(r.tokens===!0&&(v.maxDepth=0,pu(T)||s.push(M),v.tokens=s),r.parts===!0||r.tokens===!0){let he;for(let j=0;j<i.length;j++){let Ie=he?he+1:u,je=i[j],_e=e.slice(Ie,je);r.tokens&&(j===0&&u!==0?(s[j].isPrefix=!0,s[j].value=et):s[j].value=_e,du(s[j]),v.maxDepth+=s[j].depth),(j!==0||_e!=="")&&a.push(_e),he=je}if(he&&he+1<e.length){let j=e.slice(he+1);a.push(j),r.tokens&&(s[s.length-1].value=j,du(s[s.length-1]),v.maxDepth+=s[s.length-1].depth)}v.slashes=i,v.parts=a}return v};hu.exports=Wb});var bu=E((YC,yu)=>{"use strict";var an=ar(),ke=cr(),{MAX_LENGTH:cn,POSIX_REGEX_SOURCE:qb,REGEX_NON_SPECIAL_CHARS:Yb,REGEX_SPECIAL_CHARS_BACKREF:Kb,REPLACEMENTS:gu}=an,Xb=(e,t)=>{if(typeof t.expandRange=="function")return t.expandRange(...e,t);e.sort();let r=`[${e.join("-")}]`;try{new RegExp(r)}catch{return e.map(o=>ke.escapeRegex(o)).join("..")}return r},Nt=(e,t)=>`Missing ${e}: "${t}" - use "\\\\${t}" to match literal characters`,Zo=(e,t)=>{if(typeof e!="string")throw new TypeError("Expected a string");e=gu[e]||e;let r={...t},n=typeof r.maxLength=="number"?Math.min(cn,r.maxLength):cn,o=e.length;if(o>n)throw new SyntaxError(`Input length: ${o}, exceeds maximum allowed length: ${n}`);let i={type:"bos",value:"",output:r.prepend||""},s=[i],a=r.capture?"":"?:",c=ke.isWindows(t),l=an.globChars(c),u=an.extglobChars(l),{DOT_LITERAL:p,PLUS_LITERAL:d,SLASH_LITERAL:g,ONE_CHAR:m,DOTS_SLASH:y,NO_DOT:k,NO_DOT_SLASH:C,NO_DOTS_SLASH:R,QMARK:K,QMARK_NO_DOT:xe,STAR:N,START_ANCHOR:X}=l,P=w=>`(${a}(?:(?!${X}${w.dot?y:p}).)*?)`,T=r.dot?"":k,M=r.dot?K:xe,le=r.bash===!0?P(r):N;r.capture&&(le=`(${le})`),typeof r.noext=="boolean"&&(r.noextglob=r.noext);let _={input:e,index:-1,start:0,dot:r.dot===!0,consumed:"",output:"",prefix:"",backtrack:!1,negated:!1,brackets:0,braces:0,parens:0,quotes:0,globstar:!1,tokens:s};e=ke.removePrefix(e,_),o=e.length;let z=[],W=[],et=[],b=i,v,he=()=>_.index===o-1,j=_.peek=(w=1)=>e[_.index+w],Ie=_.advance=()=>e[++_.index]||"",je=()=>e.slice(_.index+1),_e=(w="",q=0)=>{_.consumed+=w,_.index+=q},Er=w=>{_.output+=w.output!=null?w.output:w.value,_e(w.value)},df=()=>{let w=1;for(;j()==="!"&&(j(2)!=="("||j(3)==="?");)Ie(),_.start++,w++;return w%2===0?!1:(_.negated=!0,_.start++,!0)},kr=w=>{_[w]++,et.push(w)},ft=w=>{_[w]--,et.pop()},L=w=>{if(b.type==="globstar"){let q=_.braces>0&&(w.type==="comma"||w.type==="brace"),x=w.extglob===!0||z.length&&(w.type==="pipe"||w.type==="paren");w.type!=="slash"&&w.type!=="paren"&&!q&&!x&&(_.output=_.output.slice(0,-b.output.length),b.type="star",b.value="*",b.output=le,_.output+=b.output)}if(z.length&&w.type!=="paren"&&(z[z.length-1].inner+=w.value),(w.value||w.output)&&Er(w),b&&b.type==="text"&&w.type==="text"){b.value+=w.value,b.output=(b.output||"")+w.value;return}w.prev=b,s.push(w),b=w},xr=(w,q)=>{let x={...u[q],conditions:1,inner:""};x.prev=b,x.parens=_.parens,x.output=_.output;let D=(r.capture?"(":"")+x.open;kr("parens"),L({type:w,value:q,output:_.output?"":m}),L({type:"paren",extglob:!0,value:Ie(),output:D}),z.push(x)},ff=w=>{let q=w.close+(r.capture?")":""),x;if(w.type==="negate"){let D=le;if(w.inner&&w.inner.length>1&&w.inner.includes("/")&&(D=P(r)),(D!==le||he()||/^\)+$/.test(je()))&&(q=w.close=`)$))${D}`),w.inner.includes("*")&&(x=je())&&/^\.[^\\/.]+$/.test(x)){let Z=Zo(x,{...t,fastpaths:!1}).output;q=w.close=`)${Z})${D})`}w.prev.type==="bos"&&(_.negatedExtglob=!0)}L({type:"paren",extglob:!0,value:v,output:q}),ft("parens")};if(r.fastpaths!==!1&&!/(^[*!]|[/()[\]{}"])/.test(e)){let w=!1,q=e.replace(Kb,(x,D,Z,me,ie,Bn)=>me==="\\"?(w=!0,x):me==="?"?D?D+me+(ie?K.repeat(ie.length):""):Bn===0?M+(ie?K.repeat(ie.length):""):K.repeat(Z.length):me==="."?p.repeat(Z.length):me==="*"?D?D+me+(ie?le:""):le:D?x:`\\${x}`);return w===!0&&(r.unescape===!0?q=q.replace(/\\/g,""):q=q.replace(/\\+/g,x=>x.length%2===0?"\\\\":x?"\\":"")),q===e&&r.contains===!0?(_.output=e,_):(_.output=ke.wrapOutput(q,_,t),_)}for(;!he();){if(v=Ie(),v==="\0")continue;if(v==="\\"){let x=j();if(x==="/"&&r.bash!==!0||x==="."||x===";")continue;if(!x){v+="\\",L({type:"text",value:v});continue}let D=/^\\+/.exec(je()),Z=0;if(D&&D[0].length>2&&(Z=D[0].length,_.index+=Z,Z%2!==0&&(v+="\\")),r.unescape===!0?v=Ie():v+=Ie(),_.brackets===0){L({type:"text",value:v});continue}}if(_.brackets>0&&(v!=="]"||b.value==="["||b.value==="[^")){if(r.posix!==!1&&v===":"){let x=b.value.slice(1);if(x.includes("[")&&(b.posix=!0,x.includes(":"))){let D=b.value.lastIndexOf("["),Z=b.value.slice(0,D),me=b.value.slice(D+2),ie=qb[me];if(ie){b.value=Z+ie,_.backtrack=!0,Ie(),!i.output&&s.indexOf(b)===1&&(i.output=m);continue}}}(v==="["&&j()!==":"||v==="-"&&j()==="]")&&(v=`\\${v}`),v==="]"&&(b.value==="["||b.value==="[^")&&(v=`\\${v}`),r.posix===!0&&v==="!"&&b.value==="["&&(v="^"),b.value+=v,Er({value:v});continue}if(_.quotes===1&&v!=='"'){v=ke.escapeRegex(v),b.value+=v,Er({value:v});continue}if(v==='"'){_.quotes=_.quotes===1?0:1,r.keepQuotes===!0&&L({type:"text",value:v});continue}if(v==="("){kr("parens"),L({type:"paren",value:v});continue}if(v===")"){if(_.parens===0&&r.strictBrackets===!0)throw new SyntaxError(Nt("opening","("));let x=z[z.length-1];if(x&&_.parens===x.parens+1){ff(z.pop());continue}L({type:"paren",value:v,output:_.parens?")":"\\)"}),ft("parens");continue}if(v==="["){if(r.nobracket===!0||!je().includes("]")){if(r.nobracket!==!0&&r.strictBrackets===!0)throw new SyntaxError(Nt("closing","]"));v=`\\${v}`}else kr("brackets");L({type:"bracket",value:v});continue}if(v==="]"){if(r.nobracket===!0||b&&b.type==="bracket"&&b.value.length===1){L({type:"text",value:v,output:`\\${v}`});continue}if(_.brackets===0){if(r.strictBrackets===!0)throw new SyntaxError(Nt("opening","["));L({type:"text",value:v,output:`\\${v}`});continue}ft("brackets");let x=b.value.slice(1);if(b.posix!==!0&&x[0]==="^"&&!x.includes("/")&&(v=`/${v}`),b.value+=v,Er({value:v}),r.literalBrackets===!1||ke.hasRegexChars(x))continue;let D=ke.escapeRegex(b.value);if(_.output=_.output.slice(0,-b.value.length),r.literalBrackets===!0){_.output+=D,b.value=D;continue}b.value=`(${a}${D}|${b.value})`,_.output+=b.value;continue}if(v==="{"&&r.nobrace!==!0){kr("braces");let x={type:"brace",value:v,output:"(",outputIndex:_.output.length,tokensIndex:_.tokens.length};W.push(x),L(x);continue}if(v==="}"){let x=W[W.length-1];if(r.nobrace===!0||!x){L({type:"text",value:v,output:v});continue}let D=")";if(x.dots===!0){let Z=s.slice(),me=[];for(let ie=Z.length-1;ie>=0&&(s.pop(),Z[ie].type!=="brace");ie--)Z[ie].type!=="dots"&&me.unshift(Z[ie].value);D=Xb(me,r),_.backtrack=!0}if(x.comma!==!0&&x.dots!==!0){let Z=_.output.slice(0,x.outputIndex),me=_.tokens.slice(x.tokensIndex);x.value=x.output="\\{",v=D="\\}",_.output=Z;for(let ie of me)_.output+=ie.output||ie.value}L({type:"brace",value:v,output:D}),ft("braces"),W.pop();continue}if(v==="|"){z.length>0&&z[z.length-1].conditions++,L({type:"text",value:v});continue}if(v===","){let x=v,D=W[W.length-1];D&&et[et.length-1]==="braces"&&(D.comma=!0,x="|"),L({type:"comma",value:v,output:x});continue}if(v==="/"){if(b.type==="dot"&&_.index===_.start+1){_.start=_.index+1,_.consumed="",_.output="",s.pop(),b=i;continue}L({type:"slash",value:v,output:g});continue}if(v==="."){if(_.braces>0&&b.type==="dot"){b.value==="."&&(b.output=p);let x=W[W.length-1];b.type="dots",b.output+=v,b.value+=v,x.dots=!0;continue}if(_.braces+_.parens===0&&b.type!=="bos"&&b.type!=="slash"){L({type:"text",value:v,output:p});continue}L({type:"dot",value:v,output:p});continue}if(v==="?"){if(!(b&&b.value==="(")&&r.noextglob!==!0&&j()==="("&&j(2)!=="?"){xr("qmark",v);continue}if(b&&b.type==="paren"){let D=j(),Z=v;if(D==="<"&&!ke.supportsLookbehinds())throw new Error("Node.js v10 or higher is required for regex lookbehinds");(b.value==="("&&!/[!=<:]/.test(D)||D==="<"&&!/<([!=]|\w+>)/.test(je()))&&(Z=`\\${v}`),L({type:"text",value:v,output:Z});continue}if(r.dot!==!0&&(b.type==="slash"||b.type==="bos")){L({type:"qmark",value:v,output:xe});continue}L({type:"qmark",value:v,output:K});continue}if(v==="!"){if(r.noextglob!==!0&&j()==="("&&(j(2)!=="?"||!/[!=<:]/.test(j(3)))){xr("negate",v);continue}if(r.nonegate!==!0&&_.index===0){df();continue}}if(v==="+"){if(r.noextglob!==!0&&j()==="("&&j(2)!=="?"){xr("plus",v);continue}if(b&&b.value==="("||r.regex===!1){L({type:"plus",value:v,output:d});continue}if(b&&(b.type==="bracket"||b.type==="paren"||b.type==="brace")||_.parens>0){L({type:"plus",value:v});continue}L({type:"plus",value:d});continue}if(v==="@"){if(r.noextglob!==!0&&j()==="("&&j(2)!=="?"){L({type:"at",extglob:!0,value:v,output:""});continue}L({type:"text",value:v});continue}if(v!=="*"){(v==="$"||v==="^")&&(v=`\\${v}`);let x=Yb.exec(je());x&&(v+=x[0],_.index+=x[0].length),L({type:"text",value:v});continue}if(b&&(b.type==="globstar"||b.star===!0)){b.type="star",b.star=!0,b.value+=v,b.output=le,_.backtrack=!0,_.globstar=!0,_e(v);continue}let w=je();if(r.noextglob!==!0&&/^\([^?]/.test(w)){xr("star",v);continue}if(b.type==="star"){if(r.noglobstar===!0){_e(v);continue}let x=b.prev,D=x.prev,Z=x.type==="slash"||x.type==="bos",me=D&&(D.type==="star"||D.type==="globstar");if(r.bash===!0&&(!Z||w[0]&&w[0]!=="/")){L({type:"star",value:v,output:""});continue}let ie=_.braces>0&&(x.type==="comma"||x.type==="brace"),Bn=z.length&&(x.type==="pipe"||x.type==="paren");if(!Z&&x.type!=="paren"&&!ie&&!Bn){L({type:"star",value:v,output:""});continue}for(;w.slice(0,3)==="/**";){let wr=e[_.index+4];if(wr&&wr!=="/")break;w=w.slice(3),_e("/**",3)}if(x.type==="bos"&&he()){b.type="globstar",b.value+=v,b.output=P(r),_.output=b.output,_.globstar=!0,_e(v);continue}if(x.type==="slash"&&x.prev.type!=="bos"&&!me&&he()){_.output=_.output.slice(0,-(x.output+b.output).length),x.output=`(?:${x.output}`,b.type="globstar",b.output=P(r)+(r.strictSlashes?")":"|$)"),b.value+=v,_.globstar=!0,_.output+=x.output+b.output,_e(v);continue}if(x.type==="slash"&&x.prev.type!=="bos"&&w[0]==="/"){let wr=w[1]!==void 0?"|$":"";_.output=_.output.slice(0,-(x.output+b.output).length),x.output=`(?:${x.output}`,b.type="globstar",b.output=`${P(r)}${g}|${g}${wr})`,b.value+=v,_.output+=x.output+b.output,_.globstar=!0,_e(v+Ie()),L({type:"slash",value:"/",output:""});continue}if(x.type==="bos"&&w[0]==="/"){b.type="globstar",b.value+=v,b.output=`(?:^|${g}|${P(r)}${g})`,_.output=b.output,_.globstar=!0,_e(v+Ie()),L({type:"slash",value:"/",output:""});continue}_.output=_.output.slice(0,-b.output.length),b.type="globstar",b.output=P(r),b.value+=v,_.output+=b.output,_.globstar=!0,_e(v);continue}let q={type:"star",value:v,output:le};if(r.bash===!0){q.output=".*?",(b.type==="bos"||b.type==="slash")&&(q.output=T+q.output),L(q);continue}if(b&&(b.type==="bracket"||b.type==="paren")&&r.regex===!0){q.output=v,L(q);continue}(_.index===_.start||b.type==="slash"||b.type==="dot")&&(b.type==="dot"?(_.output+=C,b.output+=C):r.dot===!0?(_.output+=R,b.output+=R):(_.output+=T,b.output+=T),j()!=="*"&&(_.output+=m,b.output+=m)),L(q)}for(;_.brackets>0;){if(r.strictBrackets===!0)throw new SyntaxError(Nt("closing","]"));_.output=ke.escapeLast(_.output,"["),ft("brackets")}for(;_.parens>0;){if(r.strictBrackets===!0)throw new SyntaxError(Nt("closing",")"));_.output=ke.escapeLast(_.output,"("),ft("parens")}for(;_.braces>0;){if(r.strictBrackets===!0)throw new SyntaxError(Nt("closing","}"));_.output=ke.escapeLast(_.output,"{"),ft("braces")}if(r.strictSlashes!==!0&&(b.type==="star"||b.type==="bracket")&&L({type:"maybe_slash",value:"",output:`${g}?`}),_.backtrack===!0){_.output="";for(let w of _.tokens)_.output+=w.output!=null?w.output:w.value,w.suffix&&(_.output+=w.suffix)}return _};Zo.fastpaths=(e,t)=>{let r={...t},n=typeof r.maxLength=="number"?Math.min(cn,r.maxLength):cn,o=e.length;if(o>n)throw new SyntaxError(`Input length: ${o}, exceeds maximum allowed length: ${n}`);e=gu[e]||e;let i=ke.isWindows(t),{DOT_LITERAL:s,SLASH_LITERAL:a,ONE_CHAR:c,DOTS_SLASH:l,NO_DOT:u,NO_DOTS:p,NO_DOTS_SLASH:d,STAR:g,START_ANCHOR:m}=an.globChars(i),y=r.dot?p:u,k=r.dot?d:u,C=r.capture?"":"?:",R={negated:!1,prefix:""},K=r.bash===!0?".*?":g;r.capture&&(K=`(${K})`);let xe=T=>T.noglobstar===!0?K:`(${C}(?:(?!${m}${T.dot?l:s}).)*?)`,N=T=>{switch(T){case"*":return`${y}${c}${K}`;case".*":return`${s}${c}${K}`;case"*.*":return`${y}${K}${s}${c}${K}`;case"*/*":return`${y}${K}${a}${c}${k}${K}`;case"**":return y+xe(r);case"**/*":return`(?:${y}${xe(r)}${a})?${k}${c}${K}`;case"**/*.*":return`(?:${y}${xe(r)}${a})?${k}${K}${s}${c}${K}`;case"**/.*":return`(?:${y}${xe(r)}${a})?${s}${c}${K}`;default:{let M=/^(.*?)\.(\w+)$/.exec(T);if(!M)return;let le=N(M[1]);return le?le+s+M[2]:void 0}}},X=ke.removePrefix(e,R),P=N(X);return P&&r.strictSlashes!==!0&&(P+=`${a}?`),P};yu.exports=Zo});var _u=E((KC,vu)=>{"use strict";var zb=I("path"),Qb=mu(),ei=bu(),ti=cr(),Jb=ar(),Zb=e=>e&&typeof e=="object"&&!Array.isArray(e),re=(e,t,r=!1)=>{if(Array.isArray(e)){let u=e.map(d=>re(d,t,r));return d=>{for(let g of u){let m=g(d);if(m)return m}return!1}}let n=Zb(e)&&e.tokens&&e.input;if(e===""||typeof e!="string"&&!n)throw new TypeError("Expected pattern to be a non-empty string");let o=t||{},i=ti.isWindows(t),s=n?re.compileRe(e,t):re.makeRe(e,t,!1,!0),a=s.state;delete s.state;let c=()=>!1;if(o.ignore){let u={...t,ignore:null,onMatch:null,onResult:null};c=re(o.ignore,u,r)}let l=(u,p=!1)=>{let{isMatch:d,match:g,output:m}=re.test(u,s,t,{glob:e,posix:i}),y={glob:e,state:a,regex:s,posix:i,input:u,output:m,match:g,isMatch:d};return typeof o.onResult=="function"&&o.onResult(y),d===!1?(y.isMatch=!1,p?y:!1):c(u)?(typeof o.onIgnore=="function"&&o.onIgnore(y),y.isMatch=!1,p?y:!1):(typeof o.onMatch=="function"&&o.onMatch(y),p?y:!0)};return r&&(l.state=a),l};re.test=(e,t,r,{glob:n,posix:o}={})=>{if(typeof e!="string")throw new TypeError("Expected input to be a string");if(e==="")return{isMatch:!1,output:""};let i=r||{},s=i.format||(o?ti.toPosixSlashes:null),a=e===n,c=a&&s?s(e):e;return a===!1&&(c=s?s(e):e,a=c===n),(a===!1||i.capture===!0)&&(i.matchBase===!0||i.basename===!0?a=re.matchBase(e,t,r,o):a=t.exec(c)),{isMatch:!!a,match:a,output:c}};re.matchBase=(e,t,r,n=ti.isWindows(r))=>(t instanceof RegExp?t:re.makeRe(t,r)).test(zb.basename(e));re.isMatch=(e,t,r)=>re(t,r)(e);re.parse=(e,t)=>Array.isArray(e)?e.map(r=>re.parse(r,t)):ei(e,{...t,fastpaths:!1});re.scan=(e,t)=>Qb(e,t);re.compileRe=(e,t,r=!1,n=!1)=>{if(r===!0)return e.output;let o=t||{},i=o.contains?"":"^",s=o.contains?"":"$",a=`${i}(?:${e.output})${s}`;e&&e.negated===!0&&(a=`^(?!${a}).*$`);let c=re.toRegex(a,t);return n===!0&&(c.state=e),c};re.makeRe=(e,t={},r=!1,n=!1)=>{if(!e||typeof e!="string")throw new TypeError("Expected a non-empty string");let o={negated:!1,fastpaths:!0};return t.fastpaths!==!1&&(e[0]==="."||e[0]==="*")&&(o.output=ei.fastpaths(e,t)),o.output||(o=ei(e,t)),re.compileRe(o,t,r,n)};re.toRegex=(e,t)=>{try{let r=t||{};return new RegExp(e,r.flags||(r.nocase?"i":""))}catch(r){if(t&&t.debug===!0)throw r;return/$^/}};re.constants=Jb;vu.exports=re});var ku=E((XC,Eu)=>{"use strict";Eu.exports=_u()});var Ru=E((zC,Su)=>{"use strict";var wu=I("util"),Cu=ru(),Ve=ku(),ri=cr(),xu=e=>e===""||e==="./",Au=e=>{let t=e.indexOf("{");return t>-1&&e.indexOf("}",t)>-1},Y=(e,t,r)=>{t=[].concat(t),e=[].concat(e);let n=new Set,o=new Set,i=new Set,s=0,a=u=>{i.add(u.output),r&&r.onResult&&r.onResult(u)};for(let u=0;u<t.length;u++){let p=Ve(String(t[u]),{...r,onResult:a},!0),d=p.state.negated||p.state.negatedExtglob;d&&s++;for(let g of e){let m=p(g,!0);(d?!m.isMatch:m.isMatch)&&(d?n.add(m.output):(n.delete(m.output),o.add(m.output)))}}let l=(s===t.length?[...i]:[...o]).filter(u=>!n.has(u));if(r&&l.length===0){if(r.failglob===!0)throw new Error(`No matches found for "${t.join(", ")}"`);if(r.nonull===!0||r.nullglob===!0)return r.unescape?t.map(u=>u.replace(/\\/g,"")):t}return l};Y.match=Y;Y.matcher=(e,t)=>Ve(e,t);Y.isMatch=(e,t,r)=>Ve(t,r)(e);Y.any=Y.isMatch;Y.not=(e,t,r={})=>{t=[].concat(t).map(String);let n=new Set,o=[],i=a=>{r.onResult&&r.onResult(a),o.push(a.output)},s=new Set(Y(e,t,{...r,onResult:i}));for(let a of o)s.has(a)||n.add(a);return[...n]};Y.contains=(e,t,r)=>{if(typeof e!="string")throw new TypeError(`Expected a string: "${wu.inspect(e)}"`);if(Array.isArray(t))return t.some(n=>Y.contains(e,n,r));if(typeof t=="string"){if(xu(e)||xu(t))return!1;if(e.includes(t)||e.startsWith("./")&&e.slice(2).includes(t))return!0}return Y.isMatch(e,t,{...r,contains:!0})};Y.matchKeys=(e,t,r)=>{if(!ri.isObject(e))throw new TypeError("Expected the first argument to be an object");let n=Y(Object.keys(e),t,r),o={};for(let i of n)o[i]=e[i];return o};Y.some=(e,t,r)=>{let n=[].concat(e);for(let o of[].concat(t)){let i=Ve(String(o),r);if(n.some(s=>i(s)))return!0}return!1};Y.every=(e,t,r)=>{let n=[].concat(e);for(let o of[].concat(t)){let i=Ve(String(o),r);if(!n.every(s=>i(s)))return!1}return!0};Y.all=(e,t,r)=>{if(typeof e!="string")throw new TypeError(`Expected a string: "${wu.inspect(e)}"`);return[].concat(t).every(n=>Ve(n,r)(e))};Y.capture=(e,t,r)=>{let n=ri.isWindows(r),i=Ve.makeRe(String(e),{...r,capture:!0}).exec(n?ri.toPosixSlashes(t):t);if(i)return i.slice(1).map(s=>s===void 0?"":s)};Y.makeRe=(...e)=>Ve.makeRe(...e);Y.scan=(...e)=>Ve.scan(...e);Y.parse=(e,t)=>{let r=[];for(let n of[].concat(e||[]))for(let o of Cu(String(n),t))r.push(Ve.parse(o,t));return r};Y.braces=(e,t)=>{if(typeof e!="string")throw new TypeError("Expected a string");return t&&t.nobrace===!0||!Au(e)?[e]:Cu(e,t)};Y.braceExpand=(e,t)=>{if(typeof e!="string")throw new TypeError("Expected a string");return Y.braces(e,{...t,expand:!0})};Y.hasBraces=Au;Su.exports=Y});var Fu=E(O=>{"use strict";Object.defineProperty(O,"__esModule",{value:!0});O.isAbsolute=O.partitionAbsoluteAndRelative=O.removeDuplicateSlashes=O.matchAny=O.convertPatternsToRe=O.makeRe=O.getPatternParts=O.expandBraceExpansion=O.expandPatternsWithBraceExpansion=O.isAffectDepthOfReadingPattern=O.endsWithSlashGlobStar=O.hasGlobStar=O.getBaseDirectory=O.isPatternRelatedToParentDirectory=O.getPatternsOutsideCurrentDirectory=O.getPatternsInsideCurrentDirectory=O.getPositivePatterns=O.getNegativePatterns=O.isPositivePattern=O.isNegativePattern=O.convertToNegativePattern=O.convertToPositivePattern=O.isDynamicPattern=O.isStaticPattern=void 0;var Ou=I("path"),ev=_l(),ni=Ru(),Tu="**",tv="\\",rv=/[*?]|^!/,nv=/\[[^[]*]/,ov=/(?:^|[^!*+?@])\([^(]*\|[^|]*\)/,iv=/[!*+?@]\([^(]*\)/,sv=/,|\.\./,av=/(?!^)\/{2,}/g;function Pu(e,t={}){return!$u(e,t)}O.isStaticPattern=Pu;function $u(e,t={}){return e===""?!1:!!(t.caseSensitiveMatch===!1||e.includes(tv)||rv.test(e)||nv.test(e)||ov.test(e)||t.extglob!==!1&&iv.test(e)||t.braceExpansion!==!1&&cv(e))}O.isDynamicPattern=$u;function cv(e){let t=e.indexOf("{");if(t===-1)return!1;let r=e.indexOf("}",t+1);if(r===-1)return!1;let n=e.slice(t,r);return sv.test(n)}function lv(e){return ln(e)?e.slice(1):e}O.convertToPositivePattern=lv;function uv(e){return"!"+e}O.convertToNegativePattern=uv;function ln(e){return e.startsWith("!")&&e[1]!=="("}O.isNegativePattern=ln;function Du(e){return!ln(e)}O.isPositivePattern=Du;function pv(e){return e.filter(ln)}O.getNegativePatterns=pv;function dv(e){return e.filter(Du)}O.getPositivePatterns=dv;function fv(e){return e.filter(t=>!oi(t))}O.getPatternsInsideCurrentDirectory=fv;function hv(e){return e.filter(oi)}O.getPatternsOutsideCurrentDirectory=hv;function oi(e){return e.startsWith("..")||e.startsWith("./..")}O.isPatternRelatedToParentDirectory=oi;function mv(e){return ev(e,{flipBackslashes:!1})}O.getBaseDirectory=mv;function gv(e){return e.includes(Tu)}O.hasGlobStar=gv;function Nu(e){return e.endsWith("/"+Tu)}O.endsWithSlashGlobStar=Nu;function yv(e){let t=Ou.basename(e);return Nu(e)||Pu(t)}O.isAffectDepthOfReadingPattern=yv;function bv(e){return e.reduce((t,r)=>t.concat(Lu(r)),[])}O.expandPatternsWithBraceExpansion=bv;function Lu(e){let t=ni.braces(e,{expand:!0,nodupes:!0,keepEscaping:!0});return t.sort((r,n)=>r.length-n.length),t.filter(r=>r!=="")}O.expandBraceExpansion=Lu;function vv(e,t){let{parts:r}=ni.scan(e,Object.assign(Object.assign({},t),{parts:!0}));return r.length===0&&(r=[e]),r[0].startsWith("/")&&(r[0]=r[0].slice(1),r.unshift("")),r}O.getPatternParts=vv;function Iu(e,t){return ni.makeRe(e,t)}O.makeRe=Iu;function _v(e,t){return e.map(r=>Iu(r,t))}O.convertPatternsToRe=_v;function Ev(e,t){return t.some(r=>r.test(e))}O.matchAny=Ev;function kv(e){return e.replace(av,"/")}O.removeDuplicateSlashes=kv;function xv(e){let t=[],r=[];for(let n of e)ju(n)?t.push(n):r.push(n);return[t,r]}O.partitionAbsoluteAndRelative=xv;function ju(e){return Ou.isAbsolute(e)}O.isAbsolute=ju});var Vu=E((JC,Hu)=>{"use strict";var wv=I("stream"),Mu=wv.PassThrough,Cv=Array.prototype.slice;Hu.exports=Av;function Av(){let e=[],t=Cv.call(arguments),r=!1,n=t[t.length-1];n&&!Array.isArray(n)&&n.pipe==null?t.pop():n={};let o=n.end!==!1,i=n.pipeError===!0;n.objectMode==null&&(n.objectMode=!0),n.highWaterMark==null&&(n.highWaterMark=64*1024);let s=Mu(n);function a(){for(let u=0,p=arguments.length;u<p;u++)e.push(Bu(arguments[u],n));return c(),this}function c(){if(r)return;r=!0;let u=e.shift();if(!u){process.nextTick(l);return}Array.isArray(u)||(u=[u]);let p=u.length+1;function d(){--p>0||(r=!1,c())}function g(m){function y(){m.removeListener("merge2UnpipeEnd",y),m.removeListener("end",y),i&&m.removeListener("error",k),d()}function k(C){s.emit("error",C)}if(m._readableState.endEmitted)return d();m.on("merge2UnpipeEnd",y),m.on("end",y),i&&m.on("error",k),m.pipe(s,{end:!1}),m.resume()}for(let m=0;m<u.length;m++)g(u[m]);d()}function l(){r=!1,s.emit("queueDrain"),o&&s.end()}return s.setMaxListeners(0),s.add=a,s.on("unpipe",function(u){u.emit("merge2UnpipeEnd")}),t.length&&a.apply(null,t),s}function Bu(e,t){if(Array.isArray(e))for(let r=0,n=e.length;r<n;r++)e[r]=Bu(e[r],t);else{if(!e._readableState&&e.pipe&&(e=e.pipe(Mu(t))),!e._readableState||!e.pause||!e.pipe)throw new Error("Only readable stream can be merged.");e.pause()}return e}});var Uu=E(un=>{"use strict";Object.defineProperty(un,"__esModule",{value:!0});un.merge=void 0;var Sv=Vu();function Rv(e){let t=Sv(e);return e.forEach(r=>{r.once("error",n=>t.emit("error",n))}),t.once("close",()=>Gu(e)),t.once("end",()=>Gu(e)),t}un.merge=Rv;function Gu(e){e.forEach(t=>t.emit("close"))}});var Wu=E(Lt=>{"use strict";Object.defineProperty(Lt,"__esModule",{value:!0});Lt.isEmpty=Lt.isString=void 0;function Ov(e){return typeof e=="string"}Lt.isString=Ov;function Tv(e){return e===""}Lt.isEmpty=Tv});var ze=E(de=>{"use strict";Object.defineProperty(de,"__esModule",{value:!0});de.string=de.stream=de.pattern=de.path=de.fs=de.errno=de.array=void 0;var Pv=al();de.array=Pv;var $v=cl();de.errno=$v;var Dv=ll();de.fs=Dv;var Nv=fl();de.path=Nv;var Lv=Fu();de.pattern=Lv;var Iv=Uu();de.stream=Iv;var jv=Wu();de.string=jv});var Xu=E(fe=>{"use strict";Object.defineProperty(fe,"__esModule",{value:!0});fe.convertPatternGroupToTask=fe.convertPatternGroupsToTasks=fe.groupPatternsByBaseDirectory=fe.getNegativePatternsAsPositive=fe.getPositivePatterns=fe.convertPatternsToTasks=fe.generate=void 0;var $e=ze();function Fv(e,t){let r=qu(e,t),n=qu(t.ignore,t),o=Yu(r),i=Ku(r,n),s=o.filter(u=>$e.pattern.isStaticPattern(u,t)),a=o.filter(u=>$e.pattern.isDynamicPattern(u,t)),c=ii(s,i,!1),l=ii(a,i,!0);return c.concat(l)}fe.generate=Fv;function qu(e,t){let r=e;return t.braceExpansion&&(r=$e.pattern.expandPatternsWithBraceExpansion(r)),t.baseNameMatch&&(r=r.map(n=>n.includes("/")?n:`**/${n}`)),r.map(n=>$e.pattern.removeDuplicateSlashes(n))}function ii(e,t,r){let n=[],o=$e.pattern.getPatternsOutsideCurrentDirectory(e),i=$e.pattern.getPatternsInsideCurrentDirectory(e),s=si(o),a=si(i);return n.push(...ai(s,t,r)),"."in a?n.push(ci(".",i,t,r)):n.push(...ai(a,t,r)),n}fe.convertPatternsToTasks=ii;function Yu(e){return $e.pattern.getPositivePatterns(e)}fe.getPositivePatterns=Yu;function Ku(e,t){return $e.pattern.getNegativePatterns(e).concat(t).map($e.pattern.convertToPositivePattern)}fe.getNegativePatternsAsPositive=Ku;function si(e){let t={};return e.reduce((r,n)=>{let o=$e.pattern.getBaseDirectory(n);return o in r?r[o].push(n):r[o]=[n],r},t)}fe.groupPatternsByBaseDirectory=si;function ai(e,t,r){return Object.keys(e).map(n=>ci(n,e[n],t,r))}fe.convertPatternGroupsToTasks=ai;function ci(e,t,r,n){return{dynamic:n,positive:t,negative:r,base:e,patterns:[].concat(t,r.map($e.pattern.convertToNegativePattern))}}fe.convertPatternGroupToTask=ci});var Qu=E(pn=>{"use strict";Object.defineProperty(pn,"__esModule",{value:!0});pn.read=void 0;function Mv(e,t,r){t.fs.lstat(e,(n,o)=>{if(n!==null){zu(r,n);return}if(!o.isSymbolicLink()||!t.followSymbolicLink){li(r,o);return}t.fs.stat(e,(i,s)=>{if(i!==null){if(t.throwErrorOnBrokenSymbolicLink){zu(r,i);return}li(r,o);return}t.markSymbolicLink&&(s.isSymbolicLink=()=>!0),li(r,s)})})}pn.read=Mv;function zu(e,t){e(t)}function li(e,t){e(null,t)}});var Ju=E(dn=>{"use strict";Object.defineProperty(dn,"__esModule",{value:!0});dn.read=void 0;function Bv(e,t){let r=t.fs.lstatSync(e);if(!r.isSymbolicLink()||!t.followSymbolicLink)return r;try{let n=t.fs.statSync(e);return t.markSymbolicLink&&(n.isSymbolicLink=()=>!0),n}catch(n){if(!t.throwErrorOnBrokenSymbolicLink)return r;throw n}}dn.read=Bv});var Zu=E(st=>{"use strict";Object.defineProperty(st,"__esModule",{value:!0});st.createFileSystemAdapter=st.FILE_SYSTEM_ADAPTER=void 0;var fn=I("fs");st.FILE_SYSTEM_ADAPTER={lstat:fn.lstat,stat:fn.stat,lstatSync:fn.lstatSync,statSync:fn.statSync};function Hv(e){return e===void 0?st.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},st.FILE_SYSTEM_ADAPTER),e)}st.createFileSystemAdapter=Hv});var ep=E(pi=>{"use strict";Object.defineProperty(pi,"__esModule",{value:!0});var Vv=Zu(),ui=class{constructor(t={}){this._options=t,this.followSymbolicLink=this._getValue(this._options.followSymbolicLink,!0),this.fs=Vv.createFileSystemAdapter(this._options.fs),this.markSymbolicLink=this._getValue(this._options.markSymbolicLink,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0)}_getValue(t,r){return t??r}};pi.default=ui});var _t=E(at=>{"use strict";Object.defineProperty(at,"__esModule",{value:!0});at.statSync=at.stat=at.Settings=void 0;var tp=Qu(),Gv=Ju(),di=ep();at.Settings=di.default;function Uv(e,t,r){if(typeof t=="function"){tp.read(e,fi(),t);return}tp.read(e,fi(t),r)}at.stat=Uv;function Wv(e,t){let r=fi(t);return Gv.read(e,r)}at.statSync=Wv;function fi(e={}){return e instanceof di.default?e:new di.default(e)}});var op=E((cA,np)=>{var rp;np.exports=typeof queueMicrotask=="function"?queueMicrotask.bind(typeof window<"u"?window:global):e=>(rp||(rp=Promise.resolve())).then(e).catch(t=>setTimeout(()=>{throw t},0))});var sp=E((lA,ip)=>{ip.exports=Yv;var qv=op();function Yv(e,t){let r,n,o,i=!0;Array.isArray(e)?(r=[],n=e.length):(o=Object.keys(e),r={},n=o.length);function s(c){function l(){t&&t(c,r),t=null}i?qv(l):l()}function a(c,l,u){r[c]=u,(--n===0||l)&&s(l)}n?o?o.forEach(function(c){e[c](function(l,u){a(c,l,u)})}):e.forEach(function(c,l){c(function(u,p){a(l,u,p)})}):s(null),i=!1}});var hi=E(mn=>{"use strict";Object.defineProperty(mn,"__esModule",{value:!0});mn.IS_SUPPORT_READDIR_WITH_FILE_TYPES=void 0;var hn=process.versions.node.split(".");if(hn[0]===void 0||hn[1]===void 0)throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);var ap=Number.parseInt(hn[0],10),Kv=Number.parseInt(hn[1],10),cp=10,Xv=10,zv=ap>cp,Qv=ap===cp&&Kv>=Xv;mn.IS_SUPPORT_READDIR_WITH_FILE_TYPES=zv||Qv});var lp=E(gn=>{"use strict";Object.defineProperty(gn,"__esModule",{value:!0});gn.createDirentFromStats=void 0;var mi=class{constructor(t,r){this.name=t,this.isBlockDevice=r.isBlockDevice.bind(r),this.isCharacterDevice=r.isCharacterDevice.bind(r),this.isDirectory=r.isDirectory.bind(r),this.isFIFO=r.isFIFO.bind(r),this.isFile=r.isFile.bind(r),this.isSocket=r.isSocket.bind(r),this.isSymbolicLink=r.isSymbolicLink.bind(r)}};function Jv(e,t){return new mi(e,t)}gn.createDirentFromStats=Jv});var gi=E(yn=>{"use strict";Object.defineProperty(yn,"__esModule",{value:!0});yn.fs=void 0;var Zv=lp();yn.fs=Zv});var yi=E(bn=>{"use strict";Object.defineProperty(bn,"__esModule",{value:!0});bn.joinPathSegments=void 0;function e_(e,t,r){return e.endsWith(r)?e+t:e+r+t}bn.joinPathSegments=e_});var mp=E(ct=>{"use strict";Object.defineProperty(ct,"__esModule",{value:!0});ct.readdir=ct.readdirWithFileTypes=ct.read=void 0;var t_=_t(),up=sp(),r_=hi(),pp=gi(),dp=yi();function n_(e,t,r){if(!t.stats&&r_.IS_SUPPORT_READDIR_WITH_FILE_TYPES){fp(e,t,r);return}hp(e,t,r)}ct.read=n_;function fp(e,t,r){t.fs.readdir(e,{withFileTypes:!0},(n,o)=>{if(n!==null){vn(r,n);return}let i=o.map(a=>({dirent:a,name:a.name,path:dp.joinPathSegments(e,a.name,t.pathSegmentSeparator)}));if(!t.followSymbolicLinks){bi(r,i);return}let s=i.map(a=>o_(a,t));up(s,(a,c)=>{if(a!==null){vn(r,a);return}bi(r,c)})})}ct.readdirWithFileTypes=fp;function o_(e,t){return r=>{if(!e.dirent.isSymbolicLink()){r(null,e);return}t.fs.stat(e.path,(n,o)=>{if(n!==null){if(t.throwErrorOnBrokenSymbolicLink){r(n);return}r(null,e);return}e.dirent=pp.fs.createDirentFromStats(e.name,o),r(null,e)})}}function hp(e,t,r){t.fs.readdir(e,(n,o)=>{if(n!==null){vn(r,n);return}let i=o.map(s=>{let a=dp.joinPathSegments(e,s,t.pathSegmentSeparator);return c=>{t_.stat(a,t.fsStatSettings,(l,u)=>{if(l!==null){c(l);return}let p={name:s,path:a,dirent:pp.fs.createDirentFromStats(s,u)};t.stats&&(p.stats=u),c(null,p)})}});up(i,(s,a)=>{if(s!==null){vn(r,s);return}bi(r,a)})})}ct.readdir=hp;function vn(e,t){e(t)}function bi(e,t){e(null,t)}});var _p=E(lt=>{"use strict";Object.defineProperty(lt,"__esModule",{value:!0});lt.readdir=lt.readdirWithFileTypes=lt.read=void 0;var i_=_t(),s_=hi(),gp=gi(),yp=yi();function a_(e,t){return!t.stats&&s_.IS_SUPPORT_READDIR_WITH_FILE_TYPES?bp(e,t):vp(e,t)}lt.read=a_;function bp(e,t){return t.fs.readdirSync(e,{withFileTypes:!0}).map(n=>{let o={dirent:n,name:n.name,path:yp.joinPathSegments(e,n.name,t.pathSegmentSeparator)};if(o.dirent.isSymbolicLink()&&t.followSymbolicLinks)try{let i=t.fs.statSync(o.path);o.dirent=gp.fs.createDirentFromStats(o.name,i)}catch(i){if(t.throwErrorOnBrokenSymbolicLink)throw i}return o})}lt.readdirWithFileTypes=bp;function vp(e,t){return t.fs.readdirSync(e).map(n=>{let o=yp.joinPathSegments(e,n,t.pathSegmentSeparator),i=i_.statSync(o,t.fsStatSettings),s={name:n,path:o,dirent:gp.fs.createDirentFromStats(n,i)};return t.stats&&(s.stats=i),s})}lt.readdir=vp});var Ep=E(ut=>{"use strict";Object.defineProperty(ut,"__esModule",{value:!0});ut.createFileSystemAdapter=ut.FILE_SYSTEM_ADAPTER=void 0;var It=I("fs");ut.FILE_SYSTEM_ADAPTER={lstat:It.lstat,stat:It.stat,lstatSync:It.lstatSync,statSync:It.statSync,readdir:It.readdir,readdirSync:It.readdirSync};function c_(e){return e===void 0?ut.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},ut.FILE_SYSTEM_ADAPTER),e)}ut.createFileSystemAdapter=c_});var kp=E(_i=>{"use strict";Object.defineProperty(_i,"__esModule",{value:!0});var l_=I("path"),u_=_t(),p_=Ep(),vi=class{constructor(t={}){this._options=t,this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!1),this.fs=p_.createFileSystemAdapter(this._options.fs),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,l_.sep),this.stats=this._getValue(this._options.stats,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0),this.fsStatSettings=new u_.Settings({followSymbolicLink:this.followSymbolicLinks,fs:this.fs,throwErrorOnBrokenSymbolicLink:this.throwErrorOnBrokenSymbolicLink})}_getValue(t,r){return t??r}};_i.default=vi});var _n=E(pt=>{"use strict";Object.defineProperty(pt,"__esModule",{value:!0});pt.Settings=pt.scandirSync=pt.scandir=void 0;var xp=mp(),d_=_p(),Ei=kp();pt.Settings=Ei.default;function f_(e,t,r){if(typeof t=="function"){xp.read(e,ki(),t);return}xp.read(e,ki(t),r)}pt.scandir=f_;function h_(e,t){let r=ki(t);return d_.read(e,r)}pt.scandirSync=h_;function ki(e={}){return e instanceof Ei.default?e:new Ei.default(e)}});var Cp=E((vA,wp)=>{"use strict";function m_(e){var t=new e,r=t;function n(){var i=t;return i.next?t=i.next:(t=new e,r=t),i.next=null,i}function o(i){r.next=i,r=i}return{get:n,release:o}}wp.exports=m_});var Sp=E((_A,xi)=>{"use strict";var g_=Cp();function Ap(e,t,r){if(typeof e=="function"&&(r=t,t=e,e=null),!(r>=1))throw new Error("fastqueue concurrency must be equal to or greater than 1");var n=g_(y_),o=null,i=null,s=0,a=null,c={push:y,drain:Se,saturated:Se,pause:u,paused:!1,get concurrency(){return r},set concurrency(N){if(!(N>=1))throw new Error("fastqueue concurrency must be equal to or greater than 1");if(r=N,!c.paused)for(;o&&s<r;)s++,C()},running:l,resume:g,idle:m,length:p,getQueue:d,unshift:k,empty:Se,kill:R,killAndDrain:K,error:xe};return c;function l(){return s}function u(){c.paused=!0}function p(){for(var N=o,X=0;N;)N=N.next,X++;return X}function d(){for(var N=o,X=[];N;)X.push(N.value),N=N.next;return X}function g(){if(c.paused){if(c.paused=!1,o===null){s++,C();return}for(;o&&s<r;)s++,C()}}function m(){return s===0&&c.length()===0}function y(N,X){var P=n.get();P.context=e,P.release=C,P.value=N,P.callback=X||Se,P.errorHandler=a,s>=r||c.paused?i?(i.next=P,i=P):(o=P,i=P,c.saturated()):(s++,t.call(e,P.value,P.worked))}function k(N,X){var P=n.get();P.context=e,P.release=C,P.value=N,P.callback=X||Se,P.errorHandler=a,s>=r||c.paused?o?(P.next=o,o=P):(o=P,i=P,c.saturated()):(s++,t.call(e,P.value,P.worked))}function C(N){N&&n.release(N);var X=o;X&&s<=r?c.paused?s--:(i===o&&(i=null),o=X.next,X.next=null,t.call(e,X.value,X.worked),i===null&&c.empty()):--s===0&&c.drain()}function R(){o=null,i=null,c.drain=Se}function K(){o=null,i=null,c.drain(),c.drain=Se}function xe(N){a=N}}function Se(){}function y_(){this.value=null,this.callback=Se,this.next=null,this.release=Se,this.context=null,this.errorHandler=null;var e=this;this.worked=function(r,n){var o=e.callback,i=e.errorHandler,s=e.value;e.value=null,e.callback=Se,e.errorHandler&&i(r,s),o.call(e.context,r,n),e.release(e)}}function b_(e,t,r){typeof e=="function"&&(r=t,t=e,e=null);function n(u,p){t.call(this,u).then(function(d){p(null,d)},p)}var o=Ap(e,n,r),i=o.push,s=o.unshift;return o.push=a,o.unshift=c,o.drained=l,o;function a(u){var p=new Promise(function(d,g){i(u,function(m,y){if(m){g(m);return}d(y)})});return p.catch(Se),p}function c(u){var p=new Promise(function(d,g){s(u,function(m,y){if(m){g(m);return}d(y)})});return p.catch(Se),p}function l(){var u=new Promise(function(p){process.nextTick(function(){if(o.idle())p();else{var d=o.drain;o.drain=function(){typeof d=="function"&&d(),p(),o.drain=d}}})});return u}}xi.exports=Ap;xi.exports.promise=b_});var En=E(Ge=>{"use strict";Object.defineProperty(Ge,"__esModule",{value:!0});Ge.joinPathSegments=Ge.replacePathSegmentSeparator=Ge.isAppliedFilter=Ge.isFatalError=void 0;function v_(e,t){return e.errorFilter===null?!0:!e.errorFilter(t)}Ge.isFatalError=v_;function __(e,t){return e===null||e(t)}Ge.isAppliedFilter=__;function E_(e,t){return e.split(/[/\\]/).join(t)}Ge.replacePathSegmentSeparator=E_;function k_(e,t,r){return e===""?t:e.endsWith(r)?e+t:e+r+t}Ge.joinPathSegments=k_});var Ai=E(Ci=>{"use strict";Object.defineProperty(Ci,"__esModule",{value:!0});var x_=En(),wi=class{constructor(t,r){this._root=t,this._settings=r,this._root=x_.replacePathSegmentSeparator(t,r.pathSegmentSeparator)}};Ci.default=wi});var Oi=E(Ri=>{"use strict";Object.defineProperty(Ri,"__esModule",{value:!0});var w_=I("events"),C_=_n(),A_=Sp(),kn=En(),S_=Ai(),Si=class extends S_.default{constructor(t,r){super(t,r),this._settings=r,this._scandir=C_.scandir,this._emitter=new w_.EventEmitter,this._queue=A_(this._worker.bind(this),this._settings.concurrency),this._isFatalError=!1,this._isDestroyed=!1,this._queue.drain=()=>{this._isFatalError||this._emitter.emit("end")}}read(){return this._isFatalError=!1,this._isDestroyed=!1,setImmediate(()=>{this._pushToQueue(this._root,this._settings.basePath)}),this._emitter}get isDestroyed(){return this._isDestroyed}destroy(){if(this._isDestroyed)throw new Error("The reader is already destroyed");this._isDestroyed=!0,this._queue.killAndDrain()}onEntry(t){this._emitter.on("entry",t)}onError(t){this._emitter.once("error",t)}onEnd(t){this._emitter.once("end",t)}_pushToQueue(t,r){let n={directory:t,base:r};this._queue.push(n,o=>{o!==null&&this._handleError(o)})}_worker(t,r){this._scandir(t.directory,this._settings.fsScandirSettings,(n,o)=>{if(n!==null){r(n,void 0);return}for(let i of o)this._handleEntry(i,t.base);r(null,void 0)})}_handleError(t){this._isDestroyed||!kn.isFatalError(this._settings,t)||(this._isFatalError=!0,this._isDestroyed=!0,this._emitter.emit("error",t))}_handleEntry(t,r){if(this._isDestroyed||this._isFatalError)return;let n=t.path;r!==void 0&&(t.path=kn.joinPathSegments(r,t.name,this._settings.pathSegmentSeparator)),kn.isAppliedFilter(this._settings.entryFilter,t)&&this._emitEntry(t),t.dirent.isDirectory()&&kn.isAppliedFilter(this._settings.deepFilter,t)&&this._pushToQueue(n,r===void 0?void 0:t.path)}_emitEntry(t){this._emitter.emit("entry",t)}};Ri.default=Si});var Rp=E(Pi=>{"use strict";Object.defineProperty(Pi,"__esModule",{value:!0});var R_=Oi(),Ti=class{constructor(t,r){this._root=t,this._settings=r,this._reader=new R_.default(this._root,this._settings),this._storage=[]}read(t){this._reader.onError(r=>{O_(t,r)}),this._reader.onEntry(r=>{this._storage.push(r)}),this._reader.onEnd(()=>{T_(t,this._storage)}),this._reader.read()}};Pi.default=Ti;function O_(e,t){e(t)}function T_(e,t){e(null,t)}});var Op=E(Di=>{"use strict";Object.defineProperty(Di,"__esModule",{value:!0});var P_=I("stream"),$_=Oi(),$i=class{constructor(t,r){this._root=t,this._settings=r,this._reader=new $_.default(this._root,this._settings),this._stream=new P_.Readable({objectMode:!0,read:()=>{},destroy:()=>{this._reader.isDestroyed||this._reader.destroy()}})}read(){return this._reader.onError(t=>{this._stream.emit("error",t)}),this._reader.onEntry(t=>{this._stream.push(t)}),this._reader.onEnd(()=>{this._stream.push(null)}),this._reader.read(),this._stream}};Di.default=$i});var Tp=E(Li=>{"use strict";Object.defineProperty(Li,"__esModule",{value:!0});var D_=_n(),xn=En(),N_=Ai(),Ni=class extends N_.default{constructor(){super(...arguments),this._scandir=D_.scandirSync,this._storage=[],this._queue=new Set}read(){return this._pushToQueue(this._root,this._settings.basePath),this._handleQueue(),this._storage}_pushToQueue(t,r){this._queue.add({directory:t,base:r})}_handleQueue(){for(let t of this._queue.values())this._handleDirectory(t.directory,t.base)}_handleDirectory(t,r){try{let n=this._scandir(t,this._settings.fsScandirSettings);for(let o of n)this._handleEntry(o,r)}catch(n){this._handleError(n)}}_handleError(t){if(xn.isFatalError(this._settings,t))throw t}_handleEntry(t,r){let n=t.path;r!==void 0&&(t.path=xn.joinPathSegments(r,t.name,this._settings.pathSegmentSeparator)),xn.isAppliedFilter(this._settings.entryFilter,t)&&this._pushToStorage(t),t.dirent.isDirectory()&&xn.isAppliedFilter(this._settings.deepFilter,t)&&this._pushToQueue(n,r===void 0?void 0:t.path)}_pushToStorage(t){this._storage.push(t)}};Li.default=Ni});var Pp=E(ji=>{"use strict";Object.defineProperty(ji,"__esModule",{value:!0});var L_=Tp(),Ii=class{constructor(t,r){this._root=t,this._settings=r,this._reader=new L_.default(this._root,this._settings)}read(){return this._reader.read()}};ji.default=Ii});var $p=E(Mi=>{"use strict";Object.defineProperty(Mi,"__esModule",{value:!0});var I_=I("path"),j_=_n(),Fi=class{constructor(t={}){this._options=t,this.basePath=this._getValue(this._options.basePath,void 0),this.concurrency=this._getValue(this._options.concurrency,Number.POSITIVE_INFINITY),this.deepFilter=this._getValue(this._options.deepFilter,null),this.entryFilter=this._getValue(this._options.entryFilter,null),this.errorFilter=this._getValue(this._options.errorFilter,null),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,I_.sep),this.fsScandirSettings=new j_.Settings({followSymbolicLinks:this._options.followSymbolicLinks,fs:this._options.fs,pathSegmentSeparator:this._options.pathSegmentSeparator,stats:this._options.stats,throwErrorOnBrokenSymbolicLink:this._options.throwErrorOnBrokenSymbolicLink})}_getValue(t,r){return t??r}};Mi.default=Fi});var Cn=E(Ue=>{"use strict";Object.defineProperty(Ue,"__esModule",{value:!0});Ue.Settings=Ue.walkStream=Ue.walkSync=Ue.walk=void 0;var Dp=Rp(),F_=Op(),M_=Pp(),Bi=$p();Ue.Settings=Bi.default;function B_(e,t,r){if(typeof t=="function"){new Dp.default(e,wn()).read(t);return}new Dp.default(e,wn(t)).read(r)}Ue.walk=B_;function H_(e,t){let r=wn(t);return new M_.default(e,r).read()}Ue.walkSync=H_;function V_(e,t){let r=wn(t);return new F_.default(e,r).read()}Ue.walkStream=V_;function wn(e={}){return e instanceof Bi.default?e:new Bi.default(e)}});var An=E(Vi=>{"use strict";Object.defineProperty(Vi,"__esModule",{value:!0});var G_=I("path"),U_=_t(),Np=ze(),Hi=class{constructor(t){this._settings=t,this._fsStatSettings=new U_.Settings({followSymbolicLink:this._settings.followSymbolicLinks,fs:this._settings.fs,throwErrorOnBrokenSymbolicLink:this._settings.followSymbolicLinks})}_getFullEntryPath(t){return G_.resolve(this._settings.cwd,t)}_makeEntry(t,r){let n={name:r,path:r,dirent:Np.fs.createDirentFromStats(r,t)};return this._settings.stats&&(n.stats=t),n}_isFatalError(t){return!Np.errno.isEnoentCodeError(t)&&!this._settings.suppressErrors}};Vi.default=Hi});var Wi=E(Ui=>{"use strict";Object.defineProperty(Ui,"__esModule",{value:!0});var W_=I("stream"),q_=_t(),Y_=Cn(),K_=An(),Gi=class extends K_.default{constructor(){super(...arguments),this._walkStream=Y_.walkStream,this._stat=q_.stat}dynamic(t,r){return this._walkStream(t,r)}static(t,r){let n=t.map(this._getFullEntryPath,this),o=new W_.PassThrough({objectMode:!0});o._write=(i,s,a)=>this._getEntry(n[i],t[i],r).then(c=>{c!==null&&r.entryFilter(c)&&o.push(c),i===n.length-1&&o.end(),a()}).catch(a);for(let i=0;i<n.length;i++)o.write(i);return o}_getEntry(t,r,n){return this._getStat(t).then(o=>this._makeEntry(o,r)).catch(o=>{if(n.errorFilter(o))return null;throw o})}_getStat(t){return new Promise((r,n)=>{this._stat(t,this._fsStatSettings,(o,i)=>o===null?r(i):n(o))})}};Ui.default=Gi});var Lp=E(Yi=>{"use strict";Object.defineProperty(Yi,"__esModule",{value:!0});var X_=Cn(),z_=An(),Q_=Wi(),qi=class extends z_.default{constructor(){super(...arguments),this._walkAsync=X_.walk,this._readerStream=new Q_.default(this._settings)}dynamic(t,r){return new Promise((n,o)=>{this._walkAsync(t,r,(i,s)=>{i===null?n(s):o(i)})})}async static(t,r){let n=[],o=this._readerStream.static(t,r);return new Promise((i,s)=>{o.once("error",s),o.on("data",a=>n.push(a)),o.once("end",()=>i(n))})}};Yi.default=qi});var Ip=E(Xi=>{"use strict";Object.defineProperty(Xi,"__esModule",{value:!0});var ur=ze(),Ki=class{constructor(t,r,n){this._patterns=t,this._settings=r,this._micromatchOptions=n,this._storage=[],this._fillStorage()}_fillStorage(){for(let t of this._patterns){let r=this._getPatternSegments(t),n=this._splitSegmentsIntoSections(r);this._storage.push({complete:n.length<=1,pattern:t,segments:r,sections:n})}}_getPatternSegments(t){return ur.pattern.getPatternParts(t,this._micromatchOptions).map(n=>ur.pattern.isDynamicPattern(n,this._settings)?{dynamic:!0,pattern:n,patternRe:ur.pattern.makeRe(n,this._micromatchOptions)}:{dynamic:!1,pattern:n})}_splitSegmentsIntoSections(t){return ur.array.splitWhen(t,r=>r.dynamic&&ur.pattern.hasGlobStar(r.pattern))}};Xi.default=Ki});var jp=E(Qi=>{"use strict";Object.defineProperty(Qi,"__esModule",{value:!0});var J_=Ip(),zi=class extends J_.default{match(t){let r=t.split("/"),n=r.length,o=this._storage.filter(i=>!i.complete||i.segments.length>n);for(let i of o){let s=i.sections[0];if(!i.complete&&n>s.length||r.every((c,l)=>{let u=i.segments[l];return!!(u.dynamic&&u.patternRe.test(c)||!u.dynamic&&u.pattern===c)}))return!0}return!1}};Qi.default=zi});var Fp=E(Zi=>{"use strict";Object.defineProperty(Zi,"__esModule",{value:!0});var Sn=ze(),Z_=jp(),Ji=class{constructor(t,r){this._settings=t,this._micromatchOptions=r}getFilter(t,r,n){let o=this._getMatcher(r),i=this._getNegativePatternsRe(n);return s=>this._filter(t,s,o,i)}_getMatcher(t){return new Z_.default(t,this._settings,this._micromatchOptions)}_getNegativePatternsRe(t){let r=t.filter(Sn.pattern.isAffectDepthOfReadingPattern);return Sn.pattern.convertPatternsToRe(r,this._micromatchOptions)}_filter(t,r,n,o){if(this._isSkippedByDeep(t,r.path)||this._isSkippedSymbolicLink(r))return!1;let i=Sn.path.removeLeadingDotSegment(r.path);return this._isSkippedByPositivePatterns(i,n)?!1:this._isSkippedByNegativePatterns(i,o)}_isSkippedByDeep(t,r){return this._settings.deep===1/0?!1:this._getEntryLevel(t,r)>=this._settings.deep}_getEntryLevel(t,r){let n=r.split("/").length;if(t==="")return n;let o=t.split("/").length;return n-o}_isSkippedSymbolicLink(t){return!this._settings.followSymbolicLinks&&t.dirent.isSymbolicLink()}_isSkippedByPositivePatterns(t,r){return!this._settings.baseNameMatch&&!r.match(t)}_isSkippedByNegativePatterns(t,r){return!Sn.pattern.matchAny(t,r)}};Zi.default=Ji});var Mp=E(ts=>{"use strict";Object.defineProperty(ts,"__esModule",{value:!0});var dt=ze(),es=class{constructor(t,r){this._settings=t,this._micromatchOptions=r,this.index=new Map}getFilter(t,r){let[n,o]=dt.pattern.partitionAbsoluteAndRelative(r),i={positive:{all:dt.pattern.convertPatternsToRe(t,this._micromatchOptions)},negative:{absolute:dt.pattern.convertPatternsToRe(n,Object.assign(Object.assign({},this._micromatchOptions),{dot:!0})),relative:dt.pattern.convertPatternsToRe(o,Object.assign(Object.assign({},this._micromatchOptions),{dot:!0}))}};return s=>this._filter(s,i)}_filter(t,r){let n=dt.path.removeLeadingDotSegment(t.path);if(this._settings.unique&&this._isDuplicateEntry(n)||this._onlyFileFilter(t)||this._onlyDirectoryFilter(t))return!1;let o=this._isMatchToPatternsSet(n,r,t.dirent.isDirectory());return this._settings.unique&&o&&this._createIndexRecord(n),o}_isDuplicateEntry(t){return this.index.has(t)}_createIndexRecord(t){this.index.set(t,void 0)}_onlyFileFilter(t){return this._settings.onlyFiles&&!t.dirent.isFile()}_onlyDirectoryFilter(t){return this._settings.onlyDirectories&&!t.dirent.isDirectory()}_isMatchToPatternsSet(t,r,n){return!(!this._isMatchToPatterns(t,r.positive.all,n)||this._isMatchToPatterns(t,r.negative.relative,n)||this._isMatchToAbsoluteNegative(t,r.negative.absolute,n))}_isMatchToAbsoluteNegative(t,r,n){if(r.length===0)return!1;let o=dt.path.makeAbsolute(this._settings.cwd,t);return this._isMatchToPatterns(o,r,n)}_isMatchToPatterns(t,r,n){if(r.length===0)return!1;let o=dt.pattern.matchAny(t,r);return!o&&n?dt.pattern.matchAny(t+"/",r):o}};ts.default=es});var Bp=E(ns=>{"use strict";Object.defineProperty(ns,"__esModule",{value:!0});var eE=ze(),rs=class{constructor(t){this._settings=t}getFilter(){return t=>this._isNonFatalError(t)}_isNonFatalError(t){return eE.errno.isEnoentCodeError(t)||this._settings.suppressErrors}};ns.default=rs});var Vp=E(is=>{"use strict";Object.defineProperty(is,"__esModule",{value:!0});var Hp=ze(),os=class{constructor(t){this._settings=t}getTransformer(){return t=>this._transform(t)}_transform(t){let r=t.path;return this._settings.absolute&&(r=Hp.path.makeAbsolute(this._settings.cwd,r),r=Hp.path.unixify(r)),this._settings.markDirectories&&t.dirent.isDirectory()&&(r+="/"),this._settings.objectMode?Object.assign(Object.assign({},t),{path:r}):r}};is.default=os});var Rn=E(as=>{"use strict";Object.defineProperty(as,"__esModule",{value:!0});var tE=I("path"),rE=Fp(),nE=Mp(),oE=Bp(),iE=Vp(),ss=class{constructor(t){this._settings=t,this.errorFilter=new oE.default(this._settings),this.entryFilter=new nE.default(this._settings,this._getMicromatchOptions()),this.deepFilter=new rE.default(this._settings,this._getMicromatchOptions()),this.entryTransformer=new iE.default(this._settings)}_getRootDirectory(t){return tE.resolve(this._settings.cwd,t.base)}_getReaderOptions(t){let r=t.base==="."?"":t.base;return{basePath:r,pathSegmentSeparator:"/",concurrency:this._settings.concurrency,deepFilter:this.deepFilter.getFilter(r,t.positive,t.negative),entryFilter:this.entryFilter.getFilter(t.positive,t.negative),errorFilter:this.errorFilter.getFilter(),followSymbolicLinks:this._settings.followSymbolicLinks,fs:this._settings.fs,stats:this._settings.stats,throwErrorOnBrokenSymbolicLink:this._settings.throwErrorOnBrokenSymbolicLink,transform:this.entryTransformer.getTransformer()}}_getMicromatchOptions(){return{dot:this._settings.dot,matchBase:this._settings.baseNameMatch,nobrace:!this._settings.braceExpansion,nocase:!this._settings.caseSensitiveMatch,noext:!this._settings.extglob,noglobstar:!this._settings.globstar,posix:!0,strictSlashes:!1}}};as.default=ss});var Gp=E(ls=>{"use strict";Object.defineProperty(ls,"__esModule",{value:!0});var sE=Lp(),aE=Rn(),cs=class extends aE.default{constructor(){super(...arguments),this._reader=new sE.default(this._settings)}async read(t){let r=this._getRootDirectory(t),n=this._getReaderOptions(t);return(await this.api(r,t,n)).map(i=>n.transform(i))}api(t,r,n){return r.dynamic?this._reader.dynamic(t,n):this._reader.static(r.patterns,n)}};ls.default=cs});var Up=E(ps=>{"use strict";Object.defineProperty(ps,"__esModule",{value:!0});var cE=I("stream"),lE=Wi(),uE=Rn(),us=class extends uE.default{constructor(){super(...arguments),this._reader=new lE.default(this._settings)}read(t){let r=this._getRootDirectory(t),n=this._getReaderOptions(t),o=this.api(r,t,n),i=new cE.Readable({objectMode:!0,read:()=>{}});return o.once("error",s=>i.emit("error",s)).on("data",s=>i.emit("data",n.transform(s))).once("end",()=>i.emit("end")),i.once("close",()=>o.destroy()),i}api(t,r,n){return r.dynamic?this._reader.dynamic(t,n):this._reader.static(r.patterns,n)}};ps.default=us});var Wp=E(fs=>{"use strict";Object.defineProperty(fs,"__esModule",{value:!0});var pE=_t(),dE=Cn(),fE=An(),ds=class extends fE.default{constructor(){super(...arguments),this._walkSync=dE.walkSync,this._statSync=pE.statSync}dynamic(t,r){return this._walkSync(t,r)}static(t,r){let n=[];for(let o of t){let i=this._getFullEntryPath(o),s=this._getEntry(i,o,r);s===null||!r.entryFilter(s)||n.push(s)}return n}_getEntry(t,r,n){try{let o=this._getStat(t);return this._makeEntry(o,r)}catch(o){if(n.errorFilter(o))return null;throw o}}_getStat(t){return this._statSync(t,this._fsStatSettings)}};fs.default=ds});var qp=E(ms=>{"use strict";Object.defineProperty(ms,"__esModule",{value:!0});var hE=Wp(),mE=Rn(),hs=class extends mE.default{constructor(){super(...arguments),this._reader=new hE.default(this._settings)}read(t){let r=this._getRootDirectory(t),n=this._getReaderOptions(t);return this.api(r,t,n).map(n.transform)}api(t,r,n){return r.dynamic?this._reader.dynamic(t,n):this._reader.static(r.patterns,n)}};ms.default=hs});var Yp=E(Ft=>{"use strict";Object.defineProperty(Ft,"__esModule",{value:!0});Ft.DEFAULT_FILE_SYSTEM_ADAPTER=void 0;var jt=I("fs"),gE=I("os"),yE=Math.max(gE.cpus().length,1);Ft.DEFAULT_FILE_SYSTEM_ADAPTER={lstat:jt.lstat,lstatSync:jt.lstatSync,stat:jt.stat,statSync:jt.statSync,readdir:jt.readdir,readdirSync:jt.readdirSync};var gs=class{constructor(t={}){this._options=t,this.absolute=this._getValue(this._options.absolute,!1),this.baseNameMatch=this._getValue(this._options.baseNameMatch,!1),this.braceExpansion=this._getValue(this._options.braceExpansion,!0),this.caseSensitiveMatch=this._getValue(this._options.caseSensitiveMatch,!0),this.concurrency=this._getValue(this._options.concurrency,yE),this.cwd=this._getValue(this._options.cwd,process.cwd()),this.deep=this._getValue(this._options.deep,1/0),this.dot=this._getValue(this._options.dot,!1),this.extglob=this._getValue(this._options.extglob,!0),this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!0),this.fs=this._getFileSystemMethods(this._options.fs),this.globstar=this._getValue(this._options.globstar,!0),this.ignore=this._getValue(this._options.ignore,[]),this.markDirectories=this._getValue(this._options.markDirectories,!1),this.objectMode=this._getValue(this._options.objectMode,!1),this.onlyDirectories=this._getValue(this._options.onlyDirectories,!1),this.onlyFiles=this._getValue(this._options.onlyFiles,!0),this.stats=this._getValue(this._options.stats,!1),this.suppressErrors=this._getValue(this._options.suppressErrors,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!1),this.unique=this._getValue(this._options.unique,!0),this.onlyDirectories&&(this.onlyFiles=!1),this.stats&&(this.objectMode=!0),this.ignore=[].concat(this.ignore)}_getValue(t,r){return t===void 0?r:t}_getFileSystemMethods(t={}){return Object.assign(Object.assign({},Ft.DEFAULT_FILE_SYSTEM_ADAPTER),t)}};Ft.default=gs});var _s=E((WA,Xp)=>{"use strict";var Kp=Xu(),bE=Gp(),vE=Up(),_E=qp(),ys=Yp(),Re=ze();async function bs(e,t){De(e);let r=vs(e,bE.default,t),n=await Promise.all(r);return Re.array.flatten(n)}(function(e){e.glob=e,e.globSync=t,e.globStream=r,e.async=e;function t(l,u){De(l);let p=vs(l,_E.default,u);return Re.array.flatten(p)}e.sync=t;function r(l,u){De(l);let p=vs(l,vE.default,u);return Re.stream.merge(p)}e.stream=r;function n(l,u){De(l);let p=[].concat(l),d=new ys.default(u);return Kp.generate(p,d)}e.generateTasks=n;function o(l,u){De(l);let p=new ys.default(u);return Re.pattern.isDynamicPattern(l,p)}e.isDynamicPattern=o;function i(l){return De(l),Re.path.escape(l)}e.escapePath=i;function s(l){return De(l),Re.path.convertPathToPattern(l)}e.convertPathToPattern=s;let a;(function(l){function u(d){return De(d),Re.path.escapePosixPath(d)}l.escapePath=u;function p(d){return De(d),Re.path.convertPosixPathToPattern(d)}l.convertPathToPattern=p})(a=e.posix||(e.posix={}));let c;(function(l){function u(d){return De(d),Re.path.escapeWindowsPath(d)}l.escapePath=u;function p(d){return De(d),Re.path.convertWindowsPathToPattern(d)}l.convertPathToPattern=p})(c=e.win32||(e.win32={}))})(bs||(bs={}));function vs(e,t,r){let n=[].concat(e),o=new ys.default(r),i=Kp.generate(n,o),s=new t(o);return i.map(s.read,s)}function De(e){if(![].concat(e).every(n=>Re.string.isString(n)&&!Re.string.isEmpty(n)))throw new TypeError("Patterns must be a string (non empty) or an array of strings")}Xp.exports=bs});import EE from"node:fs";import kE from"node:fs/promises";async function Es(e,t,r){if(typeof r!="string")throw new TypeError(`Expected a string, got ${typeof r}`);try{return(await kE[e](r))[t]()}catch(n){if(n.code==="ENOENT")return!1;throw n}}function ks(e,t,r){if(typeof r!="string")throw new TypeError(`Expected a string, got ${typeof r}`);try{return EE[e](r)[t]()}catch(n){if(n.code==="ENOENT")return!1;throw n}}var KA,zp,XA,zA,Qp,QA,Jp=tt(()=>{KA=Es.bind(void 0,"stat","isFile"),zp=Es.bind(void 0,"stat","isDirectory"),XA=Es.bind(void 0,"lstat","isSymbolicLink"),zA=ks.bind(void 0,"statSync","isFile"),Qp=ks.bind(void 0,"statSync","isDirectory"),QA=ks.bind(void 0,"lstatSync","isSymbolicLink")});var Zp=tt(()=>{});import{promisify as xE}from"node:util";import{execFile as wE,execFileSync as r0}from"node:child_process";import{fileURLToPath as CE}from"node:url";function pr(e){return e instanceof URL?CE(e):e}var o0,i0,xs=tt(()=>{Zp();o0=xE(wE);i0=10*1024*1024});var cd=E((c0,Pn)=>{function rd(e){return Array.isArray(e)?e:[e]}var AE=void 0,Cs="",ed=" ",ws="\\",SE=/^\s+$/,RE=/(?:[^\\]|^)\\$/,OE=/^\\!/,TE=/^\\#/,PE=/\r?\n/g,$E=/^\.{0,2}\/|^\.{1,2}$/,DE=/\/$/,Mt="/",nd="node-ignore";typeof Symbol<"u"&&(nd=Symbol.for("node-ignore"));var od=nd,Bt=(e,t,r)=>(Object.defineProperty(e,t,{value:r}),r),NE=/([0-z])-([0-z])/g,id=()=>!1,LE=e=>e.replace(NE,(t,r,n)=>r.charCodeAt(0)<=n.charCodeAt(0)?t:Cs),IE=e=>{let{length:t}=e;return e.slice(0,t-t%2)},jE=[[/^\uFEFF/,()=>Cs],[/((?:\\\\)*?)(\\?\s+)$/,(e,t,r)=>t+(r.indexOf("\\")===0?ed:Cs)],[/(\\+?)\s/g,(e,t)=>{let{length:r}=t;return t.slice(0,r-r%2)+ed}],[/[\\$.|*+(){^]/g,e=>`\\${e}`],[/(?!\\)\?/g,()=>"[^/]"],[/^\//,()=>"^"],[/\//g,()=>"\\/"],[/^\^*\\\*\\\*\\\//,()=>"^(?:.*\\/)?"],[/^(?=[^^])/,function(){return/\/(?!$)/.test(this)?"^":"(?:^|\\/)"}],[/\\\/\\\*\\\*(?=\\\/|$)/g,(e,t,r)=>t+6<r.length?"(?:\\/[^\\/]+)*":"\\/.+"],[/(^|[^\\]+)(\\\*)+(?=.+)/g,(e,t,r)=>{let n=r.replace(/\\\*/g,"[^\\/]*");return t+n}],[/\\\\\\(?=[$.|*+(){^])/g,()=>ws],[/\\\\/g,()=>ws],[/(\\)?\[([^\]/]*?)(\\*)($|\])/g,(e,t,r,n,o)=>t===ws?`\\[${r}${IE(n)}${o}`:o==="]"&&n.length%2===0?`[${LE(r)}${n}]`:"[]"],[/(?:[^*])$/,e=>/\/$/.test(e)?`${e}$`:`${e}(?=$|\\/$)`]],FE=/(^|\\\/)?\\\*$/,dr="regex",On="checkRegex",td="_",ME={[dr](e,t){return`${t?`${t}[^/]+`:"[^/]*"}(?=$|\\/$)`},[On](e,t){return`${t?`${t}[^/]*`:"[^/]*"}(?=$|\\/$)`}},BE=e=>jE.reduce((t,[r,n])=>t.replace(r,n.bind(e)),e),Tn=e=>typeof e=="string",HE=e=>e&&Tn(e)&&!SE.test(e)&&!RE.test(e)&&e.indexOf("#")!==0,VE=e=>e.split(PE).filter(Boolean),As=class{constructor(t,r,n,o,i,s){this.pattern=t,this.mark=r,this.negative=i,Bt(this,"body",n),Bt(this,"ignoreCase",o),Bt(this,"regexPrefix",s)}get regex(){let t=td+dr;return this[t]?this[t]:this._make(dr,t)}get checkRegex(){let t=td+On;return this[t]?this[t]:this._make(On,t)}_make(t,r){let n=this.regexPrefix.replace(FE,ME[t]),o=this.ignoreCase?new RegExp(n,"i"):new RegExp(n);return Bt(this,r,o)}},GE=({pattern:e,mark:t},r)=>{let n=!1,o=e;o.indexOf("!")===0&&(n=!0,o=o.substr(1)),o=o.replace(OE,"!").replace(TE,"#");let i=BE(o);return new As(e,t,o,r,n,i)},Ss=class{constructor(t){this._ignoreCase=t,this._rules=[]}_add(t){if(t&&t[od]){this._rules=this._rules.concat(t._rules._rules),this._added=!0;return}if(Tn(t)&&(t={pattern:t}),HE(t.pattern)){let r=GE(t,this._ignoreCase);this._added=!0,this._rules.push(r)}}add(t){return this._added=!1,rd(Tn(t)?VE(t):t).forEach(this._add,this),this._added}test(t,r,n){let o=!1,i=!1,s;this._rules.forEach(c=>{let{negative:l}=c;i===l&&o!==i||l&&!o&&!i&&!r||!c[n].test(t)||(o=!l,i=l,s=l?AE:c)});let a={ignored:o,unignored:i};return s&&(a.rule=s),a}},UE=(e,t)=>{throw new t(e)},Qe=(e,t,r)=>Tn(e)?e?Qe.isNotRelative(e)?r(`path should be a \`path.relative()\`d string, but got "${t}"`,RangeError):!0:r("path must not be empty",TypeError):r(`path must be a string, but got \`${t}\``,TypeError),sd=e=>$E.test(e);Qe.isNotRelative=sd;Qe.convert=e=>e;var Rs=class{constructor({ignorecase:t=!0,ignoreCase:r=t,allowRelativePaths:n=!1}={}){Bt(this,od,!0),this._rules=new Ss(r),this._strictPathCheck=!n,this._initCache()}_initCache(){this._ignoreCache=Object.create(null),this._testCache=Object.create(null)}add(t){return this._rules.add(t)&&this._initCache(),this}addPattern(t){return this.add(t)}_test(t,r,n,o){let i=t&&Qe.convert(t);return Qe(i,t,this._strictPathCheck?UE:id),this._t(i,r,n,o)}checkIgnore(t){if(!DE.test(t))return this.test(t);let r=t.split(Mt).filter(Boolean);if(r.pop(),r.length){let n=this._t(r.join(Mt)+Mt,this._testCache,!0,r);if(n.ignored)return n}return this._rules.test(t,!1,On)}_t(t,r,n,o){if(t in r)return r[t];if(o||(o=t.split(Mt).filter(Boolean)),o.pop(),!o.length)return r[t]=this._rules.test(t,n,dr);let i=this._t(o.join(Mt)+Mt,r,n,o);return r[t]=i.ignored?i:this._rules.test(t,n,dr)}ignores(t){return this._test(t,this._ignoreCache,!1).ignored}createFilter(){return t=>!this.ignores(t)}filter(t){return rd(t).filter(this.createFilter())}test(t){return this._test(t,this._testCache,!0)}},Os=e=>new Rs(e),WE=e=>Qe(e&&Qe.convert(e),e,id),ad=()=>{let e=r=>/^\\\\\?\\/.test(r)||/["<>|\u0000-\u001F]+/u.test(r)?r:r.replace(/\\/g,"/");Qe.convert=e;let t=/^[a-z]:\//i;Qe.isNotRelative=r=>t.test(r)||sd(r)};typeof process<"u"&&process.platform==="win32"&&ad();Pn.exports=Os;Os.default=Os;Pn.exports.isPathValid=WE;Bt(Pn.exports,Symbol.for("setupWindows"),ad)});function Ht(e){return e.startsWith("\\\\?\\")?e:e.replace(/\\/g,"/")}var ld=tt(()=>{});var fr,Ts=tt(()=>{fr=e=>e[0]==="!"});import qE from"node:process";import YE from"node:fs";import KE from"node:fs/promises";import Vt from"node:path";var Ps,ud,XE,pd,$n,zE,QE,JE,dd,fd,hr,mr,hd,md,$s=tt(()=>{Ps=qt(_s(),1),ud=qt(cd(),1);ld();xs();Ts();XE=["**/node_modules","**/flow-typed","**/coverage","**/.git"],pd={absolute:!0,dot:!0},$n="**/.gitignore",zE=(e,t)=>fr(e)?"!"+Vt.posix.join(t,e.slice(1)):Vt.posix.join(t,e),QE=(e,t)=>{let r=Ht(Vt.relative(t,Vt.dirname(e.filePath)));return e.content.split(/\r?\n/).filter(n=>n&&!n.startsWith("#")).map(n=>zE(n,r))},JE=(e,t)=>{if(t=Ht(t),Vt.isAbsolute(e)){if(Ht(e).startsWith(t))return Vt.relative(t,e);throw new Error(`Path ${e} is not in cwd ${t}`)}return e},dd=(e,t)=>{let r=e.flatMap(o=>QE(o,t)),n=(0,ud.default)().add(r);return o=>(o=pr(o),o=JE(o,t),o?n.ignores(Ht(o)):!1)},fd=(e={})=>({cwd:pr(e.cwd)??qE.cwd(),suppressErrors:!!e.suppressErrors,deep:typeof e.deep=="number"?e.deep:Number.POSITIVE_INFINITY,ignore:[...e.ignore??[],...XE]}),hr=async(e,t)=>{let{cwd:r,suppressErrors:n,deep:o,ignore:i}=fd(t),s=await(0,Ps.default)(e,{cwd:r,suppressErrors:n,deep:o,ignore:i,...pd}),a=await Promise.all(s.map(async c=>({filePath:c,content:await KE.readFile(c,"utf8")})));return dd(a,r)},mr=(e,t)=>{let{cwd:r,suppressErrors:n,deep:o,ignore:i}=fd(t),a=Ps.default.sync(e,{cwd:r,suppressErrors:n,deep:o,ignore:i,...pd}).map(c=>({filePath:c,content:YE.readFileSync(c,"utf8")}));return dd(a,r)},hd=e=>hr($n,e),md=e=>mr($n,e)});var Td={};vf(Td,{convertPathToPattern:()=>lk,generateGlobTasks:()=>ak,generateGlobTasksSync:()=>ck,globby:()=>nk,globbyStream:()=>ik,globbySync:()=>ok,isDynamicPattern:()=>sk,isGitIgnored:()=>hd,isGitIgnoredSync:()=>md,isIgnoredByIgnoreFiles:()=>hr,isIgnoredByIgnoreFilesSync:()=>mr});import bd from"node:process";import ZE from"node:fs";import Gt from"node:path";var Ut,ek,vd,_d,gd,yd,Ds,tk,Ed,kd,Dn,xd,rk,wd,Cd,Ad,Sd,Rd,Od,Ns,nk,ok,ik,sk,ak,ck,lk,Pd=tt(()=>{sl();Ut=qt(_s(),1);Jp();xs();$s();Ts();$s();ek=e=>{if(e.some(t=>typeof t!="string"))throw new TypeError("Patterns must be a string or an array of strings")},vd=(e,t)=>{let r=fr(e)?e.slice(1):e;return Gt.isAbsolute(r)?r:Gt.join(t,r)},_d=({directoryPath:e,files:t,extensions:r})=>{let n=r?.length>0?`.${r.length>1?`{${r.join(",")}}`:r[0]}`:"";return t?t.map(o=>Gt.posix.join(e,`**/${Gt.extname(o)?o:`${o}${n}`}`)):[Gt.posix.join(e,`**${n?`/*${n}`:""}`)]},gd=async(e,{cwd:t=bd.cwd(),files:r,extensions:n}={})=>(await Promise.all(e.map(async i=>await zp(vd(i,t))?_d({directoryPath:i,files:r,extensions:n}):i))).flat(),yd=(e,{cwd:t=bd.cwd(),files:r,extensions:n}={})=>e.flatMap(o=>Qp(vd(o,t))?_d({directoryPath:o,files:r,extensions:n}):o),Ds=e=>(e=[...new Set([e].flat())],ek(e),e),tk=e=>{if(!e)return;let t;try{t=ZE.statSync(e)}catch{return}if(!t.isDirectory())throw new Error("The `cwd` option must be a path to a directory")},Ed=(e={})=>(e={...e,ignore:e.ignore??[],expandDirectories:e.expandDirectories??!0,cwd:pr(e.cwd)},tk(e.cwd),e),kd=e=>async(t,r)=>e(Ds(t),Ed(r)),Dn=e=>(t,r)=>e(Ds(t),Ed(r)),xd=e=>{let{ignoreFiles:t,gitignore:r}=e,n=t?Ds(t):[];return r&&n.push($n),n},rk=async e=>{let t=xd(e);return Cd(t.length>0&&await hr(t,e))},wd=e=>{let t=xd(e);return Cd(t.length>0&&mr(t,e))},Cd=e=>{let t=new Set;return r=>{let n=Gt.normalize(r.path??r);return t.has(n)||e&&e(n)?!1:(t.add(n),!0)}},Ad=(e,t)=>e.flat().filter(r=>t(r)),Sd=(e,t)=>{let r=[];for(;e.length>0;){let n=e.findIndex(i=>fr(i));if(n===-1){r.push({patterns:e,options:t});break}let o=e[n].slice(1);for(let i of r)i.options.ignore.push(o);n!==0&&r.push({patterns:e.slice(0,n),options:{...t,ignore:[...t.ignore,o]}}),e=e.slice(n+1)}return r},Rd=(e,t)=>({...t?{cwd:t}:{},...Array.isArray(e)?{files:e}:e}),Od=async(e,t)=>{let r=Sd(e,t),{cwd:n,expandDirectories:o}=t;if(!o)return r;let i=Rd(o,n);return Promise.all(r.map(async s=>{let{patterns:a,options:c}=s;return[a,c.ignore]=await Promise.all([gd(a,i),gd(c.ignore,{cwd:n})]),{patterns:a,options:c}}))},Ns=(e,t)=>{let r=Sd(e,t),{cwd:n,expandDirectories:o}=t;if(!o)return r;let i=Rd(o,n);return r.map(s=>{let{patterns:a,options:c}=s;return a=yd(a,i),c.ignore=yd(c.ignore,{cwd:n}),{patterns:a,options:c}})},nk=kd(async(e,t)=>{let[r,n]=await Promise.all([Od(e,t),rk(t)]),o=await Promise.all(r.map(i=>(0,Ut.default)(i.patterns,i.options)));return Ad(o,n)}),ok=Dn((e,t)=>{let r=Ns(e,t),n=wd(t),o=r.map(i=>Ut.default.sync(i.patterns,i.options));return Ad(o,n)}),ik=Dn((e,t)=>{let r=Ns(e,t),n=wd(t),o=r.map(s=>Ut.default.stream(s.patterns,s.options));return Io(o).filter(s=>n(s))}),sk=Dn((e,t)=>e.some(r=>Ut.default.isDynamicPattern(r,t))),ak=kd(Od),ck=Dn(Ns),{convertPathToPattern:lk}=Ut.default});var Ys=(e=0)=>t=>`\x1B[${t+e}m`,Ks=(e=0)=>t=>`\x1B[${38+e};5;${t}m`,Xs=(e=0)=>(t,r,n)=>`\x1B[${38+e};2;${t};${r};${n}m`,Q={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}},xx=Object.keys(Q.modifier),Ef=Object.keys(Q.color),kf=Object.keys(Q.bgColor),wx=[...Ef,...kf];function xf(){let e=new Map;for(let[t,r]of Object.entries(Q)){for(let[n,o]of Object.entries(r))Q[n]={open:`\x1B[${o[0]}m`,close:`\x1B[${o[1]}m`},r[n]=Q[n],e.set(o[0],o[1]);Object.defineProperty(Q,t,{value:r,enumerable:!1})}return Object.defineProperty(Q,"codes",{value:e,enumerable:!1}),Q.color.close="\x1B[39m",Q.bgColor.close="\x1B[49m",Q.color.ansi=Ys(),Q.color.ansi256=Ks(),Q.color.ansi16m=Xs(),Q.bgColor.ansi=Ys(10),Q.bgColor.ansi256=Ks(10),Q.bgColor.ansi16m=Xs(10),Object.defineProperties(Q,{rgbToAnsi256:{value(t,r,n){return t===r&&r===n?t<8?16:t>248?231:Math.round((t-8)/247*24)+232:16+36*Math.round(t/255*5)+6*Math.round(r/255*5)+Math.round(n/255*5)},enumerable:!1},hexToRgb:{value(t){let r=/[a-f\d]{6}|[a-f\d]{3}/i.exec(t.toString(16));if(!r)return[0,0,0];let[n]=r;n.length===3&&(n=[...n].map(i=>i+i).join(""));let o=Number.parseInt(n,16);return[o>>16&255,o>>8&255,o&255]},enumerable:!1},hexToAnsi256:{value:t=>Q.rgbToAnsi256(...Q.hexToRgb(t)),enumerable:!1},ansi256ToAnsi:{value(t){if(t<8)return 30+t;if(t<16)return 90+(t-8);let r,n,o;if(t>=232)r=((t-232)*10+8)/255,n=r,o=r;else{t-=16;let a=t%36;r=Math.floor(t/36)/5,n=Math.floor(a/6)/5,o=a%6/5}let i=Math.max(r,n,o)*2;if(i===0)return 30;let s=30+(Math.round(o)<<2|Math.round(n)<<1|Math.round(r));return i===2&&(s+=60),s},enumerable:!1},rgbToAnsi:{value:(t,r,n)=>Q.ansi256ToAnsi(Q.rgbToAnsi256(t,r,n)),enumerable:!1},hexToAnsi:{value:t=>Q.ansi256ToAnsi(Q.hexToAnsi256(t)),enumerable:!1}}),Q}var wf=xf(),Te=wf;import Vn from"node:process";import Cf from"node:os";import zs from"node:tty";function we(e,t=globalThis.Deno?globalThis.Deno.args:Vn.argv){let r=e.startsWith("-")?"":e.length===1?"-":"--",n=t.indexOf(r+e),o=t.indexOf("--");return n!==-1&&(o===-1||n<o)}var{env:ee}=Vn,Cr;we("no-color")||we("no-colors")||we("color=false")||we("color=never")?Cr=0:(we("color")||we("colors")||we("color=true")||we("color=always"))&&(Cr=1);function Af(){if("FORCE_COLOR"in ee)return ee.FORCE_COLOR==="true"?1:ee.FORCE_COLOR==="false"?0:ee.FORCE_COLOR.length===0?1:Math.min(Number.parseInt(ee.FORCE_COLOR,10),3)}function Sf(e){return e===0?!1:{level:e,hasBasic:!0,has256:e>=2,has16m:e>=3}}function Rf(e,{streamIsTTY:t,sniffFlags:r=!0}={}){let n=Af();n!==void 0&&(Cr=n);let o=r?Cr:n;if(o===0)return 0;if(r){if(we("color=16m")||we("color=full")||we("color=truecolor"))return 3;if(we("color=256"))return 2}if("TF_BUILD"in ee&&"AGENT_NAME"in ee)return 1;if(e&&!t&&o===void 0)return 0;let i=o||0;if(ee.TERM==="dumb")return i;if(Vn.platform==="win32"){let s=Cf.release().split(".");return Number(s[0])>=10&&Number(s[2])>=10586?Number(s[2])>=14931?3:2:1}if("CI"in ee)return["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some(s=>s in ee)?3:["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some(s=>s in ee)||ee.CI_NAME==="codeship"?1:i;if("TEAMCITY_VERSION"in ee)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(ee.TEAMCITY_VERSION)?1:0;if(ee.COLORTERM==="truecolor"||ee.TERM==="xterm-kitty")return 3;if("TERM_PROGRAM"in ee){let s=Number.parseInt((ee.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(ee.TERM_PROGRAM){case"iTerm.app":return s>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(ee.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(ee.TERM)||"COLORTERM"in ee?1:i}function Qs(e,t={}){let r=Rf(e,{streamIsTTY:e&&e.isTTY,...t});return Sf(r)}var Of={stdout:Qs({isTTY:zs.isatty(1)}),stderr:Qs({isTTY:zs.isatty(2)})},Js=Of;function Zs(e,t,r){let n=e.indexOf(t);if(n===-1)return e;let o=t.length,i=0,s="";do s+=e.slice(i,n)+t+r,i=n+o,n=e.indexOf(t,i);while(n!==-1);return s+=e.slice(i),s}function ea(e,t,r,n){let o=0,i="";do{let s=e[n-1]==="\r";i+=e.slice(o,s?n-1:n)+t+(s?`\r
|
|
32
|
+
`:`
|
|
33
|
+
`)+r,o=n+1,n=e.indexOf(`
|
|
34
|
+
`,o)}while(n!==-1);return i+=e.slice(o),i}var{stdout:ta,stderr:ra}=Js,Gn=Symbol("GENERATOR"),Et=Symbol("STYLER"),Yt=Symbol("IS_EMPTY"),na=["ansi","ansi","ansi256","ansi16m"],kt=Object.create(null),Tf=(e,t={})=>{if(t.level&&!(Number.isInteger(t.level)&&t.level>=0&&t.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let r=ta?ta.level:0;e.level=t.level===void 0?r:t.level};var Pf=e=>{let t=(...r)=>r.join(" ");return Tf(t,e),Object.setPrototypeOf(t,Kt.prototype),t};function Kt(e){return Pf(e)}Object.setPrototypeOf(Kt.prototype,Function.prototype);for(let[e,t]of Object.entries(Te))kt[e]={get(){let r=Ar(this,Wn(t.open,t.close,this[Et]),this[Yt]);return Object.defineProperty(this,e,{value:r}),r}};kt.visible={get(){let e=Ar(this,this[Et],!0);return Object.defineProperty(this,"visible",{value:e}),e}};var Un=(e,t,r,...n)=>e==="rgb"?t==="ansi16m"?Te[r].ansi16m(...n):t==="ansi256"?Te[r].ansi256(Te.rgbToAnsi256(...n)):Te[r].ansi(Te.rgbToAnsi(...n)):e==="hex"?Un("rgb",t,r,...Te.hexToRgb(...n)):Te[r][e](...n),$f=["rgb","hex","ansi256"];for(let e of $f){kt[e]={get(){let{level:r}=this;return function(...n){let o=Wn(Un(e,na[r],"color",...n),Te.color.close,this[Et]);return Ar(this,o,this[Yt])}}};let t="bg"+e[0].toUpperCase()+e.slice(1);kt[t]={get(){let{level:r}=this;return function(...n){let o=Wn(Un(e,na[r],"bgColor",...n),Te.bgColor.close,this[Et]);return Ar(this,o,this[Yt])}}}}var Df=Object.defineProperties(()=>{},{...kt,level:{enumerable:!0,get(){return this[Gn].level},set(e){this[Gn].level=e}}}),Wn=(e,t,r)=>{let n,o;return r===void 0?(n=e,o=t):(n=r.openAll+e,o=t+r.closeAll),{open:e,close:t,openAll:n,closeAll:o,parent:r}},Ar=(e,t,r)=>{let n=(...o)=>Nf(n,o.length===1?""+o[0]:o.join(" "));return Object.setPrototypeOf(n,Df),n[Gn]=e,n[Et]=t,n[Yt]=r,n},Nf=(e,t)=>{if(e.level<=0||!t)return e[Yt]?"":t;let r=e[Et];if(r===void 0)return t;let{openAll:n,closeAll:o}=r;if(t.includes("\x1B"))for(;r!==void 0;)t=Zs(t,r.close,r.open),r=r.parent;let i=t.indexOf(`
|
|
35
|
+
`);return i!==-1&&(t=ea(t,o,n,i)),n+t+o};Object.defineProperties(Kt.prototype,kt);var Lf=Kt(),Nx=Kt({level:ra?ra.level:0});var f=Lf;var ga=qt(ma(),1),{program:Gx,createCommand:Ux,createArgument:Wx,createOption:qx,CommanderError:Yx,InvalidArgumentError:Kx,InvalidOptionArgumentError:Xx,Command:ya,Argument:zx,Option:Qx,Help:Jx}=ga.default;import _r from"fs-extra";import Wt from"path";var Ta=qt(wa(),1);import yh from"chokidar";import Dr from"fs-extra";import Zt from"path";import ht from"fs-extra";import Qt from"path";var po=class{constructor(){this.level="info";this.verbose=!1}setLevel(t){this.level=t}setVerbose(t){this.verbose=t}shouldLog(t){let r={error:0,warn:1,info:2,debug:3};return t==="debug"&&this.verbose?!0:r[t]<=r[this.level]}getTypeStyle(t){switch(t){case"success":return f.green;case"error":return f.red;case"warning":return f.yellow;case"info":return f.blue;case"instruction":return f.cyan;case"progress":return f.reset;case"debug":return f.gray;case"raclette":return f.rgb(221,139,64);default:return r=>r}}getTypeIcon(t){switch(t){case"success":return"\u2705";case"error":return"\u274C";case"warning":return"\u26A0\uFE0F";case"info":return"\u2139\uFE0F";case"instruction":return"\u{1F4A1}";case"progress":return"\u{1F504}";case"debug":return"";case"raclette":return"\u{1F9C0}";default:return""}}log(t,r,n){if(!this.shouldLog(t))return;let o=n?this.getTypeStyle(n):f.reset,i=n?this.getTypeIcon(n):"",s=i?`${i} `:"";console.log(o(`${s}${r}`))}logError(t,r){if(!this.shouldLog("error"))return;let n=this.getTypeStyle("error"),o=this.getTypeIcon("error"),i=o?`${o} `:"";r?console.error(n(`${i}${t}`),r):console.error(n(`${i}${t}`))}error(t,r){this.logError(t,r)}warn(t){this.log("warn",t,"warning")}info(t){this.log("info",t,"info")}debug(t){this.log("debug",t,"debug")}success(t){this.log("info",t,"success")}instruction(t){this.log("info",t,"instruction")}progress(t){this.log("info",t,"progress")}raclette(t){this.log("info",t,"raclette")}raw(t,r="info"){this.shouldLog(r)&&console.log(t)}},h=new po;var Ca=async(e,t)=>{try{await ht.ensureDir(Qt.dirname(e)),await ht.pathExists(e)&&(await ht.stat(e)).isDirectory()&&(console.warn(f.yellow(`\u26A0\uFE0F Removing directory at ${e} to create file`)),await ht.remove(e)),await ht.writeFile(e,t)}catch(r){throw h.error(` Error writing file ${e}: ${r.message}`),r}},Pr=async(e,t)=>{h.debug("Generating service configuration files...");let r=Qt.join(t,"backend"),n=Qt.join(t,"frontend");await ht.ensureDir(r),await ht.ensureDir(n);let o={name:e.name,env:e.env,modules:e.modules,plugins:e.plugins,global:e.global},i={...o,service:"backend",...e.backend},s=`
|
|
36
|
+
// Generated Raclette Backend Configuration
|
|
37
|
+
// This file is auto-generated, do not edit directly
|
|
38
|
+
|
|
39
|
+
export const racletteConfig = ${JSON.stringify(i,null,2)};
|
|
40
|
+
|
|
41
|
+
export default racletteConfig;
|
|
42
|
+
`;await Ca(Qt.join(r,"raclette.config.js"),s);let a={...o,service:"frontend",...e.frontend},c=`
|
|
43
|
+
// Generated Raclette Frontend Configuration
|
|
44
|
+
// This file is auto-generated, do not edit directly
|
|
45
|
+
|
|
46
|
+
export const racletteConfig = ${JSON.stringify(a,null,2)};
|
|
47
|
+
|
|
48
|
+
export default racletteConfig;
|
|
49
|
+
`;await Ca(Qt.join(n,"raclette.config.js"),c),console.log(f.green("\u2705 Service configuration files generated"))};function G(e){return e!=null&&typeof e=="object"&&e["@@functional/placeholder"]===!0}function Fe(e){return function t(r){return arguments.length===0||G(r)?t:e.apply(this,arguments)}}function Me(e){return function t(r,n){switch(arguments.length){case 0:return t;case 1:return G(r)?t:Fe(function(o){return e(r,o)});default:return G(r)&&G(n)?t:G(r)?Fe(function(o){return e(o,n)}):G(n)?Fe(function(o){return e(r,o)}):e(r,n)}}}function Jt(e){return function t(r,n,o){switch(arguments.length){case 0:return t;case 1:return G(r)?t:Me(function(i,s){return e(r,i,s)});case 2:return G(r)&&G(n)?t:G(r)?Me(function(i,s){return e(i,n,s)}):G(n)?Me(function(i,s){return e(r,i,s)}):Fe(function(i){return e(r,n,i)});default:return G(r)&&G(n)&&G(o)?t:G(r)&&G(n)?Me(function(i,s){return e(i,s,o)}):G(r)&&G(o)?Me(function(i,s){return e(i,n,s)}):G(n)&&G(o)?Me(function(i,s){return e(r,i,s)}):G(r)?Fe(function(i){return e(i,n,o)}):G(n)?Fe(function(i){return e(r,i,o)}):G(o)?Fe(function(i){return e(r,n,i)}):e(r,n,o)}}}function wt(e,t){return Object.prototype.hasOwnProperty.call(t,e)}function $r(e){return Object.prototype.toString.call(e)==="[object Object]"}var hh=Jt(function(t,r,n){var o={},i;r=r||{},n=n||{};for(i in r)wt(i,r)&&(o[i]=wt(i,n)?t(i,r[i],n[i]):r[i]);for(i in n)wt(i,n)&&!wt(i,o)&&(o[i]=n[i]);return o}),Aa=hh;var mh=Jt(function e(t,r,n){return Aa(function(o,i,s){return $r(i)&&$r(s)?e(t,i,s):t(o,i,s)},r,n)}),Sa=mh;var gh=Me(function(t,r){return Sa(function(n,o,i){return i},t,r)}),mt=gh;var Ra={name:"raclette-app",services:{frontend:{enabled:!0,port:8081,installPackages:[]},backend:{enabled:!0,port:8082,enableDebug:!1,installPackages:[]},mongodb:{enabled:!0,port:27017},cache:{enabled:!0,port:6379},workbench:{enabled:!1,frontendPort:8083,backendPort:8084}},modules:[],plugins:[],env:{development:{},production:{NODE_ENV:"production"}},global:{requireAuthentication:!0},frontend:{framework:"vue",i18n:{locales:["en-EU"],priorities:{app:10,".":30}},vue:{plugins:[]}},backend:{sockets:{autoSend:{compositions:!0,interactionLinks:!0,projectConfig:!0},security:{requireAuth:!0,tokenValidation:"jwt"},options:{adapter:"memory",connectionTimeout:3e3,pingInterval:1500,pingTimeout:1e3}}},sourceDirectories:[],packageMerging:{frontend:[{file:"./packages.json",key:"frontend"}],backend:[{file:"./packages.json",key:"backend"}]},lockFiles:{frontend:"./app.frontend.yarn.lock",backend:"./app.backend.yarn.lock"}},bh=async e=>{let t=e==="production"?".env.production":".env",r=Zt.join(process.cwd(),t);if(process.env.RACLETTE_APP_PATH||(process.env.RACLETTE_APP_PATH=process.cwd()),await Dr.pathExists(r)){let n=await Dr.readFile(r,"utf-8"),o=Ta.parse(n);return Object.entries(o).forEach(([i,s])=>{process.env[i]=s}),console.log(f.blue(`\u{1F4C4} Loaded ${Object.keys(o).length} environment variables from ${t}`)),{...o,RACLETTE_APP_PATH:process.env.RACLETTE_APP_PATH}}return{}},Oa=async e=>{try{let{pathToFileURL:t}=await import("url"),n=`${t(e).href}?t=${Date.now()}`;I.cache[e]&&delete I.cache[e];let o=await import(n);return o.default||o}catch(t){throw console.error(f.red(`Error loading config from ${e}:`),t),t}},Nr=e=>{if(typeof e=="string"){if(e==="true")return!0;if(e==="false")return!1;if(/^\d+$/.test(e)){let t=Number(e);if(!isNaN(t))return t}if(/^\d+\.\d+$/.test(e)){let t=Number(e);if(!isNaN(t))return t}return e}if(Array.isArray(e))return e.map(t=>Nr(t));if(e&&typeof e=="object"){let t={};for(let[r,n]of Object.entries(e))t[r]=Nr(n);return t}return e},Pe=async(e="",t="development")=>{let r=Zt.join(process.cwd(),"raclette.config.js"),n=Zt.join(process.cwd(),".raclette");if(!await Dr.pathExists(r))return console.warn("No raclette.config.js found, using default configuration"),Ra;let o=await bh(t),i=await Oa(r),s=Nr(i),a={env:{}};if(e){let l=await Oa(e);a=Nr(l)}let c=mt(mt(Ra,s),mt(a,{env:{[t]:o}}));return await vh(c,n),await Pr(c,n),c},vh=async(e,t)=>{let r=`// Generated Raclette Configuration
|
|
50
|
+
// This file is auto-generated from the merged configuration
|
|
51
|
+
// Do not edit directly
|
|
52
|
+
|
|
53
|
+
export default ${JSON.stringify(e,null,2)};
|
|
54
|
+
`;await Dr.writeFile(Zt.join(t,"raclette.config.js"),r),console.log(f.green("\u2705 Raclette Configuration file generated"))},Pa=()=>{let e=Zt.join(process.cwd(),"raclette.config.js");h.progress(`\u{1F50D} Watching for changes in original config: ${e}`);let t=yh.watch(e,{ignored:/(^|[/\\])\../,persistent:!0});return t.on("change",async r=>{h.progress(`\u{1F4DD} Original config file changed: ${r}`);try{await Pe()}catch(n){h.error("Error reloading configuration: "+n.message)}}),()=>t.close()};import{spawn as Fs}from"child_process";import yr,{pathExists as Rk}from"fs-extra";import Ne from"path";import Ur from"fs-extra";function Ya(e){return typeof e>"u"||e===null}function _h(e){return typeof e=="object"&&e!==null}function Eh(e){return Array.isArray(e)?e:Ya(e)?[]:[e]}function kh(e,t){var r,n,o,i;if(t)for(i=Object.keys(t),r=0,n=i.length;r<n;r+=1)o=i[r],e[o]=t[o];return e}function xh(e,t){var r="",n;for(n=0;n<t;n+=1)r+=e;return r}function wh(e){return e===0&&Number.NEGATIVE_INFINITY===1/e}var Ch=Ya,Ah=_h,Sh=Eh,Rh=xh,Oh=wh,Th=kh,ae={isNothing:Ch,isObject:Ah,toArray:Sh,repeat:Rh,isNegativeZero:Oh,extend:Th};function Ka(e,t){var r="",n=e.reason||"(unknown reason)";return e.mark?(e.mark.name&&(r+='in "'+e.mark.name+'" '),r+="("+(e.mark.line+1)+":"+(e.mark.column+1)+")",!t&&e.mark.snippet&&(r+=`
|
|
55
|
+
|
|
56
|
+
`+e.mark.snippet),n+" "+r):n}function tr(e,t){Error.call(this),this.name="YAMLException",this.reason=e,this.mark=t,this.message=Ka(this,!1),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||""}tr.prototype=Object.create(Error.prototype);tr.prototype.constructor=tr;tr.prototype.toString=function(t){return this.name+": "+Ka(this,t)};var ge=tr;function fo(e,t,r,n,o){var i="",s="",a=Math.floor(o/2)-1;return n-t>a&&(i=" ... ",t=n-a+i.length),r-n>a&&(s=" ...",r=n+a-s.length),{str:i+e.slice(t,r).replace(/\t/g,"\u2192")+s,pos:n-t+i.length}}function ho(e,t){return ae.repeat(" ",t-e.length)+e}function Ph(e,t){if(t=Object.create(t||null),!e.buffer)return null;t.maxLength||(t.maxLength=79),typeof t.indent!="number"&&(t.indent=1),typeof t.linesBefore!="number"&&(t.linesBefore=3),typeof t.linesAfter!="number"&&(t.linesAfter=2);for(var r=/\r?\n|\r|\0/g,n=[0],o=[],i,s=-1;i=r.exec(e.buffer);)o.push(i.index),n.push(i.index+i[0].length),e.position<=i.index&&s<0&&(s=n.length-2);s<0&&(s=n.length-1);var a="",c,l,u=Math.min(e.line+t.linesAfter,o.length).toString().length,p=t.maxLength-(t.indent+u+3);for(c=1;c<=t.linesBefore&&!(s-c<0);c++)l=fo(e.buffer,n[s-c],o[s-c],e.position-(n[s]-n[s-c]),p),a=ae.repeat(" ",t.indent)+ho((e.line-c+1).toString(),u)+" | "+l.str+`
|
|
57
|
+
`+a;for(l=fo(e.buffer,n[s],o[s],e.position,p),a+=ae.repeat(" ",t.indent)+ho((e.line+1).toString(),u)+" | "+l.str+`
|
|
58
|
+
`,a+=ae.repeat("-",t.indent+u+3+l.pos)+`^
|
|
59
|
+
`,c=1;c<=t.linesAfter&&!(s+c>=o.length);c++)l=fo(e.buffer,n[s+c],o[s+c],e.position-(n[s]-n[s+c]),p),a+=ae.repeat(" ",t.indent)+ho((e.line+c+1).toString(),u)+" | "+l.str+`
|
|
60
|
+
`;return a.replace(/\n$/,"")}var $h=Ph,Dh=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],Nh=["scalar","sequence","mapping"];function Lh(e){var t={};return e!==null&&Object.keys(e).forEach(function(r){e[r].forEach(function(n){t[String(n)]=r})}),t}function Ih(e,t){if(t=t||{},Object.keys(t).forEach(function(r){if(Dh.indexOf(r)===-1)throw new ge('Unknown option "'+r+'" is met in definition of "'+e+'" YAML type.')}),this.options=t,this.tag=e,this.kind=t.kind||null,this.resolve=t.resolve||function(){return!0},this.construct=t.construct||function(r){return r},this.instanceOf=t.instanceOf||null,this.predicate=t.predicate||null,this.represent=t.represent||null,this.representName=t.representName||null,this.defaultStyle=t.defaultStyle||null,this.multi=t.multi||!1,this.styleAliases=Lh(t.styleAliases||null),Nh.indexOf(this.kind)===-1)throw new ge('Unknown kind "'+this.kind+'" is specified for "'+e+'" YAML type.')}var ue=Ih;function $a(e,t){var r=[];return e[t].forEach(function(n){var o=r.length;r.forEach(function(i,s){i.tag===n.tag&&i.kind===n.kind&&i.multi===n.multi&&(o=s)}),r[o]=n}),r}function jh(){var e={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}},t,r;function n(o){o.multi?(e.multi[o.kind].push(o),e.multi.fallback.push(o)):e[o.kind][o.tag]=e.fallback[o.tag]=o}for(t=0,r=arguments.length;t<r;t+=1)arguments[t].forEach(n);return e}function go(e){return this.extend(e)}go.prototype.extend=function(t){var r=[],n=[];if(t instanceof ue)n.push(t);else if(Array.isArray(t))n=n.concat(t);else if(t&&(Array.isArray(t.implicit)||Array.isArray(t.explicit)))t.implicit&&(r=r.concat(t.implicit)),t.explicit&&(n=n.concat(t.explicit));else throw new ge("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");r.forEach(function(i){if(!(i instanceof ue))throw new ge("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(i.loadKind&&i.loadKind!=="scalar")throw new ge("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(i.multi)throw new ge("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")}),n.forEach(function(i){if(!(i instanceof ue))throw new ge("Specified list of YAML types (or a single Type object) contains a non-Type object.")});var o=Object.create(go.prototype);return o.implicit=(this.implicit||[]).concat(r),o.explicit=(this.explicit||[]).concat(n),o.compiledImplicit=$a(o,"implicit"),o.compiledExplicit=$a(o,"explicit"),o.compiledTypeMap=jh(o.compiledImplicit,o.compiledExplicit),o};var Xa=go,za=new ue("tag:yaml.org,2002:str",{kind:"scalar",construct:function(e){return e!==null?e:""}}),Qa=new ue("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(e){return e!==null?e:[]}}),Ja=new ue("tag:yaml.org,2002:map",{kind:"mapping",construct:function(e){return e!==null?e:{}}}),Za=new Xa({explicit:[za,Qa,Ja]});function Fh(e){if(e===null)return!0;var t=e.length;return t===1&&e==="~"||t===4&&(e==="null"||e==="Null"||e==="NULL")}function Mh(){return null}function Bh(e){return e===null}var ec=new ue("tag:yaml.org,2002:null",{kind:"scalar",resolve:Fh,construct:Mh,predicate:Bh,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"},empty:function(){return""}},defaultStyle:"lowercase"});function Hh(e){if(e===null)return!1;var t=e.length;return t===4&&(e==="true"||e==="True"||e==="TRUE")||t===5&&(e==="false"||e==="False"||e==="FALSE")}function Vh(e){return e==="true"||e==="True"||e==="TRUE"}function Gh(e){return Object.prototype.toString.call(e)==="[object Boolean]"}var tc=new ue("tag:yaml.org,2002:bool",{kind:"scalar",resolve:Hh,construct:Vh,predicate:Gh,represent:{lowercase:function(e){return e?"true":"false"},uppercase:function(e){return e?"TRUE":"FALSE"},camelcase:function(e){return e?"True":"False"}},defaultStyle:"lowercase"});function Uh(e){return 48<=e&&e<=57||65<=e&&e<=70||97<=e&&e<=102}function Wh(e){return 48<=e&&e<=55}function qh(e){return 48<=e&&e<=57}function Yh(e){if(e===null)return!1;var t=e.length,r=0,n=!1,o;if(!t)return!1;if(o=e[r],(o==="-"||o==="+")&&(o=e[++r]),o==="0"){if(r+1===t)return!0;if(o=e[++r],o==="b"){for(r++;r<t;r++)if(o=e[r],o!=="_"){if(o!=="0"&&o!=="1")return!1;n=!0}return n&&o!=="_"}if(o==="x"){for(r++;r<t;r++)if(o=e[r],o!=="_"){if(!Uh(e.charCodeAt(r)))return!1;n=!0}return n&&o!=="_"}if(o==="o"){for(r++;r<t;r++)if(o=e[r],o!=="_"){if(!Wh(e.charCodeAt(r)))return!1;n=!0}return n&&o!=="_"}}if(o==="_")return!1;for(;r<t;r++)if(o=e[r],o!=="_"){if(!qh(e.charCodeAt(r)))return!1;n=!0}return!(!n||o==="_")}function Kh(e){var t=e,r=1,n;if(t.indexOf("_")!==-1&&(t=t.replace(/_/g,"")),n=t[0],(n==="-"||n==="+")&&(n==="-"&&(r=-1),t=t.slice(1),n=t[0]),t==="0")return 0;if(n==="0"){if(t[1]==="b")return r*parseInt(t.slice(2),2);if(t[1]==="x")return r*parseInt(t.slice(2),16);if(t[1]==="o")return r*parseInt(t.slice(2),8)}return r*parseInt(t,10)}function Xh(e){return Object.prototype.toString.call(e)==="[object Number]"&&e%1===0&&!ae.isNegativeZero(e)}var rc=new ue("tag:yaml.org,2002:int",{kind:"scalar",resolve:Yh,construct:Kh,predicate:Xh,represent:{binary:function(e){return e>=0?"0b"+e.toString(2):"-0b"+e.toString(2).slice(1)},octal:function(e){return e>=0?"0o"+e.toString(8):"-0o"+e.toString(8).slice(1)},decimal:function(e){return e.toString(10)},hexadecimal:function(e){return e>=0?"0x"+e.toString(16).toUpperCase():"-0x"+e.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),zh=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function Qh(e){return!(e===null||!zh.test(e)||e[e.length-1]==="_")}function Jh(e){var t,r;return t=e.replace(/_/g,"").toLowerCase(),r=t[0]==="-"?-1:1,"+-".indexOf(t[0])>=0&&(t=t.slice(1)),t===".inf"?r===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:t===".nan"?NaN:r*parseFloat(t,10)}var Zh=/^[-+]?[0-9]+e/;function em(e,t){var r;if(isNaN(e))switch(t){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===e)switch(t){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===e)switch(t){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(ae.isNegativeZero(e))return"-0.0";return r=e.toString(10),Zh.test(r)?r.replace("e",".e"):r}function tm(e){return Object.prototype.toString.call(e)==="[object Number]"&&(e%1!==0||ae.isNegativeZero(e))}var nc=new ue("tag:yaml.org,2002:float",{kind:"scalar",resolve:Qh,construct:Jh,predicate:tm,represent:em,defaultStyle:"lowercase"}),oc=Za.extend({implicit:[ec,tc,rc,nc]}),ic=oc,sc=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),ac=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");function rm(e){return e===null?!1:sc.exec(e)!==null||ac.exec(e)!==null}function nm(e){var t,r,n,o,i,s,a,c=0,l=null,u,p,d;if(t=sc.exec(e),t===null&&(t=ac.exec(e)),t===null)throw new Error("Date resolve error");if(r=+t[1],n=+t[2]-1,o=+t[3],!t[4])return new Date(Date.UTC(r,n,o));if(i=+t[4],s=+t[5],a=+t[6],t[7]){for(c=t[7].slice(0,3);c.length<3;)c+="0";c=+c}return t[9]&&(u=+t[10],p=+(t[11]||0),l=(u*60+p)*6e4,t[9]==="-"&&(l=-l)),d=new Date(Date.UTC(r,n,o,i,s,a,c)),l&&d.setTime(d.getTime()-l),d}function om(e){return e.toISOString()}var cc=new ue("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:rm,construct:nm,instanceOf:Date,represent:om});function im(e){return e==="<<"||e===null}var lc=new ue("tag:yaml.org,2002:merge",{kind:"scalar",resolve:im}),Eo=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=
|
|
61
|
+
\r`;function sm(e){if(e===null)return!1;var t,r,n=0,o=e.length,i=Eo;for(r=0;r<o;r++)if(t=i.indexOf(e.charAt(r)),!(t>64)){if(t<0)return!1;n+=6}return n%8===0}function am(e){var t,r,n=e.replace(/[\r\n=]/g,""),o=n.length,i=Eo,s=0,a=[];for(t=0;t<o;t++)t%4===0&&t&&(a.push(s>>16&255),a.push(s>>8&255),a.push(s&255)),s=s<<6|i.indexOf(n.charAt(t));return r=o%4*6,r===0?(a.push(s>>16&255),a.push(s>>8&255),a.push(s&255)):r===18?(a.push(s>>10&255),a.push(s>>2&255)):r===12&&a.push(s>>4&255),new Uint8Array(a)}function cm(e){var t="",r=0,n,o,i=e.length,s=Eo;for(n=0;n<i;n++)n%3===0&&n&&(t+=s[r>>18&63],t+=s[r>>12&63],t+=s[r>>6&63],t+=s[r&63]),r=(r<<8)+e[n];return o=i%3,o===0?(t+=s[r>>18&63],t+=s[r>>12&63],t+=s[r>>6&63],t+=s[r&63]):o===2?(t+=s[r>>10&63],t+=s[r>>4&63],t+=s[r<<2&63],t+=s[64]):o===1&&(t+=s[r>>2&63],t+=s[r<<4&63],t+=s[64],t+=s[64]),t}function lm(e){return Object.prototype.toString.call(e)==="[object Uint8Array]"}var uc=new ue("tag:yaml.org,2002:binary",{kind:"scalar",resolve:sm,construct:am,predicate:lm,represent:cm}),um=Object.prototype.hasOwnProperty,pm=Object.prototype.toString;function dm(e){if(e===null)return!0;var t=[],r,n,o,i,s,a=e;for(r=0,n=a.length;r<n;r+=1){if(o=a[r],s=!1,pm.call(o)!=="[object Object]")return!1;for(i in o)if(um.call(o,i))if(!s)s=!0;else return!1;if(!s)return!1;if(t.indexOf(i)===-1)t.push(i);else return!1}return!0}function fm(e){return e!==null?e:[]}var pc=new ue("tag:yaml.org,2002:omap",{kind:"sequence",resolve:dm,construct:fm}),hm=Object.prototype.toString;function mm(e){if(e===null)return!0;var t,r,n,o,i,s=e;for(i=new Array(s.length),t=0,r=s.length;t<r;t+=1){if(n=s[t],hm.call(n)!=="[object Object]"||(o=Object.keys(n),o.length!==1))return!1;i[t]=[o[0],n[o[0]]]}return!0}function gm(e){if(e===null)return[];var t,r,n,o,i,s=e;for(i=new Array(s.length),t=0,r=s.length;t<r;t+=1)n=s[t],o=Object.keys(n),i[t]=[o[0],n[o[0]]];return i}var dc=new ue("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:mm,construct:gm}),ym=Object.prototype.hasOwnProperty;function bm(e){if(e===null)return!0;var t,r=e;for(t in r)if(ym.call(r,t)&&r[t]!==null)return!1;return!0}function vm(e){return e!==null?e:{}}var fc=new ue("tag:yaml.org,2002:set",{kind:"mapping",resolve:bm,construct:vm}),ko=ic.extend({implicit:[cc,lc],explicit:[uc,pc,dc,fc]}),nt=Object.prototype.hasOwnProperty,Lr=1,hc=2,mc=3,Ir=4,mo=1,_m=2,Da=3,Em=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,km=/[\x85\u2028\u2029]/,xm=/[,\[\]\{\}]/,gc=/^(?:!|!!|![a-z\-]+!)$/i,yc=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function Na(e){return Object.prototype.toString.call(e)}function Be(e){return e===10||e===13}function yt(e){return e===9||e===32}function be(e){return e===9||e===32||e===10||e===13}function At(e){return e===44||e===91||e===93||e===123||e===125}function wm(e){var t;return 48<=e&&e<=57?e-48:(t=e|32,97<=t&&t<=102?t-97+10:-1)}function Cm(e){return e===120?2:e===117?4:e===85?8:0}function Am(e){return 48<=e&&e<=57?e-48:-1}function La(e){return e===48?"\0":e===97?"\x07":e===98?"\b":e===116||e===9?" ":e===110?`
|
|
62
|
+
`:e===118?"\v":e===102?"\f":e===114?"\r":e===101?"\x1B":e===32?" ":e===34?'"':e===47?"/":e===92?"\\":e===78?"\x85":e===95?"\xA0":e===76?"\u2028":e===80?"\u2029":""}function Sm(e){return e<=65535?String.fromCharCode(e):String.fromCharCode((e-65536>>10)+55296,(e-65536&1023)+56320)}var bc=new Array(256),vc=new Array(256);for(gt=0;gt<256;gt++)bc[gt]=La(gt)?1:0,vc[gt]=La(gt);var gt;function Rm(e,t){this.input=e,this.filename=t.filename||null,this.schema=t.schema||ko,this.onWarning=t.onWarning||null,this.legacy=t.legacy||!1,this.json=t.json||!1,this.listener=t.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function _c(e,t){var r={name:e.filename,buffer:e.input.slice(0,-1),position:e.position,line:e.line,column:e.position-e.lineStart};return r.snippet=$h(r),new ge(t,r)}function A(e,t){throw _c(e,t)}function jr(e,t){e.onWarning&&e.onWarning.call(null,_c(e,t))}var Ia={YAML:function(t,r,n){var o,i,s;t.version!==null&&A(t,"duplication of %YAML directive"),n.length!==1&&A(t,"YAML directive accepts exactly one argument"),o=/^([0-9]+)\.([0-9]+)$/.exec(n[0]),o===null&&A(t,"ill-formed argument of the YAML directive"),i=parseInt(o[1],10),s=parseInt(o[2],10),i!==1&&A(t,"unacceptable YAML version of the document"),t.version=n[0],t.checkLineBreaks=s<2,s!==1&&s!==2&&jr(t,"unsupported YAML version of the document")},TAG:function(t,r,n){var o,i;n.length!==2&&A(t,"TAG directive accepts exactly two arguments"),o=n[0],i=n[1],gc.test(o)||A(t,"ill-formed tag handle (first argument) of the TAG directive"),nt.call(t.tagMap,o)&&A(t,'there is a previously declared suffix for "'+o+'" tag handle'),yc.test(i)||A(t,"ill-formed tag prefix (second argument) of the TAG directive");try{i=decodeURIComponent(i)}catch{A(t,"tag prefix is malformed: "+i)}t.tagMap[o]=i}};function rt(e,t,r,n){var o,i,s,a;if(t<r){if(a=e.input.slice(t,r),n)for(o=0,i=a.length;o<i;o+=1)s=a.charCodeAt(o),s===9||32<=s&&s<=1114111||A(e,"expected valid JSON character");else Em.test(a)&&A(e,"the stream contains non-printable characters");e.result+=a}}function ja(e,t,r,n){var o,i,s,a;for(ae.isObject(r)||A(e,"cannot merge mappings; the provided source object is unacceptable"),o=Object.keys(r),s=0,a=o.length;s<a;s+=1)i=o[s],nt.call(t,i)||(t[i]=r[i],n[i]=!0)}function St(e,t,r,n,o,i,s,a,c){var l,u;if(Array.isArray(o))for(o=Array.prototype.slice.call(o),l=0,u=o.length;l<u;l+=1)Array.isArray(o[l])&&A(e,"nested arrays are not supported inside keys"),typeof o=="object"&&Na(o[l])==="[object Object]"&&(o[l]="[object Object]");if(typeof o=="object"&&Na(o)==="[object Object]"&&(o="[object Object]"),o=String(o),t===null&&(t={}),n==="tag:yaml.org,2002:merge")if(Array.isArray(i))for(l=0,u=i.length;l<u;l+=1)ja(e,t,i[l],r);else ja(e,t,i,r);else!e.json&&!nt.call(r,o)&&nt.call(t,o)&&(e.line=s||e.line,e.lineStart=a||e.lineStart,e.position=c||e.position,A(e,"duplicated mapping key")),o==="__proto__"?Object.defineProperty(t,o,{configurable:!0,enumerable:!0,writable:!0,value:i}):t[o]=i,delete r[o];return t}function xo(e){var t;t=e.input.charCodeAt(e.position),t===10?e.position++:t===13?(e.position++,e.input.charCodeAt(e.position)===10&&e.position++):A(e,"a line break is expected"),e.line+=1,e.lineStart=e.position,e.firstTabInLine=-1}function ne(e,t,r){for(var n=0,o=e.input.charCodeAt(e.position);o!==0;){for(;yt(o);)o===9&&e.firstTabInLine===-1&&(e.firstTabInLine=e.position),o=e.input.charCodeAt(++e.position);if(t&&o===35)do o=e.input.charCodeAt(++e.position);while(o!==10&&o!==13&&o!==0);if(Be(o))for(xo(e),o=e.input.charCodeAt(e.position),n++,e.lineIndent=0;o===32;)e.lineIndent++,o=e.input.charCodeAt(++e.position);else break}return r!==-1&&n!==0&&e.lineIndent<r&&jr(e,"deficient indentation"),n}function Br(e){var t=e.position,r;return r=e.input.charCodeAt(t),!!((r===45||r===46)&&r===e.input.charCodeAt(t+1)&&r===e.input.charCodeAt(t+2)&&(t+=3,r=e.input.charCodeAt(t),r===0||be(r)))}function wo(e,t){t===1?e.result+=" ":t>1&&(e.result+=ae.repeat(`
|
|
63
|
+
`,t-1))}function Om(e,t,r){var n,o,i,s,a,c,l,u,p=e.kind,d=e.result,g;if(g=e.input.charCodeAt(e.position),be(g)||At(g)||g===35||g===38||g===42||g===33||g===124||g===62||g===39||g===34||g===37||g===64||g===96||(g===63||g===45)&&(o=e.input.charCodeAt(e.position+1),be(o)||r&&At(o)))return!1;for(e.kind="scalar",e.result="",i=s=e.position,a=!1;g!==0;){if(g===58){if(o=e.input.charCodeAt(e.position+1),be(o)||r&&At(o))break}else if(g===35){if(n=e.input.charCodeAt(e.position-1),be(n))break}else{if(e.position===e.lineStart&&Br(e)||r&&At(g))break;if(Be(g))if(c=e.line,l=e.lineStart,u=e.lineIndent,ne(e,!1,-1),e.lineIndent>=t){a=!0,g=e.input.charCodeAt(e.position);continue}else{e.position=s,e.line=c,e.lineStart=l,e.lineIndent=u;break}}a&&(rt(e,i,s,!1),wo(e,e.line-c),i=s=e.position,a=!1),yt(g)||(s=e.position+1),g=e.input.charCodeAt(++e.position)}return rt(e,i,s,!1),e.result?!0:(e.kind=p,e.result=d,!1)}function Tm(e,t){var r,n,o;if(r=e.input.charCodeAt(e.position),r!==39)return!1;for(e.kind="scalar",e.result="",e.position++,n=o=e.position;(r=e.input.charCodeAt(e.position))!==0;)if(r===39)if(rt(e,n,e.position,!0),r=e.input.charCodeAt(++e.position),r===39)n=e.position,e.position++,o=e.position;else return!0;else Be(r)?(rt(e,n,o,!0),wo(e,ne(e,!1,t)),n=o=e.position):e.position===e.lineStart&&Br(e)?A(e,"unexpected end of the document within a single quoted scalar"):(e.position++,o=e.position);A(e,"unexpected end of the stream within a single quoted scalar")}function Pm(e,t){var r,n,o,i,s,a;if(a=e.input.charCodeAt(e.position),a!==34)return!1;for(e.kind="scalar",e.result="",e.position++,r=n=e.position;(a=e.input.charCodeAt(e.position))!==0;){if(a===34)return rt(e,r,e.position,!0),e.position++,!0;if(a===92){if(rt(e,r,e.position,!0),a=e.input.charCodeAt(++e.position),Be(a))ne(e,!1,t);else if(a<256&&bc[a])e.result+=vc[a],e.position++;else if((s=Cm(a))>0){for(o=s,i=0;o>0;o--)a=e.input.charCodeAt(++e.position),(s=wm(a))>=0?i=(i<<4)+s:A(e,"expected hexadecimal character");e.result+=Sm(i),e.position++}else A(e,"unknown escape sequence");r=n=e.position}else Be(a)?(rt(e,r,n,!0),wo(e,ne(e,!1,t)),r=n=e.position):e.position===e.lineStart&&Br(e)?A(e,"unexpected end of the document within a double quoted scalar"):(e.position++,n=e.position)}A(e,"unexpected end of the stream within a double quoted scalar")}function $m(e,t){var r=!0,n,o,i,s=e.tag,a,c=e.anchor,l,u,p,d,g,m=Object.create(null),y,k,C,R;if(R=e.input.charCodeAt(e.position),R===91)u=93,g=!1,a=[];else if(R===123)u=125,g=!0,a={};else return!1;for(e.anchor!==null&&(e.anchorMap[e.anchor]=a),R=e.input.charCodeAt(++e.position);R!==0;){if(ne(e,!0,t),R=e.input.charCodeAt(e.position),R===u)return e.position++,e.tag=s,e.anchor=c,e.kind=g?"mapping":"sequence",e.result=a,!0;r?R===44&&A(e,"expected the node content, but found ','"):A(e,"missed comma between flow collection entries"),k=y=C=null,p=d=!1,R===63&&(l=e.input.charCodeAt(e.position+1),be(l)&&(p=d=!0,e.position++,ne(e,!0,t))),n=e.line,o=e.lineStart,i=e.position,Rt(e,t,Lr,!1,!0),k=e.tag,y=e.result,ne(e,!0,t),R=e.input.charCodeAt(e.position),(d||e.line===n)&&R===58&&(p=!0,R=e.input.charCodeAt(++e.position),ne(e,!0,t),Rt(e,t,Lr,!1,!0),C=e.result),g?St(e,a,m,k,y,C,n,o,i):p?a.push(St(e,null,m,k,y,C,n,o,i)):a.push(y),ne(e,!0,t),R=e.input.charCodeAt(e.position),R===44?(r=!0,R=e.input.charCodeAt(++e.position)):r=!1}A(e,"unexpected end of the stream within a flow collection")}function Dm(e,t){var r,n,o=mo,i=!1,s=!1,a=t,c=0,l=!1,u,p;if(p=e.input.charCodeAt(e.position),p===124)n=!1;else if(p===62)n=!0;else return!1;for(e.kind="scalar",e.result="";p!==0;)if(p=e.input.charCodeAt(++e.position),p===43||p===45)mo===o?o=p===43?Da:_m:A(e,"repeat of a chomping mode identifier");else if((u=Am(p))>=0)u===0?A(e,"bad explicit indentation width of a block scalar; it cannot be less than one"):s?A(e,"repeat of an indentation width identifier"):(a=t+u-1,s=!0);else break;if(yt(p)){do p=e.input.charCodeAt(++e.position);while(yt(p));if(p===35)do p=e.input.charCodeAt(++e.position);while(!Be(p)&&p!==0)}for(;p!==0;){for(xo(e),e.lineIndent=0,p=e.input.charCodeAt(e.position);(!s||e.lineIndent<a)&&p===32;)e.lineIndent++,p=e.input.charCodeAt(++e.position);if(!s&&e.lineIndent>a&&(a=e.lineIndent),Be(p)){c++;continue}if(e.lineIndent<a){o===Da?e.result+=ae.repeat(`
|
|
64
|
+
`,i?1+c:c):o===mo&&i&&(e.result+=`
|
|
65
|
+
`);break}for(n?yt(p)?(l=!0,e.result+=ae.repeat(`
|
|
66
|
+
`,i?1+c:c)):l?(l=!1,e.result+=ae.repeat(`
|
|
67
|
+
`,c+1)):c===0?i&&(e.result+=" "):e.result+=ae.repeat(`
|
|
68
|
+
`,c):e.result+=ae.repeat(`
|
|
69
|
+
`,i?1+c:c),i=!0,s=!0,c=0,r=e.position;!Be(p)&&p!==0;)p=e.input.charCodeAt(++e.position);rt(e,r,e.position,!1)}return!0}function Fa(e,t){var r,n=e.tag,o=e.anchor,i=[],s,a=!1,c;if(e.firstTabInLine!==-1)return!1;for(e.anchor!==null&&(e.anchorMap[e.anchor]=i),c=e.input.charCodeAt(e.position);c!==0&&(e.firstTabInLine!==-1&&(e.position=e.firstTabInLine,A(e,"tab characters must not be used in indentation")),!(c!==45||(s=e.input.charCodeAt(e.position+1),!be(s))));){if(a=!0,e.position++,ne(e,!0,-1)&&e.lineIndent<=t){i.push(null),c=e.input.charCodeAt(e.position);continue}if(r=e.line,Rt(e,t,mc,!1,!0),i.push(e.result),ne(e,!0,-1),c=e.input.charCodeAt(e.position),(e.line===r||e.lineIndent>t)&&c!==0)A(e,"bad indentation of a sequence entry");else if(e.lineIndent<t)break}return a?(e.tag=n,e.anchor=o,e.kind="sequence",e.result=i,!0):!1}function Nm(e,t,r){var n,o,i,s,a,c,l=e.tag,u=e.anchor,p={},d=Object.create(null),g=null,m=null,y=null,k=!1,C=!1,R;if(e.firstTabInLine!==-1)return!1;for(e.anchor!==null&&(e.anchorMap[e.anchor]=p),R=e.input.charCodeAt(e.position);R!==0;){if(!k&&e.firstTabInLine!==-1&&(e.position=e.firstTabInLine,A(e,"tab characters must not be used in indentation")),n=e.input.charCodeAt(e.position+1),i=e.line,(R===63||R===58)&&be(n))R===63?(k&&(St(e,p,d,g,m,null,s,a,c),g=m=y=null),C=!0,k=!0,o=!0):k?(k=!1,o=!0):A(e,"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line"),e.position+=1,R=n;else{if(s=e.line,a=e.lineStart,c=e.position,!Rt(e,r,hc,!1,!0))break;if(e.line===i){for(R=e.input.charCodeAt(e.position);yt(R);)R=e.input.charCodeAt(++e.position);if(R===58)R=e.input.charCodeAt(++e.position),be(R)||A(e,"a whitespace character is expected after the key-value separator within a block mapping"),k&&(St(e,p,d,g,m,null,s,a,c),g=m=y=null),C=!0,k=!1,o=!1,g=e.tag,m=e.result;else if(C)A(e,"can not read an implicit mapping pair; a colon is missed");else return e.tag=l,e.anchor=u,!0}else if(C)A(e,"can not read a block mapping entry; a multiline key may not be an implicit key");else return e.tag=l,e.anchor=u,!0}if((e.line===i||e.lineIndent>t)&&(k&&(s=e.line,a=e.lineStart,c=e.position),Rt(e,t,Ir,!0,o)&&(k?m=e.result:y=e.result),k||(St(e,p,d,g,m,y,s,a,c),g=m=y=null),ne(e,!0,-1),R=e.input.charCodeAt(e.position)),(e.line===i||e.lineIndent>t)&&R!==0)A(e,"bad indentation of a mapping entry");else if(e.lineIndent<t)break}return k&&St(e,p,d,g,m,null,s,a,c),C&&(e.tag=l,e.anchor=u,e.kind="mapping",e.result=p),C}function Lm(e){var t,r=!1,n=!1,o,i,s;if(s=e.input.charCodeAt(e.position),s!==33)return!1;if(e.tag!==null&&A(e,"duplication of a tag property"),s=e.input.charCodeAt(++e.position),s===60?(r=!0,s=e.input.charCodeAt(++e.position)):s===33?(n=!0,o="!!",s=e.input.charCodeAt(++e.position)):o="!",t=e.position,r){do s=e.input.charCodeAt(++e.position);while(s!==0&&s!==62);e.position<e.length?(i=e.input.slice(t,e.position),s=e.input.charCodeAt(++e.position)):A(e,"unexpected end of the stream within a verbatim tag")}else{for(;s!==0&&!be(s);)s===33&&(n?A(e,"tag suffix cannot contain exclamation marks"):(o=e.input.slice(t-1,e.position+1),gc.test(o)||A(e,"named tag handle cannot contain such characters"),n=!0,t=e.position+1)),s=e.input.charCodeAt(++e.position);i=e.input.slice(t,e.position),xm.test(i)&&A(e,"tag suffix cannot contain flow indicator characters")}i&&!yc.test(i)&&A(e,"tag name cannot contain such characters: "+i);try{i=decodeURIComponent(i)}catch{A(e,"tag name is malformed: "+i)}return r?e.tag=i:nt.call(e.tagMap,o)?e.tag=e.tagMap[o]+i:o==="!"?e.tag="!"+i:o==="!!"?e.tag="tag:yaml.org,2002:"+i:A(e,'undeclared tag handle "'+o+'"'),!0}function Im(e){var t,r;if(r=e.input.charCodeAt(e.position),r!==38)return!1;for(e.anchor!==null&&A(e,"duplication of an anchor property"),r=e.input.charCodeAt(++e.position),t=e.position;r!==0&&!be(r)&&!At(r);)r=e.input.charCodeAt(++e.position);return e.position===t&&A(e,"name of an anchor node must contain at least one character"),e.anchor=e.input.slice(t,e.position),!0}function jm(e){var t,r,n;if(n=e.input.charCodeAt(e.position),n!==42)return!1;for(n=e.input.charCodeAt(++e.position),t=e.position;n!==0&&!be(n)&&!At(n);)n=e.input.charCodeAt(++e.position);return e.position===t&&A(e,"name of an alias node must contain at least one character"),r=e.input.slice(t,e.position),nt.call(e.anchorMap,r)||A(e,'unidentified alias "'+r+'"'),e.result=e.anchorMap[r],ne(e,!0,-1),!0}function Rt(e,t,r,n,o){var i,s,a,c=1,l=!1,u=!1,p,d,g,m,y,k;if(e.listener!==null&&e.listener("open",e),e.tag=null,e.anchor=null,e.kind=null,e.result=null,i=s=a=Ir===r||mc===r,n&&ne(e,!0,-1)&&(l=!0,e.lineIndent>t?c=1:e.lineIndent===t?c=0:e.lineIndent<t&&(c=-1)),c===1)for(;Lm(e)||Im(e);)ne(e,!0,-1)?(l=!0,a=i,e.lineIndent>t?c=1:e.lineIndent===t?c=0:e.lineIndent<t&&(c=-1)):a=!1;if(a&&(a=l||o),(c===1||Ir===r)&&(Lr===r||hc===r?y=t:y=t+1,k=e.position-e.lineStart,c===1?a&&(Fa(e,k)||Nm(e,k,y))||$m(e,y)?u=!0:(s&&Dm(e,y)||Tm(e,y)||Pm(e,y)?u=!0:jm(e)?(u=!0,(e.tag!==null||e.anchor!==null)&&A(e,"alias node should not have any properties")):Om(e,y,Lr===r)&&(u=!0,e.tag===null&&(e.tag="?")),e.anchor!==null&&(e.anchorMap[e.anchor]=e.result)):c===0&&(u=a&&Fa(e,k))),e.tag===null)e.anchor!==null&&(e.anchorMap[e.anchor]=e.result);else if(e.tag==="?"){for(e.result!==null&&e.kind!=="scalar"&&A(e,'unacceptable node kind for !<?> tag; it should be "scalar", not "'+e.kind+'"'),p=0,d=e.implicitTypes.length;p<d;p+=1)if(m=e.implicitTypes[p],m.resolve(e.result)){e.result=m.construct(e.result),e.tag=m.tag,e.anchor!==null&&(e.anchorMap[e.anchor]=e.result);break}}else if(e.tag!=="!"){if(nt.call(e.typeMap[e.kind||"fallback"],e.tag))m=e.typeMap[e.kind||"fallback"][e.tag];else for(m=null,g=e.typeMap.multi[e.kind||"fallback"],p=0,d=g.length;p<d;p+=1)if(e.tag.slice(0,g[p].tag.length)===g[p].tag){m=g[p];break}m||A(e,"unknown tag !<"+e.tag+">"),e.result!==null&&m.kind!==e.kind&&A(e,"unacceptable node kind for !<"+e.tag+'> tag; it should be "'+m.kind+'", not "'+e.kind+'"'),m.resolve(e.result,e.tag)?(e.result=m.construct(e.result,e.tag),e.anchor!==null&&(e.anchorMap[e.anchor]=e.result)):A(e,"cannot resolve a node with !<"+e.tag+"> explicit tag")}return e.listener!==null&&e.listener("close",e),e.tag!==null||e.anchor!==null||u}function Fm(e){var t=e.position,r,n,o,i=!1,s;for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap=Object.create(null),e.anchorMap=Object.create(null);(s=e.input.charCodeAt(e.position))!==0&&(ne(e,!0,-1),s=e.input.charCodeAt(e.position),!(e.lineIndent>0||s!==37));){for(i=!0,s=e.input.charCodeAt(++e.position),r=e.position;s!==0&&!be(s);)s=e.input.charCodeAt(++e.position);for(n=e.input.slice(r,e.position),o=[],n.length<1&&A(e,"directive name must not be less than one character in length");s!==0;){for(;yt(s);)s=e.input.charCodeAt(++e.position);if(s===35){do s=e.input.charCodeAt(++e.position);while(s!==0&&!Be(s));break}if(Be(s))break;for(r=e.position;s!==0&&!be(s);)s=e.input.charCodeAt(++e.position);o.push(e.input.slice(r,e.position))}s!==0&&xo(e),nt.call(Ia,n)?Ia[n](e,n,o):jr(e,'unknown document directive "'+n+'"')}if(ne(e,!0,-1),e.lineIndent===0&&e.input.charCodeAt(e.position)===45&&e.input.charCodeAt(e.position+1)===45&&e.input.charCodeAt(e.position+2)===45?(e.position+=3,ne(e,!0,-1)):i&&A(e,"directives end mark is expected"),Rt(e,e.lineIndent-1,Ir,!1,!0),ne(e,!0,-1),e.checkLineBreaks&&km.test(e.input.slice(t,e.position))&&jr(e,"non-ASCII line breaks are interpreted as content"),e.documents.push(e.result),e.position===e.lineStart&&Br(e)){e.input.charCodeAt(e.position)===46&&(e.position+=3,ne(e,!0,-1));return}if(e.position<e.length-1)A(e,"end of the stream or a document separator is expected");else return}function Ec(e,t){e=String(e),t=t||{},e.length!==0&&(e.charCodeAt(e.length-1)!==10&&e.charCodeAt(e.length-1)!==13&&(e+=`
|
|
70
|
+
`),e.charCodeAt(0)===65279&&(e=e.slice(1)));var r=new Rm(e,t),n=e.indexOf("\0");for(n!==-1&&(r.position=n,A(r,"null byte is not allowed in input")),r.input+="\0";r.input.charCodeAt(r.position)===32;)r.lineIndent+=1,r.position+=1;for(;r.position<r.length-1;)Fm(r);return r.documents}function Mm(e,t,r){t!==null&&typeof t=="object"&&typeof r>"u"&&(r=t,t=null);var n=Ec(e,r);if(typeof t!="function")return n;for(var o=0,i=n.length;o<i;o+=1)t(n[o])}function Bm(e,t){var r=Ec(e,t);if(r.length!==0){if(r.length===1)return r[0];throw new ge("expected a single document in the stream, but found more")}}var Hm=Mm,Vm=Bm,kc={loadAll:Hm,load:Vm},xc=Object.prototype.toString,wc=Object.prototype.hasOwnProperty,Co=65279,Gm=9,rr=10,Um=13,Wm=32,qm=33,Ym=34,yo=35,Km=37,Xm=38,zm=39,Qm=42,Cc=44,Jm=45,Fr=58,Zm=61,eg=62,tg=63,rg=64,Ac=91,Sc=93,ng=96,Rc=123,og=124,Oc=125,pe={};pe[0]="\\0";pe[7]="\\a";pe[8]="\\b";pe[9]="\\t";pe[10]="\\n";pe[11]="\\v";pe[12]="\\f";pe[13]="\\r";pe[27]="\\e";pe[34]='\\"';pe[92]="\\\\";pe[133]="\\N";pe[160]="\\_";pe[8232]="\\L";pe[8233]="\\P";var ig=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"],sg=/^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/;function ag(e,t){var r,n,o,i,s,a,c;if(t===null)return{};for(r={},n=Object.keys(t),o=0,i=n.length;o<i;o+=1)s=n[o],a=String(t[s]),s.slice(0,2)==="!!"&&(s="tag:yaml.org,2002:"+s.slice(2)),c=e.compiledTypeMap.fallback[s],c&&wc.call(c.styleAliases,a)&&(a=c.styleAliases[a]),r[s]=a;return r}function cg(e){var t,r,n;if(t=e.toString(16).toUpperCase(),e<=255)r="x",n=2;else if(e<=65535)r="u",n=4;else if(e<=4294967295)r="U",n=8;else throw new ge("code point within a string may not be greater than 0xFFFFFFFF");return"\\"+r+ae.repeat("0",n-t.length)+t}var lg=1,nr=2;function ug(e){this.schema=e.schema||ko,this.indent=Math.max(1,e.indent||2),this.noArrayIndent=e.noArrayIndent||!1,this.skipInvalid=e.skipInvalid||!1,this.flowLevel=ae.isNothing(e.flowLevel)?-1:e.flowLevel,this.styleMap=ag(this.schema,e.styles||null),this.sortKeys=e.sortKeys||!1,this.lineWidth=e.lineWidth||80,this.noRefs=e.noRefs||!1,this.noCompatMode=e.noCompatMode||!1,this.condenseFlow=e.condenseFlow||!1,this.quotingType=e.quotingType==='"'?nr:lg,this.forceQuotes=e.forceQuotes||!1,this.replacer=typeof e.replacer=="function"?e.replacer:null,this.implicitTypes=this.schema.compiledImplicit,this.explicitTypes=this.schema.compiledExplicit,this.tag=null,this.result="",this.duplicates=[],this.usedDuplicates=null}function Ma(e,t){for(var r=ae.repeat(" ",t),n=0,o=-1,i="",s,a=e.length;n<a;)o=e.indexOf(`
|
|
71
|
+
`,n),o===-1?(s=e.slice(n),n=a):(s=e.slice(n,o+1),n=o+1),s.length&&s!==`
|
|
72
|
+
`&&(i+=r),i+=s;return i}function bo(e,t){return`
|
|
73
|
+
`+ae.repeat(" ",e.indent*t)}function pg(e,t){var r,n,o;for(r=0,n=e.implicitTypes.length;r<n;r+=1)if(o=e.implicitTypes[r],o.resolve(t))return!0;return!1}function Mr(e){return e===Wm||e===Gm}function or(e){return 32<=e&&e<=126||161<=e&&e<=55295&&e!==8232&&e!==8233||57344<=e&&e<=65533&&e!==Co||65536<=e&&e<=1114111}function Ba(e){return or(e)&&e!==Co&&e!==Um&&e!==rr}function Ha(e,t,r){var n=Ba(e),o=n&&!Mr(e);return(r?n:n&&e!==Cc&&e!==Ac&&e!==Sc&&e!==Rc&&e!==Oc)&&e!==yo&&!(t===Fr&&!o)||Ba(t)&&!Mr(t)&&e===yo||t===Fr&&o}function dg(e){return or(e)&&e!==Co&&!Mr(e)&&e!==Jm&&e!==tg&&e!==Fr&&e!==Cc&&e!==Ac&&e!==Sc&&e!==Rc&&e!==Oc&&e!==yo&&e!==Xm&&e!==Qm&&e!==qm&&e!==og&&e!==Zm&&e!==eg&&e!==zm&&e!==Ym&&e!==Km&&e!==rg&&e!==ng}function fg(e){return!Mr(e)&&e!==Fr}function er(e,t){var r=e.charCodeAt(t),n;return r>=55296&&r<=56319&&t+1<e.length&&(n=e.charCodeAt(t+1),n>=56320&&n<=57343)?(r-55296)*1024+n-56320+65536:r}function Tc(e){var t=/^\n* /;return t.test(e)}var Pc=1,vo=2,$c=3,Dc=4,Ct=5;function hg(e,t,r,n,o,i,s,a){var c,l=0,u=null,p=!1,d=!1,g=n!==-1,m=-1,y=dg(er(e,0))&&fg(er(e,e.length-1));if(t||s)for(c=0;c<e.length;l>=65536?c+=2:c++){if(l=er(e,c),!or(l))return Ct;y=y&&Ha(l,u,a),u=l}else{for(c=0;c<e.length;l>=65536?c+=2:c++){if(l=er(e,c),l===rr)p=!0,g&&(d=d||c-m-1>n&&e[m+1]!==" ",m=c);else if(!or(l))return Ct;y=y&&Ha(l,u,a),u=l}d=d||g&&c-m-1>n&&e[m+1]!==" "}return!p&&!d?y&&!s&&!o(e)?Pc:i===nr?Ct:vo:r>9&&Tc(e)?Ct:s?i===nr?Ct:vo:d?Dc:$c}function mg(e,t,r,n,o){e.dump=function(){if(t.length===0)return e.quotingType===nr?'""':"''";if(!e.noCompatMode&&(ig.indexOf(t)!==-1||sg.test(t)))return e.quotingType===nr?'"'+t+'"':"'"+t+"'";var i=e.indent*Math.max(1,r),s=e.lineWidth===-1?-1:Math.max(Math.min(e.lineWidth,40),e.lineWidth-i),a=n||e.flowLevel>-1&&r>=e.flowLevel;function c(l){return pg(e,l)}switch(hg(t,a,e.indent,s,c,e.quotingType,e.forceQuotes&&!n,o)){case Pc:return t;case vo:return"'"+t.replace(/'/g,"''")+"'";case $c:return"|"+Va(t,e.indent)+Ga(Ma(t,i));case Dc:return">"+Va(t,e.indent)+Ga(Ma(gg(t,s),i));case Ct:return'"'+yg(t)+'"';default:throw new ge("impossible error: invalid scalar style")}}()}function Va(e,t){var r=Tc(e)?String(t):"",n=e[e.length-1]===`
|
|
74
|
+
`,o=n&&(e[e.length-2]===`
|
|
75
|
+
`||e===`
|
|
76
|
+
`),i=o?"+":n?"":"-";return r+i+`
|
|
77
|
+
`}function Ga(e){return e[e.length-1]===`
|
|
78
|
+
`?e.slice(0,-1):e}function gg(e,t){for(var r=/(\n+)([^\n]*)/g,n=function(){var l=e.indexOf(`
|
|
79
|
+
`);return l=l!==-1?l:e.length,r.lastIndex=l,Ua(e.slice(0,l),t)}(),o=e[0]===`
|
|
80
|
+
`||e[0]===" ",i,s;s=r.exec(e);){var a=s[1],c=s[2];i=c[0]===" ",n+=a+(!o&&!i&&c!==""?`
|
|
81
|
+
`:"")+Ua(c,t),o=i}return n}function Ua(e,t){if(e===""||e[0]===" ")return e;for(var r=/ [^ ]/g,n,o=0,i,s=0,a=0,c="";n=r.exec(e);)a=n.index,a-o>t&&(i=s>o?s:a,c+=`
|
|
82
|
+
`+e.slice(o,i),o=i+1),s=a;return c+=`
|
|
83
|
+
`,e.length-o>t&&s>o?c+=e.slice(o,s)+`
|
|
84
|
+
`+e.slice(s+1):c+=e.slice(o),c.slice(1)}function yg(e){for(var t="",r=0,n,o=0;o<e.length;r>=65536?o+=2:o++)r=er(e,o),n=pe[r],!n&&or(r)?(t+=e[o],r>=65536&&(t+=e[o+1])):t+=n||cg(r);return t}function bg(e,t,r){var n="",o=e.tag,i,s,a;for(i=0,s=r.length;i<s;i+=1)a=r[i],e.replacer&&(a=e.replacer.call(r,String(i),a)),(Ye(e,t,a,!1,!1)||typeof a>"u"&&Ye(e,t,null,!1,!1))&&(n!==""&&(n+=","+(e.condenseFlow?"":" ")),n+=e.dump);e.tag=o,e.dump="["+n+"]"}function Wa(e,t,r,n){var o="",i=e.tag,s,a,c;for(s=0,a=r.length;s<a;s+=1)c=r[s],e.replacer&&(c=e.replacer.call(r,String(s),c)),(Ye(e,t+1,c,!0,!0,!1,!0)||typeof c>"u"&&Ye(e,t+1,null,!0,!0,!1,!0))&&((!n||o!=="")&&(o+=bo(e,t)),e.dump&&rr===e.dump.charCodeAt(0)?o+="-":o+="- ",o+=e.dump);e.tag=i,e.dump=o||"[]"}function vg(e,t,r){var n="",o=e.tag,i=Object.keys(r),s,a,c,l,u;for(s=0,a=i.length;s<a;s+=1)u="",n!==""&&(u+=", "),e.condenseFlow&&(u+='"'),c=i[s],l=r[c],e.replacer&&(l=e.replacer.call(r,c,l)),Ye(e,t,c,!1,!1)&&(e.dump.length>1024&&(u+="? "),u+=e.dump+(e.condenseFlow?'"':"")+":"+(e.condenseFlow?"":" "),Ye(e,t,l,!1,!1)&&(u+=e.dump,n+=u));e.tag=o,e.dump="{"+n+"}"}function _g(e,t,r,n){var o="",i=e.tag,s=Object.keys(r),a,c,l,u,p,d;if(e.sortKeys===!0)s.sort();else if(typeof e.sortKeys=="function")s.sort(e.sortKeys);else if(e.sortKeys)throw new ge("sortKeys must be a boolean or a function");for(a=0,c=s.length;a<c;a+=1)d="",(!n||o!=="")&&(d+=bo(e,t)),l=s[a],u=r[l],e.replacer&&(u=e.replacer.call(r,l,u)),Ye(e,t+1,l,!0,!0,!0)&&(p=e.tag!==null&&e.tag!=="?"||e.dump&&e.dump.length>1024,p&&(e.dump&&rr===e.dump.charCodeAt(0)?d+="?":d+="? "),d+=e.dump,p&&(d+=bo(e,t)),Ye(e,t+1,u,!0,p)&&(e.dump&&rr===e.dump.charCodeAt(0)?d+=":":d+=": ",d+=e.dump,o+=d));e.tag=i,e.dump=o||"{}"}function qa(e,t,r){var n,o,i,s,a,c;for(o=r?e.explicitTypes:e.implicitTypes,i=0,s=o.length;i<s;i+=1)if(a=o[i],(a.instanceOf||a.predicate)&&(!a.instanceOf||typeof t=="object"&&t instanceof a.instanceOf)&&(!a.predicate||a.predicate(t))){if(r?a.multi&&a.representName?e.tag=a.representName(t):e.tag=a.tag:e.tag="?",a.represent){if(c=e.styleMap[a.tag]||a.defaultStyle,xc.call(a.represent)==="[object Function]")n=a.represent(t,c);else if(wc.call(a.represent,c))n=a.represent[c](t,c);else throw new ge("!<"+a.tag+'> tag resolver accepts not "'+c+'" style');e.dump=n}return!0}return!1}function Ye(e,t,r,n,o,i,s){e.tag=null,e.dump=r,qa(e,r,!1)||qa(e,r,!0);var a=xc.call(e.dump),c=n,l;n&&(n=e.flowLevel<0||e.flowLevel>t);var u=a==="[object Object]"||a==="[object Array]",p,d;if(u&&(p=e.duplicates.indexOf(r),d=p!==-1),(e.tag!==null&&e.tag!=="?"||d||e.indent!==2&&t>0)&&(o=!1),d&&e.usedDuplicates[p])e.dump="*ref_"+p;else{if(u&&d&&!e.usedDuplicates[p]&&(e.usedDuplicates[p]=!0),a==="[object Object]")n&&Object.keys(e.dump).length!==0?(_g(e,t,e.dump,o),d&&(e.dump="&ref_"+p+e.dump)):(vg(e,t,e.dump),d&&(e.dump="&ref_"+p+" "+e.dump));else if(a==="[object Array]")n&&e.dump.length!==0?(e.noArrayIndent&&!s&&t>0?Wa(e,t-1,e.dump,o):Wa(e,t,e.dump,o),d&&(e.dump="&ref_"+p+e.dump)):(bg(e,t,e.dump),d&&(e.dump="&ref_"+p+" "+e.dump));else if(a==="[object String]")e.tag!=="?"&&mg(e,e.dump,t,i,c);else{if(a==="[object Undefined]")return!1;if(e.skipInvalid)return!1;throw new ge("unacceptable kind of an object to dump "+a)}e.tag!==null&&e.tag!=="?"&&(l=encodeURI(e.tag[0]==="!"?e.tag.slice(1):e.tag).replace(/!/g,"%21"),e.tag[0]==="!"?l="!"+l:l.slice(0,18)==="tag:yaml.org,2002:"?l="!!"+l.slice(18):l="!<"+l+">",e.dump=l+" "+e.dump)}return!0}function Eg(e,t){var r=[],n=[],o,i;for(_o(e,r,n),o=0,i=n.length;o<i;o+=1)t.duplicates.push(r[n[o]]);t.usedDuplicates=new Array(i)}function _o(e,t,r){var n,o,i;if(e!==null&&typeof e=="object")if(o=t.indexOf(e),o!==-1)r.indexOf(o)===-1&&r.push(o);else if(t.push(e),Array.isArray(e))for(o=0,i=e.length;o<i;o+=1)_o(e[o],t,r);else for(n=Object.keys(e),o=0,i=n.length;o<i;o+=1)_o(e[n[o]],t,r)}function kg(e,t){t=t||{};var r=new ug(t);r.noRefs||Eg(e,r);var n=e;return r.replacer&&(n=r.replacer.call({"":n},"",n)),Ye(r,0,n,!0,!0)?r.dump+`
|
|
85
|
+
`:""}var xg=kg,wg={dump:xg};function Ao(e,t){return function(){throw new Error("Function yaml."+e+" is removed in js-yaml 4. Use yaml."+t+" instead, which is now safe by default.")}}var Cg=ue,Ag=Xa,Sg=Za,Rg=oc,Og=ic,Tg=ko,Pg=kc.load,$g=kc.loadAll,Dg=wg.dump,Ng=ge,Lg={binary:uc,float:nc,map:Ja,null:ec,pairs:dc,set:fc,timestamp:cc,bool:tc,int:rc,merge:lc,omap:pc,seq:Qa,str:za},Ig=Ao("safeLoad","load"),jg=Ao("safeLoadAll","loadAll"),Fg=Ao("safeDump","dump"),Mg={Type:Cg,Schema:Ag,FAILSAFE_SCHEMA:Sg,JSON_SCHEMA:Rg,CORE_SCHEMA:Og,DEFAULT_SCHEMA:Tg,load:Pg,loadAll:$g,dump:Dg,YAMLException:Ng,types:Lg,safeLoad:Ig,safeLoadAll:jg,safeDump:Fg},ot=Mg;import Tt from"path";import{execSync as Ke}from"child_process";import Bg from"fs-extra";var Hr=null,So=()=>{if(Hr)return Hr;let e=Hg(),t=Vg(e),r=e,n=!0,o=Gg(t);return Hr={dockerPath:e,composeCommand:r,isModernCompose:n,version:t,isDocker28Plus:o},Hr};var Hg=()=>{try{let e;process.platform==="win32"?e=Ke("where docker",{stdio:"pipe",encoding:"utf8"}).trim().split(`
|
|
86
|
+
`)[0]:e=Ke("which docker",{stdio:"pipe",encoding:"utf8"}).trim();try{return Ke(`"${e}" --version`,{stdio:"pipe"}),e}catch{throw new Error(`Docker found at ${e} but not executable`)}}catch{let t=["/Applications/Docker.app/Contents/Resources/bin/docker","/usr/local/bin/docker","C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe","C:\\Program Files\\Docker\\Docker\\resources\\docker.exe","/usr/bin/docker","/snap/docker/current/bin/docker"];for(let r of t)if(Bg.existsSync(r))try{return Ke(`"${r}" --version`,{stdio:"pipe"}),h.debug(f.yellow(`Found Docker at: ${r}`)),r}catch{}throw new Error("Docker not found in PATH or common installation locations")}},Vg=e=>{try{return Ke(`"${e}" --version`,{stdio:"pipe",encoding:"utf8"}).trim()}catch{return console.warn(f.yellow("Could not determine Docker version")),"unknown"}},Gg=e=>{let t=e.match(/Docker version (\d+)\.(\d+)/);if(!t)return!1;let r=parseInt(t[1]),n=parseInt(t[2]);return r>28||r===28&&n>=0},Vr=()=>{h.raw(f.blue("\u{1F433} Checking Docker installation..."));try{let e=So();h.debug(`\u2705 Docker found at: ${e.dockerPath}`),h.debug(`Docker version: ${e.version}`);try{Ke(`"${e.dockerPath}" compose version`,{stdio:"pipe"}),h.debug("\u2705 Docker Compose (modern) is available")}catch{throw console.error(f.red(`
|
|
87
|
+
\u274C Modern Docker Compose is not available`)),console.warn(f.yellow(`
|
|
88
|
+
\u{1F4CB} Raclette requires Docker with integrated 'compose' command`)),console.warn(f.yellow("Please update to Docker version 20.10.13+ or Docker Desktop 4.1.0+")),new Error("Modern Docker Compose is required")}e.isDocker28Plus&&h.debug("\u26A0\uFE0F Detected Docker 28+, using enhanced path resolution");try{Ke(`"${e.dockerPath}" info`,{stdio:"pipe",encoding:"utf8"}),h.success(" Docker daemon is running")}catch{throw h.error("Docker daemon is not running"),h.warn("Please start Docker Desktop or the Docker daemon and try again."),process.platform==="darwin"?console.log(f.yellow(`
|
|
89
|
+
macOS: Start Docker Desktop from the Applications folder`)):process.platform==="win32"?console.log(f.yellow(`
|
|
90
|
+
Windows: Start Docker Desktop from the Start menu`)):console.log(f.yellow(`
|
|
91
|
+
Linux: Start Docker daemon with "systemctl start docker"`)),new Error("Docker daemon is not running")}return e}catch(e){throw e.message.includes("Docker daemon is not running")||e.message.includes("Modern Docker Compose is required")?e:(h.error("Docker installation issue: "+e.message),console.log(f.yellow(`
|
|
92
|
+
\u{1F4E5} Installation guide:`)),console.log(f.yellow(" \u2022 Mac: https://docs.docker.com/desktop/install/mac/")),console.log(f.yellow(" \u2022 Windows: https://docs.docker.com/desktop/install/windows/")),console.log(f.yellow(" \u2022 Linux: https://docs.docker.com/engine/install/")),new Error("Docker is not installed or not accessible"))}},ce=(e,t={})=>{let n=`"${So().dockerPath}" ${e.join(" ")}`;try{let o=Ke(n,{...t,stdio:t.stdio||"pipe",encoding:t.stdio==="inherit"?void 0:t.encoding||"utf8",shell:!0});return typeof o=="string"?o:""}catch(o){throw new Error(`Docker command failed: ${n}
|
|
93
|
+
Error: ${o.message}`)}},ye=(e,t={})=>{let n=`"${So().composeCommand}" compose ${e.join(" ")}`;h.debug(`Execute Docker Command: ${n}`);try{let o=Ke(n,{stdio:"pipe",encoding:"utf8",shell:!0,...t});return typeof o=="string"?o:""}catch(o){throw new Error(`Docker Compose command failed: ${n}
|
|
94
|
+
Error: ${o.message}`)}},ir=e=>{try{return ce(["ps","-a","--format",'"{{.Names}}"',"|","grep",`"^${e}$"`]).trim()===e}catch{return!1}},Ot=e=>{try{return ce(["ps","--format",'"{{.Names}}"',"|","grep",`"^${e}$"`]).trim()===e}catch{return!1}},Gr=e=>{h.debug(`\u{1F310} Checking for Docker network '${e}'...`);try{if(ce(["network","ls","--format",'"{{.Name}}"',"|","grep",e]).trim()===e){h.debug(`\u2705 Network '${e}' already exists`);return}}catch{h.debug(`\u{1F310} Creating Docker network '${e}'...`);try{ce(["network","create",e],{stdio:"inherit"}),h.debug(`\u2705 Network '${e}' created`)}catch(r){throw h.error("Failed to create network: "+r.message),r}}},Ro=(e,t,r={})=>ce(["exec",e,"sh","-c",`"${t}"`],r),Ug=e=>{try{let t=ce(["ps","-a","--format",'"{{.Names}}"',"|","grep",`"^${e}"`]);return t.trim()?t.trim().split(`
|
|
95
|
+
`).filter(r=>r.trim().length>0):[]}catch{return[]}},Nc=e=>{let t=Ug(e);if(t.length===0){h.debug(`\u26A0\uFE0F No containers found with prefix '${e}'`);return}h.debug(`\u26A0\uFE0F Found ${t.length} container(s) with prefix '${e}':`),t.forEach(r=>{h.debug(` - ${r}`)});try{h.debug("Stopping containers..."),ce(["stop",...t],{stdio:"inherit"}),h.debug("Removing containers..."),ce(["rm",...t],{stdio:"inherit"}),h.success(`Successfully stopped and removed ${t.length} container(s)`)}catch(r){throw h.error(`Failed to stop containers with prefix '${e}': ${r.message}`),r}};var Wg="raclette-public-shared",qg=e=>e&&(e.startsWith("./")?"../"+e.substring(2):e.startsWith("../")?"../../"+e.substring(3):e),Oo=(e,t)=>Tt.isAbsolute(e)||!e.includes("/")&&!e.includes("\\")?e:e.startsWith("./")||e.startsWith("../")?Tt.resolve(t,e):Tt.resolve(t,e),Wr=(e,t)=>{if(!e||typeof e!="object")return e;if(Array.isArray(e))return e.map(n=>Wr(n,t));let r={};for(let[n,o]of Object.entries(e))typeof o=="string"&&(n==="source"||n==="device")?r[n]=Oo(o,t):typeof o=="string"&&(n==="context"||n==="dockerfile"||n.endsWith("Path")||n.endsWith("Dir")||n.includes("path")||n.includes("Path"))?r[n]=qg(o):o&&typeof o=="object"?r[n]=Wr(o,t):r[n]=o;return r},it=(e,t)=>{let r=Wr(e,t);if(r.source&&r.source.includes("/")&&(r.source=Oo(r.source,t)),r.mustExist&&!Ur.existsSync(r.source))return h.debug(`Skipping volume mount: ${r.source} does not exist`),null;if(!r.type&&!r.readonly&&!r.volumeOptions&&!r.bindOptions&&!r.tmpfsOptions)return`${r.source}:${r.target}${r.readonly?":ro":""}`;let n={type:r.type||"volume",source:r.source,target:r.target};return r.readonly&&(n.read_only=!0),r.volumeOptions&&(n.volume=r.volumeOptions),r.bindOptions&&(n.bind=r.bindOptions),r.tmpfsOptions&&(n.tmpfs=r.tmpfsOptions),n},Yg=(e,t)=>{if(!e.includes("/")||e.startsWith("${"))return e;let r=e.split(":");if(r.length<2)return e;let n=r[0],o=r[1],i=r.slice(2).join(":"),s=Oo(n,t);return i?`${s}:${o}:${i}`:`${s}:${o}`},qr=(e,t)=>e.map(r=>typeof r=="string"?Yg(r,t):r).map(r=>r),Yr=(e="development")=>process.cwd().includes("node_modules")?{npmrcPath:"../../../.npmrc",yarnrcPath:"../../../.yarnrc"}:{npmrcPath:"./.npmrc",yarnrcPath:"./.yarnrc"},To=async(e,t,r,n=!1,o="development",i=!0,s=!0)=>{let a={services:{},volumes:{"yarn-cache":{driver:"local"}},networks:{raclette_shared:{external:!0,name:"raclette_shared"}}},c=e.env[o]||{};a.volumes[Wg]=null,e.volumes&&Object.entries(e.volumes).forEach(([p,d])=>{d===null?a.volumes[p]=null:a.volumes[p]=Wr(d,t)});let l=!1,u=!1;if(i&&s){if(e.services.mongodb?.enabled&&e.services.mongodb.name){let p=e.services.mongodb.name;ir(p)&&(h.debug(`MongoDB container '${p}' already exists, will be skipped`),l=!0)}if(e.services.cache?.enabled&&e.services.cache.name){let p=e.services.cache.name;ir(p)&&(h.debug(`Cache container '${p}' already exists, will be skipped`),u=!0)}}if(e.services.mongodb?.enabled&&!l){let d=!!e.services.mongodb.name?e.services.mongodb.name:`${e.name}-mongodb`,g=e.services.mongodb.volume?e.services.mongodb.volume:`${e.name}-mongodb-data`,m=e.services.mongodb.volumeConfig?e.services.mongodb.volumeConfig:`${e.name}-mongodb-config`;a.services.mongodb={container_name:`\${RACLETTE_MONGODB_CONTAINERNAME:-${d}}`,image:"mongo:5.0.6",restart:"unless-stopped",ports:[`127.0.0.1:\${RACLETTE_MONGODB_PORT:-${e.services.mongodb.port}}:27017`],volumes:[`\${RACLETTE_MONGODB_VOLUME:-${g}}:/data/db`,`\${RACLETTE_MONGODB_CONFIG_VOLUME:-${m}}:/data/config`],networks:["raclette_shared"],healthcheck:{test:["CMD","mongosh","--eval","db.adminCommand('ping')"],interval:"10s",timeout:"30s",retries:20}},e.services.mongodb.volumes&&e.services.mongodb.volumes.length>0&&e.services.mongodb.volumes.forEach(y=>{let k=it(y,t);a.services.mongodb.volumes.push(k)}),!g.startsWith("/")&&!g.startsWith("./")&&(a.volumes[g]=null),!m.startsWith("/")&&!m.startsWith("./")&&(a.volumes[m]=null)}if(e.services.cache?.enabled&&!u){let d=!!e.services.cache.name?e.services.cache.name:`${e.name}-cache`,g=e.services.cache.volume?e.services.cache.volume:`${e.name}-cache-data`;a.services.cache={container_name:`\${RACLETTE_CACHE_CONTAINERNAME:-${d}}`,image:"valkey/valkey:8.1-alpine",ports:[`127.0.0.1:\${RACLETTE_CACHE_PORT:-${e.services.cache.port}}:6379`],volumes:[`\${RACLETTE_CACHE_VOLUME:-${g}}:/data`],networks:["raclette_shared"],healthcheck:{test:["CMD","valkey-cli","ping"],interval:"10s",timeout:"5s",retries:3}};let m=e?.backend?.cache?.RDB_OPTIONS??"3600 1 300 100 60 10000",y=e?.backend?.cache?.persistence||"none";y==="none"&&(a.services.cache.command='valkey-server --save ""'),y==="aof"&&(a.services.cache.command="valkey-server --appendonly yes"),y==="rdb"&&(a.services.cache.command="valkey-server --save "+m),y==="rdb+aof"&&(a.services.cache.command="valkey-server --appendonly yes --save "+m),e.services.cache.volumes&&e.services.cache.volumes.length>0&&e.services.cache.volumes.forEach(k=>{let C=it(k,t);a.services.cache.volumes.push(C)}),!g.startsWith("/")&&!g.startsWith("./")&&(a.volumes[g]=null)}if(!n){let{npmrcPath:p,yarnrcPath:d}=Yr(),g=process.env.RACLETTE_DEBUG_PORT||(e.services?.backend?.enableDebug?9229:void 0);if(e.services.backend?.enabled){let m=e.services.backend.name??`${e.name}-backend`,y=e.services.backend.nodeModulesVolume||`${e.name}-backend_node_modules`;a.services.backend={container_name:`\${RACLETTE_SERVER_CONTAINERNAME:-${m}}`,build:{context:".",dockerfile:"./backend.Dockerfile",args:{NODE_ENV:o}},command:g?"yarn run dev:inspect":"yarn dev",environment:[`NODE_ENV=\${NODE_ENV:-${o}}`,"DISABLE_PLUGIN_LOGS=${RACLETTE_DISABLE_PLUGIN_LOGS:-false}","SERVER_TOKEN_SECRET=${RACLETTE_SERVER_TOKEN_SECRET:-thisshouldbesetforproduction}","RACLETTE_FRONTEND_URLS=${RACLETTE_FRONTEND_URLS:-}",`MONGO_HOST=\${RACLETTE_MONGODB_HOST:-mongodb://mongodb:\${RACLETTE_MONGODB_PORT:-${e.services.mongodb?.port||27017}}/\${RACLETTE_MONGODB_DATABASE:-${e.services.mongodb?.databaseName||e.name}}}`,`CACHE_URL=\${RACLETTE_CACHE_URL:-redis://cache:\${RACLETTE_CACHE_PORT:-${e.services.cache?.port||6379}}}${e.services.cache?.db?`/${e.services.cache?.db}`:""}`,...Object.entries(c).map(([k,C])=>`${k}=${C}`)],volumes:["yarn-cache:/usr/local/share/.cache/yarn",`${y}:/app/node_modules`,"./.raclette/virtual/backend/src:/app/src","./plugins:/app/src/appPlugins",...o==="development"?["./.raclette/backend/raclette.config.js:/app/raclette.config.js",`${Pt("backend",e)}:/app/yarn.lock`]:[],`${p}:/app/.npmrc`,`${d}:/app/.yarnrc`],ports:[`\${RACLETTE_SERVER_PORT:-${e.services.backend.port}}:3000`,...g?[`${g||"9229"}:9229`]:[]],networks:["raclette_shared"],depends_on:{},healthcheck:{test:["CMD","curl","-f","http://0.0.0.0:3000/health"],interval:"10s",timeout:"30s",retries:10}},e.services.backend.volumes&&e.services.backend.volumes.length>0&&e.services.backend.volumes.forEach(k=>{let C=it(k,t);C&&a.services.backend.volumes.push(C)}),e.services.mongodb?.enabled&&!l&&(a.services.backend.depends_on.mongodb={condition:"service_started"}),e.services.cache?.enabled&&!u&&(a.services.backend.depends_on.cache={condition:"service_healthy"}),Object.keys(a.services.backend.depends_on).length===0&&delete a.services.backend.depends_on,a.volumes[y]=null}if(e.services.frontend?.enabled){let m=e.services.frontend.name??`${e.name}-frontend`,y=e.services.frontend.nodeModulesVolume||`${e.name}-frontend_node_modules`,k=8081;a.services.frontend={container_name:`\${RACLETTE_CLIENT_CONTAINERNAME:-${m}}`,build:{context:".",dockerfile:"./frontend.Dockerfile",args:{NODE_ENV:`\${NODE_ENV:-${o}}`},target:`\${NODE_ENV:-${o}}`},command:"yarn dev",depends_on:{},environment:[`NODE_ENV=\${NODE_ENV:-${o}}`,"RACLETTE_DEBUG_MODE=${RACLETTE_DEBUG_MODE:-true}",`RACLETTE_SERVER_BASE_URL=\${RACLETTE_SERVER_BASE_URL:-http://localhost:\${RACLETTE_SERVER_PORT:-${e.services.backend?.port||8082}}}`,`RACLETTE_SOCKET_URL=\${RACLETTE_SOCKET_URL:-http://localhost:\${RACLETTE_SERVER_PORT:-${e.services.backend?.port||8082}}}`,...Object.entries(c).map(([C,R])=>`${C}=${R}`)],volumes:["yarn-cache:/usr/local/share/.cache/yarn","./.raclette/virtual/frontend/src:/app/src","./.raclette/virtual/backend/src/shared:/app/src/shared",`${y}:/app/node_modules`,"./plugins:/app/src/plugins","./.raclette/virtual/backend/src/corePlugins:/app/src/corePlugins",...o==="development"?["./.raclette/frontend/raclette.config.js:/app/raclette.config.js",`${Pt("frontend",e)}:/app/yarn.lock`]:[],`${p}:/app/.npmrc`,`${d}:/app/.yarnrc`],ports:[`\${RACLETTE_CLIENT_PORT:-${e.services.frontend.port}}:8081`],networks:["raclette_shared"],healthcheck:{test:["CMD","curl","-f","http://0.0.0.0:8081/"],interval:"10s",timeout:"30s",retries:10}},o!=="production"&&(a.services.frontend.volumes.push("./.raclette/dist/check-dependencies.sh:/app/check-dependencies.sh"),a.services.frontend.volumes.push("./.raclette/frontend/package.json:/app/package.json"),a.services.frontend.entrypoint=["/app/check-dependencies.sh"],a.services.backend.volumes.push("./.raclette/dist/check-dependencies.sh:/app/check-dependencies.sh"),a.services.backend.entrypoint=["/app/check-dependencies.sh"],a.services.backend.volumes.push("./.raclette/backend/package.json:/app/package.json")),e.services.frontend.volumes&&e.services.frontend.volumes.length>0&&e.services.frontend.volumes.forEach(C=>{let R=it(C,t);R&&a.services.frontend.volumes.push(R)}),e.services.backend?.enabled&&(a.services.frontend.depends_on.backend={condition:"service_healthy"}),Object.keys(a.services.frontend.depends_on).length===0&&delete a.services.frontend.depends_on,a.volumes[y]=null}if(e.env?.development?.RACLETTE_CORE_ABSOLUTE_PATH){let m=e.env?.development?.RACLETTE_CORE_ABSOLUTE_PATH,y=m&&!m.endsWith("/")?m+"/":m;a.services.backend?.volumes?.push(`${y}services/backend/src/corePlugins:/app/src/corePlugins`),a.services.frontend?.volumes?.push(`${y}services/backend/src/corePlugins:/app/src/corePlugins`)}}Object.values(a.services).forEach(p=>{p.volumes&&(p.volumes=qr(p.volumes,t))}),await Ur.writeFile(r,ot.dump(a)),await Kr(e,Tt.dirname(r),o)},Pt=(e,t)=>{let r=t.lockFiles?.[e];return r||`./${e}.yarn.lock`},Lc=async(e,t,r,n="development")=>{await To(e,t,r,!1,n,!1,!1)},Kr=async(e,t,r)=>{let n=Tt.join(t,"backend.Dockerfile"),o=`FROM node:24.4-alpine3.21
|
|
96
|
+
WORKDIR /app
|
|
97
|
+
|
|
98
|
+
# add bash since alpine doesn't come with a shell
|
|
99
|
+
RUN apk update && apk add bash curl ${(e.services.backend?.installPackages||[]).join(" ")}
|
|
100
|
+
|
|
101
|
+
COPY backend/package.json backend/yarn.lock ./
|
|
102
|
+
COPY backend/raclette.config.js ./
|
|
103
|
+
|
|
104
|
+
ARG NODE_ENV=${r}
|
|
105
|
+
|
|
106
|
+
# until we are published we can't install here due to the sensitive files
|
|
107
|
+
#RUN if [ "$NODE_ENV" = "development" ]; \\
|
|
108
|
+
# then yarn install; \\
|
|
109
|
+
# else yarn install --production=true; \\
|
|
110
|
+
# fi;
|
|
111
|
+
|
|
112
|
+
# make sure our raclette packages are being resolved by adding a symlink to handle nodes module resolution
|
|
113
|
+
RUN mkdir -p /app/node_modules/@raclettejs/core
|
|
114
|
+
RUN ln -sf /app/src /app/node_modules/@raclettejs/core/backend
|
|
115
|
+
|
|
116
|
+
COPY ./dist/check-dependencies.sh /app/
|
|
117
|
+
RUN chmod +x /app/check-dependencies.sh
|
|
118
|
+
|
|
119
|
+
# copy everything else that is not ignored (see .dockerignore)
|
|
120
|
+
COPY ./virtual/backend ./
|
|
121
|
+
|
|
122
|
+
# set default values
|
|
123
|
+
ENV PORT 3000
|
|
124
|
+
|
|
125
|
+
# set port
|
|
126
|
+
EXPOSE 3000
|
|
127
|
+
EXPOSE 9229
|
|
128
|
+
|
|
129
|
+
# default command
|
|
130
|
+
CMD ["yarn", "run", "${r==="production"?"build":"dev"}"]
|
|
131
|
+
`;await Ur.writeFile(n,o);let i=Tt.join(t,"frontend.Dockerfile"),s=`FROM node:24-alpine3.21 AS build
|
|
132
|
+
WORKDIR /app
|
|
133
|
+
|
|
134
|
+
RUN apk update && apk add bash curl ${(e.services.frontend?.installPackages||[]).join(" ")}
|
|
135
|
+
|
|
136
|
+
# Copy package files first for better caching
|
|
137
|
+
COPY frontend/package.json frontend/yarn.lock ./
|
|
138
|
+
COPY frontend/raclette.config.js ./
|
|
139
|
+
|
|
140
|
+
ARG NODE_ENV=${r}
|
|
141
|
+
|
|
142
|
+
# until we are published we can't install here due to the sensitive files
|
|
143
|
+
# Install dependencies
|
|
144
|
+
#RUN if [ "$NODE_ENV" = "development" ]; \\
|
|
145
|
+
# then yarn install; \\
|
|
146
|
+
# else yarn install --production=false; \\
|
|
147
|
+
# fi
|
|
148
|
+
|
|
149
|
+
# Copy source files - we'll handle development overrides through volumes
|
|
150
|
+
COPY ./virtual/frontend/ ./
|
|
151
|
+
|
|
152
|
+
COPY ./dist/check-dependencies.sh /app/
|
|
153
|
+
RUN chmod +x /app/check-dependencies.sh
|
|
154
|
+
|
|
155
|
+
RUN rm -rf ./src/shared
|
|
156
|
+
|
|
157
|
+
# Now copy the actual shared folder - be explicit with the path
|
|
158
|
+
COPY virtual/backend/src/shared/ ./src/shared/
|
|
159
|
+
|
|
160
|
+
# Ports
|
|
161
|
+
ENV PORT ${e.services.frontend?.port||8081}
|
|
162
|
+
EXPOSE ${e.services.frontend?.port||8081}
|
|
163
|
+
|
|
164
|
+
# Add development target
|
|
165
|
+
FROM build AS development
|
|
166
|
+
CMD ["yarn", "run", "dev"]
|
|
167
|
+
|
|
168
|
+
# ----------------------------------------------------------------
|
|
169
|
+
# 2. production stage
|
|
170
|
+
# Here we will use a new docker image, which is only the web server
|
|
171
|
+
FROM nginx:stable-alpine AS production
|
|
172
|
+
WORKDIR /app
|
|
173
|
+
|
|
174
|
+
# Copy nginx config as a template
|
|
175
|
+
COPY frontend/provision/nginx.conf /etc/nginx/conf.d/default.conf.template
|
|
176
|
+
|
|
177
|
+
COPY --from=build app/dist /usr/share/nginx/html
|
|
178
|
+
COPY frontend/provision/entrypoint.sh /docker-entrypoint.d/entrypoint.sh
|
|
179
|
+
|
|
180
|
+
# Make sure the entrypoint is executable
|
|
181
|
+
RUN chmod +x /docker-entrypoint.d/entrypoint.sh
|
|
182
|
+
|
|
183
|
+
ENV PORT 80
|
|
184
|
+
EXPOSE 80
|
|
185
|
+
|
|
186
|
+
CMD ["nginx", "-g", "daemon off;"]`;await Ur.writeFile(i,s)};import Ic from"path";var Xr=async(e,t,r)=>{let n=[];return r&&(console.log(f.blue("\u{1F504} Force rebuild enabled - rebuilding all services")),e.services.frontend?.enabled&&n.push("frontend"),e.services.backend?.enabled&&n.push("backend"),e.services.workbench?.enabled&&n.push("workbench")),n},zr=async(e,t,r,n={})=>{if(r.length===0)return;console.log(f.blue(`\u{1F504} Rebuilding services: ${r.join(", ")}`));let o=Ic.join(t,"docker-compose.yml"),i=e.name??Ic.basename(process.cwd());for(let s of r)try{console.log(f.blue(`\u{1F504} Rebuilding ${s} service...`));let a=["-p",i,"-f",o,"build"];n.noCache&&a.push("--no-cache"),a.push(s),ye(a,{stdio:"inherit"}),h.success(` Service ${s} rebuilt successfully`)}catch(a){h.error(`Error rebuilding service ${s}: ${a.message}`)}};import Qc from"fs-extra";import Jc from"path";var jc=(e=!1)=>["eslint","@eslint/js","globals","eslint-config-prettier","prettier","eslint-plugin-prettier",...e?Kg():[]],Kg=()=>[],Fc=()=>["import globals from 'globals';","import eslintConfigPrettier from 'eslint-config-prettier';"],Mc=(e=!1)=>{let t=` // JavaScript config
|
|
187
|
+
{
|
|
188
|
+
files: ["**/*.{js,mjs,cjs}"],
|
|
189
|
+
languageOptions: {
|
|
190
|
+
globals: {
|
|
191
|
+
...globals.browser,
|
|
192
|
+
...globals.node,
|
|
193
|
+
test: "readonly",
|
|
194
|
+
expect: "readonly",
|
|
195
|
+
it: "readonly",
|
|
196
|
+
cy: "readonly"
|
|
197
|
+
},
|
|
198
|
+
ecmaVersion: 2022,
|
|
199
|
+
sourceType: 'module'
|
|
200
|
+
},
|
|
201
|
+
rules: {
|
|
202
|
+
// Common recommended rules
|
|
203
|
+
"no-console": "warn",
|
|
204
|
+
"prefer-const": "error",
|
|
205
|
+
"no-unused-vars": "warn",
|
|
206
|
+
"curly": ["error", "all"],
|
|
207
|
+
"eqeqeq": ["error", "always"],
|
|
208
|
+
"require-await": "error",
|
|
209
|
+
"padding-line-between-statements": [
|
|
210
|
+
"error",
|
|
211
|
+
// nextline after const
|
|
212
|
+
{ blankLine: "always", prev: "const", next: "*" },
|
|
213
|
+
// nextline after let
|
|
214
|
+
{ blankLine: "always", prev: "let", next: "*" },
|
|
215
|
+
// allow const after const
|
|
216
|
+
{ blankLine: "any", prev: "const", next: "const" },
|
|
217
|
+
// allow let after const
|
|
218
|
+
{ blankLine: "any", prev: "const", next: "let" },
|
|
219
|
+
// allow const after let
|
|
220
|
+
{ blankLine: "any", prev: "let", next: "const" },
|
|
221
|
+
// allow let after let
|
|
222
|
+
{ blankLine: "any", prev: "let", next: "let" },
|
|
223
|
+
// add blank line before return statements
|
|
224
|
+
{ blankLine: "always", prev: "*", next: "return" },
|
|
225
|
+
// new line between method declarations
|
|
226
|
+
{ blankLine: "always", prev: "const", next: "block-like" }
|
|
227
|
+
]
|
|
228
|
+
}
|
|
229
|
+
}`;return e?t+`,
|
|
230
|
+
|
|
231
|
+
`+Xg():t},Xg=()=>` // Style recommended config
|
|
232
|
+
{
|
|
233
|
+
files: ["**/*.{js,mjs,cjs,ts,tsx}"],
|
|
234
|
+
rules: {
|
|
235
|
+
// Style and formatting rules
|
|
236
|
+
"semi": ["error", "never"],
|
|
237
|
+
"quotes": ["error", "double", { "avoidEscape": true }],
|
|
238
|
+
"comma-dangle": ["error", "always-multiline"],
|
|
239
|
+
"no-multiple-empty-lines": ["error", { "max": 1, "maxEOF": 0 }],
|
|
240
|
+
"object-curly-spacing": ["error", "always"],
|
|
241
|
+
"array-bracket-spacing": ["error", "never"],
|
|
242
|
+
"computed-property-spacing": ["error", "never"],
|
|
243
|
+
"comma-spacing": ["error", { "before": false, "after": true }],
|
|
244
|
+
"eol-last": ["error", "always"],
|
|
245
|
+
"indent": ["error", 2],
|
|
246
|
+
"linebreak-style": ["error", "unix"],
|
|
247
|
+
"no-trailing-spaces": "error",
|
|
248
|
+
"dot-notation": ["error", { allowKeywords: true }],
|
|
249
|
+
"id-length": [
|
|
250
|
+
"error",
|
|
251
|
+
{ min: 3, exceptions: ["i", "j", "a", "b", "fs", "id"], properties: "never" },
|
|
252
|
+
],
|
|
253
|
+
}
|
|
254
|
+
}`;var Bc=(e=!1)=>["eslint-plugin-react","eslint-plugin-react-hooks",...e?zg():[]],zg=()=>[],Hc=()=>["import react from 'eslint-plugin-react';","import reactHooks from 'eslint-plugin-react-hooks';"],Vc=(e=!1)=>{let t=` // React config
|
|
255
|
+
{
|
|
256
|
+
files: ["**/*.{jsx,tsx}"],
|
|
257
|
+
plugins: {
|
|
258
|
+
react,
|
|
259
|
+
'react-hooks': reactHooks
|
|
260
|
+
},
|
|
261
|
+
rules: {
|
|
262
|
+
// Essential React rules
|
|
263
|
+
"react/jsx-uses-react": "error",
|
|
264
|
+
"react/jsx-uses-vars": "error",
|
|
265
|
+
"react-hooks/rules-of-hooks": "error",
|
|
266
|
+
"react-hooks/exhaustive-deps": "warn",
|
|
267
|
+
|
|
268
|
+
// Additional sensible React rules
|
|
269
|
+
"react/prop-types": "warn",
|
|
270
|
+
"react/jsx-no-duplicate-props": "error",
|
|
271
|
+
"react/jsx-no-undef": "error",
|
|
272
|
+
"react/jsx-pascal-case": "error",
|
|
273
|
+
"react/no-direct-mutation-state": "error",
|
|
274
|
+
"react/no-unescaped-entities": "error"
|
|
275
|
+
}
|
|
276
|
+
}`;return e?t+`,
|
|
277
|
+
|
|
278
|
+
`+Qg():t},Qg=()=>"";var Gc=(e=!1)=>["typescript-eslint",...e?Jg():[]],Jg=()=>["eslint-plugin-import","eslint-plugin-prefer-arrow-functions"],Uc=e=>{let t=["import tseslint from 'typescript-eslint';"];return e&&(t.push("import importPlugin from 'eslint-plugin-import';"),t.push("import preferArrow from 'eslint-plugin-prefer-arrow-functions';")),t},Wc=(e=!1)=>{let r=` // TypeScript config
|
|
279
|
+
{
|
|
280
|
+
files: ["**/*.{ts,tsx}"],
|
|
281
|
+
plugins: ${e?`{
|
|
282
|
+
'@typescript-eslint': tseslint.plugin,
|
|
283
|
+
'import': importPlugin,
|
|
284
|
+
'prefer-arrow': preferArrow
|
|
285
|
+
}`:`{
|
|
286
|
+
'@typescript-eslint': tseslint.plugin
|
|
287
|
+
}`},
|
|
288
|
+
languageOptions: {
|
|
289
|
+
parser: tseslint.parser,
|
|
290
|
+
parserOptions: {
|
|
291
|
+
ecmaVersion: 2022,
|
|
292
|
+
sourceType: 'module',
|
|
293
|
+
project: './tsconfig.json'
|
|
294
|
+
}
|
|
295
|
+
},
|
|
296
|
+
rules: {
|
|
297
|
+
// Basic TypeScript rules
|
|
298
|
+
'no-unused-vars': 'off', // disable JS rule in favor of TS rule
|
|
299
|
+
'@typescript-eslint/no-unused-vars': ['warn', {
|
|
300
|
+
argsIgnorePattern: '^(_|error|config|options|args|props|params|fastify|req|request|res|reply)',
|
|
301
|
+
varsIgnorePattern: '^(_|error|config|options|args|props|params)',
|
|
302
|
+
caughtErrorsIgnorePattern: '^(_|error|config|options|args|props|params)'
|
|
303
|
+
}]
|
|
304
|
+
}
|
|
305
|
+
}`;return e?r+`,
|
|
306
|
+
|
|
307
|
+
`+Zg():r},Zg=()=>` // TypeScript recommended config
|
|
308
|
+
{
|
|
309
|
+
files: ["**/*.{ts,tsx}"],
|
|
310
|
+
rules: {
|
|
311
|
+
// More opinionated TypeScript rules
|
|
312
|
+
'@typescript-eslint/no-explicit-any': 'warn',
|
|
313
|
+
'@typescript-eslint/explicit-function-return-type': 'off',
|
|
314
|
+
'@typescript-eslint/explicit-module-boundary-types': 'off',
|
|
315
|
+
'@typescript-eslint/no-non-null-assertion': 'warn',
|
|
316
|
+
'@typescript-eslint/no-inferrable-types': 'warn',
|
|
317
|
+
'@typescript-eslint/naming-convention': [
|
|
318
|
+
'error',
|
|
319
|
+
{
|
|
320
|
+
selector: 'interface',
|
|
321
|
+
format: ['PascalCase'],
|
|
322
|
+
custom: {
|
|
323
|
+
regex: '^I[A-Z]',
|
|
324
|
+
match: false
|
|
325
|
+
}
|
|
326
|
+
},
|
|
327
|
+
{
|
|
328
|
+
selector: 'typeAlias',
|
|
329
|
+
format: ['PascalCase']
|
|
330
|
+
},
|
|
331
|
+
{
|
|
332
|
+
selector: 'enum',
|
|
333
|
+
format: ['PascalCase']
|
|
334
|
+
}
|
|
335
|
+
],
|
|
336
|
+
'@typescript-eslint/consistent-type-imports': [
|
|
337
|
+
'error',
|
|
338
|
+
{
|
|
339
|
+
prefer: 'type-imports',
|
|
340
|
+
disallowTypeAnnotations: false
|
|
341
|
+
}
|
|
342
|
+
],
|
|
343
|
+
'@typescript-eslint/consistent-type-definitions': ['warn', 'interface'],
|
|
344
|
+
'@typescript-eslint/prefer-optional-chain': 'warn',
|
|
345
|
+
'@typescript-eslint/prefer-nullish-coalescing': 'warn',
|
|
346
|
+
'@typescript-eslint/prefer-ts-expect-error': 'warn',
|
|
347
|
+
|
|
348
|
+
// Import organization
|
|
349
|
+
'import/order': ['error', {
|
|
350
|
+
'groups': [
|
|
351
|
+
'type',
|
|
352
|
+
['builtin', 'external'],
|
|
353
|
+
['internal', 'parent', 'sibling', 'index'],
|
|
354
|
+
],
|
|
355
|
+
'alphabetize': {
|
|
356
|
+
'order': 'asc',
|
|
357
|
+
'caseInsensitive': true,
|
|
358
|
+
},
|
|
359
|
+
'pathGroups': [
|
|
360
|
+
// Handle all type imports first, from both external and internal
|
|
361
|
+
{
|
|
362
|
+
'pattern': 'type',
|
|
363
|
+
'group': 'type',
|
|
364
|
+
'position': 'before',
|
|
365
|
+
},
|
|
366
|
+
{
|
|
367
|
+
'pattern': '{type,types,Types}',
|
|
368
|
+
'group': 'type',
|
|
369
|
+
'position': 'before',
|
|
370
|
+
},
|
|
371
|
+
// Handle aliased paths as internal
|
|
372
|
+
{
|
|
373
|
+
'pattern': '@/**',
|
|
374
|
+
'group': 'internal',
|
|
375
|
+
}
|
|
376
|
+
],
|
|
377
|
+
'pathGroupsExcludedImportTypes': ['type'],
|
|
378
|
+
}],
|
|
379
|
+
|
|
380
|
+
// Arrow function preference
|
|
381
|
+
'prefer-arrow/prefer-arrow-functions': [
|
|
382
|
+
'error',
|
|
383
|
+
{
|
|
384
|
+
'disallowPrototype': true,
|
|
385
|
+
'singleReturnOnly': false,
|
|
386
|
+
'classPropertiesAllowed': false,
|
|
387
|
+
}
|
|
388
|
+
]
|
|
389
|
+
}
|
|
390
|
+
}`;var qc=(e=!1)=>["eslint-plugin-vue","vue-eslint-parser","tailwindcss",...e?ey():[]],ey=()=>[],Yc=()=>["import vue from 'eslint-plugin-vue';","import vueEslintParser from 'vue-eslint-parser';","import tailwindcss from 'eslint-plugin-tailwindcss';"],Kc=(e=!1)=>{let t=` // Vue config
|
|
391
|
+
{
|
|
392
|
+
files: ["**/*.vue"],
|
|
393
|
+
// Manually add Vue plugin
|
|
394
|
+
plugins: {
|
|
395
|
+
vue
|
|
396
|
+
},
|
|
397
|
+
languageOptions: {
|
|
398
|
+
parser: vueEslintParser,
|
|
399
|
+
parserOptions: {
|
|
400
|
+
ecmaVersion: 2022,
|
|
401
|
+
sourceType: 'module',
|
|
402
|
+
parser: tseslint.parser,
|
|
403
|
+
extraFileExtensions: [".vue"]
|
|
404
|
+
}
|
|
405
|
+
},
|
|
406
|
+
rules: {
|
|
407
|
+
// Essential Vue rules (from ESLint plugin Vue)
|
|
408
|
+
"vue/multi-word-component-names": "off",
|
|
409
|
+
"vue/no-mutating-props": "error",
|
|
410
|
+
"vue/no-reserved-component-names": "error",
|
|
411
|
+
"vue/no-use-v-if-with-v-for": "error",
|
|
412
|
+
"vue/require-v-for-key": "error",
|
|
413
|
+
"vue/valid-template-root": "error",
|
|
414
|
+
"vue/valid-v-bind": "error",
|
|
415
|
+
"vue/valid-v-cloak": "error",
|
|
416
|
+
"vue/valid-v-else-if": "error",
|
|
417
|
+
"vue/valid-v-else": "error",
|
|
418
|
+
"vue/valid-v-for": "error",
|
|
419
|
+
"vue/valid-v-html": "error",
|
|
420
|
+
"vue/valid-v-if": "error",
|
|
421
|
+
"vue/valid-v-model": "error",
|
|
422
|
+
"vue/valid-v-on": "error",
|
|
423
|
+
"vue/valid-v-once": "error",
|
|
424
|
+
"vue/valid-v-pre": "error",
|
|
425
|
+
"vue/valid-v-show": "error",
|
|
426
|
+
"vue/valid-v-slot": "error",
|
|
427
|
+
"vue/valid-v-text": "error",
|
|
428
|
+
...tailwindcss.configs.recommended.rules
|
|
429
|
+
}
|
|
430
|
+
}`;return e?t+`,
|
|
431
|
+
|
|
432
|
+
`+ty():t},ty=()=>` // Vue recommended config
|
|
433
|
+
{
|
|
434
|
+
files: ["**/*.vue"],
|
|
435
|
+
rules: {
|
|
436
|
+
// Recommended Vue rules
|
|
437
|
+
"vue/component-name-in-template-casing": ["error", "PascalCase"],
|
|
438
|
+
"vue/match-component-file-name": [
|
|
439
|
+
"error",
|
|
440
|
+
{
|
|
441
|
+
extensions: ["vue"],
|
|
442
|
+
shouldMatchCase: true
|
|
443
|
+
}
|
|
444
|
+
],
|
|
445
|
+
"vue/match-component-import-name": "error",
|
|
446
|
+
"vue/attribute-hyphenation": "error",
|
|
447
|
+
"vue/component-definition-name-casing": ["error", "PascalCase"],
|
|
448
|
+
"vue/html-closing-bracket-newline": "error",
|
|
449
|
+
"vue/html-closing-bracket-spacing": "error",
|
|
450
|
+
"vue/html-end-tags": "error",
|
|
451
|
+
"vue/html-indent": ["error", 2],
|
|
452
|
+
"vue/html-quotes": "error",
|
|
453
|
+
"vue/html-self-closing": ["error", {
|
|
454
|
+
"html": {
|
|
455
|
+
"void": "any",
|
|
456
|
+
"normal": "any",
|
|
457
|
+
"component": "always"
|
|
458
|
+
}
|
|
459
|
+
}],
|
|
460
|
+
"vue/max-attributes-per-line": ["error", {
|
|
461
|
+
"singleline": 3,
|
|
462
|
+
"multiline": 1
|
|
463
|
+
}],
|
|
464
|
+
"vue/no-multi-spaces": "error",
|
|
465
|
+
"vue/no-spaces-around-equal-signs-in-attribute": "error",
|
|
466
|
+
"vue/no-template-shadow": "error",
|
|
467
|
+
"vue/one-component-per-file": "error",
|
|
468
|
+
"vue/prop-name-casing": ["error", "camelCase"],
|
|
469
|
+
"vue/require-default-prop": "error",
|
|
470
|
+
"vue/require-prop-types": "error",
|
|
471
|
+
"vue/v-bind-style": "error",
|
|
472
|
+
"vue/v-on-style": "error",
|
|
473
|
+
"vue/v-slot-style": "error"
|
|
474
|
+
}
|
|
475
|
+
}`;import{existsSync as Po}from"fs";import $o from"path";var Xc=e=>{let t=e?.eslint?.useRecommended;return e.frontend?.framework==="vue"?qc(t):e.frontend?.framework==="react"?Bc(t):[]},zc=e=>{let t=[...e].sort(),r=Po($o.join(process.cwd(),"yarn.lock")),n=Po($o.join(process.cwd(),"pnpm-lock.yaml")),o=Po($o.join(process.cwd(),"bun.lockb")),i="npm",s="install";return r?(i="yarn",s="add"):n?(i="pnpm",s="add"):o&&(i="bun",s="add"),`${i} ${s} -D ${t.join(" ")}`};var Qr=async(e,t,r=!0)=>{let n=Jc.join(t,"eslint.config.mjs");h.debug(`Generating eslint.config.mjs in ${t}`);let o=e.eslint?.useRecommended!==!1,i=ry(e,o),s=[];if(s.push(` // TS ESLint base rules
|
|
476
|
+
{
|
|
477
|
+
files: ["**/*.{ts,tsx}"],
|
|
478
|
+
plugins: {
|
|
479
|
+
'@typescript-eslint': tseslint.plugin
|
|
480
|
+
},
|
|
481
|
+
languageOptions: {
|
|
482
|
+
parser: tseslint.parser
|
|
483
|
+
},
|
|
484
|
+
rules: {
|
|
485
|
+
// Essential TypeScript syntax rules - equivalent to tseslint.configs.recommended
|
|
486
|
+
"@typescript-eslint/ban-ts-comment": "warn",
|
|
487
|
+
"@typescript-eslint/no-explicit-any": "warn",
|
|
488
|
+
"@typescript-eslint/no-var-requires": "error",
|
|
489
|
+
"@typescript-eslint/no-empty-interface": "warn",
|
|
490
|
+
"@typescript-eslint/no-inferrable-types": "warn",
|
|
491
|
+
"@typescript-eslint/no-non-null-asserted-optional-chain": "error",
|
|
492
|
+
"@typescript-eslint/no-non-null-assertion": "warn",
|
|
493
|
+
"@typescript-eslint/no-unnecessary-type-constraint": "error"
|
|
494
|
+
}
|
|
495
|
+
}`),s.push(` // Ignore patterns
|
|
496
|
+
{
|
|
497
|
+
ignores: [
|
|
498
|
+
"**/node_modules/**",
|
|
499
|
+
"**/dist/**",
|
|
500
|
+
"**/build/**",
|
|
501
|
+
"**/coverage/**",
|
|
502
|
+
"**/*.d.ts",
|
|
503
|
+
".raclette/**",
|
|
504
|
+
".gitignore"
|
|
505
|
+
]
|
|
506
|
+
}`),s.push(Mc(o)),s.push(Wc(o)),e.frontend?.framework==="vue"&&s.push(Kc(o)),e.frontend?.framework==="react"&&s.push(Vc(o)),e.eslint?.rules&&Object.keys(e.eslint.rules).length>0){let c=JSON.stringify(e.eslint.rules,null,2).replace(/"([^"]+)":/g,"$1:");s.push(` // User custom rules
|
|
507
|
+
{
|
|
508
|
+
rules: ${c}
|
|
509
|
+
}`)}if(e.eslint?.ignores&&e.eslint.ignores.length>0){let c=JSON.stringify(e.eslint.ignores).replace(/^\[|\]$/g,"");s.push(` // User custom ignores
|
|
510
|
+
{
|
|
511
|
+
ignores: [${c}]
|
|
512
|
+
}`)}s.push(` // Prettier config (must be last)
|
|
513
|
+
{
|
|
514
|
+
rules: {
|
|
515
|
+
...eslintConfigPrettier.rules
|
|
516
|
+
}
|
|
517
|
+
}`);let a=`/*#############################################################
|
|
518
|
+
|
|
519
|
+
Generated ESLint Configuration for ${e.name||"raclette"}
|
|
520
|
+
This file is auto-generated and should not be edited directly
|
|
521
|
+
Extend this config in your project's eslint.config.mjs
|
|
522
|
+
|
|
523
|
+
#############################################################*/
|
|
524
|
+
|
|
525
|
+
// Import required plugins and parsers
|
|
526
|
+
${i.join(`
|
|
527
|
+
`)}
|
|
528
|
+
|
|
529
|
+
// Exported configuration that can be extended
|
|
530
|
+
export const racletteEslintConfig = [
|
|
531
|
+
${s.join(`,
|
|
532
|
+
|
|
533
|
+
`)}
|
|
534
|
+
]
|
|
535
|
+
|
|
536
|
+
// Helper function for extending the config
|
|
537
|
+
export const withRaclette = (...userConfigs) => {
|
|
538
|
+
// Simple array concatenation
|
|
539
|
+
return [...racletteEslintConfig, ...userConfigs.flat()];
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
// Default export for direct usage
|
|
543
|
+
export default racletteEslintConfig
|
|
544
|
+
`;await Qc.writeFile(n,a),r&&await ny(t,e),h.debug(`Generated eslint.config.mjs in ${t}`)},ry=(e,t)=>{let r=[];return r.push(...Fc()),r.push(...Uc(t)),e.frontend?.framework==="vue"?r.push(...Yc()):e.frontend?.framework==="react"&&r.push(...Hc()),r},ny=async(e,t)=>{let r=Jc.join(e,"ESLINT-README.md"),n=t.eslint?.useRecommended!==!1,o=jc(n),i=Gc(n),s=Xc(t),a=[...o,...i,...s],l=`# Raclette ESLint Configuration
|
|
545
|
+
|
|
546
|
+
This directory contains an auto-generated ESLint configuration for your Raclette project.
|
|
547
|
+
|
|
548
|
+
## Required Dependencies
|
|
549
|
+
|
|
550
|
+
To use this ESLint configuration, you need to install the following dependencies:
|
|
551
|
+
|
|
552
|
+
\`\`\`bash
|
|
553
|
+
${zc(a)}
|
|
554
|
+
\`\`\`
|
|
555
|
+
|
|
556
|
+
## How to Use
|
|
557
|
+
|
|
558
|
+
Create an \`eslint.config.mjs\` file in your project root with:
|
|
559
|
+
|
|
560
|
+
\`\`\`js
|
|
561
|
+
// eslint.config.mjs
|
|
562
|
+
import { withRaclette } from './.raclette/eslint.config.mjs'
|
|
563
|
+
|
|
564
|
+
export default withRaclette(
|
|
565
|
+
// Your custom configs here
|
|
566
|
+
{
|
|
567
|
+
// Example: Override a rule
|
|
568
|
+
rules: {
|
|
569
|
+
'no-console': 'off'
|
|
570
|
+
}
|
|
571
|
+
},
|
|
572
|
+
// Add more config objects as needed
|
|
573
|
+
)
|
|
574
|
+
\`\`\`
|
|
575
|
+
|
|
576
|
+
## Features
|
|
577
|
+
|
|
578
|
+
- Project-aware configuration that understands your Raclette project structure
|
|
579
|
+
- Framework-specific rules (Vue, React) automatically included based on your project
|
|
580
|
+
- Seamless integration with your IDE
|
|
581
|
+
- Clean, modern approach using ESLint's flat config system
|
|
582
|
+
|
|
583
|
+
## Editor Integration
|
|
584
|
+
|
|
585
|
+
For Visual Studio Code users, make sure to add this to your \`.vscode/settings.json\`:
|
|
586
|
+
|
|
587
|
+
\`\`\`json
|
|
588
|
+
{
|
|
589
|
+
"eslint.experimental.useFlatConfig": true
|
|
590
|
+
}
|
|
591
|
+
\`\`\`
|
|
592
|
+
|
|
593
|
+
This enables support for the flat config format in the ESLint extension.
|
|
594
|
+
|
|
595
|
+
## Adding Custom Rules
|
|
596
|
+
|
|
597
|
+
You can customize the ESLint rules by:
|
|
598
|
+
|
|
599
|
+
1. Adding rules in your \`eslint.config.mjs\` file:
|
|
600
|
+
|
|
601
|
+
\`\`\`js
|
|
602
|
+
export default withRaclette(
|
|
603
|
+
{
|
|
604
|
+
// Your custom rules
|
|
605
|
+
rules: {
|
|
606
|
+
'indent': ['error', 4],
|
|
607
|
+
'quotes': ['error', 'single']
|
|
608
|
+
}
|
|
609
|
+
}
|
|
610
|
+
)
|
|
611
|
+
\`\`\`
|
|
612
|
+
|
|
613
|
+
2. Or by adding them to your \`raclette.config.js\` file:
|
|
614
|
+
|
|
615
|
+
\`\`\`js
|
|
616
|
+
export default {
|
|
617
|
+
// ...other Raclette config
|
|
618
|
+
eslint: {
|
|
619
|
+
useRecommended: true, // Set to false to disable recommended rules
|
|
620
|
+
rules: {
|
|
621
|
+
'indent': ['error', 4],
|
|
622
|
+
'quotes': ['error', 'single']
|
|
623
|
+
},
|
|
624
|
+
ignores: [
|
|
625
|
+
'legacy/**'
|
|
626
|
+
]
|
|
627
|
+
}
|
|
628
|
+
}
|
|
629
|
+
\`\`\`
|
|
630
|
+
`;await Qc.writeFile(r,l)};import{execSync as vk}from"child_process";import J from"fs-extra";import te from"path";import uk from"chokidar";import $ from"fs-extra";import S from"path";var $d=[".prettierrc","eslint.config.js"],pk=["bin/check-dependencies.sh"],Oe=async()=>{let e=S.join(process.cwd(),".raclette");return await $.ensureDir(e),e},Nn=async(e,t,r)=>{let n=process.cwd(),o=S.join(n,".raclette"),i=S.join(o,"virtual"),s=Ln();h.debug(`\u{1F4E6} Using core package at: ${s}`),await yk(o,s,pk),h.debug("[VFS] Cleaning virtual file system directory..."),await $.pathExists(i)&&await $.rm(i,{recursive:!0}),await $.ensureDir(i);let a=[{name:"generated-service-files",path:o,servicePathMap:{backend:".",frontend:"."},priority:1},{name:"app",path:n,servicePathMap:{backend:"services",frontend:"services"},folderMappings:{shared:"backend/src/shared/app",i18n:"frontend/src/orchestrator/i18n/app"},priority:10},{name:"core-types",path:s,servicePathMap:{backend:"",frontend:""},folderMappings:{"src/types.ts":["backend/types/index.ts","frontend/types/index.ts"]},priority:29},{name:"core",path:s,servicePathMap:{backend:"services",frontend:"services"},priority:30},...e?.sourceDirectories||[],...t??[]],c=new Map,l={backend:["/"],frontend:["/"]},u=[...a].sort((y,k)=>k.priority-y.priority).map(y=>{let k=y.path.startsWith(".")?S.join(process.cwd(),y.path):y.path;return{...y,path:k}});await mk(u,c,i,l,$d,o);let p=[],d=y=>{let k=S.relative(n,y);return c.get(k)||y},g=()=>{p.forEach(k=>k.close()),p.length=0,dk(u,l,i).forEach(k=>{if($.existsSync(k.sourcePath)){let C=fk(k,u,c,$d);p.push(C)}})},m=()=>p.forEach(y=>y.close());return r||g(),{resolveFile:d,watchFiles:g,close:m}},dk=(e,t,r)=>{let n=[];return e.forEach(o=>{Object.entries(t).forEach(([i,s])=>{s.forEach(a=>{let c=o.servicePathMap?.[i]||"",l=S.join(o.path,c,i,a);n.push({sourcePath:l,sourceDir:o,targetResolver:u=>S.join(r,i,a,u),mappingKeyResolver:u=>S.join(i,a,u)})})}),o.folderMappings&&Object.entries(o.folderMappings).forEach(([i,s])=>{let a=S.join(o.path,i);$.existsSync(a)&&$.statSync(a).isFile()?(Array.isArray(s)?s:[s]).forEach(u=>{n.push({sourcePath:S.dirname(a),sourceDir:o,targetResolver:p=>S.basename(a)===p?S.join(r,u):S.join(r,u,p),mappingKeyResolver:p=>S.basename(a)===p?i:S.join(i,p)})}):n.push({sourcePath:a,sourceDir:o,targetResolver:l=>S.join(r,i,l),mappingKeyResolver:l=>S.join(i,l)})})}),n},fk=(e,t,r,n)=>{h.debug(`[VFS] Setting up watcher for ${e.sourceDir.name}: ${e.sourcePath}`);let o=e.sourceDir.name==="generated-service-files"?["**/*.vue","**/*.ts","**/*.js","**/*.css","**/*.scss","**/package.json","**/yarn.lock","**/*.json"]:["**/*.vue","**/*.ts","**/*.js","**/*.css","**/*.scss"],i=uk.watch(o,{cwd:e.sourcePath,ignoreInitial:!0,ignored:["**/node_modules/**","**/.git/**","**/dist/**"]}),s=async(a,c=!1)=>{if(gk(a,n))return;let l=e.mappingKeyResolver(a),u=e.targetResolver(a);await hk(t,r,l,u,a,c)};return i.on("add",a=>s(a)),i.on("change",a=>s(a)),i.on("unlink",a=>s(a,!0)),i},hk=async(e,t,r,n,o,i)=>{let s=[...e].sort((a,c)=>a.priority-c.priority);if(i){let a=Dd(s,r,o);a?(await $.ensureDir(S.dirname(n)),await $.copy(a.fullPath,n),t.set(r,n),h.debug(`[VFS] Updated ${r} from ${a.sourceDir.name}`)):(await $.pathExists(n)&&await $.remove(n),t.delete(r),h.debug(`[VFS] Removed ${r}`))}else{let a=Dd(s,r,o);a&&(await $.ensureDir(S.dirname(n)),await $.copy(a.fullPath,n),t.set(r,n),h.debug(`[VFS] Updated ${r} from ${a.sourceDir.name}`))}},Dd=(e,t,r)=>{for(let n of e){let o={backend:["/"],frontend:["/"]};for(let[i,s]of Object.entries(o))for(let a of s)if(S.join(i,a,r)===t){let l=n.servicePathMap?.[i]||"",u=S.join(n.path,l,i,a,r);if($.existsSync(u))return{sourceDir:n,fullPath:u}}if(n.folderMappings)for(let[i,s]of Object.entries(n.folderMappings)){let a=Array.isArray(s)?s:[s];for(let c of a){let l,u;if(i===t){if(u=S.join(n.path,i),$.existsSync(u))return{sourceDir:n,fullPath:u}}else if(l=S.join(i,r),l===t&&(u=S.join(n.path,i,r),$.existsSync(u)))return{sourceDir:n,fullPath:u}}}}return null},Nd=async(e,t,r,n,o,i)=>{if(!await $.pathExists(t))return;await $.ensureDir(S.dirname(r));let s=e.name==="generated-service-files";await $.copy(t,r,{overwrite:!0,filter:l=>{let u=S.basename(l);if(i.includes(u))return!1;if(s&&(u==="package.json"||u==="yarn.lock"))return!0;if(!s&&(u==="package.json"||u==="yarn.lock"))return!1;let p=S.relative(t,l);return!p.startsWith("node_modules")&&!p.startsWith(".git")&&!p.startsWith("dist")}});let c=await bk(t,s?["**/*.vue","**/*.ts","**/*.js","**/*.json","**/*.css","**/*.scss","**/package.json","**/yarn.lock"]:["**/*.vue","**/*.ts","**/*.js","**/*.json","**/*.css","**/*.scss"]);for(let l of c){let u=S.basename(l);if(i.includes(u))continue;if(!(s&&(u==="package.json"||u==="yarn.lock"))){if(!s&&(u==="package.json"||u==="yarn.lock"))continue}let p=S.relative(t,l),d=S.join(o,p),g=S.join(r,p);n.set(d,g)}h.debug(`[VFS] Processed ${e.name}: ${t} -> ${r}`)},mk=async(e,t,r,n,o,i)=>{t.clear();for(let s of e){if(!await $.pathExists(s.path)){console.warn(f.yellow(`[VFS] Source directory not found: ${s.path}`));continue}for(let[a,c]of Object.entries(n))for(let l of c){let u=s.servicePathMap?.[a]||"";if(!u)continue;let p=S.join(s.path,u,a,l),d=S.join(r,a,l),g=S.join(a,l);await Nd(s,p,d,t,g,o)}if(s.folderMappings)for(let[a,c]of Object.entries(s.folderMappings)){let l=S.join(s.path,a),u=(Array.isArray(c)?c:[c]).map(d=>S.join(r,d)),p=await $.pathExists(l)&&(await $.stat(l)).isFile();if(!p&&s.clear)for(let d of u)await $.rm(d,{recursive:!0,force:!0}),await $.ensureDir(d);if(p)for(let d of u)await $.ensureDir(S.dirname(d)),await $.copy(l,d),t.set(a,d),h.debug(`[VFS] Mapped individual file ${a} -> ${d}`);else for(let d of u)await Nd(s,l,d,t,d,o)}}h.debug("[VFS] Built virtual file system")},gk=(e,t)=>t.includes(S.basename(e));var yk=async(e,t,r)=>{let n=S.join(e,"dist");await $.ensureDir(n);for(let o of r){let i=S.join(t,o),s=S.basename(o),a=S.join(n,s);await $.pathExists(a)&&await $.remove(a),await $.pathExists(i)&&(await $.ensureDir(S.dirname(a)),await $.copy(i,a,{overwrite:!0,preserveTimestamps:!1}),s.endsWith(".sh")&&await $.chmod(a,493),h.debug(`[VFS] Copied ${s} to dist directory`))}},bk=async(e,t)=>{let{globby:r}=await Promise.resolve().then(()=>(Pd(),Td));return r(t,{cwd:e,absolute:!0,ignore:["**/node_modules/**","**/.git/**","**/dist/**"]})},Ln=()=>{let e=process.cwd();h.debug("process.cwd(): "+process.cwd());let r=e.includes("node_modules")?[S.join(e.match(/(.*node_modules)/)?.[1]||"","@raclettejs/core"),S.join(e,"node_modules","@raclettejs/core"),S.join(e,"..","..","..","@raclettejs/core")]:[S.join(e,"node_modules","@raclettejs/core"),S.resolve(e,"..","..","raclette"),S.resolve(e,"..","..","@raclettejs/core"),S.resolve(e,"..","..","core"),S.resolve(e,"..","raclette"),S.resolve(e,"..","@raclettejs/core"),S.resolve(e,"..","core")];for(let n of r)if($.existsSync(n)){let o=S.join(n,"package.json");if($.existsSync(o))try{if(JSON.parse($.readFileSync(o,"utf8")).name==="@raclettejs/core")return n}catch{}}throw h.error("Could not determine core package path to set up VFS. Canceling..."),new Error("Could not determine core package path to set up VFS. Canceling...")},Ls=async(e,t)=>await $.pathExists(e)?(await $.ensureDir(S.dirname(t)),await $.copy(e,t),h.debug(`\u2705 Copied ${S.basename(e)} to ${t}`),!0):(h.warn(f.yellow(`[VFS]: Specified source file not found for merging process: ${e}`)),!1);var Ld=e=>e==="frontend"||e==="backend",Id=e=>e==="workbench.frontend"||e==="workbench.backend",_k=async(e,t)=>{h.progress(`Loading merged packages for ${e}...`);let r=t.packageMerging?.[e]||[{file:"./packages.json",key:e}],n={},o={};for(let i of r)try{let s=await Ek(i);if(s.dependencies){n={...n,...s.dependencies};let a=Object.keys(s.dependencies).length;a>0&&h.success(`Merged ${a} dependencies from ${i.file}:${i.key}`)}if(s.devDependencies){o={...o,...s.devDependencies};let a=Object.keys(s.devDependencies).length;a>0&&h.success(`Merged ${a} devDependencies from ${i.file}:${i.key}`)}}catch(s){throw h.error(`Error loading package source ${i.file}:${i.key} - ${s.message}`),h.error(`Aborting package setup for ${e}`),s}return h.raw(f.blue(`\u{1F4CA} Final ${e} package count: ${Object.keys(n).length} deps, ${Object.keys(o).length} devDeps`)),{dependencies:n,devDependencies:o}},Ek=async e=>{if(h.progress(`Loading ${e.file}:${e.key}...`),!await J.pathExists(e.file))return h.debug("packages.json file does not yet exist, no packages will be added."),Promise.resolve({dependencies:{},devDependencies:{}});try{let t=await J.readJson(e.file),r=e.key.split("."),n=t;for(let o of r)if(n&&typeof n=="object"&&o in n)n=n[o];else return h.debug(`\u26A0\uFE0F Key '${e.key}' not found in ${e.file}, skipping`),{};return!n||typeof n!="object"?(h.warn(`Invalid package data at '${e.key}' in ${e.file}, skipping`),{}):{dependencies:n.dependencies||{},devDependencies:n.devDependencies||{}}}catch(t){throw new Error(`Failed to parse ${e.file}: ${t.message}`)}},gr=(e,t)=>{let r=t.lockFiles?.[e];if(r)return h.debug(`\u{1F512} Using custom lock file path for ${e}: ${r}`),r;let n=te.join(process.cwd(),`${e}.yarn.lock`);return h.debug(`\u{1F512} Using default lock file path for ${e}: ${n}`),n},js=async(e,t)=>{let r=await Oe();if(!t)try{t=await import(te.join(process.cwd(),"raclette.config.js")).then(n=>n.default||n)}catch(n){h.warn(`Could not load raclette.config.js: ${n.message}`),t={name:"raclette-app"}}Ld(e)&&await Is(`app/${e}/package.json`,te.join(r,e),e,t),Id(e)&&h.instruction(`Workbench target ${e} - packages.json updated. You need to restart your workbench service manually.`)},kk=async e=>{if(!e.plugins||e.plugins.length===0)return{};let t=te.join(process.cwd(),"package.json");if(!await J.pathExists(t))return console.warn(f.yellow("Warning: No package.json found in app directory")),{};try{let r=await J.readJson(t),n={...r.dependencies||{},...r.devDependencies||{}},o=e.plugins.map(s=>typeof s=="string"?s:s[0]),i={};for(let s of o)n[s]?(i[s]=n[s],console.log(f.blue(`\u{1F4E6} Found plugin ${s}@${n[s]}`))):console.warn(f.yellow(`\u26A0\uFE0F Plugin ${s} is enabled in config but not found in package.json`));return i}catch(r){return console.warn(f.yellow(`Error reading app package.json: ${r.message}`)),{}}},Is=async(e,t,r,n)=>{let o=Ln();h.progress(`Setting up package.json for ${r}`),h.debug(`Source: ${e}`),h.debug(`Target dir: ${t}`),await J.ensureDir(t);let i=te.join(o,e),s=te.dirname(i),a=te.join(t,"package.json");if(await J.pathExists(i))try{h.debug("Reading source package.json...");let c=await J.readJson(i),l={dependencies:{},devDependencies:{}};(r==="frontend"||r==="backend")&&(l=await _k(r,n));let u=await kk(n),p={...c.dependencies,...l.dependencies,...u},d={...c.devDependencies,...l.devDependencies},g=mt(c,{dependencies:p,devDependencies:d});h.debug("Writing merged package.json..."),await J.writeJson(a,g,{spaces:2}),h.success(`Created package.json for ${r}`),await Ak(s,t,r,n)}catch(c){throw h.error(`Error setting up package.json for ${r}: ${c.message}`),c}else h.warn(`Warning: Could not find package.json at ${i}`)},In=async e=>{let t=te.join(process.cwd(),".raclette");if(h.progress("Setting up node packages for services..."),e.services.backend?.enabled){let r=te.join(t,"backend");await Is("services/backend/package.json",r,"backend",e);let n=gr("backend",e),o=te.join(r,"yarn.lock");await Ls(n,o)}if(e.services.frontend?.enabled){let r=te.join(t,"frontend");await Is("services/frontend/package.json",r,"frontend",e);let n=gr("frontend",e),o=te.join(r,"yarn.lock");await Ls(n,o)}},xk=async()=>{let e=te.join(process.cwd(),"packages.json");if(await J.pathExists(e))try{return await J.readJson(e)}catch(t){h.warn(`Error reading packages.json: ${t.message}`)}return{frontend:{dependencies:{},devDependencies:{}},backend:{dependencies:{},devDependencies:{}},workbench:{frontend:{dependencies:{},devDependencies:{}},backend:{dependencies:{},devDependencies:{}}}}},wk=async e=>{let t=te.join(process.cwd(),"packages.json");await J.writeJson(t,e,{spaces:2})},Ck=e=>{try{let t=vk(`yarn info ${e} version --json`,{stdio:"pipe",encoding:"utf8"});if(!t)throw new Error("No package found!");return JSON.parse(t).data}catch(t){return h.error(`Package verification failed for ${e}: ${t.message}`),null}},jd=async(e,t,r=!1)=>{h.raw(f.blue(`\u{1F4E6} Validating package ${t} for ${e}...`));let n=await Ck(t);if(!n)throw new Error(`Package ${t} not found or is not accessible`);h.success(`Found package ${t}@${n}`);let o=await xk(),i=r?"devDependencies":"dependencies";if(Ld(e))o[e]||(o[e]={}),o[e][i]||(o[e][i]={}),o[e][i][t]=n,console.log(f.green(`\u2705 Added ${t}@${n} to ${e} ${i}`));else if(Id(e)){let s=e==="workbench.frontend"?"frontend":"backend";o.workbench||(o.workbench={}),o.workbench[s]||(o.workbench[s]={}),o.workbench[s][i]||(o.workbench[s][i]={}),o.workbench[s][i][t]=n,console.log(f.green(`\u2705 Added ${t}@${n} to ${e} ${i}`)),console.log(f.yellow("\u2139\uFE0F Note: Workbench packages are stored in packages.json but package.json files are not updated"))}await wk(o),console.log(f.green("\u2705 Updated packages.json in project root"))},jn=async e=>{let t=Ln();if(h.debug("\u{1F512} Ensuring lock files exist for volume mounting..."),e.services.frontend?.enabled){let r=gr("frontend",e);if(await J.pathExists(r))h.debug(`\u{1F512} ${te.basename(r)} already exists`);else{h.debug(`\u{1F512} Creating initial lock file: ${r}`);let n=te.join(t,"app","frontend","yarn.lock");await J.pathExists(n)?(h.debug("\u{1F512} Using core package yarn.lock as starting point for frontend"),await J.copy(n,r)):(h.debug("\u{1F512} No core frontend yarn.lock found, creating minimal lock file"),await J.writeFile(r,`# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
|
631
|
+
# yarn lockfile v1
|
|
632
|
+
|
|
633
|
+
`)),h.debug(`\u{1F512}\u2705 Created ${te.basename(r)}`)}}if(e.services.backend?.enabled){let r=gr("backend",e);if(await J.pathExists(r))h.debug(`\u{1F512} ${te.basename(r)} already exists`);else{h.debug(`\u{1F512} Creating initial lock file: ${r}`);let n=te.join(t,"app","backend","yarn.lock");await J.pathExists(n)?(h.debug("\u{1F512} Using core package yarn.lock as starting point for backend"),await J.copy(n,r)):(h.debug("\u{1F512} No core backend yarn.lock found, creating minimal lock file"),await J.writeFile(r,`# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
|
634
|
+
# yarn lockfile v1
|
|
635
|
+
|
|
636
|
+
`)),h.debug(`\u{1F512}\u2705 Created ${te.basename(r)}`)}}h.success("Lock files ready for volume mounting")},Ak=async(e,t,r,n)=>{let o=te.join(t,"yarn.lock");h.debug(`\u{1F512} Setting up yarn.lock for ${r} build context`);let i;if((r==="frontend"||r==="backend")&&(i=gr(r,n)),i&&await J.pathExists(i))h.debug(`\u{1F512} Copying configured lock file to build context: ${i}`),await J.copy(i,o);else{let s=te.join(e,"yarn.lock");await J.pathExists(s)?(h.debug(`\u{1F512} Using core yarn.lock for ${r} build context`),await J.copy(s,o)):(h.debug(`\u{1F512} Creating minimal yarn.lock for ${r} build context`),await J.writeFile(o,`# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
|
637
|
+
# yarn lockfile v1
|
|
638
|
+
|
|
639
|
+
`))}};import Fd from"fs-extra";import Md from"path";var Fn=async(e,t)=>{let r=Md.join(t,"tsconfig.json"),n={compilerOptions:{target:"ES2020",module:"ESNext",moduleResolution:"node",esModuleInterop:!0,resolveJsonModule:!0,outDir:"dist",declaration:!0,emitDeclarationOnly:!0,strict:!0,paths:{"@app":["../frontend/src/app"],"@app/*":["../frontend/src/app/*"],"@shared/app/*":["../shared/*"],"@shared/*":["./virtual/backend/src/shared/*"],"@raclettejs/core/backend":["../node_modules/@raclettejs/core/services/backend/src"],"@raclettejs/core/backend/*":["../node_modules/@raclettejs/core/services/backend/src/*"],"@raclettejs/workbench/app/*":["../node_modules/@raclettejs/workbench/frontend/src/app/*"],"@raclettejs/workbench/*":["../node_modules/@raclettejs/workbench/*"],"@raclettejs/core/frontend":["../node_modules/@raclettejs/core/services/frontend/src/core"],"@raclettejs/core/frontend/*":["../node_modules/@raclettejs/core/services/frontend/src/core/*"],"@raclettejs/core/orchestrator":["../node_modules/@raclettejs/core/services/frontend/src/orchestrator"],"@raclettejs/core/orchestrator/*":["../node_modules/@raclettejs/core/services/frontend/src/orchestrator/*"],"@raclettejs/core/orchestrator/components":["../node_modules/@raclettejs/core/services/frontend/src/orchestrator/components"],"@raclettejs/core/orchestrator/components/*":["../node_modules/@raclettejs/core/services/frontend/src/orchestrator/components/*"],"@raclettejs/core/orchestrator/composables":["../node_modules/@raclettejs/core/services/frontend/src/orchestrator/composables"],"@raclettejs/core/orchestrator/composables/*":["../node_modules/@raclettejs/core/services/frontend/src/orchestrator/composables/*"],"@raclettejs/core":["../node_modules/@raclettejs/core"]},typeRoots:["./node_modules/@types","./node_modules/@raclettejs/core/types"]},include:["./src/**/*","types/**/*","../**/*","../node_modules/@raclettejs/core/*"],exclude:["../node_modules","../dist","./**","../node_modules/@raclettejs/core/node_modules"]};e.typescript?.compilerOptions&&Object.assign(n.compilerOptions,e.typescript.compilerOptions),e?.frontend?.framework==="vue"&&(Sk(t),n.include.push("shims.vue.d.ts")),await Fd.writeFile(r,JSON.stringify(n,null,2)),h.debug(`Generated tsconfig.json in ${t}`)},Sk=async e=>{await Fd.writeFile(Md.join(e,"shims.vue.d.ts"),`declare module "*.vue" {
|
|
640
|
+
import { DefineComponent } from "vue"
|
|
641
|
+
const component: DefineComponent<{}, {}, any>
|
|
642
|
+
export default component
|
|
643
|
+
}`)};var br=new Map,Bd=async(e,t)=>{h.raclette("Starting development environment...");let r=Ne.dirname(t.dockerComposePath),n=e.name??Ne.basename(process.cwd()),o=Pa(),i={kill:()=>(o(),!0)};br.set("originalConfigWatcher",i),await jn(e),await In(e),await Nn(e),Gr("raclette_shared"),await To(e,t.workingDir,t.dockerComposePath,!1,"development",!0),await Fn(e,r),await Qr(e,r);let s=await Xr(e,r,t.forceRebuild??!1);s.length>0&&await zr(e,r,s,{noCache:t.noCache});let a=Ok(e),c=Tk(a);c.length>0&&h.info(`Found existing services: ${c.join(", ")}`);let l=Pk(e,n,t.dockerComposePath);["SIGINT","SIGTERM"].forEach(u=>{process.removeAllListeners(u),process.on(u,()=>l(u))}),t.quiet?(await Hd(e,n,t.dockerComposePath,a,c),console.log(f.green(`
|
|
644
|
+
\u2705 Development environment is ready!`)),a.frontend.enabled&&console.log(f.blue(`\u{1F30D} Frontend running at: http://localhost:${a.frontend.port}`)),a.backend.enabled&&console.log(f.blue(`\u{1F680} Server running at: http://localhost:${a.backend.port}`)),console.log(f.yellow(`
|
|
645
|
+
\u2139\uFE0F Services are running in detached mode (quiet)`)),console.log(f.yellow('Use "raclette down" to stop the services when finished'))):await $k(e,n,t.dockerComposePath,a,c,t.logFilter,t.verbose)},Ok=e=>{let t=e.name??Ne.basename(process.cwd());return{frontend:{name:"frontend",containerName:e.services.frontend?.name??`${t}-frontend`,port:e.services.frontend?.port??8081,enabled:e.services.frontend?.enabled??!1,isDatabaseService:!1},backend:{name:"backend",containerName:e.services.backend?.name??`${t}-backend`,port:e.services.backend?.port??8082,enabled:e.services.backend?.enabled??!1,isDatabaseService:!1},mongodb:{name:"mongodb",containerName:e.services.mongodb?.name??`${t}-mongodb`,port:e.services.mongodb?.port??27017,enabled:e.services.mongodb?.enabled??!1,volumeName:e.services.mongodb?.volume??`${t}-mongodb`,isDatabaseService:!0},cache:{name:"cache",containerName:e.services.cache?.name??`${t}-cache`,port:e.services.cache?.port??6379,enabled:e.services.cache?.enabled??!1,volumeName:e.services.cache?.volume??`${t}-cache`,isDatabaseService:!0}}},Tk=e=>{let t=[];return Object.entries(e).forEach(([r,n])=>{n.enabled&&ir(n.containerName)&&t.push(r)}),t},Pk=(e,t,r)=>n=>{console.log(`
|
|
646
|
+
`+"=".repeat(80)),console.log(f.bold.yellow(` CLEANUP: Shutting down services after ${n}...`)),console.log("=".repeat(80)+`
|
|
647
|
+
`);for(let[o,i]of br.entries())i&&!i.killed&&typeof i.kill=="function"&&(console.log(f.yellow(`Stopping ${o} process...`)),i.kill("SIGTERM"));try{Vd(e),ye(["-p",t,"-f",r,"down"],{stdio:"inherit"}),console.log(`
|
|
648
|
+
`+"=".repeat(80)),console.log(f.bold.green(" \u2705 CLEANUP COMPLETE: All services stopped successfully")),console.log("=".repeat(80))}catch(o){console.error(f.red("Error stopping Docker services:"),o)}process.exit(0)},Hd=async(e,t,r,n,o,i)=>{if(console.log(f.blue("\u{1F433} Starting Docker services...")),!await yr.pathExists(r)){let a=`Docker compose file not found: ${r}`;throw h.error(a),new Error(a)}let s=[];if(Object.entries(n).forEach(([a,c])=>{let l=a;if(c.enabled){if(o.includes(l)){h.info(`Skipping existing service: ${l}`);return}s.push(l)}}),s.length===0){h.warn("No Docker services to start! All services either exist or are not enabled.");return}h.raw(f.blue(`\u{1F680} Starting following services: ${s.join(", ")}`));try{ye(["-p",t,"-f",r,"up","-d",...s],{stdio:"inherit"}),h.success(`Docker services started: ${s.join(", ")}`)}catch(a){throw h.error(`Error starting Docker services: ${a.message}`),a}try{await Lk(e,i)}catch(a){h.error(`Error starting Workbench: ${a.message}`)}},$k=async(e,t,r,n,o,i=["frontend","backend"],s)=>{await Hd(e,t,r,n,o,s);let a=i.filter(u=>o.includes(u)?!1:n[u]?.enabled);if(a.length===0){h.warn("No services to show logs for");return}h.raw(f.blue(`\u{1F4CB} Showing logs for: ${a.join(", ")} (press Ctrl+C to stop)...`));let c=Ne.resolve(r),l=["-p",t,"-f",c,"logs","--follow",...a];try{h.debug("Running Docker Compose logs...");let u=Fs("docker",["compose",...l],{stdio:"inherit",shell:!0,cwd:Ne.dirname(c)});return br.set("dockerLogs",u),new Promise(p=>{u.on("close",d=>{u.killed||console.log(f.yellow(`
|
|
649
|
+
Log process ended with code ${d??0}`)),p()}),u.on("error",d=>{h.error(` Error with log process: ${d.message}`),p()})})}catch(u){throw h.error(`Error setting up log following: ${u.message}`),u}},Mn=async e=>{if(!e.services?.workbench?.enabled)return;let t=Ne.join(process.cwd(),"node_modules","@raclettejs","workbench");if(!await yr.pathExists(t))throw h.error("Workbench package not found. Install with: yarn add @raclettejs/workbench"),new Error("Workbench package not found");let r=Ne.join(t,"package.json");if(!await yr.pathExists(r))throw h.error(" Workbench package.json not found"),new Error("Workbench package.json not found");return t},Dk=e=>{if(!e||typeof e!="object")throw new Error("Workbench configuration must be an object");if(!e.frontend||typeof e.frontend!="object")throw new Error('Workbench configuration must have a "frontend" object');if(e.frontend.i18n!==void 0){if(typeof e.frontend.i18n!="object")throw new Error("frontend.i18n must be an object");if(e.frontend.i18n.locales!==void 0){if(!Array.isArray(e.frontend.i18n.locales))throw new Error("frontend.i18n.locales must be an array");if(!e.frontend.i18n.locales.every(t=>typeof t=="string"))throw new Error("All locales must be strings")}}return!0},Nk=async(e,t=process.cwd())=>{let r=Ne.join(t,".raclette"),n=Ne.join(r,"raclette.config.workbench.js");await yr.mkdir(r,{recursive:!0});let o=`import { defineRacletteConfig } from "@raclettejs/core"
|
|
650
|
+
|
|
651
|
+
export default defineRacletteConfig(${JSON.stringify(e,null,2)})
|
|
652
|
+
`;return await yr.writeFile(n,o,"utf8"),n},Lk=async(e,t)=>{if(!e.services?.workbench?.enabled)return;let r=await Mn(e);if(!r)return;let n=Ne.join(process.cwd(),"workbenchPlugins");await Rk(n)||(n=void 0);let o;if(e.workbench)try{Dk(e.workbench),o=await Nk(e.workbench)}catch(a){throw console.error(f.red("Workbench configuration error:"),a.message),a}let i=Object.fromEntries(Object.entries(e.env.development||{}).filter(([a])=>a.startsWith("RACLETTE_")).flatMap(([a,c])=>{let l=[[a,c]];if(a.startsWith("RACLETTE_WORKBENCH_")){let u=a.replace("RACLETTE_WORKBENCH_","RACLETTE_");l.push([u,c])}return l}));e.services?.workbench?.debugPort&&(i.ENABLE_DEBUG=!0,i.RACLETTE_DEBUG_PORT=e.services.workbench.debugPort);let s={...process.env,NODE_ENV:"development",MONGO_HOST:`mongodb://localhost:${e.services.mongodb?.port||27017}/${e.services.mongodb?.databaseName||e.name}`,CACHE_URL:`raclette-cache://localhost:${e.services.cache?.port||6379}${e.services.cache?.db?`/${e.services.cache.db}`:""}`,RACLETTE_CLIENT_PORT:String(e.services.workbench?.frontendPort||8083),RACLETTE_SERVER_PORT:String(e.services.workbench?.backendPort||8084),...i};return new Promise((a,c)=>{let l=`${e.name}-workbench`;h.progress("Starting workbench as "+l);let u=["dev",t?"-v":"","-p",l,...o?["-f",o]:[]].filter(m=>m!==""),p=e.services?.workbench?.withLogs||t,d=Fs("yarn",u,{cwd:r,env:s,stdio:p?"pipe":"ignore"});br.set("workbench",d),p&&(d.stdout?.on("data",m=>{m.toString().trim().split(`
|
|
653
|
+
`).forEach(k=>{console.log(f.magenta(`[Workbench] ${k}`))})}),d.stderr?.on("data",m=>{m.toString().trim().split(`
|
|
654
|
+
`).forEach(k=>{console.error(f.red(`[Workbench] ${k}`))})}),d.stdout?.on("data",m=>{m.toString().includes("VITE v")&&(clearTimeout(g),a())}));let g=setTimeout(()=>{a()},p?1e3*60*5:5e3);d.on("close",m=>{clearTimeout(g),m!==0&&m!==null?(console.error(f.red(`Workbench process exited with code ${m}`)),c(new Error(`Workbench process exited with code ${m}`))):a()}),d.on("error",m=>{clearTimeout(g),console.error(f.red("Workbench process error:"),m),c(m)}),p||setTimeout(a,1e3)})},Vd=async e=>{if(e.services?.workbench?.enabled)try{let t=await Mn(e);if(!t)return;Fs("yarn",["down","-p",`${e.name}-workbench`],{cwd:t,stdio:"pipe"})}catch{h.debug("Workbench down command failed, forcing process termination");let r=br.get("workbench");if(r&&!r.killed)r.kill("SIGTERM");else{let n=`${e.name}-workbench`;try{Nc(n)}catch(o){h.warn(`Could not stop workbench containers: ${o.message}`)}}}},Ms=(e,t)=>{let r=t?.name??Ne.basename(process.cwd());h.debug(`\u{1F3F7}\uFE0F Using project name: ${r}`),h.raclette("Stopping all Docker services...");try{Vd(t),ye(["-p",r,"-f",e,"down"],{stdio:"inherit"}),h.success("All Docker services stopped successfully")}catch(n){throw h.error("Error stopping Docker services:",n),n}};import Ud from"fs-extra";import Wd from"path";var Ik=e=>Ot(e),vr=async(e,t,r)=>{let o=`${t?.name??Wd.basename(process.cwd())}-${e}`;t?.services?.[e]?.name&&(o=t.services[e].name);try{let i=await Ud.readFile(r,"utf8"),s=new RegExp(`\\$\\{RACLETTE_${e.toUpperCase()}_CONTAINERNAME:-([^}]+)\\}`).exec(i);s&&s[1]&&(o=s[1])}catch(i){console.warn(f.yellow(`Warning: Could not read docker-compose file to determine container name: ${i.message}`))}return o},Gd=async(e,t,r)=>{let n=await vr(e,t,r);if(!Ik(n))return console.log(f.yellow(`\u26A0\uFE0F Service '${e}' (container: ${n}) doesn't appear to be running.`)),!1;try{console.log(f.blue(`\u{1F4E6} Updating dependencies for ${e}...`)),Ro(n,"/app/check-dependencies.sh echo 'Dependency check completed'",{stdio:"inherit"});try{let o=Ro(n,"cat /app/node_modules/.install-result",{stdio:"pipe"}).trim();return o==="0"?(console.log(f.green(`\u2705 Dependencies for ${e} updated successfully`)),!0):(console.error(f.red(`\u274C Dependency installation for ${e} failed with code ${o}`)),console.error(f.red("Some packages might be incompatible with your Node.js version or have other issues.")),console.error(f.yellow("Check the logs above for specific error messages.")),!1)}catch{return console.log(f.green(`\u2705 Dependencies for ${e} updated (status unknown)`)),!0}}catch(o){return console.error(f.red(`\u274C Error updating dependencies for ${e}: ${o.message}`)),!1}},Bs=async(e,t,r)=>{console.log(f.blue("\u{1F9C0} Updating package dependencies..."));let n=Wd.join(r,"docker-compose.yml");if(!await Ud.pathExists(n))return console.error(f.yellow("\u26A0\uFE0F No docker-compose.yml found. Services may not be running with Raclette.")),!1;let o=!1,i=!0;if(e==="frontend"||e==="both"){let s=await Gd("frontend",t,n);o=s||o,i=i&&s}if(e==="backend"||e==="both"){let s=await Gd("backend",t,n);o=s||o,i=i&&s}return o?i||(console.log(f.yellow("\u26A0\uFE0F Some services encountered errors during dependency installation.")),console.log(f.yellow("You may need to address compatibility issues in your package.json."))):(console.log(f.yellow("No services were updated. Make sure the services are running.")),console.log(f.yellow("You may need to restart the services using 'raclette restart' after adding packages."))),o&&i};import{spawn as Kd}from"child_process";import qd from"path";var Xd=async(e,t,r,n)=>{if(e.includes("workbench")){await Mk(r,t);return}let o=[];if(e.length===0)o=Yd(r),console.log(f.blue(`\u{1F4CB} No services specified, showing logs for all enabled services: ${o.join(", ")}`));else{let s=Yd(r),a=e.filter(c=>!s.includes(c));if(a.length>0)throw console.error(f.red(`\u274C Invalid services specified: ${a.join(", ")}`)),console.log(f.yellow(`Available services: ${s.join(", ")}`)),new Error("Invalid services specified");o=e,console.log(f.blue(`\u{1F4CB} Showing logs for: ${o.join(", ")}`))}let i=await jk(o,r,n);if(i.length===0)throw console.error(f.red("\u274C None of the specified services appear to be running.")),console.log(f.yellow("\u{1F4A1} Try running 'raclette dev' first to start the services.")),new Error("No running services found");if(i.length<o.length){let s=o.filter(a=>!i.includes(a));console.warn(f.yellow(`\u26A0\uFE0F Some services are not running: ${s.join(", ")}`)),console.log(f.blue(`\u{1F4CB} Showing logs for running services: ${i.join(", ")}`)),o=i}await Fk(r,n,o,t)};function Yd(e){let t=[];return e.services?.frontend?.enabled&&t.push("frontend"),e.services?.backend?.enabled&&t.push("backend"),e.services?.mongodb?.enabled&&t.push("mongodb"),e.services?.cache?.enabled&&t.push("cache"),e.services?.workbench?.enabled&&t.push("workbench"),e.services?.workbench?.enabled&&t.push("workbench"),t}async function jk(e,t,r){let n=[];for(let o of e)try{let i=await vr(o,t,r);Ot(i)&&n.push(o)}catch(i){console.warn(f.yellow(`\u26A0\uFE0F Could not check status of service '${o}': ${i.message}`))}return n}async function Fk(e,t,r,n){let o=e?.name??qd.basename(process.cwd());console.log(f.blue(`\u{1F4CB} Following logs for: ${r.join(", ")} ${n.follow?"(press Ctrl+C to stop)":""}`));let i=["-p",o,"-f",t,"logs"];n.follow&&i.push("--follow"),n.tail&&i.push("--tail",n.tail),i.push(...r);try{let s=Kd("docker",["compose",...i],{stdio:"inherit",shell:!0,cwd:qd.dirname(t)});s.on("close",a=>{s.killed||console.log(f.yellow(`
|
|
655
|
+
Log process ended with code ${a??0}`))}),s.on("error",a=>{console.error(f.red(`\u274C Error with log process: ${a.message}`))}),process.on("SIGINT",()=>{console.log(f.yellow(`
|
|
656
|
+
\u{1F6D1} Stopping log following...`)),s.kill("SIGTERM"),process.exit(0)}),n.follow?await new Promise(()=>{}):await new Promise(a=>{s.on("close",()=>a())})}catch(s){throw console.error(f.red(`\u274C Error following logs: ${s.message}`)),s}}async function Mk(e,t){console.log(f.blue("\u{1F527} Handling workbench logs..."));let r=Mn(e);h.debug("Calling yarn log frontend backend on workbench instance...");try{let n=["log","frontend","backend"];t.follow||n.push("--no-follow"),t.tail&&n.push("--tail",t.tail);let o=Kd("yarn",n,{cwd:r,stdio:"inherit",shell:!0,env:{...process.env,NODE_ENV:"development"}});o.on("close",i=>{o.killed||console.log(f.yellow(`
|
|
657
|
+
Workbench log process ended with code ${i??0}`))}),o.on("error",i=>{console.error(f.red(`\u274C Error with workbench log process: ${i.message}`)),console.log(f.yellow("\u{1F4A1} Make sure the workbench package has the 'log' script in its package.json"))}),process.on("SIGINT",()=>{console.log(f.yellow(`
|
|
658
|
+
\u{1F6D1} Stopping workbench log following...`)),o.kill("SIGTERM"),process.exit(0)}),t.follow?await new Promise(()=>{}):await new Promise(i=>{o.on("close",()=>i())})}catch(n){throw console.error(f.red(`\u274C Error calling workbench logs: ${n.message}`)),n}}import{spawn as Qk}from"child_process";import V from"fs-extra";import H from"path";import{execSync as Bk}from"child_process";import B from"fs-extra";import U from"path";var Hs=async(e,t,r)=>{console.log(f.blue("\u{1F4E6} Creating production artifacts...")),await Gk(t,e,r);let n=U.join(t,"docker-compose.yml");return await Uk(e,t,n,r),await Wk(e,t,r),await qk(t,r,e),console.log(f.green("\u2705 Production artifacts created")),n},zd=async(e,t,r,n)=>{let{makeExecutable:o=!1,required:i=!1,logPrefix:s=""}=n||{};for(let a of e){let c=U.join(t,a),l=U.basename(a),u=U.join(r,l);if(await B.ensureDir(U.dirname(u)),await B.pathExists(c))await B.copy(c,u),o&&await B.chmod(u,493),console.log(f.gray(`${s} \u2705 Copied ${a}`));else{let p=`${a} not found in ${t}`;if(i)throw new Error(`Required file ${p}`);console.log(f.gray(`${s} \u26A0\uFE0F Skipped ${a} (not found)`))}}},Hk=async(e,t,r)=>zd(e,process.cwd(),t,{...r,logPrefix:r?.logPrefix||" "}),Vk=async(e,t,r,n)=>zd(e,t,r,{...n,logPrefix:n?.logPrefix||" "}),Gk=async(e,t,r)=>{let n=t.services.frontend?.port||8081,o=t.services.workbench?.frontendPort||8083,i=`
|
|
659
|
+
FROM nginx:alpine
|
|
660
|
+
COPY services/frontend /usr/share/nginx/html
|
|
661
|
+
COPY nginx.conf /etc/nginx/conf.d/default.conf
|
|
662
|
+
COPY entrypoint.sh entrypoint.sh
|
|
663
|
+
|
|
664
|
+
RUN chmod +x /entrypoint.sh
|
|
665
|
+
RUN apk add --no-cache gettext curl
|
|
666
|
+
RUN chmod -R 755 /usr/share/nginx/html
|
|
667
|
+
RUN find /usr/share/nginx/html -type f -exec chmod 644 {} +
|
|
668
|
+
|
|
669
|
+
EXPOSE ${n}
|
|
670
|
+
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \\
|
|
671
|
+
CMD wget --no-verbose --tries=1 --spider http://localhost:${n}/ || exit 1
|
|
672
|
+
ENTRYPOINT ["/entrypoint.sh"]
|
|
673
|
+
CMD ["nginx", "-g", "daemon off;"]
|
|
674
|
+
`,s=`
|
|
675
|
+
FROM node:24.4-alpine
|
|
676
|
+
|
|
677
|
+
# Set working directory
|
|
678
|
+
WORKDIR /app
|
|
679
|
+
|
|
680
|
+
# Install system dependencies that might be needed
|
|
681
|
+
RUN apk add --no-cache tini curl ${(t.services.backend?.installPackages||[]).join(" ")}
|
|
682
|
+
|
|
683
|
+
# Copy package files first for better caching
|
|
684
|
+
COPY services/backend/package*.json ./
|
|
685
|
+
COPY services/backend/yarn.lock* ./
|
|
686
|
+
|
|
687
|
+
# Install only production dependencies
|
|
688
|
+
RUN yarn install --production --frozen-lockfile --silent
|
|
689
|
+
|
|
690
|
+
# Copy the built application (includes dist/ folder)
|
|
691
|
+
COPY services/backend/ ./
|
|
692
|
+
|
|
693
|
+
# Create non-root user for security
|
|
694
|
+
RUN addgroup -g 1001 -S nodejs && \\
|
|
695
|
+
adduser -S fastify -u 1001 && \\
|
|
696
|
+
chown -R fastify:nodejs /app
|
|
697
|
+
USER fastify
|
|
698
|
+
|
|
699
|
+
# Expose port (Fastify should listen on 0.0.0.0 for containers)
|
|
700
|
+
EXPOSE 3000
|
|
701
|
+
|
|
702
|
+
# Health check - point to the correct endpoint
|
|
703
|
+
HEALTHCHECK --interval=30s --timeout=10s --start-period=30s --retries=3 \\
|
|
704
|
+
CMD node -e "require('http').get('http://localhost:3000/health', (res) => process.exit(res.statusCode === 200 ? 0 : 1)).on('error', () => process.exit(1))"
|
|
705
|
+
|
|
706
|
+
# Use tini to handle signals properly
|
|
707
|
+
ENTRYPOINT ["/sbin/tini", "--"]
|
|
708
|
+
|
|
709
|
+
# Start the application - points to our built dist/src/server.js
|
|
710
|
+
CMD ["yarn", "start"]
|
|
711
|
+
`,a=`
|
|
712
|
+
server {
|
|
713
|
+
listen ${n};
|
|
714
|
+
server_name localhost;
|
|
715
|
+
root /usr/share/nginx/html;
|
|
716
|
+
index index.html;
|
|
717
|
+
|
|
718
|
+
# Security headers
|
|
719
|
+
add_header X-Frame-Options "SAMEORIGIN" always;
|
|
720
|
+
add_header X-Content-Type-Options "nosniff" always;
|
|
721
|
+
add_header Referrer-Policy "no-referrer-when-downgrade" always;
|
|
722
|
+
|
|
723
|
+
# Frontend static files
|
|
724
|
+
location / {
|
|
725
|
+
try_files $uri $uri/ /index.html;
|
|
726
|
+
|
|
727
|
+
# Cache static assets
|
|
728
|
+
location ~* \\.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
|
|
729
|
+
expires 1y;
|
|
730
|
+
add_header Cache-Control "public, immutable";
|
|
731
|
+
}
|
|
732
|
+
}
|
|
733
|
+
|
|
734
|
+
# API endpoints - proxy to backend on internal port 3000
|
|
735
|
+
location /api/ {
|
|
736
|
+
proxy_pass http://backend:3000/;
|
|
737
|
+
proxy_set_header Host $host;
|
|
738
|
+
proxy_set_header X-Real-IP $remote_addr;
|
|
739
|
+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
740
|
+
proxy_set_header X-Forwarded-Proto $scheme;
|
|
741
|
+
|
|
742
|
+
# Timeout settings
|
|
743
|
+
proxy_connect_timeout 60s;
|
|
744
|
+
proxy_send_timeout 60s;
|
|
745
|
+
proxy_read_timeout 60s;
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
# WebSocket connections
|
|
749
|
+
location /socket.io/ {
|
|
750
|
+
proxy_pass http://backend:3000/socket.io/;
|
|
751
|
+
proxy_http_version 1.1;
|
|
752
|
+
proxy_set_header Upgrade $http_upgrade;
|
|
753
|
+
proxy_set_header Connection "upgrade";
|
|
754
|
+
proxy_set_header Host $host;
|
|
755
|
+
proxy_set_header X-Real-IP $remote_addr;
|
|
756
|
+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
757
|
+
proxy_set_header X-Forwarded-Proto $scheme;
|
|
758
|
+
proxy_set_header Authorization $http_authorization;
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
# Health check endpoint
|
|
762
|
+
location /health {
|
|
763
|
+
proxy_pass http://backend:3000/health;
|
|
764
|
+
proxy_set_header Host $host;
|
|
765
|
+
}
|
|
766
|
+
}
|
|
767
|
+
`;if(await B.writeFile(U.join(e,"Dockerfile.frontend"),i),await B.writeFile(U.join(e,"Dockerfile.backend"),s),await B.writeFile(U.join(e,"nginx.conf"),a),await Hk(["node_modules/@raclettejs/core/services/frontend/provision/entrypoint.sh"],e,{makeExecutable:!0,required:!1}),r){let l=`
|
|
768
|
+
FROM nginx:alpine
|
|
769
|
+
COPY workbench/frontend /usr/share/nginx/html
|
|
770
|
+
COPY nginx.workbench.conf /etc/nginx/conf.d/default.conf
|
|
771
|
+
COPY entrypoint.sh /entrypoint.sh
|
|
772
|
+
|
|
773
|
+
RUN chmod +x /entrypoint.sh
|
|
774
|
+
RUN apk add --no-cache gettext curl
|
|
775
|
+
RUN chmod -R 755 /usr/share/nginx/html
|
|
776
|
+
RUN find /usr/share/nginx/html -type f -exec chmod 644 {} +
|
|
777
|
+
|
|
778
|
+
EXPOSE ${o}
|
|
779
|
+
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \\
|
|
780
|
+
CMD wget --no-verbose --tries=1 --spider http://localhost:${o}/ || exit 1
|
|
781
|
+
|
|
782
|
+
ENTRYPOINT ["/entrypoint.sh"]
|
|
783
|
+
CMD ["nginx", "-g", "daemon off;"]
|
|
784
|
+
`,u=`
|
|
785
|
+
FROM node:24.4-alpine
|
|
786
|
+
WORKDIR /app
|
|
787
|
+
|
|
788
|
+
# Install dependencies
|
|
789
|
+
RUN apk add --no-cache tini curl
|
|
790
|
+
|
|
791
|
+
# Copy package files
|
|
792
|
+
COPY workbench/backend/package*.json ./
|
|
793
|
+
COPY workbench/backend/yarn.lock* ./
|
|
794
|
+
|
|
795
|
+
# Install production dependencies
|
|
796
|
+
RUN yarn install --production --frozen-lockfile --silent
|
|
797
|
+
|
|
798
|
+
# Copy application code (includes dist/ if built)
|
|
799
|
+
COPY workbench/backend/ ./
|
|
800
|
+
|
|
801
|
+
# Create non-root user
|
|
802
|
+
RUN addgroup -g 1001 -S nodejs && \\
|
|
803
|
+
adduser -S workbench -u 1001 && \\
|
|
804
|
+
chown -R workbench:nodejs /app
|
|
805
|
+
USER workbench
|
|
806
|
+
|
|
807
|
+
# Expose port (Fastify should listen on 0.0.0.0 for containers)
|
|
808
|
+
EXPOSE 3000
|
|
809
|
+
|
|
810
|
+
HEALTHCHECK --interval=30s --timeout=10s --start-period=30s --retries=3 \\
|
|
811
|
+
CMD node -e "require('http').get('http://localhost:3000/health', (res) => process.exit(res.statusCode === 200 ? 0 : 1)).on('error', () => process.exit(1))"
|
|
812
|
+
|
|
813
|
+
ENTRYPOINT ["/sbin/tini", "--"]
|
|
814
|
+
CMD ["yarn", "start"]
|
|
815
|
+
`,p=`
|
|
816
|
+
server {
|
|
817
|
+
listen ${o};
|
|
818
|
+
root /usr/share/nginx/html;
|
|
819
|
+
index index.html;
|
|
820
|
+
|
|
821
|
+
location / {
|
|
822
|
+
try_files $uri $uri/ /index.html;
|
|
823
|
+
}
|
|
824
|
+
|
|
825
|
+
location /api/ {
|
|
826
|
+
proxy_pass http://workbench-backend:3000/;
|
|
827
|
+
proxy_set_header Host $host;
|
|
828
|
+
proxy_set_header X-Real-IP $remote_addr;
|
|
829
|
+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
830
|
+
proxy_set_header X-Forwarded-Proto $scheme;
|
|
831
|
+
}
|
|
832
|
+
|
|
833
|
+
location /socket.io/ {
|
|
834
|
+
proxy_pass http://workbench-backend:3000/socket.io/;
|
|
835
|
+
proxy_http_version 1.1;
|
|
836
|
+
proxy_set_header Upgrade $http_upgrade;
|
|
837
|
+
proxy_set_header Connection "upgrade";
|
|
838
|
+
proxy_set_header Host $host;
|
|
839
|
+
proxy_set_header X-Real-IP $remote_addr;
|
|
840
|
+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
841
|
+
proxy_set_header X-Forwarded-Proto $scheme;
|
|
842
|
+
proxy_set_header Authorization $http_authorization;
|
|
843
|
+
}
|
|
844
|
+
}
|
|
845
|
+
`;await B.writeFile(U.join(e,"Dockerfile.workbench-frontend"),l),await B.writeFile(U.join(e,"Dockerfile.workbench-backend"),u),await B.writeFile(U.join(e,"nginx.workbench.conf"),p)}},Uk=async(e,t,r,n)=>{let o=e.services.frontend?.port||8081,i=e.services.workbench?.frontendPort||8083,s=e.env.production||{},a={services:{frontend:{build:{context:".",dockerfile:"Dockerfile.frontend"},ports:[`\${PORT:-${o}}:${o}`],depends_on:["backend"],restart:"unless-stopped",networks:["app-network"],environment:["NODE_ENV=production","RACLETTE_DEBUG_MODE=${RACLETTE_DEBUG_MODE:-false}","RACLETTE_SERVER_BASE_URL=${RACLETTE_SERVER_BASE_URL:-/api}","RACLETTE_SOCKET_URL=${RACLETTE_SOCKET_URL:-}",...Object.entries(s).map(([l,u])=>`${l}=${u}`)]},backend:{build:{context:".",dockerfile:"Dockerfile.backend"},depends_on:["database","cache"],restart:"unless-stopped",networks:["app-network"],environment:["NODE_ENV=production","DISABLE_PLUGIN_LOGS=${RACLETTE_DISABLE_PLUGIN_LOGS:-false}","SERVER_TOKEN_SECRET=${SERVER_TOKEN_SECRET:-thisshouldbesetforproduction}",`MONGO_HOST=\${RACLETTE_MONGODB_HOST:-mongodb://database:27017/\${MONGO_DATABASE:-${e.services.mongodb?.databaseName||e.name}}}`,`CACHE_URL=\${RACLETTE_CACHE_URL:-valkey://cache:6379${e.services.cache?.db?`/${e.services.cache?.db}`:""}}`,...Object.entries(s).map(([l,u])=>`${l}=${u}`)]},database:{image:"mongo:5.0.6",restart:"unless-stopped",volumes:["mongodb_data:/data/db","mongodb_config:/data/config"],networks:["app-network"],environment:["MONGO_INITDB_DATABASE=${MONGO_DATABASE:-"+(e.services.mongodb?.databaseName||e.name)+"}"],healthcheck:{test:["CMD","mongosh","--eval","db.adminCommand('ping')"],interval:"10s",timeout:"30s",retries:20}},cache:{image:"valkey/valkey:8.1-alpine",restart:"unless-stopped",volumes:["cache_data:/data"],networks:["app-network"],healthcheck:{test:["CMD","valkey-cli","ping"],interval:"10s",timeout:"5s",retries:3}}},volumes:{mongodb_data:{},mongodb_config:{},cache_data:{}},networks:{"app-network":{driver:"bridge"}}},c=e.backend?.cache;if(c?.persistence){let l=c.RDB_OPTIONS||"3600 1 300 100 60 10000";switch(c.persistence){case"none":a.services.cache.command='valkey-server --save ""';break;case"aof":a.services.cache.command="valkey-server --appendonly yes";break;case"rdb":a.services.cache.command="valkey-server --save "+l;break;case"rdb+aof":a.services.cache.command="valkey-server --appendonly yes --save "+l;break}}if(n){let l=e.env.production||{};a.services["workbench-frontend"]={build:{context:".",dockerfile:"Dockerfile.workbench-frontend"},ports:[`\${WORKBENCH_PORT:-${i}}:${i}`],depends_on:["workbench-backend"],restart:"unless-stopped",networks:["app-network"],environment:["NODE_ENV=production","RACLETTE_DEBUG_MODE=${RACLETTE_DEBUG_MODE:-false}",`RACLETTE_SERVER_BASE_URL=\${RACLETTE_SERVER_BASE_URL:-http://localhost:${i}/api}`,"RACLETTE_SOCKET_URL=${RACLETTE_SOCKET_URL:-}",...Object.entries(l).map(([u,p])=>`${u}=${p}`)]},a.services["workbench-backend"]={build:{context:".",dockerfile:"Dockerfile.workbench-backend"},depends_on:["database","cache"],restart:"unless-stopped",networks:["app-network"],environment:["NODE_ENV=production","DISABLE_PLUGIN_LOGS=${RACLETTE_DISABLE_PLUGIN_LOGS:-false}","SERVER_TOKEN_SECRET=${SERVER_TOKEN_SECRET}",`MONGO_HOST=\${RACLETTE_MONGODB_HOST:-mongodb://database:27017/\${MONGO_DATABASE:-${e.services.mongodb?.databaseName||e.name}}}`,`CACHE_URL=\${RACLETTE_CACHE_URL:-valkey://cache:6379${e.services.cache?.db?`/${e.services.cache?.db}`:""}}`,...Object.entries(l).map(([u,p])=>`${u}=${p}`)]}}await B.writeFile(r,ot.dump(a))},Wk=async(e,t,r)=>{let n=Vs(e,r);await B.writeFile(U.join(t,".env.example"),n)},Vs=(e,t)=>{let r=e.services.frontend?.port||8081,n=e.services.workbench?.frontendPort||8083;return`# Production Environment Variables
|
|
846
|
+
# Copy this file to .env and fill in your values
|
|
847
|
+
|
|
848
|
+
# Required - Generate a secure random string for this
|
|
849
|
+
SERVER_TOKEN_SECRET=your-secret-key-here
|
|
850
|
+
|
|
851
|
+
# Auto-generated docker variables, they should work for default configurations
|
|
852
|
+
NODE_ENV=production
|
|
853
|
+
MONGO_DATABASE=${e.services.mongodb?.databaseName||e.name}
|
|
854
|
+
|
|
855
|
+
# Frontend API Configuration
|
|
856
|
+
# In production, API calls should go through nginx proxy
|
|
857
|
+
VITE_API_BASE_URL=/api
|
|
858
|
+
REACT_APP_API_BASE_URL=/api
|
|
859
|
+
|
|
860
|
+
# Application URLs (for reference)
|
|
861
|
+
# Main App: http://localhost:${r}
|
|
862
|
+
${t?`# Workbench: http://localhost:${n}`:""}
|
|
863
|
+
|
|
864
|
+
# Override database and cache connections (default values as set in docker-compose file)
|
|
865
|
+
# RACLETTE_MONGODB_HOST=mongodb://database:27017/\${MONGO_DATABASE}
|
|
866
|
+
# RACLETTE_CACHE_URL=valkey://cache:6379
|
|
867
|
+
|
|
868
|
+
# Frontend environment overrides (optional)
|
|
869
|
+
# RACLETTE_DEBUG_MODE=true # uncomment, if you want to see all the frontend logs in the console
|
|
870
|
+
|
|
871
|
+
# Backend environment overrides (optional)
|
|
872
|
+
# RACLETTE_DISABLE_PLUGIN_LOGS=true
|
|
873
|
+
|
|
874
|
+
# Add any custom environment variables from your config here:
|
|
875
|
+
${Object.keys(e.env.production||{}).map(i=>`# ${i}=`).join(`
|
|
876
|
+
`)}
|
|
877
|
+
|
|
878
|
+
# MongoDB specific overrides (uncomment if using external MongoDB)
|
|
879
|
+
# RACLETTE_MONGODB_HOST=mongodb://your-external-mongodb:27017/your-database
|
|
880
|
+
|
|
881
|
+
# Cache specific overrides (uncomment if using external Valkey/Redis)
|
|
882
|
+
# RACLETTE_CACHE_URL=valkey://your-external-cache:6379
|
|
883
|
+
`},qk=async(e,t,r)=>{let n=r.services.frontend?.port||8081,o=r.services.workbench?.frontendPort||8083,i=`#!/bin/bash
|
|
884
|
+
# Raclette Production Deployment Script
|
|
885
|
+
|
|
886
|
+
set -e
|
|
887
|
+
|
|
888
|
+
echo "\u{1F680} Deploying Raclette application..."
|
|
889
|
+
|
|
890
|
+
# Check if .env file exists
|
|
891
|
+
if [ ! -f .env ]; then
|
|
892
|
+
echo "\u274C .env file not found. Copy .env.example and configure it first."
|
|
893
|
+
exit 1
|
|
894
|
+
fi
|
|
895
|
+
|
|
896
|
+
# Build and start services
|
|
897
|
+
echo "\u{1F433} Building Docker images..."
|
|
898
|
+
docker compose build --no-cache
|
|
899
|
+
|
|
900
|
+
echo "\u{1F7E2} Starting services..."
|
|
901
|
+
docker compose up -d
|
|
902
|
+
|
|
903
|
+
echo "\u23F3 Waiting for services to be healthy..."
|
|
904
|
+
sleep 30
|
|
905
|
+
|
|
906
|
+
# Check health
|
|
907
|
+
echo "\u{1F50D} Checking service health..."
|
|
908
|
+
docker compose ps
|
|
909
|
+
|
|
910
|
+
# Test endpoints
|
|
911
|
+
echo "\u{1F9EA} Testing application endpoints..."
|
|
912
|
+
if curl -f http://localhost:${n}/health > /dev/null 2>&1; then
|
|
913
|
+
echo "\u2705 Application health check passed"
|
|
914
|
+
else
|
|
915
|
+
echo "\u26A0\uFE0F Application health check failed, but services are running"
|
|
916
|
+
echo "\u{1F4A1} Make sure your Fastify backend has a /health endpoint and listens on 0.0.0.0:3000"
|
|
917
|
+
fi
|
|
918
|
+
|
|
919
|
+
echo "\u2705 Deployment complete!"
|
|
920
|
+
echo ""
|
|
921
|
+
echo "\u{1F30D} Application URLs:"
|
|
922
|
+
echo " Main App: http://localhost:${n}"
|
|
923
|
+
${t?`echo " Workbench: http://localhost:${o}"`:""}
|
|
924
|
+
echo ""
|
|
925
|
+
echo "\u{1F4CA} Management commands:"
|
|
926
|
+
echo " View logs: docker compose logs -f"
|
|
927
|
+
echo " Stop: docker compose down"
|
|
928
|
+
echo " Restart: docker compose restart"
|
|
929
|
+
echo " Update images: ./load-images.sh && docker compose up -d"
|
|
930
|
+
echo ""
|
|
931
|
+
echo "\u{1F6E0}\uFE0F Backend info:"
|
|
932
|
+
echo " - Built with TypeScript and compiled to dist/src/server.js"
|
|
933
|
+
echo " - Runs on Node.js 24 Alpine with production dependencies only"
|
|
934
|
+
echo " - Should listen on 0.0.0.0:3000 for proper container networking"
|
|
935
|
+
echo " - Accessible via /api proxy on port ${n}"
|
|
936
|
+
`,s=U.join(e,"deploy.sh");await B.writeFile(s,i),await B.chmod(s,493)},Qd=async(e,t,r)=>{let n={services:{},volumes:{},networks:{raclette_shared:{external:!0,name:"raclette_shared"}}},o=`${e.name}-build`;if(e.services.mongodb?.enabled){let i=`${o}-mongodb-data`;n.services.mongodb={container_name:`${o}-mongodb`,image:"mongo:5.0.6",ports:[`127.0.0.1:${e.services.mongodb.port}:27017`],volumes:[`${i}:/data/db`],networks:["raclette_shared"],healthcheck:{test:["CMD","mongosh","--eval","db.adminCommand('ping')"],interval:"10s",timeout:"30s",retries:20}},n.volumes[i]=null}if(e.services.redis?.enabled){let i=`${o}-redis-data`;n.services.redis={container_name:`${o}-redis`,image:"redis:7-alpine",ports:[`127.0.0.1:${e.services.redis.port}:6379`],command:"redis-server --appendonly yes",volumes:[`${i}:/data`],networks:["raclette_shared"],healthcheck:{test:["CMD","redis-cli","ping"],interval:"10s",timeout:"5s",retries:3}},n.volumes[i]=null}if(e.services.backend?.enabled){let i=`${o}-backend_node_modules`,{npmrcPath:s,yarnrcPath:a}=Yr("production");n.services.backend={container_name:`${o}-backend`,build:{context:".",dockerfile:"./backend.Dockerfile",args:{NODE_ENV:"development"}},command:"yarn generate",environment:["NODE_ENV=development","RACLETTE_BUILD_MODE=generate",`MONGO_HOST=mongodb://mongodb:${e.services.mongodb?.port||27017}/${e.services.mongodb?.databaseName||e.name}`,"SERVER_TOKEN_SECRET=${SERVER_TOKEN_SECRET:-thisshouldbesetforproduction}",`CACHE_URL=redis://redis:${e.services.redis?.port||6379}`,...Object.entries(e.env.development||{}).map(([c,l])=>`${c}=${l}`)],volumes:[`${i}:/app/node_modules`,"./.raclette/virtual/backend/src:/app/src","./plugins:/app/src/appPlugins","./.raclette/backend/raclette.config.js:/app/raclette.config.js","./.raclette/backend/package.json:/app/package.json","./.raclette/dist/check-dependencies.sh:/app/check-dependencies.sh",`${Pt("backend",e)}:/app/yarn.lock`,`${s}:/app/.npmrc`,`${a}:/app/.yarnrc`],networks:["raclette_shared"],depends_on:{...e.services.mongodb?.enabled&&{mongodb:{condition:"service_started"}},...e.services.redis?.enabled&&{redis:{condition:"service_healthy"}}},entrypoint:["/app/check-dependencies.sh"]},n.volumes[i]=null}e.services.backend?.volumes&&e.services.backend.volumes.length>0&&e.services.backend.volumes.forEach(i=>{let s=it(i,t);n.services.backend.volumes.push(s)}),Object.values(n.services).forEach(i=>{i.volumes&&(i.volumes=qr(i.volumes,t))}),await B.writeFile(r,ot.dump(n))},Jd=async(e,t,r,n)=>{let o={services:{},volumes:{},networks:{raclette_shared:{external:!0,name:"raclette_shared"}}},i=`${e.name}-build`,{npmrcPath:s,yarnrcPath:a}=Yr("production");if(e.services.frontend?.enabled){let c=e.services.frontend.nodeModulesVolume||`${e.name}-frontend_node_modules`;o.services.frontend={container_name:`${i}-frontend`,build:{context:".",dockerfile:"./frontend.Dockerfile",args:{NODE_ENV:"production"},target:"build"},command:["sh","-c","yarn install --production=false && yarn build && cp -r /app/dist/* /build-output/"],environment:[...Object.entries(e.env.production||{}).map(([l,u])=>`${l}=${u}`),"NODE_ENV=production"],volumes:["./.raclette/virtual/frontend/src:/app/src","./.raclette/virtual/backend/src/shared:/app/src/shared",`${c}:/app/node_modules`,"./plugins:/app/src/plugins","./.raclette/virtual/backend/src/corePlugins:/app/src/corePlugins","./.raclette/virtual/frontend/types:/app/types","./.raclette/frontend/raclette.config.js:/app/raclette.config.js","./.raclette/frontend/package.json:/app/package.json",`${Pt("frontend",e)}:/app/yarn.lock`,`${s}:/app/.npmrc`,`${a}:/app/.yarnrc`,`${U.resolve(n,"frontend")}:/build-output`],networks:["raclette_shared"]},o.volumes[c]=null;try{e.services.frontend?.volumes&&e.services.frontend.volumes.length>0&&e.services.frontend.volumes.forEach(l=>{let u=it(l,t);o.services.frontend.volumes.push(u)})}catch{console.error(f.red("Could not add custom volumes to backend docker-compose file. This might lead to missing data."))}}if(e.services.backend?.enabled){let c=e.services.backend.nodeModulesVolume||`${e.name}-backend_node_modules`;o.services.backend={container_name:`${i}-backend`,build:{context:".",dockerfile:"./backend.Dockerfile",args:{NODE_ENV:"production"}},command:["sh","-c","yarn install --production=false && rm -rf ./dist && yarn build && cp -r /app/dist /build-output/ && cp /app/package.json /build-output/ && cp /app/yarn.lock /build-output/ || echo 'Backend build failed'"],environment:[...Object.entries(e.env.production||{}).map(([l,u])=>`${l}=${u}`),"NODE_ENV=production"],volumes:[`${c}:/app/node_modules`,"./.raclette/virtual/backend/src:/app/src","./.raclette/backend/raclette.config.js:/app/raclette.config.js","./plugins:/app/src/appPlugins","./.raclette/backend/package.json:/app/package.json",`${Pt("backend",e)}:/app/yarn.lock`,"./.raclette/virtual/backend/types:/app/types",`${s}:/app/.npmrc`,`${a}:/app/.yarnrc`,`${U.resolve(n,"backend")}:/build-output`],networks:["raclette_shared"]},o.volumes[c]=null;try{e.services.backend?.volumes&&e.services.backend.volumes.length>0&&e.services.backend.volumes.forEach(l=>{let u=it(l,t);o.services.backend.volumes.push(u)})}catch{console.error(f.red("Could not add custom volumes to backend docker-compose file. This might lead to missing data."))}}Object.values(o.services).forEach(c=>{c.volumes&&(c.volumes=qr(c.volumes,t))}),await B.writeFile(r,ot.dump(o))},Yk=async(e,t,r,n)=>{let o=n.services.frontend?.port||8081,i=n.services.workbench?.frontendPort||8083,s=`#!/bin/bash
|
|
937
|
+
# Raclette Production Deployment Script with Image Loading
|
|
938
|
+
|
|
939
|
+
set -e
|
|
940
|
+
|
|
941
|
+
echo "\u{1F680} Deploying Raclette application from packaged images..."
|
|
942
|
+
|
|
943
|
+
# Check if running from package directory
|
|
944
|
+
if [ ! -d "images" ]; then
|
|
945
|
+
echo "\u274C Images directory not found. Make sure you're running this from the extracted package directory."
|
|
946
|
+
exit 1
|
|
947
|
+
fi
|
|
948
|
+
|
|
949
|
+
# Check if .env file exists
|
|
950
|
+
if [ ! -f .env ]; then
|
|
951
|
+
echo "\u274C .env file not found. Copy .env.example and configure it first."
|
|
952
|
+
echo "\u{1F4A1} Run: cp .env.example .env && nano .env"
|
|
953
|
+
exit 1
|
|
954
|
+
fi
|
|
955
|
+
|
|
956
|
+
# Load Docker images
|
|
957
|
+
echo "\u{1F4E5} Loading Docker images..."
|
|
958
|
+
./load-images.sh
|
|
959
|
+
|
|
960
|
+
# Build and start services (images are already loaded)
|
|
961
|
+
echo "\u{1F7E2} Starting services..."
|
|
962
|
+
docker compose up -d
|
|
963
|
+
|
|
964
|
+
echo "\u23F3 Waiting for services to be healthy..."
|
|
965
|
+
sleep 30
|
|
966
|
+
|
|
967
|
+
# Check health
|
|
968
|
+
echo "\u{1F50D} Checking service health..."
|
|
969
|
+
docker compose ps
|
|
970
|
+
|
|
971
|
+
# Test endpoints
|
|
972
|
+
echo "\u{1F9EA} Testing application endpoints..."
|
|
973
|
+
if curl -f http://localhost:${o}/health > /dev/null 2>&1; then
|
|
974
|
+
echo "\u2705 Application health check passed"
|
|
975
|
+
else
|
|
976
|
+
echo "\u26A0\uFE0F Application health check failed, but services are running"
|
|
977
|
+
echo "\u{1F4A1} Make sure your Fastify backend has a /health endpoint and listens on 0.0.0.0:3000"
|
|
978
|
+
fi
|
|
979
|
+
|
|
980
|
+
echo "\u2705 Deployment complete!"
|
|
981
|
+
echo ""
|
|
982
|
+
echo "\u{1F30D} Application URLs:"
|
|
983
|
+
echo " Main App: http://localhost:${o}"
|
|
984
|
+
${r?`echo " Workbench: http://localhost:${i}"`:""}
|
|
985
|
+
echo ""
|
|
986
|
+
echo "\u{1F4CA} Management commands:"
|
|
987
|
+
echo " View logs: docker compose logs -f"
|
|
988
|
+
echo " Stop: docker compose down"
|
|
989
|
+
echo " Restart: docker compose restart"
|
|
990
|
+
echo " Update images: ./load-images.sh && docker compose up -d"
|
|
991
|
+
`;await B.writeFile(U.join(e,"deploy.sh"),s),await B.chmod(U.join(e,"deploy.sh"),493)},Kk=async(e,t)=>{let r=`#!/bin/bash
|
|
992
|
+
# Load Docker Images Script
|
|
993
|
+
|
|
994
|
+
set -e
|
|
995
|
+
|
|
996
|
+
echo "\u{1F4E5} Loading Docker images..."
|
|
997
|
+
|
|
998
|
+
if [ ! -d "images" ]; then
|
|
999
|
+
echo "\u274C Images directory not found"
|
|
1000
|
+
exit 1
|
|
1001
|
+
fi
|
|
1002
|
+
|
|
1003
|
+
cd images
|
|
1004
|
+
|
|
1005
|
+
# Load each image
|
|
1006
|
+
${t.map(n=>{let o=n.replace(/[:/]/g,"_");return`echo " \u{1F4E6} Loading ${n}..."
|
|
1007
|
+
if [ -f "${o}.tar" ]; then
|
|
1008
|
+
docker load -i "${o}.tar"
|
|
1009
|
+
echo " \u2705 Loaded ${n}"
|
|
1010
|
+
else
|
|
1011
|
+
echo " \u274C Image file ${o}.tar not found"
|
|
1012
|
+
exit 1
|
|
1013
|
+
fi`}).join(`
|
|
1014
|
+
|
|
1015
|
+
`)}
|
|
1016
|
+
|
|
1017
|
+
cd ..
|
|
1018
|
+
|
|
1019
|
+
echo "\u2705 All images loaded successfully!"
|
|
1020
|
+
echo ""
|
|
1021
|
+
echo "\u{1F433} Available images:"
|
|
1022
|
+
docker images | grep -E "${t.map(n=>n.split(":")[0]).join("|")}" || echo "No images found (this might be expected if tags changed)"
|
|
1023
|
+
`;await B.writeFile(U.join(e,"load-images.sh"),r),await B.chmod(U.join(e,"load-images.sh"),493)},Xk=async(e,t,r,n)=>{let o=t.services.frontend?.port||8081,i=t.services.workbench?.frontendPort||8083,s=`# ${t.name} - Deployment Package
|
|
1024
|
+
|
|
1025
|
+
This package contains everything needed to deploy your Raclette application.
|
|
1026
|
+
|
|
1027
|
+
## Contents
|
|
1028
|
+
|
|
1029
|
+
- \`images/\` - Docker images as TAR files
|
|
1030
|
+
- \`docker-compose.yml\` - Production compose configuration
|
|
1031
|
+
- \`.env.example\` - Environment variables template
|
|
1032
|
+
- \`deploy.sh\` - Main deployment script
|
|
1033
|
+
- \`load-images.sh\` - Load Docker images script
|
|
1034
|
+
- \`nginx.conf\` - Nginx configuration
|
|
1035
|
+
${n?"- `nginx.workbench.conf` - Workbench nginx configuration":""}
|
|
1036
|
+
|
|
1037
|
+
## Quick Start
|
|
1038
|
+
|
|
1039
|
+
1. **Extract the package:**
|
|
1040
|
+
\`\`\`bash
|
|
1041
|
+
tar -xzf ${t.name}-deployment-*.tar.gz
|
|
1042
|
+
cd ${t.name}-deployment-*
|
|
1043
|
+
\`\`\`
|
|
1044
|
+
|
|
1045
|
+
2. **Configure environment:**
|
|
1046
|
+
\`\`\`bash
|
|
1047
|
+
cp .env.example .env
|
|
1048
|
+
nano .env # Edit your configuration
|
|
1049
|
+
\`\`\`
|
|
1050
|
+
|
|
1051
|
+
3. **Deploy:**
|
|
1052
|
+
\`\`\`bash
|
|
1053
|
+
chmod +x deploy.sh load-images.sh
|
|
1054
|
+
./deploy.sh
|
|
1055
|
+
\`\`\`
|
|
1056
|
+
|
|
1057
|
+
## Manual Deployment
|
|
1058
|
+
|
|
1059
|
+
If you prefer manual control:
|
|
1060
|
+
|
|
1061
|
+
1. **Load images:**
|
|
1062
|
+
\`\`\`bash
|
|
1063
|
+
./load-images.sh
|
|
1064
|
+
\`\`\`
|
|
1065
|
+
|
|
1066
|
+
2. **Start services:**
|
|
1067
|
+
\`\`\`bash
|
|
1068
|
+
docker compose up -d
|
|
1069
|
+
\`\`\`
|
|
1070
|
+
|
|
1071
|
+
## Included Images
|
|
1072
|
+
|
|
1073
|
+
${r.map(a=>`- \`${a}\``).join(`
|
|
1074
|
+
`)}
|
|
1075
|
+
|
|
1076
|
+
## Environment Variables
|
|
1077
|
+
|
|
1078
|
+
Copy \`.env.example\` to \`.env\` and configure:
|
|
1079
|
+
|
|
1080
|
+
- \`SERVER_TOKEN_SECRET\` - **Required** - Generate a secure random string
|
|
1081
|
+
- \`MONGO_DATABASE\` - Database name (default: ${t.services.mongodb?.databaseName||t.name})
|
|
1082
|
+
- \`NODE_ENV=production\` - **Required for production**
|
|
1083
|
+
|
|
1084
|
+
## Application URLs
|
|
1085
|
+
|
|
1086
|
+
After deployment:
|
|
1087
|
+
- Main Application: http://localhost:${o}
|
|
1088
|
+
${n?`- Workbench: http://localhost:${i}`:""}
|
|
1089
|
+
|
|
1090
|
+
## Management Commands
|
|
1091
|
+
|
|
1092
|
+
- **View logs:** \`docker compose logs -f\`
|
|
1093
|
+
- **Stop services:** \`docker compose down\`
|
|
1094
|
+
- **Restart services:** \`docker compose restart\`
|
|
1095
|
+
- **Update:** Re-run \`./load-images.sh && docker compose up -d\`
|
|
1096
|
+
|
|
1097
|
+
## Troubleshooting
|
|
1098
|
+
|
|
1099
|
+
- **Health check fails:** Ensure your backend has a \`/health\` endpoint
|
|
1100
|
+
- **502 errors:** Check backend logs with \`docker compose logs backend\`
|
|
1101
|
+
- **Images not loading:** Verify Docker is running and you have sufficient disk space
|
|
1102
|
+
|
|
1103
|
+
## System Requirements
|
|
1104
|
+
|
|
1105
|
+
- Docker and Docker Compose
|
|
1106
|
+
- At least 2GB free disk space
|
|
1107
|
+
- Ports ${o}${n?`, ${i}`:""} available
|
|
1108
|
+
|
|
1109
|
+
Generated on: ${new Date().toISOString()}
|
|
1110
|
+
`;await B.writeFile(U.join(e,"README.md"),s)},Zd=async(e,t,r,n,o)=>{console.log(f.blue("\u{1F4E6} Packaging images for distribution..."));let i=U.join(t,"..","package"),s=`${e.name}-deployment-${n}`,a=U.join(i,`${s}.tar.gz`);await B.ensureDir(i),await B.emptyDir(i);let c=U.join(i,s);await B.ensureDir(c);try{console.log(f.gray(" \u{1F4BE} Exporting Docker images..."));let l=U.join(c,"images");await B.ensureDir(l);for(let p of r){let d=`${p.replace(/[:/]/g,"_")}.tar`,g=U.join(l,d);console.log(f.gray(` \u{1F4E6} Exporting ${p}...`)),ce(["save","-o",g,p],{stdio:"pipe"});let m=await B.stat(g);if(m.size===0)throw new Error(`Failed to export image ${p}`);console.log(f.gray(` \u2705 Exported ${p} (${(m.size/1024/1024).toFixed(1)}MB)`))}console.log(f.gray(" \u{1F4C4} Copying deployment files..."));let u=["docker-compose.yml",".env.example","deploy.sh","nginx.conf"];return o&&u.push("nginx.workbench.conf"),await Vk(u,t,c,{required:!1,logPrefix:" "}),await Yk(c,r,o,e),await Kk(c,r),await Xk(c,e,r,o),console.log(f.gray(" \u{1F5DC}\uFE0F Creating deployment package...")),await zk(c,a),await B.remove(c),console.log(f.green(` \u2705 Deployment package created: ${s}.tar.gz`)),{packagePath:a,imageNames:r}}catch(l){throw await B.remove(c).catch(()=>{}),l}},zk=async(e,t)=>{let r=U.dirname(e),n=U.basename(e);Bk(`tar -czf "${t}" -C "${r}" "${n}"`,{stdio:"pipe"});let o=await B.stat(t);console.log(f.gray(` \u{1F4E6} Package size: ${(o.size/1024/1024).toFixed(1)}MB`))};var ef=async(e,t,r={})=>{let n=Date.now(),o=Jk(r);console.log(f.blue(`\u{1F9C0} Starting Raclette ${o} build...`)),Vr();let i=H.join(process.cwd(),".raclette"),s=H.resolve(r.outputDir||H.join(i,".build"));await V.ensureDir(s),await V.emptyDir(s);try{await sx(e,t,i),await ax(e,t,i);let a={mode:o,buildDir:s,artifacts:{}};switch(o){case"artifacts":a=await Zk(e,i,s,r);break;case"images":a=await tf(e,i,s,r);break;case"package":a=await ex(e,i,s,r);break}let c=(Date.now()-n)/1e3;return h.success(` ${o} build completed in ${c}s`),ix(a,e),a}catch(a){throw h.error(`${o} build failed: ${a.message}`),a}},Jk=e=>e.mode?e.mode:e.packageImages?"package":e.buildImages?"images":(e.buildOnly,"artifacts"),Zk=async(e,t,r,n)=>{if(n.buildOnly){console.log(f.blue("\u{1F4C1} Building application files only...")),await Gs(e,t,r,n);let i=await Us(e,r,n);return console.log(f.green("\u2705 Build files ready")),{mode:"artifacts",buildDir:r,artifacts:{}}}else{console.log(f.blue("\u{1F4C1} Building local deployment artifacts..."));let i=H.join(r,"app");await Gs(e,t,i,n);let s=await Us(e,r,n),a=await Hs(e,r,s),c=await ox(e,r,s);return console.log(f.green("\u2705 Local deployment artifacts ready")),{mode:"artifacts",buildDir:r,artifacts:{composeFile:a,deployScript:H.join(r,"deploy.sh"),readmeFile:c,envExampleFile:H.join(r,".env.example")}}}},tf=async(e,t,r,n)=>{console.log(f.blue("\u{1F433} Building Docker images for CI/CD..."));let o=H.join(r,"app");await Gs(e,t,o,n);let i=await Us(e,r,n);await Hs(e,r,i);let s=await tx(e,r,i,n);return console.log(f.green("\u2705 Docker images ready for registry push")),{mode:"images",buildDir:r,images:s,artifacts:{}}},ex=async(e,t,r,n)=>{console.log(f.blue("\u{1F4E6} Building offline deployment package..."));let o=await tf(e,t,r,n),i=rf(),s=await Zd(e,r,o.images.names,i,o.images.names.some(a=>a.includes("workbench")));return console.log(f.green("\u2705 Offline deployment package ready")),{...o,mode:"package",deploymentPackage:s.packagePath}},tx=async(e,t,r,n)=>{let o=n.imagePrefix||e.name,i=n.imageTag||rf(),s=n.platforms||"linux/amd64,linux/arm64",a=n.buildx||!1,c=[],l=[i];if(n.generateLatest&&!l.includes("latest")&&l.push("latest"),a)try{await rx(),console.log(f.blue(`\u{1F3D7}\uFE0F Building multi-architecture images for: ${s}`))}catch(u){console.warn(f.yellow("\u26A0\uFE0F Buildx not available, falling back to single-architecture builds")),console.warn(f.yellow(` ${u.message}`)),a=!1}if(a){let u=["frontend","backend"];r&&u.push("workbench-frontend","workbench-backend");for(let p of u){let d=`${o}/${p}`,g=H.join(t,`Dockerfile.${p}`);if(!await V.pathExists(g))throw new Error(`Dockerfile not found: ${g}`);let m=l.map(y=>`${d}:${y}`);c.push(...m),await nx({context:t,dockerfile:g,tags:m,platforms:s,push:!1,noCache:n.noCache,verbose:n.verbose}),console.log(f.gray(` \u2705 Built ${p} for ${s}`)),m.forEach(y=>{console.log(f.gray(` ${y}`))})}}else{console.log(f.gray(" \u{1F528} Building single-architecture images..."));let p=["-f",H.join(t,"docker-compose.yml"),"build"];n.noCache&&p.push("--no-cache"),ye(p,{stdio:n.verbose?"inherit":"pipe",cwd:t});let d=["frontend","backend"];r&&d.push("workbench-frontend","workbench-backend");for(let g of d){let m=`${H.basename(t)}-${g}`.replace(/\./,""),y=`${o}/${g}`;l.forEach(k=>{let C=`${y}:${k}`;ce(["tag",m,C],{stdio:"pipe"}),c.push(C)}),console.log(f.gray(` \u2705 Tagged ${g}`))}}return console.log(f.green(" \u2705 Docker images built and tagged")),{names:c,tags:l}},rx=async()=>{try{ce(["buildx","version"],{stdio:"pipe"}),console.log(f.gray(" \u{1F4E6} Setting up QEMU for cross-platform emulation...")),ce(["run","--rm","--privileged","multiarch/qemu-user-static","--reset","-p","yes"],{stdio:"pipe"}),console.log(f.gray(" \u{1F4E6} Creating buildx builder...")),ce(["buildx","create","--name","multiarch","--use"],{stdio:"pipe"}),ce(["buildx","inspect","--bootstrap"],{stdio:"pipe"}),console.log(f.gray(" \u2705 Buildx builder ready with QEMU emulation"))}catch(e){throw console.warn(f.yellow(" \u26A0\uFE0F Buildx setup failed, falling back to single-architecture builds")),console.warn(f.yellow(` ${e.message}`)),new Error("Buildx not available - use single-architecture builds instead")}},nx=async e=>{let t=["buildx","build","--platform",e.platforms,"--file",e.dockerfile];e.tags.forEach(n=>{t.push("--tag",n)});let r=e.platforms.split(",").length;e.push?t.push("--push"):r===1?t.push("--load"):(console.log(f.yellow(" \u26A0\uFE0F Multi-platform images cannot be loaded locally")),console.log(f.yellow(" \u2139\uFE0F Images built but not loaded to local Docker"))),e.noCache&&t.push("--no-cache"),t.push(e.context);try{ce(t,{stdio:e.verbose?"inherit":"pipe",cwd:e.context})}catch(n){throw new Error(`Failed to build multi-architecture image: ${n}`)}},ox=async(e,t,r)=>{let n=H.join(t,"README.md"),o=e.services.frontend?.port||8081,i=e.services.workbench?.frontendPort||8083,s=`# ${e.name} - Local Deployment
|
|
1111
|
+
|
|
1112
|
+
This build contains everything needed to deploy ${e.name} locally using Docker.
|
|
1113
|
+
|
|
1114
|
+
## Quick Start
|
|
1115
|
+
|
|
1116
|
+
1. **Configure environment:**
|
|
1117
|
+
\`\`\`bash
|
|
1118
|
+
cp .env.example .env
|
|
1119
|
+
nano .env # Edit SERVER_TOKEN_SECRET and other settings
|
|
1120
|
+
\`\`\`
|
|
1121
|
+
|
|
1122
|
+
2. **Deploy:**
|
|
1123
|
+
\`\`\`bash
|
|
1124
|
+
chmod +x deploy.sh
|
|
1125
|
+
./deploy.sh
|
|
1126
|
+
\`\`\`
|
|
1127
|
+
|
|
1128
|
+
## What happens during deployment:
|
|
1129
|
+
|
|
1130
|
+
- \u{1F433} Docker images are built from the included artifacts
|
|
1131
|
+
- \u{1F7E2} Services start: frontend, backend, database, cache${r?", workbench":""}
|
|
1132
|
+
- \u{1F9EA} Health checks verify everything is running
|
|
1133
|
+
- \u2705 Application becomes available
|
|
1134
|
+
|
|
1135
|
+
## Application URLs
|
|
1136
|
+
|
|
1137
|
+
After deployment:
|
|
1138
|
+
- **Main Application:** http://localhost:${o}
|
|
1139
|
+
${r?`- **Workbench:** http://localhost:${i}`:""}
|
|
1140
|
+
|
|
1141
|
+
## Environment Configuration
|
|
1142
|
+
|
|
1143
|
+
**Required settings in .env:**
|
|
1144
|
+
- \`SERVER_TOKEN_SECRET\` - Generate a secure random string (required)
|
|
1145
|
+
- \`MONGO_DATABASE\` - Database name (default: ${e.name})
|
|
1146
|
+
|
|
1147
|
+
**Optional settings:**
|
|
1148
|
+
- \`RACLETTE_DEBUG_MODE\` - Enable debug logging (default: false)
|
|
1149
|
+
- \`RACLETTE_MONGODB_HOST\` - Custom MongoDB connection
|
|
1150
|
+
- \`RACLETTE_CACHE_URL\` - Custom cache connection
|
|
1151
|
+
|
|
1152
|
+
## Management Commands
|
|
1153
|
+
|
|
1154
|
+
- **View logs:** \`docker compose logs -f\`
|
|
1155
|
+
- **Stop services:** \`docker compose down\`
|
|
1156
|
+
- **Restart services:** \`docker compose restart\`
|
|
1157
|
+
- **Remove everything:** \`docker compose down -v\` (\u26A0\uFE0F removes data)
|
|
1158
|
+
|
|
1159
|
+
## Customization
|
|
1160
|
+
|
|
1161
|
+
Edit \`docker-compose.yml\` to:
|
|
1162
|
+
- Change port mappings
|
|
1163
|
+
- Add volume mounts for custom files
|
|
1164
|
+
- Modify environment variables
|
|
1165
|
+
- Add additional services
|
|
1166
|
+
|
|
1167
|
+
## Troubleshooting
|
|
1168
|
+
|
|
1169
|
+
- **Health check fails:** Backend may need more time to start, check logs
|
|
1170
|
+
- **502 errors:** Backend not responding, verify database connection
|
|
1171
|
+
- **Permission issues:** Ensure deploy.sh is executable (\`chmod +x deploy.sh\`)
|
|
1172
|
+
|
|
1173
|
+
Built on: ${new Date().toISOString()}
|
|
1174
|
+
Build type: Local deployment artifacts
|
|
1175
|
+
`;return await V.writeFile(n,s),console.log(f.gray(" \u2705 Created local deployment README")),n},ix=(e,t)=>{let r=t.services.frontend?.port||8081,n=t.services.workbench?.frontendPort||8083,o=e.images?.names.some(i=>i.includes("workbench"))||!1;switch(console.log(""),console.log(f.blue("\u{1F4E6} Build Summary:")),console.log(` Mode: ${f.cyan(e.mode)}`),console.log(` Build Directory: ${f.cyan(e.buildDir)}`),e.mode==="artifacts"&&(console.log(` Docker Compose: ${f.cyan(e.artifacts.composeFile||"N/A")}`),console.log(` Deploy Script: ${f.cyan(e.artifacts.deployScript||"N/A")}`),console.log(` README: ${f.cyan(e.artifacts.readmeFile||"N/A")}`)),e.images&&e.images.names.length>0&&(console.log(` Docker Images: ${f.cyan(e.images.names.length)} built`),e.images.names.forEach(i=>{console.log(` - ${f.gray(i)}`)})),e.deploymentPackage&&console.log(` Deployment Package: ${f.cyan(e.deploymentPackage)}`),console.log(""),console.log(f.blue("\u{1F680} Next steps:")),e.mode){case"artifacts":console.log(f.yellow(" 1. Configure: cp .env.example .env && edit .env")),console.log(f.yellow(" 2. Deploy: chmod +x deploy.sh && ./deploy.sh")),console.log(f.yellow(` \u2192 App will be at http://localhost:${r}`)),o&&console.log(f.yellow(` \u2192 Workbench at http://localhost:${n}`));break;case"images":console.log(f.yellow(" Images ready for registry push:")),e.images?.names.forEach(i=>{console.log(f.yellow(` docker push ${i}`))}),console.log(""),console.log(f.gray(" \u{1F4A1} Example pipeline usage:")),console.log(f.gray(" docker push myregistry.com/myproject/frontend:v1.0.0")),console.log(f.gray(" docker push myregistry.com/myproject/backend:v1.0.0"));break;case"package":console.log(f.yellow(" 1. Transfer package to target system")),console.log(f.yellow(" 2. Extract: tar -xzf deployment-package.tar.gz")),console.log(f.yellow(" 3. Configure: cp .env.example .env && edit .env")),console.log(f.yellow(" 4. Deploy: ./deploy.sh"));break}},rf=()=>new Date().toISOString().slice(0,10).replace(/-/g,""),sx=async(e,t,r)=>{console.log(f.blue("\u{1F4C1} Setting up build environment...")),await jn(e),await In(e),await Nn(e),await Fn(e,r),await Qr(e,r),await Pr(e,r),console.log(f.green("\u2705 Build environment ready"))},ax=async(e,t,r)=>{console.log(f.blue("\u26A1 Running generation mode..."));let n=`${e.name}-build`,o=H.join(r,"docker-compose.generate.yml");await Kr(e,r,"build"),await Qd(e,t,o),Gr("raclette_shared");try{console.log(f.gray(" \u{1F433} Starting generation services...")),ye(["-p",n,"-f",o,"up","-d"],{stdio:"pipe"}),console.log(f.gray(" \u23F3 Waiting for file generation to complete..."));let i=0,s=60;for(;i<s;)try{if(!(await ye(["-p",n,"-f",o,"ps","-q","backend"],{stdio:"pipe"})).trim())break;await new Promise(c=>setTimeout(c,1e3)),i++}catch{break}if(i>=s)throw new Error("Generation mode timed out");console.log(f.green(" \u2705 File generation completed"))}finally{try{ye(["-p",n,"-f",o,"down"],{stdio:"pipe"})}catch{console.warn(f.yellow("Warning: Could not cleanup generation services"))}}},Gs=async(e,t,r,n)=>{console.log(f.blue("\u{1F3A8} Building main application...")),await V.ensureDir(r),await Kr(e,t,"build"),await cx(e,t,r,n)},cx=async(e,t,r,n)=>{console.log(f.gray(" \u{1F680} Building frontend and backend..."));let o=`${e.name}-app-build`,i=H.join(t,"docker-compose.app-build.yml"),s=H.join(t,".temp-build");await V.ensureDir(s),await V.ensureDir(H.join(s,"frontend")),await V.ensureDir(H.join(s,"backend"));try{await Jd(e,process.cwd(),i,s);let a=["-p",o,"-f",i,"up"];if(n.noCache&&a.push("--build","--force-recreate"),console.log(f.gray(" \u{1F528} Starting parallel build process...")),ye(a,{stdio:n.verbose?"inherit":"pipe",cwd:process.cwd()}),e.services.frontend?.enabled){let c=H.join(r,"frontend");await V.ensureDir(c);let l=H.join(s,"frontend");if(await V.pathExists(l)){if((await V.readdir(l)).length===0)throw new Error("Frontend build produced no output files");await V.copy(l,c),console.log(f.green(" \u2705 Frontend build complete"))}else throw new Error("Frontend build did not produce expected output directory")}if(e.services.backend?.enabled){let c=H.join(r,"backend");await V.ensureDir(c);let l=H.join(s,"backend");if(!await V.pathExists(l))throw new Error("Backend build did not produce expected output directory");await lx(e,t,c,s),console.log(f.green(" \u2705 Backend build complete"))}console.log(f.green(" \u2705 Application build completed"))}finally{try{ye(["-p",o,"-f",i,"down"],{stdio:"pipe"})}catch{console.warn(f.yellow("Warning: Could not cleanup build services"))}await V.remove(s),await V.remove(i)}},lx=async(e,t,r,n)=>{console.log(f.gray(" \u{1F4E6} Creating backend Node.js application..."));let o=H.join(n,"backend");await V.ensureDir(r),await V.pathExists(o)&&(await V.copy(o,r),console.log(f.gray(" \u2705 Copied backend build artifacts")));let i=H.join(r,"dist");if(!await V.pathExists(i))throw new Error("Backend build did not produce expected dist/ folder");let s=H.join(i,"src","server.js");if(!await V.pathExists(s))throw new Error("Backend build did not produce expected dist/src/server.js entry point");let a=H.join(r,"package.json");if(await V.pathExists(a)){let l=await V.readJson(a),u={...l,scripts:{start:"node dist/src/server.js",...l.scripts},devDependencies:void 0};await V.writeJson(a,u,{spaces:2}),console.log(f.gray(" \u2705 Updated package.json for production"))}else throw new Error("Backend build did not include package.json");let c=H.join(r,"yarn.lock");await V.pathExists(c)||console.warn(f.yellow(" \u26A0\uFE0F No yarn.lock found in backend build")),console.log(f.gray(" \u2705 Backend Node.js application structure created")),console.log(f.gray(" \u{1F4C1} Entry point: dist/src/server.js")),await ux(r)},ux=async e=>{let t=["package.json","yarn.lock","dist/src/server.js"],r=[];for(let i of t){let s=H.join(e,i);await V.pathExists(s)||r.push(i)}if(r.length>0)throw new Error(`Backend application is missing required files: ${r.join(", ")}`);let n=H.join(e,"package.json"),o=await V.readJson(n);(!o.scripts?.start||!o.scripts.start.includes("dist/src/server.js"))&&console.warn(f.yellow(" \u26A0\uFE0F package.json start script may not point to dist/src/server.js")),console.log(f.gray(" \u2705 Backend structure verified successfully"))},Us=async(e,t,r)=>!e.services.workbench?.enabled||r.skipWorkbench?!1:(await px(e,t,r),!0),px=async(e,t,r)=>{console.log(f.blue("\u{1F527} Building workbench..."));let n=H.join(process.cwd(),"node_modules","@raclettejs","workbench");if(!await V.pathExists(n)){h.warn("Workbench package not found, skipping workbench build");return}let o=H.join(t,"workbench");try{let i={...process.env,MONGO_HOST:`mongodb://localhost:${e.services.mongodb?.port||27017}/${e.services.mongodb?.databaseName||e.name}`,CACHE_URL:`redis://localhost:${e.services.redis?.port||6379}`,...e.env.development},s=`${e.name}-workbench`;console.log(f.gray(" \u{1F527} Running workbench build process as "+s)),await new Promise((a,c)=>{let l=["build","--output-dir",o,"--build-only",r.verbose?"-v":"","-p",s].filter(p=>p!==""),u=Qk("yarn",l,{cwd:n,stdio:r.verbose?"inherit":"ignore",env:i});u.on("close",p=>{h.raw(f.gray(` \u{1F3C1} Workbench build process exited with code ${p}`)),p===0?a():c(new Error(`Workbench build failed with exit code ${p}`))}),u.on("error",p=>{h.raw(f.red(` \u274C Workbench build process error: ${p.message}`)),c(p)})}),h.raw(f.green(" \u2705 Workbench build complete"))}catch(i){throw h.error("Workbench build failed: "+i.message),i}};import Ze from"fs-extra";import Je from"path";var Ws=()=>[{description:"custom favicon",source:"./branding/favicon.png",target:"/usr/shared/nginx/html/favicon.png",service:"frontend"},{description:"custom logo in app",source:"./branding/custom-logo.png",target:"/usr/shared/nginx/html/logo.png",service:"frontend"},{description:"custom home icon (can be full logo or just an icon)",source:"./branding/custom-home-icon.png",target:"/usr/shared/nginx/html/home-icon.png",service:"frontend"},{description:"custom logo in login screen (not used, if not set)",source:"./branding/custom-login-logo.png",target:"/usr/shared/nginx/html/login-logo.png",service:"frontend"}];var nf=async(e,t={})=>{console.log(f.blue("\u{1F4CB} Generating deployment guide..."));let r=Je.resolve(t.outputDir||process.cwd()),n=t.imagePrefix||e.name,o=t.imageTag||"latest",i=t.registry||"",s=af(e,n,o,i);return t.generateFiles?await hx(e,s,r,i):await mx(e,s,r,i)},of=async(e,t={})=>{let r=t.imagePrefix||e.name,n=t.imageTag||"latest",o=t.registry||"",i=af(e,r,n,o);return await dx(e,i,n,o)},dx=async(e,t,r,n)=>{let o=e.services.frontend?.port||8081,i=e.services.workbench?.frontendPort||8083,s=await lf(e,t,r,n),a=await uf(),c=fx(e.name,r);return`# Deploy ${e.name} with Docker
|
|
1176
|
+
|
|
1177
|
+
Deploy ${e.name} using pre-built Docker images.
|
|
1178
|
+
|
|
1179
|
+
## Quick Start
|
|
1180
|
+
|
|
1181
|
+
### 1. Create docker-compose.yml
|
|
1182
|
+
|
|
1183
|
+
\`\`\`yaml
|
|
1184
|
+
${s}
|
|
1185
|
+
\`\`\`
|
|
1186
|
+
|
|
1187
|
+
### 2. Create .env file
|
|
1188
|
+
|
|
1189
|
+
\`\`\`bash
|
|
1190
|
+
${c}
|
|
1191
|
+
\`\`\`
|
|
1192
|
+
|
|
1193
|
+
### 3. Deploy
|
|
1194
|
+
|
|
1195
|
+
\`\`\`bash
|
|
1196
|
+
docker compose up -d
|
|
1197
|
+
\`\`\`
|
|
1198
|
+
|
|
1199
|
+
## Application URLs
|
|
1200
|
+
|
|
1201
|
+
- **Main Application:** http://localhost:${o}
|
|
1202
|
+
${t.hasWorkbench?`- **Workbench:** http://localhost:${i}`:""}
|
|
1203
|
+
|
|
1204
|
+
## Customization
|
|
1205
|
+
|
|
1206
|
+
Create \`docker-compose.override.yml\` for customizations:
|
|
1207
|
+
|
|
1208
|
+
\`\`\`yaml
|
|
1209
|
+
${a}
|
|
1210
|
+
\`\`\`
|
|
1211
|
+
|
|
1212
|
+
*Note for developers: The volume examples above can be customized based on
|
|
1213
|
+
your application's specific customization points. Update the paths and
|
|
1214
|
+
descriptions as needed for your project.*
|
|
1215
|
+
|
|
1216
|
+
## Management
|
|
1217
|
+
|
|
1218
|
+
\`\`\`bash
|
|
1219
|
+
# View logs
|
|
1220
|
+
docker compose logs -f
|
|
1221
|
+
|
|
1222
|
+
# Update to latest images
|
|
1223
|
+
docker compose pull && docker compose up -d
|
|
1224
|
+
|
|
1225
|
+
# Stop services
|
|
1226
|
+
docker compose down
|
|
1227
|
+
|
|
1228
|
+
# Remove all data (\u26A0\uFE0F destructive)
|
|
1229
|
+
docker compose down -v
|
|
1230
|
+
\`\`\`
|
|
1231
|
+
|
|
1232
|
+
## System Requirements
|
|
1233
|
+
|
|
1234
|
+
- Docker and Docker Compose
|
|
1235
|
+
- 2GB+ available RAM
|
|
1236
|
+
- Ports ${o}${t.hasWorkbench?`, ${i}`:""} available
|
|
1237
|
+
|
|
1238
|
+
## Troubleshooting
|
|
1239
|
+
|
|
1240
|
+
- **502 errors:** Check backend logs with \`docker compose logs backend\`
|
|
1241
|
+
- **Database connection:** Verify MongoDB is healthy with \`docker compose ps\`
|
|
1242
|
+
- **Image pull errors:** Check registry access and IMAGE_TAG value
|
|
1243
|
+
`},fx=(e,t)=>["# Required","RACLETTE_SERVER_TOKEN_SECRET=your-secret-key-here","RACLETTE_FRONTEND_URLS=https://yourdomain.com,https://workbench.yourdomain.com # required to prevent CORS issues","","# Database Name",`RACLETTE_MONGO_DATABASE=${e}`,"","# Image Configuration",`IMAGE_TAG=${t}`,"","# Optional - Debug Mode","# RACLETTE_DEBUG_MODE=true # Uncomment to see frontend logs in console"].join(`
|
|
1244
|
+
`),sf=async(e,t,r)=>{let n=e.services.frontend?.port||8081,o=e.services.workbench?.frontendPort||8083,i=await lf(e,t,"latest",r),s=await uf();return`# Deploy ${e.name} with Docker
|
|
1245
|
+
|
|
1246
|
+
Deploy ${e.name} using pre-built Docker images.
|
|
1247
|
+
|
|
1248
|
+
## Quick Start
|
|
1249
|
+
|
|
1250
|
+
### 1. Create docker-compose.yml
|
|
1251
|
+
|
|
1252
|
+
\`\`\`yaml
|
|
1253
|
+
${i}
|
|
1254
|
+
\`\`\`
|
|
1255
|
+
|
|
1256
|
+
### 2. Create .env file
|
|
1257
|
+
|
|
1258
|
+
\`\`\`bash
|
|
1259
|
+
# Required
|
|
1260
|
+
SERVER_TOKEN_SECRET=your-secret-key-here
|
|
1261
|
+
NODE_ENV=production
|
|
1262
|
+
|
|
1263
|
+
# Database Configuration
|
|
1264
|
+
MONGO_DATABASE=${e.name}
|
|
1265
|
+
|
|
1266
|
+
# Image Configuration
|
|
1267
|
+
IMAGE_TAG=latest
|
|
1268
|
+
|
|
1269
|
+
# Optional - Override image registry
|
|
1270
|
+
# DOCKER_REGISTRY=your-registry.com/
|
|
1271
|
+
|
|
1272
|
+
# Optional - Debug Mode
|
|
1273
|
+
# RACLETTE_DEBUG_MODE=true # Uncomment to see frontend logs in console
|
|
1274
|
+
|
|
1275
|
+
# Optional - External Services
|
|
1276
|
+
# RACLETTE_MONGODB_HOST=mongodb://your-mongodb:27017/your-database
|
|
1277
|
+
# RACLETTE_CACHE_URL=valkey://your-cache:6379
|
|
1278
|
+
\`\`\`
|
|
1279
|
+
|
|
1280
|
+
### 3. Deploy
|
|
1281
|
+
|
|
1282
|
+
\`\`\`bash
|
|
1283
|
+
docker compose up -d
|
|
1284
|
+
\`\`\`
|
|
1285
|
+
|
|
1286
|
+
## Application URLs
|
|
1287
|
+
|
|
1288
|
+
- **Main Application:** http://localhost:${n}
|
|
1289
|
+
${t.hasWorkbench?`- **Workbench:** http://localhost:${o}`:""}
|
|
1290
|
+
|
|
1291
|
+
## Configuration
|
|
1292
|
+
|
|
1293
|
+
### Environment Variables
|
|
1294
|
+
|
|
1295
|
+
| Variable | Description | Default |
|
|
1296
|
+
|----------|-------------|---------|
|
|
1297
|
+
| \`SERVER_TOKEN_SECRET\` | **Required** - JWT signing secret | - |
|
|
1298
|
+
| \`MONGO_DATABASE\` | Database name | \`${e.name}\` |
|
|
1299
|
+
| \`IMAGE_TAG\` | Image version | \`latest\` |
|
|
1300
|
+
| \`DOCKER_REGISTRY\` | Registry URL prefix | \`\` (Docker Hub) |
|
|
1301
|
+
| \`RACLETTE_DEBUG_MODE\` | Enable frontend debug logging | \`false\` |
|
|
1302
|
+
|
|
1303
|
+
## Customization
|
|
1304
|
+
|
|
1305
|
+
Create \`docker-compose.override.yml\` for customizations:
|
|
1306
|
+
|
|
1307
|
+
\`\`\`yaml
|
|
1308
|
+
${s}
|
|
1309
|
+
\`\`\`
|
|
1310
|
+
|
|
1311
|
+
*Note for developers: The volume examples above can be customized based on
|
|
1312
|
+
your application's specific customization points. Update the paths and
|
|
1313
|
+
descriptions as needed for your project.*
|
|
1314
|
+
|
|
1315
|
+
## Registry Configuration
|
|
1316
|
+
|
|
1317
|
+
*Note for developers: When copying this guide to your README, update the
|
|
1318
|
+
image names in the docker-compose.yml above to match your actual registry location:*
|
|
1319
|
+
|
|
1320
|
+
- **Docker Hub**: \`myproject/frontend:latest\`
|
|
1321
|
+
- **GitLab Registry**: \`registry.gitlab.com/group/project/frontend:latest\`
|
|
1322
|
+
- **GitHub Registry**: \`ghcr.io/owner/repo/frontend:latest\`
|
|
1323
|
+
- **Private Registry**: \`your-registry.com/project/frontend:latest\`
|
|
1324
|
+
|
|
1325
|
+
## Management
|
|
1326
|
+
|
|
1327
|
+
\`\`\`bash
|
|
1328
|
+
# View logs
|
|
1329
|
+
docker compose logs -f
|
|
1330
|
+
|
|
1331
|
+
# Update to latest images
|
|
1332
|
+
docker compose pull && docker compose up -d
|
|
1333
|
+
|
|
1334
|
+
# Stop services
|
|
1335
|
+
docker compose down
|
|
1336
|
+
|
|
1337
|
+
# Remove all data (\u26A0\uFE0F destructive)
|
|
1338
|
+
docker compose down -v
|
|
1339
|
+
\`\`\`
|
|
1340
|
+
|
|
1341
|
+
## System Requirements
|
|
1342
|
+
|
|
1343
|
+
- Docker and Docker Compose
|
|
1344
|
+
- 2GB+ available RAM
|
|
1345
|
+
- Ports ${n}${t.hasWorkbench?`, ${o}`:""} available
|
|
1346
|
+
|
|
1347
|
+
## Troubleshooting
|
|
1348
|
+
|
|
1349
|
+
- **502 errors:** Check backend logs with \`docker compose logs backend\`
|
|
1350
|
+
- **Database connection:** Verify MongoDB is healthy with \`docker compose ps\`
|
|
1351
|
+
- **Image pull errors:** Check registry access and IMAGE_TAG value
|
|
1352
|
+
`},af=(e,t,r,n)=>{let o=["frontend","backend"],i=e.services.workbench?.enabled||!1;return i&&o.push("workbench-frontend","workbench-backend"),{names:o.map(a=>{let c=`${t}/${a}`;return`${n?`${n}${c}`:c}:${r}`}),hasWorkbench:i}},hx=async(e,t,r,n)=>{console.log(f.blue("\u{1F4C1} Generating deployment files..."));let o=Je.join(r,"deploy-guide");await Ze.ensureDir(o);let i=Je.join(o,"docker-compose.yml");await cf(e,t,i,"latest",n);let s=Je.join(o,"docker-compose.override.yml.example");await gx(e,s);let a=Je.join(o,".env.example");await yx(e,a,t.hasWorkbench);let c=Je.join(o,"README.md");await bx(e,t,c,n);let l=Je.join(o,"DEPLOY.md");return await vx(e,t,l,n),console.log(f.green("\u2705 Deployment files generated")),console.log(f.gray(` \u{1F4C1} Files created in: ${o}`)),{outputPath:o,mode:"files",deployGuideFile:l,additionalFiles:[i,s,a,c]}},mx=async(e,t,r,n)=>{console.log(f.blue("\u{1F4CB} Generating embedded deployment guide..."));let o=Je.join(r,"DEPLOY.md");return await _x(e,t,o,n),console.log(f.green("\u2705 Deployment guide generated")),console.log(f.gray(` \u{1F4C4} Guide: ${o}`)),{outputPath:r,mode:"embedded",deployGuideFile:o}},cf=async(e,t,r,n,o)=>{let i=e.services.frontend?.port||8081,s=e.services.workbench?.frontendPort||8083,a=l=>{let d=l.split(":")[0].replace(o,"");return o?`${o}${d}:\${IMAGE_TAG:-${n}}`:`\${DOCKER_REGISTRY:-}${d}:\${IMAGE_TAG:-${n}}`},c={name:e.name,services:{frontend:{image:a(t.names[0]),ports:[`\${FRONTEND_PORT:-${i}}:${i}`],depends_on:["backend"],restart:"unless-stopped",networks:["app-network"],environment:["NODE_ENV=production","RACLETTE_DEBUG_MODE=${RACLETTE_DEBUG_MODE:-false}","RACLETTE_SERVER_BASE_URL=${RACLETTE_SERVER_BASE_URL:-/api}","RACLETTE_SOCKET_URL=${RACLETTE_SOCKET_URL:-}"],healthcheck:{test:["CMD","curl","-f",`http://0.0.0.0:${i}/`],interval:"10s",timeout:"30s",retries:10}},backend:{image:a(t.names[1]),depends_on:["database","cache"],restart:"unless-stopped",networks:["app-network"],environment:["NODE_ENV=production","SERVER_TOKEN_SECRET=${SERVER_TOKEN_SECRET}",`MONGO_HOST=\${RACLETTE_MONGODB_HOST:-mongodb://database:27017/\${MONGO_DATABASE:-${e.name}}}`,"CACHE_URL=${RACLETTE_CACHE_URL:-valkey://cache:6379}"],healthcheck:{test:["CMD","curl","-f","http://0.0.0.0:3000/health"],interval:"10s",timeout:"30s",retries:10}},database:{image:"mongo:5.0.6",restart:"unless-stopped",volumes:["mongodb_data:/data/db"],networks:["app-network"],environment:[`MONGO_INITDB_DATABASE=\${MONGO_DATABASE:-${e.name}}`],healthcheck:{test:["CMD","mongosh","--eval","db.adminCommand('ping')"],interval:"10s",timeout:"30s",retries:20}},cache:{image:"valkey/valkey:8.1-alpine",restart:"unless-stopped",volumes:["cache_data:/data"],networks:["app-network"],healthcheck:{test:["CMD","valkey-cli","ping"],interval:"10s",timeout:"5s",retries:3}}},volumes:{mongodb_data:{},cache_data:{}},networks:{"app-network":{driver:"bridge"}}};t.hasWorkbench&&t.names.length>=4&&(c.services["workbench-frontend"]={image:a(t.names[2]),ports:[`\${WORKBENCH_FRONTEND_PORT:-${s}}:${s}`],depends_on:["workbench-backend"],restart:"unless-stopped",networks:["app-network"],environment:["NODE_ENV=production","RACLETTE_DEBUG_MODE=${RACLETTE_DEBUG_MODE:-false}","RACLETTE_SERVER_BASE_URL=${RACLETTE_SERVER_BASE_URL:-/api}","RACLETTE_SOCKET_URL=${RACLETTE_SOCKET_URL:-}"],healthcheck:{test:["CMD","curl","-f",`http://0.0.0.0:${s}/`],interval:"10s",timeout:"30s",retries:10}},c.services["workbench-backend"]={image:a(t.names[3]),depends_on:["database","cache"],restart:"unless-stopped",networks:["app-network"],environment:["NODE_ENV=production","PORT=3000","SERVER_TOKEN_SECRET=${SERVER_TOKEN_SECRET}",`MONGO_HOST=\${RACLETTE_MONGODB_HOST:-mongodb://database:27017/\${MONGO_DATABASE:-${e.name}}}`,"CACHE_URL=${RACLETTE_CACHE_URL:-valkey://cache:6379}"],healthcheck:{test:["CMD","curl","-f","http://0.0.0.0:3000/health"],interval:"10s",timeout:"30s",retries:10}}),await Ze.writeFile(r,ot.dump(c))},gx=async(e,t)=>{let r=Ws(),n=r.filter(s=>s.service==="frontend"),o=r.filter(s=>s.service==="backend"),i=`# docker-compose.override.yml
|
|
1353
|
+
# Copy this file to docker-compose.override.yml and customize as needed
|
|
1354
|
+
# This file allows you to extend the main docker-compose.yml without modifying it
|
|
1355
|
+
|
|
1356
|
+
services:
|
|
1357
|
+
frontend:
|
|
1358
|
+
# Add custom volume mounts for branding and customization
|
|
1359
|
+
volumes:
|
|
1360
|
+
${n.map(s=>` # ${s.description}
|
|
1361
|
+
# - ${s.source}:${s.target}`).join(`
|
|
1362
|
+
`)}
|
|
1363
|
+
# Override environment variables
|
|
1364
|
+
environment:
|
|
1365
|
+
# - CUSTOM_BRAND_NAME=My Company
|
|
1366
|
+
|
|
1367
|
+
backend:
|
|
1368
|
+
# Add custom volume mounts for configuration and files
|
|
1369
|
+
volumes:
|
|
1370
|
+
${o.map(s=>` # ${s.description}
|
|
1371
|
+
# - ${s.source}:${s.target}`).join(`
|
|
1372
|
+
`)}
|
|
1373
|
+
# Override environment variables
|
|
1374
|
+
environment:
|
|
1375
|
+
# - CUSTOM_API_KEY=your-api-key-here
|
|
1376
|
+
|
|
1377
|
+
# Add additional services
|
|
1378
|
+
# custom-service:
|
|
1379
|
+
# image: some/custom-image
|
|
1380
|
+
# networks:
|
|
1381
|
+
# - app-network
|
|
1382
|
+
|
|
1383
|
+
# Add custom volumes
|
|
1384
|
+
# volumes:
|
|
1385
|
+
# custom_data:
|
|
1386
|
+
|
|
1387
|
+
# Add custom networks if needed
|
|
1388
|
+
# networks:
|
|
1389
|
+
# custom-network:
|
|
1390
|
+
`;await Ze.writeFile(t,i)},yx=async(e,t,r)=>{let n=Vs(e,r);await Ze.writeFile(t,n)},bx=async(e,t,r,n)=>{let o=e.services.frontend?.port||8081,i=e.services.workbench?.frontendPort||8083,s=`# ${e.name} - Local Registry Testing
|
|
1391
|
+
|
|
1392
|
+
This folder contains deployment files for testing registry-based deployment locally.
|
|
1393
|
+
|
|
1394
|
+
## Generated Files
|
|
1395
|
+
|
|
1396
|
+
- \`docker-compose.yml\` - Registry-based compose configuration
|
|
1397
|
+
- \`docker-compose.override.yml.example\` - Customization template
|
|
1398
|
+
- \`.env.example\` - Environment variables template
|
|
1399
|
+
- \`DEPLOY.md\` - User deployment guide (copy to your project README)
|
|
1400
|
+
|
|
1401
|
+
## Local Testing Steps
|
|
1402
|
+
|
|
1403
|
+
### 1. Configure Environment
|
|
1404
|
+
\`\`\`bash
|
|
1405
|
+
cp .env.example .env
|
|
1406
|
+
vi .env # Set SERVER_TOKEN_SECRET and other variables
|
|
1407
|
+
\`\`\`
|
|
1408
|
+
|
|
1409
|
+
### 2. Test with Local Images
|
|
1410
|
+
Assuming you built the images locally, you can test without a registry:
|
|
1411
|
+
|
|
1412
|
+
\`\`\`bash
|
|
1413
|
+
# Start services using local images
|
|
1414
|
+
docker compose up -d
|
|
1415
|
+
\`\`\`
|
|
1416
|
+
|
|
1417
|
+
### 3. Test with Registry Images
|
|
1418
|
+
To test the full registry workflow:
|
|
1419
|
+
|
|
1420
|
+
\`\`\`bash
|
|
1421
|
+
# Push your images to registry first
|
|
1422
|
+
${t.names.map(a=>`docker push ${a}`).join(`
|
|
1423
|
+
`)}
|
|
1424
|
+
|
|
1425
|
+
# Pull and start services
|
|
1426
|
+
docker compose pull
|
|
1427
|
+
docker compose up -d
|
|
1428
|
+
\`\`\`
|
|
1429
|
+
|
|
1430
|
+
## Application Access
|
|
1431
|
+
|
|
1432
|
+
After deployment:
|
|
1433
|
+
- **Main Application:** http://localhost:${o}
|
|
1434
|
+
${t.hasWorkbench?`- **Workbench:** http://localhost:${i}`:""}
|
|
1435
|
+
|
|
1436
|
+
## Built Images
|
|
1437
|
+
|
|
1438
|
+
This configuration expects these images:
|
|
1439
|
+
${t.names.map(a=>`- \`${a}\``).join(`
|
|
1440
|
+
`)}
|
|
1441
|
+
|
|
1442
|
+
## Management Commands
|
|
1443
|
+
|
|
1444
|
+
- **View logs:** \`docker compose logs -f\`
|
|
1445
|
+
- **Stop services:** \`docker compose down\`
|
|
1446
|
+
- **Update images:** \`docker compose pull && docker compose up -d\`
|
|
1447
|
+
|
|
1448
|
+
## Next Steps
|
|
1449
|
+
|
|
1450
|
+
1. **Test locally** with the steps above
|
|
1451
|
+
2. **Copy DEPLOY.md** content to your project README
|
|
1452
|
+
3. **Push images to registry** for production use
|
|
1453
|
+
4. **Share deployment instructions** with your users
|
|
1454
|
+
|
|
1455
|
+
## Registry Examples
|
|
1456
|
+
|
|
1457
|
+
*Note for developers: When copying this deployment guide to your project README,
|
|
1458
|
+
you can adjust these registry examples based on where your images will be hosted.*
|
|
1459
|
+
|
|
1460
|
+
### Docker Hub (default)
|
|
1461
|
+
\`\`\`bash
|
|
1462
|
+
# Images: myproject/frontend:latest
|
|
1463
|
+
# No additional configuration needed
|
|
1464
|
+
\`\`\`
|
|
1465
|
+
|
|
1466
|
+
### GitLab Container Registry
|
|
1467
|
+
\`\`\`bash
|
|
1468
|
+
# Images: registry.gitlab.com/group/project/frontend:latest
|
|
1469
|
+
# Update image names in docker-compose.yml to include registry prefix
|
|
1470
|
+
\`\`\`
|
|
1471
|
+
|
|
1472
|
+
### GitHub Container Registry
|
|
1473
|
+
\`\`\`bash
|
|
1474
|
+
# Images: ghcr.io/owner/repo/frontend:latest
|
|
1475
|
+
# Update image names in docker-compose.yml to include registry prefix
|
|
1476
|
+
\`\`\`
|
|
1477
|
+
|
|
1478
|
+
Generated on: ${new Date().toISOString()}
|
|
1479
|
+
`;await Ze.writeFile(r,s)},vx=async(e,t,r,n)=>{let o=await sf(e,t,n);await Ze.writeFile(r,o)},_x=async(e,t,r,n)=>{let o=await sf(e,t,n),i=`# ${e.name} - Registry Deployment Guide
|
|
1480
|
+
|
|
1481
|
+
## For Developers
|
|
1482
|
+
|
|
1483
|
+
This file contains registry deployment instructions generated from your build configuration.
|
|
1484
|
+
|
|
1485
|
+
**What to do with this:**
|
|
1486
|
+
1. Copy the "User Deployment Section" below to your project README
|
|
1487
|
+
2. Update the documentation as needed for your specific use case
|
|
1488
|
+
3. Users can then deploy your application using the provided instructions
|
|
1489
|
+
|
|
1490
|
+
**Generated for images:**
|
|
1491
|
+
${t.names.map(s=>`- \`${s}\``).join(`
|
|
1492
|
+
`)}
|
|
1493
|
+
|
|
1494
|
+
**Registry:** ${n||"Docker Hub (default)"}
|
|
1495
|
+
|
|
1496
|
+
---
|
|
1497
|
+
|
|
1498
|
+
## User Deployment Section
|
|
1499
|
+
|
|
1500
|
+
*Copy everything below this line to your project README or documentation*
|
|
1501
|
+
|
|
1502
|
+
${o}
|
|
1503
|
+
`;await Ze.writeFile(r,i)},lf=async(e,t,r,n)=>{let o=Je.join(process.cwd(),"temp-compose.yml");await cf(e,t,o,r,n);let i=await Ze.readFile(o,"utf8");return await Ze.remove(o),i},uf=async()=>{let e=Ws(),t=e.filter(n=>n.service==="frontend").slice(0,3),r=e.filter(n=>n.service==="backend").slice(0,3);return`services:
|
|
1504
|
+
frontend:
|
|
1505
|
+
volumes:
|
|
1506
|
+
${t.map(n=>` # ${n.description}
|
|
1507
|
+
# - ${n.source}:${n.target}`).join(`
|
|
1508
|
+
`)}
|
|
1509
|
+
environment:
|
|
1510
|
+
# - CUSTOM_BRAND_NAME=My Company
|
|
1511
|
+
|
|
1512
|
+
backend:
|
|
1513
|
+
volumes:
|
|
1514
|
+
${r.map(n=>` # ${n.description}
|
|
1515
|
+
# - ${n.source}:${n.target}`).join(`
|
|
1516
|
+
`)}
|
|
1517
|
+
environment:
|
|
1518
|
+
# - CUSTOM_API_KEY=your-key`};var Le=new ya;Le.version("0.1.0");Le.command("dev").description("Start development environment").option("-q, --quiet","Run Docker Compose in detached mode without following logs").option("-v, --verbose","Get more information about what is happening").option("--filter <service>","Filter logs to specific services (comma-separated)","frontend,backend").option("--force-rebuild, --rebuild","Force rebuild of Docker images regardless of file changes").option("-p, --project-name <projectName>","Applies a specific project name").option("-f, --config-file <configFile>","Additionally add a raclette.config file to merge on top of the default").option("--no-cache","Force rebuild Docker images without using cache").action(async e=>{try{h.setVerbose(e.verbose),h.raclette("Starting raclette development environment..."),Vr();let t=await Oe(),r=process.cwd(),n;try{n=await Pe(e.configFile)}catch(i){h.error("Could not read raclette.config.js file. Please check your file for syntax errors! Canceling startup process."),h.error(`The following error occured on reading the file: "${i.message}"`),process.exit(1)}n||(h.error("No configuration loaded"),process.exit(1));let o=Wt.join(t,"docker-compose.yml");e.projectName&&(h.raclette("Setting project name to "+e.projectName),n.name=e.projectName),await Bd(n,{dockerComposePath:o,workingDir:r,quiet:e.quiet,verbose:e.verbose,logFilter:e.filter?e.filter.split(","):["frontend","backend"],forceRebuild:e.forceRebuild||e.rebuild,noCache:e.noCache})}catch(t){h.error("Error starting development environment: "+t?.message),process.exit(1)}});Le.command("log [services...]").description("Follow logs for specified services (or all services if none specified)").option("-f, --follow","Follow log output (default: true)",!0).option("--no-follow","Don't follow log output").option("--tail <lines>","Number of lines to show from the end of the logs","100").option("-v, --verbose","Verbose output").action(async(e,t)=>{try{h.setVerbose(t.verbose),h.raclette("Attaching to service logs...");let r=await Oe(),n=await Pe(),o=Wt.join(r,"docker-compose.yml");await _r.pathExists(o)||(h.error("No docker-compose.yml found. Services may not be running."),h.instruction("Try running 'raclette dev' first to start the services."),process.exit(1)),await Xd(e,t,n,o)}catch(r){h.error("Error following logs: "+r.message),process.exit(1)}});Le.command("down").description("Stop Docker Compose services").option("--keep-shared","Don't stop shared services like DB and Cache").option("-p, --project-name <projectName>","Applies a specific project name").option("-v, --verbose","Verbose output").action(async e=>{try{h.setVerbose(e.verbose),console.log(f.blue("\u{1F9C0} Stopping Raclette Docker services..."));let t=await Oe(),r=await Pe(),n=process.cwd();e.projectName&&(h.raclette("Setting project name to "+e.projectName),r.name=e.projectName);let o=Wt.join(t,"docker-compose.yml"),i=Wt.join(t,"docker-compose.full.yml");if(!await _r.pathExists(o)){console.error(f.yellow("\u26A0\uFE0F No docker-compose.yml found. Services may not be running."));return}e.keepShared?(h.debug("\u2139\uFE0F Using standard docker-compose file (keeping shared services)"),await Ms(o,r)):(h.debug("\u2139Generating full docker-compose file including shared services"),await Lc(r,n,i,"development"),await Ms(i,r),await _r.remove(i)),h.success("Docker services stopped successfully")}catch(t){h.error("Error stopping Docker services: "+t.message),process.exit(1)}});Le.command("restart [services...]").option("-v, --verbose","Verbose output").description("Restart specified Docker Compose services (frontend, backend, etc.)").action(async(e,t)=>{try{if(h.setVerbose(t.verbose),h.raclette("Restarting Raclette services..."),e.length===0){h.warn("No services specified. Please specify which services to restart."),h.instruction("Usage: raclette restart <service1> <service2> ..."),h.instruction("Common services: frontend, backend, mongodb, cache");return}let r=await Oe(),n=await Pe(),o=n?.name??Wt.basename(process.cwd()),i=Wt.join(r,"docker-compose.yml");if(!await _r.pathExists(i)){h.warn("No docker-compose.yml found. Services may not be running with raclette.");return}for(let s of e)try{let a=await vr(s,n,i);if(!Ot(a)){h.warn(`Service '${s}' (container: ${a}) doesn't appear to be running.`),h.instruction(" If you're sure it's running, it might have a different container name than expected."),h.instruction(" To restart by container name directly, use: docker restart <container_name>");continue}await _r.pathExists(i)?(h.progress(`Restarting service: ${s}...`),ye(["-p",o,"-f",i,"restart",s],{stdio:"inherit"})):(h.progress(` Restarting container: ${a}...`),ce(["restart",a],{stdio:"inherit"})),h.success(`Service '${s}' restarted successfully`)}catch(a){h.error(`Error restarting service '${s}': ${a.message}`)}}catch(r){h.error("Error restarting services: "+r.message),process.exit(1)}});Le.command("update [target]").description("Update dependencies for frontend, backend, or both by running dependency check script").option("-v, --verbose","Verbose output").action(async(e="both",t)=>{try{h.setVerbose(t.verbose),["frontend","backend","both"].includes(e)||(h.error("Target must be one of: frontend, backend, both"),process.exit(1));let r=await Oe(),n=await Pe();await js(e,n),await Bs(e,n,r)||(h.warn("\u26A0\uFE0F Dependencies update completed with errors"),process.exit(1))}catch(r){h.error("Error updating dependencies: "+r.message),process.exit(1)}});Le.command("build").description("Build application with different modes").option("--mode <mode>","Build mode: artifacts (local deployment), images (CI/CD), package (offline)","artifacts").option("--image-tag <tag>","Image tag for registry (e.g., v1.0.0)").option("--image-prefix <prefix>","Image name prefix (default: project name)").option("--generate-latest","Also tag images as :latest").option("--output-dir <dir>","Output directory").option("--skip-workbench","Skip workbench build").option("--no-cache","Build without cache").option("-v, --verbose","Verbose output").option("--buildx","Use Docker buildx for multi-architecture builds").option("--platforms <platforms>","Target platforms for buildx","linux/amd64,linux/arm64").option("--build-only","Legacy: same as --mode artifacts").option("--build-images","Legacy: same as --mode images").option("--package-images","Legacy: same as --mode package").option("-p, --project-name <projectName>","Applies a specific project name").action(async e=>{try{h.setVerbose(e.verbose),h.raclette("Building raclette application...");let t=process.cwd();await Oe();let r=await Pe();e.projectName&&(h.raclette("Setting project name to "+e.projectName),r.name=e.projectName);let n={outputDir:e.outputDir,skipWorkbench:e.skipWorkbench,verbose:e.verbose,noCache:e.noCache,mode:e.mode,imageTag:e.imageTag,imagePrefix:e.imagePrefix,generateLatest:e.generateLatest,buildOnly:e.buildOnly,buildImages:e.buildImages,packageImages:e.packageImages,buildx:e.buildx,platforms:e.platforms},o=await ef(r,t,n);switch(h.success("Build complete!"),o.mode){case"artifacts":h.success(`Build files are in ${o.buildDir}!`),h.raw(f.green("\u{1F680} Ready for deployment with deploy.sh"));break;case"images":h.success("Docker images built and tagged"),h.raw(f.green("\u{1F680} Ready for registry push"));break;case"package":h.success(`Build files are in ${o.buildDir}!`),o.deploymentPackage&&h.raw(f.green(`\u{1F680} Deployment package ready: ${o.deploymentPackage}`));break}process.exit(0)}catch(t){h.error("Error building application: "+t?.message),process.exit(1)}});var qs=()=>["frontend","backend","workbench.frontend","workbench.backend"],Ex=e=>qs().includes(e),pf=e=>e.join(", ");Le.command("add-package <target> <package...>").description(`Add a package to the project (target: ${pf(qs())})`).option("--dev","Add as a development dependency").option("--no-update","Skip updating dependencies after adding packages",!0).option("-v, --verbose","Verbose output").action(async(e,t,r)=>{try{if(h.setVerbose(r.verbose),!Ex(e)){let i=qs();h.error(`Target must be one of: ${pf(i)}`),process.exit(1)}h.raclette(`Adding package(s) to ${e}...`);for(let i of t)await jd(e,i,r.dev);let n=await Oe(),o=await Pe();await js(e,o),await Bs(e,o,n)}catch(n){h.error("Error adding package: "+n.message),process.exit(1)}});Le.command("rebuild [services...]").description("Rebuild Docker images for specified services or all services").option("--no-cache","Force rebuild Docker images without using cache").option("-v, --verbose","Verbose output").action(async(e,t)=>{try{h.setVerbose(t.verbose),h.raclette("Rebuilding Raclette Docker images...");let r=await Oe(),n=await Pe();if(e.length===0){h.debug("\u{1F50D} Detecting services with changes...");let i=await Xr(n,r);if(i.length===0){h.warn("No service file changes detected. Use service names to force rebuild.");return}e=i}let o=e.filter(i=>i==="frontend"||i==="backend"||i==="workbench");o.length===0&&(h.error("No valid services specified for rebuild"),h.warn("Valid services are: frontend, backend, workbench"),process.exit(1)),await zr(n,r,o,{noCache:t.noCache}),h.success(`Rebuild complete for services: ${o.join(", ")}`)}catch(r){h.error("Error rebuilding Docker images: "+r.message),process.exit(1)}});Le.command("deploy-guide").description("Generate deployment guide and files for registry-based deployment").option("--image-prefix <prefix>","Image name prefix (default: project name)").option("--image-tag <tag>","Image tag (default: latest)").option("--registry <url>","Registry URL prefix (e.g., registry.gitlab.com/group/)").option("--output-dir <dir>","Output directory (default: current directory)").option("--generate-files","Generate separate files for local testing").option("--return-only","Output to stdout only (no file generation)").option("-v, --verbose","Verbose output").action(async e=>{try{h.setVerbose(e.verbose),h.raclette("Generating raclette deployment guide..."),await Oe();let t=await Pe();if(e.returnOnly){let o={imagePrefix:e.imagePrefix,imageTag:e.imageTag,registry:e.registry,outputDir:void 0,generateFiles:!1,returnOnly:!0},i=await of(t,o);console.log(i),process.exit(0)}let r={imagePrefix:e.imagePrefix,imageTag:e.imageTag,registry:e.registry,outputDir:e.outputDir,generateFiles:e.generateFiles},n=await nf(t,r);h.success("Deployment guide generated!"),n.mode==="files"?(h.raw(f.cyan(`\u{1F4C1} Files created in: ${n.outputPath}`)),h.raw(f.yellow("\u{1F4A1} Use these files for local testing")),h.raw(f.yellow("\u{1F4A1} Copy DEPLOY.md content to your project README"))):(h.raw(f.cyan(`\u{1F4C4} Guide created: ${n.deployGuideFile}`)),h.raw(f.yellow("\u{1F4A1} Copy the user section to your project README"))),process.exit(0)}catch{h.error("Error generating deployment guide: "+error.message),process.exit(1)}});Le.parse(process.argv);
|
|
1519
|
+
/*! Bundled license information:
|
|
1520
|
+
|
|
1521
|
+
is-extglob/index.js:
|
|
1522
|
+
(*!
|
|
1523
|
+
* is-extglob <https://github.com/jonschlinkert/is-extglob>
|
|
1524
|
+
*
|
|
1525
|
+
* Copyright (c) 2014-2016, Jon Schlinkert.
|
|
1526
|
+
* Licensed under the MIT License.
|
|
1527
|
+
*)
|
|
1528
|
+
|
|
1529
|
+
is-glob/index.js:
|
|
1530
|
+
(*!
|
|
1531
|
+
* is-glob <https://github.com/jonschlinkert/is-glob>
|
|
1532
|
+
*
|
|
1533
|
+
* Copyright (c) 2014-2017, Jon Schlinkert.
|
|
1534
|
+
* Released under the MIT License.
|
|
1535
|
+
*)
|
|
1536
|
+
|
|
1537
|
+
is-number/index.js:
|
|
1538
|
+
(*!
|
|
1539
|
+
* is-number <https://github.com/jonschlinkert/is-number>
|
|
1540
|
+
*
|
|
1541
|
+
* Copyright (c) 2014-present, Jon Schlinkert.
|
|
1542
|
+
* Released under the MIT License.
|
|
1543
|
+
*)
|
|
1544
|
+
|
|
1545
|
+
to-regex-range/index.js:
|
|
1546
|
+
(*!
|
|
1547
|
+
* to-regex-range <https://github.com/micromatch/to-regex-range>
|
|
1548
|
+
*
|
|
1549
|
+
* Copyright (c) 2015-present, Jon Schlinkert.
|
|
1550
|
+
* Released under the MIT License.
|
|
1551
|
+
*)
|
|
1552
|
+
|
|
1553
|
+
fill-range/index.js:
|
|
1554
|
+
(*!
|
|
1555
|
+
* fill-range <https://github.com/jonschlinkert/fill-range>
|
|
1556
|
+
*
|
|
1557
|
+
* Copyright (c) 2014-present, Jon Schlinkert.
|
|
1558
|
+
* Licensed under the MIT License.
|
|
1559
|
+
*)
|
|
1560
|
+
|
|
1561
|
+
queue-microtask/index.js:
|
|
1562
|
+
(*! queue-microtask. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> *)
|
|
1563
|
+
|
|
1564
|
+
run-parallel/index.js:
|
|
1565
|
+
(*! run-parallel. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> *)
|
|
1566
|
+
|
|
1567
|
+
js-yaml/dist/js-yaml.mjs:
|
|
1568
|
+
(*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT *)
|
|
1569
|
+
*/
|