load("@aspect_rules_ts//ts:defs.bzl", "ts_config", "ts_project") # Extract OpenAPI spec from the dedicated spec generator binary genrule( name = "extract_openapi_spec", srcs = [], outs = ["openapi.json"], cmd = """ $(location //databuild:openapi_spec_generator) > $@ """, tools = [ "//databuild:openapi_spec_generator", ], visibility = ["//visibility:public"], ) # TypeScript generator configuration filegroup( name = "typescript_generator_config", srcs = ["typescript_generator_config.json"], visibility = ["//visibility:public"], ) # Generate TypeScript client using OpenAPI Generator JAR genrule( name = "typescript_client", srcs = [ ":extract_openapi_spec", ":typescript_generator_config", ], outs = [ "typescript_generated/src/apis/DefaultApi.ts", "typescript_generated/src/apis/index.ts", "typescript_generated/src/models/index.ts", "typescript_generated/src/models/ActivityApiResponse.ts", "typescript_generated/src/models/ActivityResponse.ts", "typescript_generated/src/models/AnalyzeRequest.ts", "typescript_generated/src/models/AnalyzeResponse.ts", "typescript_generated/src/models/BuildCancelPathRequest.ts", "typescript_generated/src/models/BuildCancelRepositoryResponse.ts", "typescript_generated/src/models/BuildDetailRequest.ts", "typescript_generated/src/models/BuildDetailResponse.ts", "typescript_generated/src/models/BuildEventSummary.ts", "typescript_generated/src/models/BuildRequest.ts", "typescript_generated/src/models/BuildRequestResponse.ts", "typescript_generated/src/models/BuildSummary.ts", "typescript_generated/src/models/BuildRequestStatus.ts", "typescript_generated/src/models/BuildTimelineEvent.ts", "typescript_generated/src/models/BuildsListApiResponse.ts", "typescript_generated/src/models/BuildsListResponse.ts", "typescript_generated/src/models/CancelBuildRepositoryRequest.ts", "typescript_generated/src/models/InvalidatePartitionRequest.ts", "typescript_generated/src/models/JobDailyStats.ts", "typescript_generated/src/models/JobDetailRequest.ts", "typescript_generated/src/models/JobDetailResponse.ts", "typescript_generated/src/models/JobMetricsRequest.ts", "typescript_generated/src/models/JobMetricsResponse.ts", "typescript_generated/src/models/JobRunDetail.ts", "typescript_generated/src/models/JobSummary.ts", "typescript_generated/src/models/JobsListApiResponse.ts", "typescript_generated/src/models/JobsListResponse.ts", "typescript_generated/src/models/PaginationInfo.ts", "typescript_generated/src/models/PartitionDetailRequest.ts", "typescript_generated/src/models/PartitionDetailResponse.ts", "typescript_generated/src/models/PartitionEventsRequest.ts", "typescript_generated/src/models/PartitionEventsResponse.ts", "typescript_generated/src/models/PartitionInvalidatePathRequest.ts", "typescript_generated/src/models/PartitionInvalidateResponse.ts", "typescript_generated/src/models/PartitionRef.ts", "typescript_generated/src/models/PartitionStatusRequest.ts", "typescript_generated/src/models/PartitionStatusResponse.ts", "typescript_generated/src/models/PartitionSummary.ts", "typescript_generated/src/models/PartitionTimelineEvent.ts", "typescript_generated/src/models/PartitionsListApiResponse.ts", "typescript_generated/src/models/PartitionsListResponse.ts", "typescript_generated/src/models/CancelTaskRequest.ts", "typescript_generated/src/models/JobRunDetailResponse.ts", "typescript_generated/src/models/JobRunSummary.ts", "typescript_generated/src/models/JobRunSummary2.ts", "typescript_generated/src/models/JobRunTimelineEvent.ts", "typescript_generated/src/models/JobRunsListApiResponse.ts", "typescript_generated/src/models/JobRunsListResponse.ts", "typescript_generated/src/models/TaskCancelPathRequest.ts", "typescript_generated/src/models/TaskCancelResponse.ts", "typescript_generated/src/models/TaskDetailRequest.ts", "typescript_generated/src/runtime.ts", "typescript_generated/src/index.ts", ], cmd = """ # Download OpenAPI Generator JAR OPENAPI_JAR=/tmp/openapi-generator-cli.jar if [ ! -f $$OPENAPI_JAR ]; then curl -L -o $$OPENAPI_JAR https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/7.2.0/openapi-generator-cli-7.2.0.jar fi # Create temporary directory for generation TEMP_DIR=$$(mktemp -d) # Generate TypeScript client to temp directory java -jar $$OPENAPI_JAR generate \ -i $(location :extract_openapi_spec) \ -g typescript-fetch \ -c $(location :typescript_generator_config) \ -o $$TEMP_DIR # Copy generated files to expected output locations cp $$TEMP_DIR/src/apis/DefaultApi.ts $(location typescript_generated/src/apis/DefaultApi.ts) cp $$TEMP_DIR/src/apis/index.ts $(location typescript_generated/src/apis/index.ts) cp $$TEMP_DIR/src/models/index.ts $(location typescript_generated/src/models/index.ts) cp $$TEMP_DIR/src/models/ActivityApiResponse.ts $(location typescript_generated/src/models/ActivityApiResponse.ts) cp $$TEMP_DIR/src/models/ActivityResponse.ts $(location typescript_generated/src/models/ActivityResponse.ts) cp $$TEMP_DIR/src/models/AnalyzeRequest.ts $(location typescript_generated/src/models/AnalyzeRequest.ts) cp $$TEMP_DIR/src/models/AnalyzeResponse.ts $(location typescript_generated/src/models/AnalyzeResponse.ts) cp $$TEMP_DIR/src/models/BuildCancelPathRequest.ts $(location typescript_generated/src/models/BuildCancelPathRequest.ts) cp $$TEMP_DIR/src/models/BuildCancelRepositoryResponse.ts $(location typescript_generated/src/models/BuildCancelRepositoryResponse.ts) cp $$TEMP_DIR/src/models/BuildDetailRequest.ts $(location typescript_generated/src/models/BuildDetailRequest.ts) cp $$TEMP_DIR/src/models/BuildDetailResponse.ts $(location typescript_generated/src/models/BuildDetailResponse.ts) cp $$TEMP_DIR/src/models/BuildEventSummary.ts $(location typescript_generated/src/models/BuildEventSummary.ts) cp $$TEMP_DIR/src/models/BuildRequest.ts $(location typescript_generated/src/models/BuildRequest.ts) cp $$TEMP_DIR/src/models/BuildRequestResponse.ts $(location typescript_generated/src/models/BuildRequestResponse.ts) cp $$TEMP_DIR/src/models/BuildSummary.ts $(location typescript_generated/src/models/BuildSummary.ts) cp $$TEMP_DIR/src/models/BuildRequestStatus.ts $(location typescript_generated/src/models/BuildRequestStatus.ts) cp $$TEMP_DIR/src/models/BuildTimelineEvent.ts $(location typescript_generated/src/models/BuildTimelineEvent.ts) cp $$TEMP_DIR/src/models/BuildsListApiResponse.ts $(location typescript_generated/src/models/BuildsListApiResponse.ts) cp $$TEMP_DIR/src/models/BuildsListResponse.ts $(location typescript_generated/src/models/BuildsListResponse.ts) cp $$TEMP_DIR/src/models/CancelBuildRepositoryRequest.ts $(location typescript_generated/src/models/CancelBuildRepositoryRequest.ts) cp $$TEMP_DIR/src/models/InvalidatePartitionRequest.ts $(location typescript_generated/src/models/InvalidatePartitionRequest.ts) cp $$TEMP_DIR/src/models/JobDailyStats.ts $(location typescript_generated/src/models/JobDailyStats.ts) cp $$TEMP_DIR/src/models/JobDetailRequest.ts $(location typescript_generated/src/models/JobDetailRequest.ts) cp $$TEMP_DIR/src/models/JobDetailResponse.ts $(location typescript_generated/src/models/JobDetailResponse.ts) cp $$TEMP_DIR/src/models/JobMetricsRequest.ts $(location typescript_generated/src/models/JobMetricsRequest.ts) cp $$TEMP_DIR/src/models/JobMetricsResponse.ts $(location typescript_generated/src/models/JobMetricsResponse.ts) cp $$TEMP_DIR/src/models/JobRunDetail.ts $(location typescript_generated/src/models/JobRunDetail.ts) cp $$TEMP_DIR/src/models/JobRunSummary.ts $(location typescript_generated/src/models/JobRunSummary.ts) cp $$TEMP_DIR/src/models/JobSummary.ts $(location typescript_generated/src/models/JobSummary.ts) cp $$TEMP_DIR/src/models/JobsListApiResponse.ts $(location typescript_generated/src/models/JobsListApiResponse.ts) cp $$TEMP_DIR/src/models/JobsListResponse.ts $(location typescript_generated/src/models/JobsListResponse.ts) cp $$TEMP_DIR/src/models/PaginationInfo.ts $(location typescript_generated/src/models/PaginationInfo.ts) cp $$TEMP_DIR/src/models/PartitionDetailRequest.ts $(location typescript_generated/src/models/PartitionDetailRequest.ts) cp $$TEMP_DIR/src/models/PartitionDetailResponse.ts $(location typescript_generated/src/models/PartitionDetailResponse.ts) cp $$TEMP_DIR/src/models/PartitionEventsRequest.ts $(location typescript_generated/src/models/PartitionEventsRequest.ts) cp $$TEMP_DIR/src/models/PartitionEventsResponse.ts $(location typescript_generated/src/models/PartitionEventsResponse.ts) cp $$TEMP_DIR/src/models/PartitionInvalidatePathRequest.ts $(location typescript_generated/src/models/PartitionInvalidatePathRequest.ts) cp $$TEMP_DIR/src/models/PartitionInvalidateResponse.ts $(location typescript_generated/src/models/PartitionInvalidateResponse.ts) cp $$TEMP_DIR/src/models/PartitionRef.ts $(location typescript_generated/src/models/PartitionRef.ts) cp $$TEMP_DIR/src/models/PartitionStatusRequest.ts $(location typescript_generated/src/models/PartitionStatusRequest.ts) cp $$TEMP_DIR/src/models/PartitionStatusResponse.ts $(location typescript_generated/src/models/PartitionStatusResponse.ts) cp $$TEMP_DIR/src/models/PartitionSummary.ts $(location typescript_generated/src/models/PartitionSummary.ts) cp $$TEMP_DIR/src/models/PartitionTimelineEvent.ts $(location typescript_generated/src/models/PartitionTimelineEvent.ts) cp $$TEMP_DIR/src/models/PartitionsListApiResponse.ts $(location typescript_generated/src/models/PartitionsListApiResponse.ts) cp $$TEMP_DIR/src/models/PartitionsListResponse.ts $(location typescript_generated/src/models/PartitionsListResponse.ts) cp $$TEMP_DIR/src/models/JobRunSummary.ts $(location typescript_generated/src/models/JobRunSummary.ts) cp $$TEMP_DIR/src/models/JobRunTimelineEvent.ts $(location typescript_generated/src/models/JobRunTimelineEvent.ts) cp $$TEMP_DIR/src/models/JobRunsListApiResponse.ts $(location typescript_generated/src/models/JobRunsListApiResponse.ts) cp $$TEMP_DIR/src/models/JobRunsListResponse.ts $(location typescript_generated/src/models/JobRunsListResponse.ts) cp $$TEMP_DIR/src/models/CancelTaskRequest.ts $(location typescript_generated/src/models/CancelTaskRequest.ts) cp $$TEMP_DIR/src/models/JobRunDetailResponse.ts $(location typescript_generated/src/models/JobRunDetailResponse.ts) cp $$TEMP_DIR/src/models/JobRunSummary2.ts $(location typescript_generated/src/models/JobRunSummary2.ts) cp $$TEMP_DIR/src/models/TaskCancelPathRequest.ts $(location typescript_generated/src/models/TaskCancelPathRequest.ts) cp $$TEMP_DIR/src/models/TaskCancelResponse.ts $(location typescript_generated/src/models/TaskCancelResponse.ts) cp $$TEMP_DIR/src/models/TaskDetailRequest.ts $(location typescript_generated/src/models/TaskDetailRequest.ts) cp $$TEMP_DIR/src/runtime.ts $(location typescript_generated/src/runtime.ts) cp $$TEMP_DIR/src/index.ts $(location typescript_generated/src/index.ts) """, visibility = ["//visibility:public"], ) # TypeScript configuration for the client ts_config( name = "ts_config", src = "tsconfig.json", visibility = ["//visibility:public"], ) # Create a proper TypeScript project from the generated files ts_project( name = "typescript_lib", srcs = [":typescript_client"], allow_js = True, declaration = True, resolve_json_module = True, transpiler = "tsc", tsconfig = ":ts_config", visibility = ["//visibility:public"], ) # Main TypeScript client target filegroup( name = "typescript", srcs = [ ":typescript_client", ], visibility = ["//visibility:public"], )