@flisk-sh/flisk 0.0.0-stage → 1.3.190
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/CHANGELOG.md +492 -0
- package/LICENSE +21 -0
- package/README.md +479 -2
- package/Tiltfile +151 -0
- package/cli/bin/flisk.js +42 -0
- package/cli/dist/agent-runtimes/custom.js +335 -0
- package/cli/dist/agent-runtimes/registry.js +34 -0
- package/cli/dist/backend-frameworks/elysia.js +38 -0
- package/cli/dist/backend-frameworks/express.js +49 -0
- package/cli/dist/backend-frameworks/fastify.js +43 -0
- package/cli/dist/backend-frameworks/h3.js +37 -0
- package/cli/dist/backend-frameworks/koa.js +47 -0
- package/cli/dist/backend-frameworks/mcp.js +86 -0
- package/cli/dist/backend-frameworks/nestjs.js +55 -0
- package/cli/dist/backend-frameworks/registry.js +134 -0
- package/cli/dist/backend-frameworks/types.js +1 -0
- package/cli/dist/backend-languages/bun.js +76 -0
- package/cli/dist/backend-languages/go.js +125 -0
- package/cli/dist/backend-languages/node.js +122 -0
- package/cli/dist/backend-languages/python.js +94 -0
- package/cli/dist/backend-languages/registry.js +37 -0
- package/cli/dist/backend-languages/rust.js +82 -0
- package/cli/dist/backend-languages/types.js +1 -0
- package/cli/dist/cli.js +29 -0
- package/cli/dist/commands/__tests__/project-e2e-helpers.js +49 -0
- package/cli/dist/commands/__tests__/ui-loading-screen.test.js +16 -0
- package/cli/dist/commands/agent.js +182 -0
- package/cli/dist/commands/completion-candidates.js +116 -0
- package/cli/dist/commands/completion.js +843 -0
- package/cli/dist/commands/config.js +362 -0
- package/cli/dist/commands/doctor.js +1504 -0
- package/cli/dist/commands/down.js +114 -0
- package/cli/dist/commands/eject.js +108 -0
- package/cli/dist/commands/help.js +152 -0
- package/cli/dist/commands/import.js +164 -0
- package/cli/dist/commands/logs.js +119 -0
- package/cli/dist/commands/maintainers.js +102 -0
- package/cli/dist/commands/mcp.js +28 -0
- package/cli/dist/commands/networks.js +306 -0
- package/cli/dist/commands/project.js +447 -0
- package/cli/dist/commands/projects.js +103 -0
- package/cli/dist/commands/registry.js +53 -0
- package/cli/dist/commands/resource.js +992 -0
- package/cli/dist/commands/resources.js +127 -0
- package/cli/dist/commands/restart.js +89 -0
- package/cli/dist/commands/runtime.js +75 -0
- package/cli/dist/commands/stack.js +171 -0
- package/cli/dist/commands/stacks.js +71 -0
- package/cli/dist/commands/status.js +211 -0
- package/cli/dist/commands/ui.js +725 -0
- package/cli/dist/commands/up.js +609 -0
- package/cli/dist/commands/upgrade.js +840 -0
- package/cli/dist/commands/version.js +10 -0
- package/cli/dist/components/Accessible.js +11 -0
- package/cli/dist/components/BaseTooltip.js +30 -0
- package/cli/dist/components/DetailPanel.js +33 -0
- package/cli/dist/components/FileTree.js +51 -0
- package/cli/dist/components/ResourceSelectInput.js +42 -0
- package/cli/dist/components/ResourceTable.js +35 -0
- package/cli/dist/components/ServiceIssues.js +13 -0
- package/cli/dist/components/TUIHeader.js +27 -0
- package/cli/dist/components/TabBar.js +27 -0
- package/cli/dist/components/Tooltip.js +13 -0
- package/cli/dist/components/index.js +11 -0
- package/cli/dist/components/ui-theme.js +120 -0
- package/cli/dist/config/platform-standards.js +182 -0
- package/cli/dist/frontend-frameworks/lit.js +64 -0
- package/cli/dist/frontend-frameworks/preact.js +62 -0
- package/cli/dist/frontend-frameworks/qwik.js +61 -0
- package/cli/dist/frontend-frameworks/react.js +69 -0
- package/cli/dist/frontend-frameworks/registry.js +83 -0
- package/cli/dist/frontend-frameworks/solid.js +62 -0
- package/cli/dist/frontend-frameworks/svelte.js +67 -0
- package/cli/dist/frontend-frameworks/tanstack-router.js +101 -0
- package/cli/dist/frontend-frameworks/types.js +1 -0
- package/cli/dist/frontend-frameworks/vanilla.js +59 -0
- package/cli/dist/frontend-frameworks/vue.js +72 -0
- package/cli/dist/generator/__tests__/golden-helpers.js +43 -0
- package/cli/dist/generator/extension-fetch.js +291 -0
- package/cli/dist/generator/resource-templates.js +133 -0
- package/cli/dist/generator/template-engine.js +801 -0
- package/cli/dist/index.js +10 -0
- package/cli/dist/mcp/server.js +101 -0
- package/cli/dist/mcp/tools.js +351 -0
- package/cli/dist/program.js +37 -0
- package/cli/dist/types/index.js +38 -0
- package/cli/dist/utils/agent-host.js +36 -0
- package/cli/dist/utils/atomic-write.js +36 -0
- package/cli/dist/utils/bun-floor.js +9 -0
- package/cli/dist/utils/bun-requirement.js +10 -0
- package/cli/dist/utils/cache.js +63 -0
- package/cli/dist/utils/cold-preflight.js +257 -0
- package/cli/dist/utils/command-helpers.js +57 -0
- package/cli/dist/utils/constants.js +160 -0
- package/cli/dist/utils/discovery-context.js +71 -0
- package/cli/dist/utils/discovery-paths.js +93 -0
- package/cli/dist/utils/docker.js +34 -0
- package/cli/dist/utils/doctor-crashloop.js +161 -0
- package/cli/dist/utils/doctor-fix.js +391 -0
- package/cli/dist/utils/doctor-host.js +66 -0
- package/cli/dist/utils/doctor-report.js +78 -0
- package/cli/dist/utils/doctor-runtime.js +880 -0
- package/cli/dist/utils/doctor-starlark.js +132 -0
- package/cli/dist/utils/doctor-wiring.js +698 -0
- package/cli/dist/utils/down-cleanup.js +125 -0
- package/cli/dist/utils/env-validator.js +266 -0
- package/cli/dist/utils/errors.js +175 -0
- package/cli/dist/utils/exec-async.js +31 -0
- package/cli/dist/utils/file-helpers.js +104 -0
- package/cli/dist/utils/formatting.js +165 -0
- package/cli/dist/utils/generated-paths.js +51 -0
- package/cli/dist/utils/help-command.js +11 -0
- package/cli/dist/utils/host-port-config.js +140 -0
- package/cli/dist/utils/host-port-plan.js +100 -0
- package/cli/dist/utils/json-output.js +29 -0
- package/cli/dist/utils/machine-output.js +33 -0
- package/cli/dist/utils/paths.js +43 -0
- package/cli/dist/utils/platform.js +58 -0
- package/cli/dist/utils/port-assignment.js +75 -0
- package/cli/dist/utils/port-conflict-fix.js +25 -0
- package/cli/dist/utils/port-fallback-notice.js +17 -0
- package/cli/dist/utils/port-listener-probe.js +20 -0
- package/cli/dist/utils/project-config-defaults.js +17 -0
- package/cli/dist/utils/project-features.js +91 -0
- package/cli/dist/utils/project-templates.js +32 -0
- package/cli/dist/utils/prompt.js +97 -0
- package/cli/dist/utils/resource-features.js +184 -0
- package/cli/dist/utils/resource-kind.js +9 -0
- package/cli/dist/utils/schema-version-gate.js +45 -0
- package/cli/dist/utils/search-status.js +12 -0
- package/cli/dist/utils/secret-redaction.js +73 -0
- package/cli/dist/utils/service-config-checks.js +189 -0
- package/cli/dist/utils/service-manifest.js +254 -0
- package/cli/dist/utils/service-runtime-state.js +66 -0
- package/cli/dist/utils/service-urls.js +112 -0
- package/cli/dist/utils/services.js +360 -0
- package/cli/dist/utils/shared-infra.js +45 -0
- package/cli/dist/utils/shared-platform-postgres.js +232 -0
- package/cli/dist/utils/single-flight.js +21 -0
- package/cli/dist/utils/smoke.js +401 -0
- package/cli/dist/utils/spinner.js +40 -0
- package/cli/dist/utils/stack-features.js +15 -0
- package/cli/dist/utils/stack-status.js +14 -0
- package/cli/dist/utils/startup-report.js +78 -0
- package/cli/dist/utils/status-message.js +21 -0
- package/cli/dist/utils/status-ports.js +33 -0
- package/cli/dist/utils/suggestions.js +63 -0
- package/cli/dist/utils/tar.js +46 -0
- package/cli/dist/utils/tdk-version.js +51 -0
- package/cli/dist/utils/terminal-layout.js +19 -0
- package/cli/dist/utils/tilt-events.js +194 -0
- package/cli/dist/utils/tilt-logs.js +61 -0
- package/cli/dist/utils/tilt-port-owner.js +63 -0
- package/cli/dist/utils/tilt-process.js +54 -0
- package/cli/dist/utils/tilt-resource-state.js +32 -0
- package/cli/dist/utils/tilt-startup.js +49 -0
- package/cli/dist/utils/tilt-unreachable-message.js +9 -0
- package/cli/dist/utils/tilt.js +104 -0
- package/cli/dist/utils/ui-keymap.js +129 -0
- package/cli/dist/utils/ui-service-state.js +34 -0
- package/cli/dist/utils/up-only.js +28 -0
- package/cli/dist/utils/up-readiness.js +118 -0
- package/cli/dist/utils/url-actions.js +103 -0
- package/cli/dist/utils/validation.js +62 -0
- package/cli/dist/utils/which.js +56 -0
- package/cli/dist/utils/windows-doctor.js +176 -0
- package/cli/dist-bundle/chunk-6EA4DGCY.js +2 -0
- package/cli/dist-bundle/chunk-BZ4H7MM4.js +3 -0
- package/cli/dist-bundle/chunk-CLCUIDBH.js +510 -0
- package/cli/dist-bundle/cli.js +2017 -0
- package/cli/dist-bundle/cold-preflight-SY26O2IG.js +2 -0
- package/cli/dist-bundle/devtools-ZUHXW33W.js +5 -0
- package/cli/dist-bundle/extension-fetch-J4FFH7TJ.js +2 -0
- package/cli/package.json +83 -0
- package/cli/shared-platform-engineering/docker-templates/bun-hoisted-symlink-fix.sh +25 -0
- package/cli/shared-platform-engineering/docker-templates/infisical-entrypoint.sh +466 -0
- package/cli/shared-platform-engineering/docker-templates/install-deps.sh +154 -0
- package/cli/shared-platform-engineering/docker-templates/prisma-bun-client-link-fix.sh +14 -0
- package/cli/shared-platform-engineering/docker-templates/prisma-normalize-client.sh +58 -0
- package/cli/templates/.tiltignore.hbs +72 -0
- package/cli/templates/TILT_RESOURCE_DEFAULTS.star.hbs +220 -0
- package/cli/templates/TILT_TECH_STACK.star.hbs +149 -0
- package/cli/templates/Tiltfile.hbs +381 -0
- package/cli/templates/spec.master.hbs +192 -0
- package/discovery/AGENTS.md +362 -0
- package/discovery/TILT_DISCOVERY.star +429 -0
- package/discovery/Tiltfile +58 -0
- package/discovery/config.star +265 -0
- package/discovery/constants.star +167 -0
- package/discovery/deterministic.star +213 -0
- package/discovery/discovery_daemon.star +193 -0
- package/discovery/discovery_orchestrator.star +492 -0
- package/discovery/filtering.star +7 -0
- package/discovery/identity-management-backend/service.yaml +26 -0
- package/discovery/identity-management-frontend/service.yaml +29 -0
- package/discovery/identity-sdk/service.yaml +9 -0
- package/discovery/incremental_discovery.star +215 -0
- package/discovery/indexing.star +9 -0
- package/discovery/json_manifest_scanner.star +57 -0
- package/discovery/libraries.star +48 -0
- package/discovery/loading.star +25 -0
- package/discovery/manifest/constants.star +106 -0
- package/discovery/manifest/loading.star +418 -0
- package/discovery/manifest/normalize.star +289 -0
- package/discovery/manifest/validation.star +110 -0
- package/discovery/normalization.star +13 -0
- package/discovery/registry.star +562 -0
- package/discovery/resource_snapshot.py +384 -0
- package/discovery/resource_snapshot.star +145 -0
- package/discovery/schemas.star +3 -0
- package/discovery/services/platform/cdc/debezium/nats-connector/service.yaml +9 -0
- package/discovery/services/platform/cdc/nats-http-bridge/service.yaml +9 -0
- package/discovery/services/platform/orchestrator/orchestrator-glue-backend/service.yaml +26 -0
- package/discovery/services/platform/synthetic-monitor/service.yaml +9 -0
- package/discovery/test_resource_snapshot.py +253 -0
- package/discovery/validation.star +80 -0
- package/discovery/versioning.star +3 -0
- package/engine/AGENTS.md +706 -0
- package/engine/README.md +31 -0
- package/engine/REFACTORING_MANIFEST_SYSTEM.md +974 -0
- package/engine/Tiltfile +86 -0
- package/engine/assets/docker/golden-layers.Dockerfile +204 -0
- package/engine/assets/docker/wake-gateway/Dockerfile +28 -0
- package/engine/assets/docker/wake-gateway/decide.test.ts +177 -0
- package/engine/assets/docker/wake-gateway/decide.ts +135 -0
- package/engine/assets/docker/wake-gateway/server.ts +363 -0
- package/engine/assets/scripts/cleanup-completed-migrator-images.sh +39 -0
- package/engine/assets/scripts/cleanup-tilt-images.sh +122 -0
- package/engine/assets/scripts/mac-m1-resource-monitor.sh +123 -0
- package/engine/config.star +5 -0
- package/engine/entrypoint.star +101 -0
- package/engine/lifecycle/orchestrator.star +263 -0
- package/engine/paths.star +719 -0
- package/engine/schemas/project-schema.json +147 -0
- package/engine/schemas/service-schema.json +537 -0
- package/engine/scripts/README.md +89 -0
- package/engine/scripts/build-and-publish-lib.sh +207 -0
- package/engine/scripts/check-lib-publish.sh +87 -0
- package/engine/scripts/debug-container.sh +265 -0
- package/engine/scripts/generate-manifest.sh +200 -0
- package/engine/spec.master +702 -0
- package/engine/spec.master.example +341 -0
- package/engine/topologies/README.md +33 -0
- package/engine/topologies/platform/docker/AGENTS.md +59 -0
- package/engine/topologies/platform/docker/auth/auth.star +207 -0
- package/engine/topologies/platform/docker/build/frontend_build_plan.star +65 -0
- package/engine/topologies/platform/docker/build/golden_image.star +37 -0
- package/engine/topologies/platform/docker/build/golden_image_build.star +144 -0
- package/engine/topologies/platform/docker/build/golden_image_constants.star +100 -0
- package/engine/topologies/platform/docker/build/golden_image_dockerfile.star +263 -0
- package/engine/topologies/platform/docker/compose/compose.star +637 -0
- package/engine/topologies/platform/docker/compose/compose_helpers.star +54 -0
- package/engine/topologies/platform/docker/compose/traefik_standalone.star +171 -0
- package/engine/topologies/platform/docker/config/bunignore.star +144 -0
- package/engine/topologies/platform/docker/config/dockerignore.star +152 -0
- package/engine/topologies/platform/docker/config/healthcheck.star +58 -0
- package/engine/topologies/platform/docker/constants.star +211 -0
- package/engine/topologies/platform/docker/dockerfile/dockerfile.star +56 -0
- package/engine/topologies/platform/docker/dockerfile/language_dockerfile.star +264 -0
- package/engine/topologies/platform/docker/generators/golden_docker_generator_v2.star +76 -0
- package/engine/topologies/platform/docker/index.star +40 -0
- package/engine/topologies/platform/docker/layers/bun_helpers.star +25 -0
- package/engine/topologies/platform/docker/layers/infisical/index.star +42 -0
- package/engine/topologies/platform/docker/layers/infisical/infisical_docker.star +264 -0
- package/engine/topologies/platform/docker/layers/l1_base_layers.star +89 -0
- package/engine/topologies/platform/docker/layers/l2_dependency_layers.star +147 -0
- package/engine/topologies/platform/docker/layers/l3_builder_layers.star +229 -0
- package/engine/topologies/platform/docker/layers/l4_runtime_layers.star +282 -0
- package/engine/topologies/platform/docker/layers/prisma/constants.star +138 -0
- package/engine/topologies/platform/docker/layers/prisma/db_readiness.star +98 -0
- package/engine/topologies/platform/docker/layers/prisma/filesystem_setup.star +131 -0
- package/engine/topologies/platform/docker/layers/prisma/migrate_script.star +100 -0
- package/engine/topologies/platform/docker/layers/prisma/prisma_build.star +128 -0
- package/engine/topologies/platform/docker/layers/prisma/prisma_runtime.star +205 -0
- package/engine/topologies/platform/docker/layers/prisma/secret_resolution.star +121 -0
- package/engine/topologies/platform/docker/networking/api_path_constants.star +206 -0
- package/engine/topologies/platform/docker/networking/sablier_container_cycle.star +31 -0
- package/engine/topologies/platform/docker/networking/traefik.star +266 -0
- package/engine/topologies/platform/docker/networking/traefik_constants.star +148 -0
- package/engine/topologies/platform/docker/networking/traefik_helpers.star +162 -0
- package/engine/topologies/platform/docker/networking/traefik_static_routes.star +165 -0
- package/engine/topologies/platform/docker/secrets/env_secrets.star +74 -0
- package/engine/topologies/platform/docker/secrets/infisical.star +109 -0
- package/engine/topologies/platform/net/AGENTS.md +64 -0
- package/engine/topologies/platform/net/proxy.star +6 -0
- package/engine/topologies/platform/registries/local.star +6 -0
- package/engine/topologies/platform/registries/verdaccio_loader.star +20 -0
- package/engine/topologies/platform/security/AGENTS.md +49 -0
- package/engine/topologies/platform/security/secrets.star +241 -0
- package/engine/topologies/platform/state/AGENTS.md +64 -0
- package/engine/topologies/platform/state/relational.star +6 -0
- package/engine/topologies/tilt/common/AGENTS.md +59 -0
- package/engine/topologies/tilt/common/utils.star +409 -0
- package/engine/topologies/tilt/common/utils_debug.star +71 -0
- package/engine/topologies/tilt/common/utils_deterministic.star +170 -0
- package/engine/topologies/tilt/common/utils_docker_networks.star +54 -0
- package/engine/topologies/tilt/common/utils_env.star +92 -0
- package/engine/topologies/tilt/common/utils_output.star +99 -0
- package/engine/topologies/tilt/config/AGENTS.md +68 -0
- package/engine/topologies/tilt/config/defaults.star +5 -0
- package/engine/topologies/tilt/config/feature_flags.star +12 -0
- package/engine/topologies/tilt/config/global.star +57 -0
- package/engine/topologies/tilt/config/profiles.star +398 -0
- package/engine/topologies/tilt/generators/agents_md.star +64 -0
- package/engine/topologies/tilt/generators/api_gateway.star +147 -0
- package/engine/topologies/tilt/generators/index.star +126 -0
- package/engine/topologies/tilt/generators/infisical/README.md +424 -0
- package/engine/topologies/tilt/generators/infisical/examples.star +314 -0
- package/engine/topologies/tilt/generators/infisical/index.star +59 -0
- package/engine/topologies/tilt/generators/infisical/machine_identity.star +422 -0
- package/engine/topologies/tilt/generators/infisical/organization.star +536 -0
- package/engine/topologies/tilt/generators/infisical/path_manager.star +478 -0
- package/engine/topologies/tilt/generators/infisical/secrets_generator.star +422 -0
- package/engine/topologies/tilt/generators/nginx_conf.star +145 -0
- package/engine/topologies/tilt/generators/npmrc.star +132 -0
- package/engine/topologies/tilt/generators/tsconfig.star +25 -0
- package/engine/topologies/tilt/generators/typescript/backend_library_tsconfig.star +73 -0
- package/engine/topologies/tilt/generators/typescript/backend_tsconfig.star +137 -0
- package/engine/topologies/tilt/generators/typescript/common.star +9 -0
- package/engine/topologies/tilt/generators/typescript/frontend_library_tsconfig.star +78 -0
- package/engine/topologies/tilt/generators/typescript/frontend_tsconfig.star +140 -0
- package/engine/topologies/tilt/generators/typescript/include.star +25 -0
- package/engine/topologies/tilt/generators/typescript/playwright_config.star +42 -0
- package/engine/topologies/tilt/generators/typescript/prisma_config.star +51 -0
- package/engine/topologies/tilt/generators/validators.star +868 -0
- package/engine/topologies/tilt/generators/vite/backend.star +80 -0
- package/engine/topologies/tilt/generators/vite/frameworks/lit.star +92 -0
- package/engine/topologies/tilt/generators/vite/frameworks/preact.star +94 -0
- package/engine/topologies/tilt/generators/vite/frameworks/qwik.star +94 -0
- package/engine/topologies/tilt/generators/vite/frameworks/react.star +128 -0
- package/engine/topologies/tilt/generators/vite/frameworks/solid.star +94 -0
- package/engine/topologies/tilt/generators/vite/frameworks/svelte.star +94 -0
- package/engine/topologies/tilt/generators/vite/frameworks/vanilla.star +92 -0
- package/engine/topologies/tilt/generators/vite/frameworks/vue.star +94 -0
- package/engine/topologies/tilt/generators/vite/frontend.star +153 -0
- package/engine/topologies/tilt/generators/vite/generators.star +45 -0
- package/engine/topologies/tilt/generators/vite/helpers.star +256 -0
- package/engine/topologies/tilt/generators/vite/library.star +67 -0
- package/engine/topologies/tilt/generators/vite/sdk.star +75 -0
- package/engine/topologies/tilt/generators/vite/templates.star +460 -0
- package/engine/topologies/tilt/generators/vite_config.star +24 -0
- package/engine/topologies/tilt/manifest/AGENTS.md +61 -0
- package/engine/topologies/tilt/manifest/README.md +679 -0
- package/engine/topologies/tilt/manifest/__init__.star +220 -0
- package/engine/topologies/tilt/manifest/constants.star +262 -0
- package/engine/topologies/tilt/manifest/errors.star +268 -0
- package/engine/topologies/tilt/manifest/integration.star +348 -0
- package/engine/topologies/tilt/manifest/json_to_yaml.py +61 -0
- package/engine/topologies/tilt/manifest/loader.star +239 -0
- package/engine/topologies/tilt/manifest/mapper.star +229 -0
- package/engine/topologies/tilt/manifest/parser.star +490 -0
- package/engine/topologies/tilt/manifest/schema.star +502 -0
- package/engine/topologies/tilt/manifest/tests/test_integration.star +278 -0
- package/engine/topologies/tilt/manifest/tests/test_loader_parser.star +475 -0
- package/engine/topologies/tilt/manifest/tests/test_manifest.star +319 -0
- package/engine/topologies/tilt/manifest/tests/test_validator.star +472 -0
- package/engine/topologies/tilt/manifest/validator.star +744 -0
- package/engine/topologies/tilt/manifest/yaml_to_json.py +20 -0
- package/engine/topologies/tilt/resources/AGENTS.md +71 -0
- package/engine/topologies/tilt/resources/build_concurrency.star +56 -0
- package/engine/topologies/tilt/resources/conditions.star +5 -0
- package/engine/topologies/tilt/resources/databases.star +246 -0
- package/engine/topologies/tilt/resources/declaration.star +5 -0
- package/engine/topologies/tilt/resources/deps.star +5 -0
- package/engine/topologies/tilt/resources/infra-loader.star +504 -0
- package/engine/topologies/tilt/resources/libs.star +32 -0
- package/engine/topologies/tilt/resources/libs_discovery.star +104 -0
- package/engine/topologies/tilt/resources/libs_paths.star +81 -0
- package/engine/topologies/tilt/resources/libs_resource_definition.star +153 -0
- package/engine/topologies/tilt/resources/libs_setup.star +166 -0
- package/engine/topologies/tilt/resources/libs_tsconfig.star +39 -0
- package/engine/topologies/tilt/resources/orchestrator/apply.star +79 -0
- package/engine/topologies/tilt/resources/orchestrator/apply_compose_resource_registration.star +864 -0
- package/engine/topologies/tilt/resources/orchestrator/apply_manifest_orchestration.star +90 -0
- package/engine/topologies/tilt/resources/orchestrator/apply_migrator_orchestration.star +150 -0
- package/engine/topologies/tilt/resources/orchestrator/apply_resource_validation.star +38 -0
- package/engine/topologies/tilt/resources/orchestrator/apply_runtime_flags.star +46 -0
- package/engine/topologies/tilt/resources/orchestrator/builders/typescript.star +193 -0
- package/engine/topologies/tilt/resources/orchestrator/generators/dependencies/AGENTS.md +75 -0
- package/engine/topologies/tilt/resources/orchestrator/generators/dependencies/index.star +23 -0
- package/engine/topologies/tilt/resources/orchestrator/generators/dependencies/resolver.star +136 -0
- package/engine/topologies/tilt/resources/orchestrator/generators/env.star +219 -0
- package/engine/topologies/tilt/resources/orchestrator/generators/frontend.star +172 -0
- package/engine/topologies/tilt/resources/orchestrator/generators/manifest_resource.star +577 -0
- package/engine/topologies/tilt/resources/orchestrator/helpers.star +35 -0
- package/engine/topologies/tilt/resources/orchestrator.star +56 -0
- package/engine/topologies/tilt/resources/ordering.star +5 -0
- package/engine/topologies/tilt/resources/shared-platform-postgres.star +30 -0
- package/engine/topologies/tilt/resources/triggers.star +5 -0
- package/engine/topologies/tilt/resources/watchers.star +304 -0
- package/engine/where-things-live.star +719 -0
- package/examples/tdk-example/LICENSE +21 -0
- package/examples/tdk-example/README.md +23 -0
- package/examples/tdk-example/TILT_SERVICE_DEFAULTS.star +42 -0
- package/examples/tdk-example/TILT_TECH_STACK.star +67 -0
- package/examples/tdk-example/Tiltfile +25 -0
- package/examples/tdk-example/services/platform/messaging/docker-compose.yml +26 -0
- package/examples/tdk-example/services/shop/orders-api/package.json +20 -0
- package/examples/tdk-example/services/shop/orders-api/service.json +14 -0
- package/examples/tdk-example/services/shop/orders-api/src/index.ts +81 -0
- package/examples/tdk-example/services/shop/orders-app/index.html +12 -0
- package/examples/tdk-example/services/shop/orders-app/package.json +23 -0
- package/examples/tdk-example/services/shop/orders-app/public/.gitkeep +0 -0
- package/examples/tdk-example/services/shop/orders-app/service.json +9 -0
- package/examples/tdk-example/services/shop/orders-app/src/main.tsx +9 -0
- package/examples/tdk-example/services/shop/orders-app/src/orders.tsx +67 -0
- package/examples/tdk-example/services/shop/orders-app/src/style.css +15 -0
- package/examples/tdk-example/services/shop/orders-worker/package.json +18 -0
- package/examples/tdk-example/services/shop/orders-worker/service.json +13 -0
- package/examples/tdk-example/services/shop/orders-worker/src/index.ts +33 -0
- package/ext/Tiltfile +66 -0
- package/ext/ide-components/README.md +221 -0
- package/ext/ide-components/code_viewer/server.py +208 -0
- package/ext/ide-components/config_inspector/server.py +1052 -0
- package/ext/ide-components/file_browser/server.py +287 -0
- package/ext/ide-components/shared/config_service.py +471 -0
- package/ext/ide-components/shared/file_utils.py +300 -0
- package/ext/ide-components/shared/http_utils.py +234 -0
- package/ext/ide-components/shared/static/styles.css +1334 -0
- package/ext/ide-components/shared/syntax_highlighter.py +142 -0
- package/ext/ide-components/shared/template_engine.py +125 -0
- package/ext/ide-components/shared/templates/base.html +121 -0
- package/ext/ide-components/shared/test_config_service.py +328 -0
- package/ext/ide-components/shared/tilt_integration.py +160 -0
- package/ext/ui-enhancements/cron-status-server.sh +51 -0
- package/ext/ui-enhancements/cron-status-tracker.sh +148 -0
- package/ext/ui-enhancements/extension.yaml +36 -0
- package/ext/ui-enhancements/tiltfile.py +101 -0
- package/ext/ui-enhancements/ui/cron-jobs-tab.css +396 -0
- package/ext/ui-enhancements/ui/help-panel.css +279 -0
- package/ext/ui-enhancements/ui/icons.css +125 -0
- package/ext/ui-enhancements/ui/tooltips.css +114 -0
- package/package.json +94 -4
- package/shared-platform-engineering/docker-templates/bun-hoisted-symlink-fix.sh +25 -0
- package/shared-platform-engineering/docker-templates/infisical-entrypoint.sh +466 -0
- package/shared-platform-engineering/docker-templates/install-deps.sh +154 -0
- package/shared-platform-engineering/docker-templates/prisma-bun-client-link-fix.sh +14 -0
- package/shared-platform-engineering/docker-templates/prisma-normalize-client.sh +58 -0
- package/specs/specs/TILT_SERVICE_DEFAULTS.star +207 -0
- package/specs/specs/TILT_TECH_STACK.star +161 -0
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# Copyright (c) 2026 Flisk Landscape contributors
|
|
2
|
+
# SPDX-License-Identifier: MIT
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# 🔗 TILT SDK - DEPENDENCY RESOLUTION HELPERS
|
|
5
|
+
# =============================================================================
|
|
6
|
+
# Purpose: Resolve dependencies between services (frontend → backend lookups)
|
|
7
|
+
# Auto-inject configuration from internal dependencies
|
|
8
|
+
# =============================================================================
|
|
9
|
+
|
|
10
|
+
load("../../../../../../../discovery/registry.star", "get_resource_by_name")
|
|
11
|
+
|
|
12
|
+
def resolve_backend_api_path(manifest):
|
|
13
|
+
"""Resolve API path from backend manifest if backendName is specified.
|
|
14
|
+
|
|
15
|
+
Frontend manifests often reference a backend via backendName.
|
|
16
|
+
This function looks up the backend's apiPath for consistency.
|
|
17
|
+
|
|
18
|
+
Args:
|
|
19
|
+
manifest: Frontend service manifest
|
|
20
|
+
|
|
21
|
+
Returns:
|
|
22
|
+
str: API path from backend manifest, or None if not found
|
|
23
|
+
"""
|
|
24
|
+
backend_name = manifest.get("backendName")
|
|
25
|
+
if not backend_name:
|
|
26
|
+
return None
|
|
27
|
+
|
|
28
|
+
# Try to find the backend service
|
|
29
|
+
backend_service = get_resource_by_name(backend_name)
|
|
30
|
+
if not backend_service:
|
|
31
|
+
return None
|
|
32
|
+
|
|
33
|
+
# Get the backend manifest
|
|
34
|
+
backend_resources = backend_service.get("resources", [])
|
|
35
|
+
for resource in backend_resources:
|
|
36
|
+
if resource.get("name") == backend_name:
|
|
37
|
+
backend_manifest = resource.get("_manifest", {})
|
|
38
|
+
return backend_manifest.get("apiPath")
|
|
39
|
+
|
|
40
|
+
return None
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def resolve_dependency_api_urls(manifest):
|
|
44
|
+
"""Resolve all API URLs from dependsOn.
|
|
45
|
+
|
|
46
|
+
For each dependency in dependsOn, looks up the service
|
|
47
|
+
and extracts its apiPath. Returns a dict mapping dependency names to URLs.
|
|
48
|
+
|
|
49
|
+
Args:
|
|
50
|
+
manifest: Service manifest with dependsOn
|
|
51
|
+
|
|
52
|
+
Returns:
|
|
53
|
+
dict: { dependency_name: api_url }
|
|
54
|
+
"""
|
|
55
|
+
deps = manifest.get("dependsOn", [])
|
|
56
|
+
if not deps:
|
|
57
|
+
return {}
|
|
58
|
+
|
|
59
|
+
urls = {}
|
|
60
|
+
for dep_name in deps:
|
|
61
|
+
dep_service = get_resource_by_name(dep_name)
|
|
62
|
+
if not dep_service:
|
|
63
|
+
continue
|
|
64
|
+
|
|
65
|
+
# Find the backend resource for this dependency
|
|
66
|
+
dep_resources = dep_service.get("resources", [])
|
|
67
|
+
for resource in dep_resources:
|
|
68
|
+
# Skip frontend resources, look for backend
|
|
69
|
+
if resource.get("appType") == "frontend":
|
|
70
|
+
continue
|
|
71
|
+
|
|
72
|
+
dep_manifest = resource.get("_manifest", {})
|
|
73
|
+
api_path = dep_manifest.get("apiPath")
|
|
74
|
+
if api_path:
|
|
75
|
+
urls[dep_name] = api_path
|
|
76
|
+
break
|
|
77
|
+
|
|
78
|
+
return urls
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def get_backend_manifest(manifest):
|
|
82
|
+
"""Get the backend manifest referenced by a frontend manifest.
|
|
83
|
+
|
|
84
|
+
Args:
|
|
85
|
+
manifest: Frontend service manifest with backendName
|
|
86
|
+
|
|
87
|
+
Returns:
|
|
88
|
+
dict: Backend manifest or None if not found
|
|
89
|
+
"""
|
|
90
|
+
backend_name = manifest.get("backendName")
|
|
91
|
+
if not backend_name:
|
|
92
|
+
return None
|
|
93
|
+
|
|
94
|
+
backend_service = get_resource_by_name(backend_name)
|
|
95
|
+
if not backend_service:
|
|
96
|
+
return None
|
|
97
|
+
|
|
98
|
+
backend_resources = backend_service.get("resources", [])
|
|
99
|
+
for resource in backend_resources:
|
|
100
|
+
if resource.get("name") == backend_name:
|
|
101
|
+
return resource.get("_manifest", {})
|
|
102
|
+
|
|
103
|
+
return None
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
def inject_dependency_env_vars(manifest, base_env_vars):
|
|
107
|
+
"""Inject environment variables from dependencies.
|
|
108
|
+
|
|
109
|
+
For each internal dependency, adds VITE_{DEP}_API_URL to env vars.
|
|
110
|
+
|
|
111
|
+
Args:
|
|
112
|
+
manifest: Service manifest
|
|
113
|
+
base_env_vars: Base environment variables dict
|
|
114
|
+
|
|
115
|
+
Returns:
|
|
116
|
+
dict: Updated environment variables with dependency URLs
|
|
117
|
+
"""
|
|
118
|
+
env_vars = dict(base_env_vars)
|
|
119
|
+
dep_urls = resolve_dependency_api_urls(manifest)
|
|
120
|
+
|
|
121
|
+
for dep_name, api_path in dep_urls.items():
|
|
122
|
+
# Convert dependency name to env var key
|
|
123
|
+
# e.g., "identity-management-backend" -> "IDENTITY_MANAGEMENT_BACKEND_API_URL"
|
|
124
|
+
env_key = dep_name.upper().replace("-", "_").replace(".", "_")
|
|
125
|
+
env_vars["VITE_" + env_key + "_API_URL"] = api_path
|
|
126
|
+
|
|
127
|
+
return env_vars
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
# Export struct for easy importing
|
|
131
|
+
DependencyResolvers = struct(
|
|
132
|
+
resolve_backend_api_path = resolve_backend_api_path,
|
|
133
|
+
resolve_dependency_api_urls = resolve_dependency_api_urls,
|
|
134
|
+
get_backend_manifest = get_backend_manifest,
|
|
135
|
+
inject_dependency_env_vars = inject_dependency_env_vars,
|
|
136
|
+
)
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
# Copyright (c) 2026 Flisk Landscape contributors
|
|
2
|
+
# SPDX-License-Identifier: MIT
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# 🧪 TILT SDK - ENV GENERATORS
|
|
5
|
+
# =============================================================================
|
|
6
|
+
# Path: .tilt/provisioner/orchestrator/generators/env.star
|
|
7
|
+
# Purpose: Environment file generation helpers
|
|
8
|
+
# =============================================================================
|
|
9
|
+
|
|
10
|
+
# === INLINED CONSTANTS for pure extension loading ===
|
|
11
|
+
BASE_PORT_FRONTEND = 3000
|
|
12
|
+
BASE_PORT_BACKEND = 4000
|
|
13
|
+
OUTPUT = struct(AUTOGENERATED_FOLDER = ".autogenerated")
|
|
14
|
+
# === END INLINED CONSTANTS ===
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
load("../../../../platform/docker/auth/auth.star", "AuthConfig")
|
|
18
|
+
load("../../../../platform/docker/networking/traefik_helpers.star", "get_api_path")
|
|
19
|
+
load("../../../../platform/docker/networking/api_path_constants.star", "get_frontend_base_path")
|
|
20
|
+
load("../../../../platform/docker/constants.star", "PlatformDockerConstants")
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def _normalize_dependency_path(dependency):
|
|
25
|
+
dep = str(dependency).strip()
|
|
26
|
+
if not dep:
|
|
27
|
+
return ''
|
|
28
|
+
|
|
29
|
+
if dep.endswith('-management-backend'):
|
|
30
|
+
return dep.replace('-management-backend', '')
|
|
31
|
+
|
|
32
|
+
if dep.endswith('-backend'):
|
|
33
|
+
return dep[:-8]
|
|
34
|
+
|
|
35
|
+
if dep.endswith('-frontend'):
|
|
36
|
+
return dep[:-9]
|
|
37
|
+
|
|
38
|
+
return dep
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def _dependency_env_key(dependency):
|
|
42
|
+
dep = str(dependency).upper()
|
|
43
|
+
key = ''
|
|
44
|
+
for i in range(len(dep)):
|
|
45
|
+
char = dep[i]
|
|
46
|
+
if (char >= 'A' and char <= 'Z') or (char >= '0' and char <= '9'):
|
|
47
|
+
key += char
|
|
48
|
+
else:
|
|
49
|
+
key += '_'
|
|
50
|
+
while '__' in key:
|
|
51
|
+
key = key.replace('__', '_')
|
|
52
|
+
return key.strip('_')
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def _build_dependency_env_lines(manifest):
|
|
56
|
+
dependencies = manifest.get('dependencies', manifest.get('dependsOn', []))
|
|
57
|
+
if not dependencies:
|
|
58
|
+
return ''
|
|
59
|
+
|
|
60
|
+
# Deduplicate while preserving first-seen order.
|
|
61
|
+
seen = {}
|
|
62
|
+
ordered = []
|
|
63
|
+
for dep in dependencies:
|
|
64
|
+
dep_path = _normalize_dependency_path(dep)
|
|
65
|
+
if dep_path and not seen.get(dep_path, False):
|
|
66
|
+
seen[dep_path] = True
|
|
67
|
+
ordered.append(dep_path)
|
|
68
|
+
|
|
69
|
+
if not ordered:
|
|
70
|
+
return ''
|
|
71
|
+
|
|
72
|
+
lines = '\n# Dependency API URLs (using standardized /api/v1 paths)\n'
|
|
73
|
+
for dep_path in ordered:
|
|
74
|
+
dep_key = _dependency_env_key(dep_path)
|
|
75
|
+
# Use standardized API path from traefik helpers
|
|
76
|
+
dep_api_path = get_api_path(dep_path)
|
|
77
|
+
lines += 'VITE_{dep_key}_API_URL=http://{local_domain}{dep_api_path}\n'.format(
|
|
78
|
+
dep_key=dep_key,
|
|
79
|
+
dep_api_path=dep_api_path,
|
|
80
|
+
local_domain=PlatformDockerConstants.API_LOCAL_DOMAIN,
|
|
81
|
+
)
|
|
82
|
+
return lines
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
# Characters that can appear in a dotenv value without quoting.
|
|
86
|
+
_ENV_BARE_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-./:@%+=,'
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def _format_env_value(value):
|
|
90
|
+
"""Format a param value so the generated file stays valid dotenv.
|
|
91
|
+
|
|
92
|
+
A plain value stays bare. Anything else (a space, `#`, `$`, a quote, a backslash, a newline, or an empty string) is wrapped in double
|
|
93
|
+
quotes with backslash, quote and newline escaped, which is how dotenv parsers (including Docker Compose's) read it back.
|
|
94
|
+
|
|
95
|
+
`$` is written as `$$`: Docker Compose expands `$NAME` and `${NAME}` in env files, so an unescaped dollar would silently pick up
|
|
96
|
+
some other variable (checked in a real container: "price $$FOO" arrives as the literal `price $FOO`).
|
|
97
|
+
"""
|
|
98
|
+
text = str(value)
|
|
99
|
+
bare = text != ''
|
|
100
|
+
for i in range(len(text)):
|
|
101
|
+
if text[i] not in _ENV_BARE_CHARS:
|
|
102
|
+
bare = False
|
|
103
|
+
break
|
|
104
|
+
if bare:
|
|
105
|
+
return text
|
|
106
|
+
|
|
107
|
+
escaped = text.replace('\\', '\\\\').replace('"', '\\"').replace('$', '$$').replace('\r', '\\r').replace('\n', '\\n')
|
|
108
|
+
return '"' + escaped + '"'
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def _uses_prisma(manifest):
|
|
112
|
+
"""Prisma is opt-in: an explicit usePrisma, or `prisma` in featuresEnabled (the same rule the Dockerfile generator uses)."""
|
|
113
|
+
if manifest.get('usePrisma'):
|
|
114
|
+
return True
|
|
115
|
+
return 'prisma' in manifest.get('featuresEnabled', [])
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
def _uses_drizzle(manifest):
|
|
119
|
+
"""Drizzle reads DATABASE_URL at runtime. It has no migrator, so only the connection string is written."""
|
|
120
|
+
return 'drizzle' in manifest.get('featuresEnabled', [])
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
def _generate_params_env(manifest, backend_manifest=None, write_fn=None):
|
|
124
|
+
"""Generate params (non-secret) environment variables from manifest.
|
|
125
|
+
|
|
126
|
+
This generates config like BASE_URL, PORT, etc. - NEVER secrets. The file is generated and verified by `flisk config verify`, so
|
|
127
|
+
nothing secret may be written here: the JWT secret and `secrets.required` / `secrets.optional` reach the container from the
|
|
128
|
+
project `.env` through the Compose entry instead.
|
|
129
|
+
|
|
130
|
+
Args:
|
|
131
|
+
manifest: Service manifest dict with configuration
|
|
132
|
+
backend_manifest: Optional backend manifest for frontend services
|
|
133
|
+
write_fn: Optional write function for file output (callable)
|
|
134
|
+
|
|
135
|
+
Returns:
|
|
136
|
+
str: Generated environment file content
|
|
137
|
+
"""
|
|
138
|
+
resource_path = manifest.get('_resource_path', '')
|
|
139
|
+
app_type = manifest.get('appType', 'backend')
|
|
140
|
+
stack = manifest.get('stack', 'app')
|
|
141
|
+
port = manifest.get('port', BASE_PORT_FRONTEND)
|
|
142
|
+
# Use standardized API path from traefik helpers
|
|
143
|
+
api_path = get_api_path(stack)
|
|
144
|
+
# Traefik routes /api/<stack>-management only on api.<project>.localhost (see traefik.star), so the URL uses that host.
|
|
145
|
+
api_url = 'http://' + PlatformDockerConstants.API_LOCAL_DOMAIN + api_path
|
|
146
|
+
target_filename = '/' + OUTPUT.AUTOGENERATED_FOLDER + '/.env.backend.autogenerated'
|
|
147
|
+
|
|
148
|
+
# Auth configuration: the same builder Compose uses, so the two outputs cannot disagree. A missing value is None and AuthConfig
|
|
149
|
+
# treats None as "use the default". `jwtSecret` is deliberately not read: a secret in a committed service.json would be copied into
|
|
150
|
+
# a generated file, so the secret comes from the project .env instead.
|
|
151
|
+
auth_config = AuthConfig.from_manifest(manifest)
|
|
152
|
+
|
|
153
|
+
if app_type == 'frontend':
|
|
154
|
+
backend_port = backend_manifest.get('port', BASE_PORT_BACKEND) if backend_manifest else BASE_PORT_BACKEND
|
|
155
|
+
backend_name = manifest.get('backendName', stack + '-backend')
|
|
156
|
+
target_filename = '/' + OUTPUT.AUTOGENERATED_FOLDER + '/.env.frontend.autogenerated'
|
|
157
|
+
|
|
158
|
+
# Shared with the Traefik route and the Vite `base` -- see get_frontend_base_path.
|
|
159
|
+
base_path = get_frontend_base_path(manifest)
|
|
160
|
+
public_url = 'http://' + PlatformDockerConstants.LOCAL_DOMAIN + base_path
|
|
161
|
+
|
|
162
|
+
content = """# Generated by Tilt SDK - DO NOT EDIT
|
|
163
|
+
# Frontend Environment Variables
|
|
164
|
+
VITE_API_PORT={backend_port}
|
|
165
|
+
VITE_API_URL={api_url}
|
|
166
|
+
VITE_BACKEND_NAME={backend_name}
|
|
167
|
+
PUBLIC_URL={public_url}
|
|
168
|
+
""".format(
|
|
169
|
+
backend_port=backend_port,
|
|
170
|
+
api_url=api_url,
|
|
171
|
+
backend_name=backend_name,
|
|
172
|
+
public_url=public_url,
|
|
173
|
+
)
|
|
174
|
+
content += _build_dependency_env_lines(manifest)
|
|
175
|
+
else:
|
|
176
|
+
db_name = manifest.get('databaseName', PlatformDockerConstants.get_db_name(stack))
|
|
177
|
+
|
|
178
|
+
content = """# Generated by Tilt SDK - DO NOT EDIT
|
|
179
|
+
# Backend Environment Variables
|
|
180
|
+
PORT={port}
|
|
181
|
+
DATABASE_NAME={db_name}
|
|
182
|
+
API_URL={api_url}
|
|
183
|
+
""".format(port=port, db_name=db_name, api_url=api_url)
|
|
184
|
+
|
|
185
|
+
if _uses_prisma(manifest):
|
|
186
|
+
content += """
|
|
187
|
+
# Prisma
|
|
188
|
+
DATABASE_URL=""" + PlatformDockerConstants.get_database_url_for_env(db_name) + """
|
|
189
|
+
"""
|
|
190
|
+
elif _uses_drizzle(manifest):
|
|
191
|
+
content += """
|
|
192
|
+
# Drizzle
|
|
193
|
+
DATABASE_URL=""" + PlatformDockerConstants.get_database_url_for_env(db_name) + """
|
|
194
|
+
"""
|
|
195
|
+
|
|
196
|
+
# Add authentication configuration using centralized auth utilities
|
|
197
|
+
content += AuthConfig.generate_env_file_auth_section(auth_config)
|
|
198
|
+
|
|
199
|
+
# Add params (non-secret config variables)
|
|
200
|
+
# NOTE: Secrets are NEVER added here (see the docstring).
|
|
201
|
+
params = manifest.get('params', manifest.get('envVars', {})) # Fallback to envVars during migration
|
|
202
|
+
if params:
|
|
203
|
+
content += '\n# Params (non-secret config)\n'
|
|
204
|
+
# Sort keys for deterministic output to avoid unnecessary file rewrites.
|
|
205
|
+
for key in sorted(params.keys()):
|
|
206
|
+
value = params.get(key)
|
|
207
|
+
content += key + '=' + _format_env_value(value) + '\n'
|
|
208
|
+
|
|
209
|
+
if write_fn and resource_path:
|
|
210
|
+
write_fn(resource_path + target_filename, content)
|
|
211
|
+
|
|
212
|
+
return content
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
EnvGenerators = struct(
|
|
216
|
+
generate_params_env = _generate_params_env,
|
|
217
|
+
# Legacy alias for backward compatibility during migration
|
|
218
|
+
generate_env_file = _generate_params_env,
|
|
219
|
+
)
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
# Copyright (c) 2026 Flisk contributors
|
|
2
|
+
# SPDX-License-Identifier: MIT
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# 🎨 TILT SDK - FRONTEND API CLIENT GENERATORS
|
|
5
|
+
# =============================================================================
|
|
6
|
+
# Purpose: Generate api-client.ts, env.ts, and index.ts for frontend services
|
|
7
|
+
# These files import from @{npm_scope}/platform-api-client package
|
|
8
|
+
# =============================================================================
|
|
9
|
+
|
|
10
|
+
# Load npm scope from project.json
|
|
11
|
+
# Use TDK_PROJECT_ROOT env var set by Tilt, fallback to current directory
|
|
12
|
+
def _load_npm_scope():
|
|
13
|
+
project_root = os.environ.get('TDK_PROJECT_ROOT', '')
|
|
14
|
+
project_json_path = '.tdk/project.json'
|
|
15
|
+
if project_root:
|
|
16
|
+
project_json_path = project_root + '/' + project_json_path
|
|
17
|
+
|
|
18
|
+
if os.path.exists(project_json_path):
|
|
19
|
+
_project_json = read_json(project_json_path)
|
|
20
|
+
return _project_json.get('project', {}).get('name', 'tdk-project')
|
|
21
|
+
return 'tdk-project'
|
|
22
|
+
|
|
23
|
+
_NPM_SCOPE = _load_npm_scope()
|
|
24
|
+
|
|
25
|
+
load("../../../../platform/docker/networking/traefik_helpers.star", "get_api_path")
|
|
26
|
+
load("../../../../platform/docker/constants.star", "PlatformDockerConstants")
|
|
27
|
+
load("./dependencies/resolver.star", "resolve_backend_api_path")
|
|
28
|
+
|
|
29
|
+
def generate_frontend_api_client(manifest, write_fn=None):
|
|
30
|
+
"""Generate .autogenerated/api-client.ts for a frontend resource.
|
|
31
|
+
|
|
32
|
+
Args:
|
|
33
|
+
manifest: Resource manifest with stack field
|
|
34
|
+
write_fn: Optional function to write file (for Tilt)
|
|
35
|
+
|
|
36
|
+
Returns:
|
|
37
|
+
str: Generated file content
|
|
38
|
+
"""
|
|
39
|
+
stack = manifest.get("stack", "app")
|
|
40
|
+
|
|
41
|
+
# Auto-resolve apiPath from backend manifest if backendName is specified
|
|
42
|
+
backend_api_path = resolve_backend_api_path(manifest)
|
|
43
|
+
if backend_api_path:
|
|
44
|
+
api_path = backend_api_path
|
|
45
|
+
else:
|
|
46
|
+
api_path = get_api_path(stack, manifest)
|
|
47
|
+
|
|
48
|
+
content = '''// 🛑 GENERATED BY TILT SDK - DO NOT EDIT
|
|
49
|
+
// Source: engine/topologies/tilt/resources/orchestrator/generators/frontend.star
|
|
50
|
+
// Purpose: Pre-configured API client for {stack} resource
|
|
51
|
+
|
|
52
|
+
import {{ createApiClient }} from '@{npm_scope}/platform-api-client';
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Pre-configured API client for {stack} resource
|
|
56
|
+
*
|
|
57
|
+
* Usage:
|
|
58
|
+
* ```typescript
|
|
59
|
+
* import {{ apiClient }} from '../.autogenerated/api-client';
|
|
60
|
+
* const data = await apiClient.get('/');
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
export const apiClient = createApiClient({{
|
|
64
|
+
baseURL: import.meta.env.VITE_API_URL || 'http://{local_domain}{api_path}',
|
|
65
|
+
withAuth: true,
|
|
66
|
+
}});
|
|
67
|
+
|
|
68
|
+
export default apiClient;
|
|
69
|
+
'''.format(
|
|
70
|
+
stack=stack,
|
|
71
|
+
npm_scope=_NPM_SCOPE,
|
|
72
|
+
api_path=api_path,
|
|
73
|
+
local_domain=PlatformDockerConstants.API_LOCAL_DOMAIN,
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
if write_fn:
|
|
77
|
+
resource_path = manifest.get('_resource_path', '')
|
|
78
|
+
write_fn(resource_path + '/.autogenerated/api-client.ts', content)
|
|
79
|
+
|
|
80
|
+
return content
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def generate_frontend_env_ts(manifest, write_fn=None):
|
|
84
|
+
"""Generate .autogenerated/env.ts for a frontend resource.
|
|
85
|
+
|
|
86
|
+
Args:
|
|
87
|
+
manifest: Resource manifest with stack field
|
|
88
|
+
write_fn: Optional function to write file (for Tilt)
|
|
89
|
+
|
|
90
|
+
Returns:
|
|
91
|
+
str: Generated file content
|
|
92
|
+
"""
|
|
93
|
+
stack = manifest.get("stack", "app")
|
|
94
|
+
|
|
95
|
+
# Auto-resolve apiPath from backend manifest if backendName is specified
|
|
96
|
+
backend_api_path = resolve_backend_api_path(manifest)
|
|
97
|
+
if backend_api_path:
|
|
98
|
+
api_path = backend_api_path
|
|
99
|
+
else:
|
|
100
|
+
api_path = get_api_path(stack, manifest)
|
|
101
|
+
|
|
102
|
+
content = '''// 🛑 GENERATED BY TILT SDK - DO NOT EDIT
|
|
103
|
+
// Source: .tilt/topologies/tilt/resources/orchestrator/generators/frontend.star
|
|
104
|
+
// Purpose: Environment constants for {stack} resource
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Base API URL for {stack} resource
|
|
108
|
+
* Uses VITE_API_URL env var with fallback to local dev URL
|
|
109
|
+
*/
|
|
110
|
+
export const API_URL = import.meta.env.VITE_API_URL || 'http://{local_domain}{api_path}';
|
|
111
|
+
'''.format(
|
|
112
|
+
stack=stack,
|
|
113
|
+
api_path=api_path,
|
|
114
|
+
local_domain=PlatformDockerConstants.API_LOCAL_DOMAIN,
|
|
115
|
+
)
|
|
116
|
+
|
|
117
|
+
if write_fn:
|
|
118
|
+
resource_path = manifest.get('_resource_path', '')
|
|
119
|
+
write_fn(resource_path + '/.autogenerated/env.ts', content)
|
|
120
|
+
|
|
121
|
+
return content
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
def generate_frontend_api_index(manifest, write_fn=None):
|
|
125
|
+
"""Generate .autogenerated/api-index.ts for clean imports.
|
|
126
|
+
|
|
127
|
+
Args:
|
|
128
|
+
manifest: Service manifest
|
|
129
|
+
write_fn: Optional function to write file (for Tilt)
|
|
130
|
+
|
|
131
|
+
Returns:
|
|
132
|
+
str: Generated file content
|
|
133
|
+
"""
|
|
134
|
+
content = '''// 🛑 GENERATED BY TILT SDK - DO NOT EDIT
|
|
135
|
+
// Source: .tilt/topologies/tilt/resources/orchestrator/generators/frontend.star
|
|
136
|
+
// Purpose: Clean barrel exports for API client
|
|
137
|
+
|
|
138
|
+
export { apiClient } from './api-client';
|
|
139
|
+
export { API_URL } from './env';
|
|
140
|
+
'''
|
|
141
|
+
|
|
142
|
+
if write_fn:
|
|
143
|
+
resource_path = manifest.get('_resource_path', '')
|
|
144
|
+
write_fn(resource_path + '/.autogenerated/api-index.ts', content)
|
|
145
|
+
|
|
146
|
+
return content
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
def generate_all_frontend_api_files(manifest, write_fn=None):
|
|
150
|
+
"""Generate all frontend API files for a service.
|
|
151
|
+
|
|
152
|
+
Args:
|
|
153
|
+
manifest: Service manifest
|
|
154
|
+
write_fn: Function to write files
|
|
155
|
+
|
|
156
|
+
Returns:
|
|
157
|
+
dict: Generated content for each file
|
|
158
|
+
"""
|
|
159
|
+
return {
|
|
160
|
+
'api-client.ts': generate_frontend_api_client(manifest, write_fn),
|
|
161
|
+
'env.ts': generate_frontend_env_ts(manifest, write_fn),
|
|
162
|
+
'api-index.ts': generate_frontend_api_index(manifest, write_fn),
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
# Export struct for easy importing
|
|
167
|
+
FrontendGenerators = struct(
|
|
168
|
+
generate_api_client = generate_frontend_api_client,
|
|
169
|
+
generate_env_ts = generate_frontend_env_ts,
|
|
170
|
+
generate_api_index = generate_frontend_api_index,
|
|
171
|
+
generate_all = generate_all_frontend_api_files,
|
|
172
|
+
)
|