Skip to content

Commit dfde33e

Browse files
committed
Codegen exclude decorator (#5800)
* Add codegenExclude tag to mark endpoints for exclusion from client code generation * Add ESLint rule to restrict @codegen_exclude usage to Request.ts files * Add @codegen_exclude tag to internal request interfaces * Add output to the mix * Fix linter * Add codegenExclude property to typescript-generator's metamodel
1 parent 8070af0 commit dfde33e

File tree

15 files changed

+187
-20
lines changed

15 files changed

+187
-20
lines changed

compiler/src/model/metamodel.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -469,6 +469,8 @@ export class Endpoint {
469469
index?: string[]
470470
cluster?: string[]
471471
}
472+
473+
codegenExclude?: boolean
472474
}
473475

474476
export class UrlTemplate {

compiler/src/model/utils.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -634,7 +634,7 @@ export function hoistRequestAnnotations (
634634
request: model.Request, jsDocs: JSDoc[], mappings: Record<string, model.Endpoint>, response: model.TypeName | null
635635
): void {
636636
const knownRequestAnnotations = [
637-
'rest_spec_name', 'behavior', 'class_serializer', 'index_privileges', 'cluster_privileges', 'doc_id', 'availability', 'doc_tag', 'ext_doc_id'
637+
'rest_spec_name', 'behavior', 'class_serializer', 'index_privileges', 'cluster_privileges', 'doc_id', 'availability', 'doc_tag', 'ext_doc_id', 'codegen_exclude'
638638
]
639639
// in most of the cases the jsDocs comes in a single block,
640640
// but it can happen that the user defines multiple single line jsDoc.
@@ -720,6 +720,9 @@ export function hoistRequestAnnotations (
720720
} else if (tag === 'doc_tag') {
721721
assert(jsDocs, value.trim() !== '', `Request ${request.name.name}'s @doc_tag cannot be empty`)
722722
endpoint.docTag = value.trim()
723+
} else if (tag === 'codegen_exclude') {
724+
// Mark this endpoint to be excluded from client code generation
725+
endpoint.codegenExclude = true
723726
} else {
724727
assert(jsDocs, false, `Unhandled tag: '${tag}' with value: '${value}' on request ${request.name.name}`)
725728
}

output/schema/schema.json

Lines changed: 12 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

specification/_internal/delete_desired_balance/InternalDeleteDesiredBalanceRequest.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import { Duration } from '@_types/Time'
2525
*
2626
* @rest_spec_name _internal.delete_desired_balance
2727
* @availability stack stability=experimental visibility=private
28+
* @codegen_exclude
2829
*/
2930
export interface Request extends RequestBase {
3031
urls: [

specification/_internal/delete_desired_nodes/InternalDeleteDesiredNodesRequest.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import { Duration } from '@_types/Time'
2525
*
2626
* @rest_spec_name _internal.delete_desired_nodes
2727
* @availability stack stability=experimental visibility=private
28+
* @codegen_exclude
2829
*/
2930
export interface Request extends RequestBase {
3031
urls: [

specification/_internal/get_desired_balance/InternalGetDesiredBalanceRequest.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import { Duration } from '@_types/Time'
2525
*
2626
* @rest_spec_name _internal.get_desired_balance
2727
* @availability stack stability=experimental visibility=private
28+
* @codegen_exclude
2829
*/
2930
export interface Request extends RequestBase {
3031
urls: [

specification/_internal/get_desired_nodes/InternalGetDesiredNodesRequest.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import { Duration } from '@_types/Time'
2525
*
2626
* @rest_spec_name _internal.get_desired_nodes
2727
* @availability stack stability=experimental visibility=private
28+
* @codegen_exclude
2829
*/
2930
export interface Request extends RequestBase {
3031
urls: [

specification/_internal/prevalidate_node_removal/InternalPrevalidateNodeRemovalRequest.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import { Duration } from '@_types/Time'
2525
*
2626
* @rest_spec_name _internal.prevalidate_node_removal
2727
* @availability stack stability=experimental visibility=private
28+
* @codegen_exclude
2829
*/
2930
export interface Request extends RequestBase {
3031
urls: [

specification/_internal/update_desired_nodes/InternalUpdateDesiredNodesRequest.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import { UserDefinedValue } from '@spec_utils/UserDefinedValue'
2727
*
2828
* @rest_spec_name _internal.update_desired_nodes
2929
* @availability stack stability=experimental visibility=private
30+
* @codegen_exclude
3031
*/
3132
export interface Request extends RequestBase {
3233
urls: [

specification/eslint.config.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ export default defineConfig([
3838
'es-spec-validator/no-native-types': 'error',
3939
'es-spec-validator/invalid-node-types': 'error',
4040
'es-spec-validator/no-generic-number': 'error',
41+
'es-spec-validator/codegen-exclude-on-request-only': 'error',
4142
'es-spec-validator/request-must-have-urls': 'error',
4243
'es-spec-validator/no-variants-on-responses': 'error',
4344
'es-spec-validator/no-inline-unions': 'error',
@@ -144,6 +145,7 @@ export default defineConfig([
144145
'behavior_meta',
145146
'class_serializer',
146147
'cluster_privileges',
148+
'codegen_exclude',
147149
'codegen_name',
148150
'codegen_names',
149151
'doc_id',

0 commit comments

Comments
 (0)