Skip to content

Commit 14e768a

Browse files
committed
Improved handling of union types when generating classes
Prevents accessing a property which is declared in one type but not the other: ``` type A = { p: string; }; type B = { k: number; }; const foo = {} as A | B; foo.p = "bar"; //>Property 'p' does not exist on type 'A | B'. //> Property 'p' does not exist on type 'B'. ``` Signed-off-by: Jean-Baptiste Bianchi <[email protected]>
1 parent faff52e commit 14e768a

11 files changed

+302
-88
lines changed

src/lib/generated/classes/authentication-policy.ts

+22-6
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,28 @@ export class AuthenticationPolicy extends ObjectHydrator<Specification.Authentic
5656
super(model);
5757
const self = this as unknown as Specification.AuthenticationPolicy & object;
5858
if (isObject(model)) {
59-
if (typeof model.basic === 'object')
60-
self.basic = new _AuthenticationPolicyBasic(model.basic as Specification.AuthenticationPolicyBasic);
61-
if (typeof model.bearer === 'object')
62-
self.bearer = new _AuthenticationPolicyBearer(model.bearer as Specification.AuthenticationPolicyBearer);
63-
if (typeof model.oauth2 === 'object')
64-
self.oauth2 = new _AuthenticationPolicyOauth2(model.oauth2 as Specification.AuthenticationPolicyOauth2);
59+
if (typeof (model as { [k: string]: unknown; basic: Specification.AuthenticationPolicyBasic }).basic === 'object')
60+
(self as { [k: string]: unknown; basic: Specification.AuthenticationPolicyBasic }).basic =
61+
new _AuthenticationPolicyBasic(
62+
(model as { [k: string]: unknown; basic: Specification.AuthenticationPolicyBasic })
63+
.basic as Specification.AuthenticationPolicyBasic,
64+
);
65+
if (
66+
typeof (model as { [k: string]: unknown; bearer: Specification.AuthenticationPolicyBearer }).bearer === 'object'
67+
)
68+
(self as { [k: string]: unknown; bearer: Specification.AuthenticationPolicyBearer }).bearer =
69+
new _AuthenticationPolicyBearer(
70+
(model as { [k: string]: unknown; bearer: Specification.AuthenticationPolicyBearer })
71+
.bearer as Specification.AuthenticationPolicyBearer,
72+
);
73+
if (
74+
typeof (model as { [k: string]: unknown; oauth2: Specification.AuthenticationPolicyOauth2 }).oauth2 === 'object'
75+
)
76+
(self as { [k: string]: unknown; oauth2: Specification.AuthenticationPolicyOauth2 }).oauth2 =
77+
new _AuthenticationPolicyOauth2(
78+
(model as { [k: string]: unknown; oauth2: Specification.AuthenticationPolicyOauth2 })
79+
.oauth2 as Specification.AuthenticationPolicyOauth2,
80+
);
6581
}
6682
getLifecycleHooks('AuthenticationPolicy')?.constructor?.(this);
6783
}

src/lib/generated/classes/call-async-api-with-authentication.ts

+22-6
Original file line numberDiff line numberDiff line change
@@ -57,12 +57,28 @@ export class CallAsyncAPIWithAuthentication extends ObjectHydrator<Specification
5757
super(model);
5858
const self = this as unknown as Specification.CallAsyncAPIWithAuthentication & object;
5959
if (isObject(model)) {
60-
if (typeof model.basic === 'object')
61-
self.basic = new _AuthenticationPolicyBasic(model.basic as Specification.AuthenticationPolicyBasic);
62-
if (typeof model.bearer === 'object')
63-
self.bearer = new _AuthenticationPolicyBearer(model.bearer as Specification.AuthenticationPolicyBearer);
64-
if (typeof model.oauth2 === 'object')
65-
self.oauth2 = new _AuthenticationPolicyOauth2(model.oauth2 as Specification.AuthenticationPolicyOauth2);
60+
if (typeof (model as { [k: string]: unknown; basic: Specification.AuthenticationPolicyBasic }).basic === 'object')
61+
(self as { [k: string]: unknown; basic: Specification.AuthenticationPolicyBasic }).basic =
62+
new _AuthenticationPolicyBasic(
63+
(model as { [k: string]: unknown; basic: Specification.AuthenticationPolicyBasic })
64+
.basic as Specification.AuthenticationPolicyBasic,
65+
);
66+
if (
67+
typeof (model as { [k: string]: unknown; bearer: Specification.AuthenticationPolicyBearer }).bearer === 'object'
68+
)
69+
(self as { [k: string]: unknown; bearer: Specification.AuthenticationPolicyBearer }).bearer =
70+
new _AuthenticationPolicyBearer(
71+
(model as { [k: string]: unknown; bearer: Specification.AuthenticationPolicyBearer })
72+
.bearer as Specification.AuthenticationPolicyBearer,
73+
);
74+
if (
75+
typeof (model as { [k: string]: unknown; oauth2: Specification.AuthenticationPolicyOauth2 }).oauth2 === 'object'
76+
)
77+
(self as { [k: string]: unknown; oauth2: Specification.AuthenticationPolicyOauth2 }).oauth2 =
78+
new _AuthenticationPolicyOauth2(
79+
(model as { [k: string]: unknown; oauth2: Specification.AuthenticationPolicyOauth2 })
80+
.oauth2 as Specification.AuthenticationPolicyOauth2,
81+
);
6682
}
6783
getLifecycleHooks('CallAsyncAPIWithAuthentication')?.constructor?.(this);
6884
}

src/lib/generated/classes/call-grpc-with-service-authentication.ts

+22-6
Original file line numberDiff line numberDiff line change
@@ -57,12 +57,28 @@ export class CallGRPCWithServiceAuthentication extends ObjectHydrator<Specificat
5757
super(model);
5858
const self = this as unknown as Specification.CallGRPCWithServiceAuthentication & object;
5959
if (isObject(model)) {
60-
if (typeof model.basic === 'object')
61-
self.basic = new _AuthenticationPolicyBasic(model.basic as Specification.AuthenticationPolicyBasic);
62-
if (typeof model.bearer === 'object')
63-
self.bearer = new _AuthenticationPolicyBearer(model.bearer as Specification.AuthenticationPolicyBearer);
64-
if (typeof model.oauth2 === 'object')
65-
self.oauth2 = new _AuthenticationPolicyOauth2(model.oauth2 as Specification.AuthenticationPolicyOauth2);
60+
if (typeof (model as { [k: string]: unknown; basic: Specification.AuthenticationPolicyBasic }).basic === 'object')
61+
(self as { [k: string]: unknown; basic: Specification.AuthenticationPolicyBasic }).basic =
62+
new _AuthenticationPolicyBasic(
63+
(model as { [k: string]: unknown; basic: Specification.AuthenticationPolicyBasic })
64+
.basic as Specification.AuthenticationPolicyBasic,
65+
);
66+
if (
67+
typeof (model as { [k: string]: unknown; bearer: Specification.AuthenticationPolicyBearer }).bearer === 'object'
68+
)
69+
(self as { [k: string]: unknown; bearer: Specification.AuthenticationPolicyBearer }).bearer =
70+
new _AuthenticationPolicyBearer(
71+
(model as { [k: string]: unknown; bearer: Specification.AuthenticationPolicyBearer })
72+
.bearer as Specification.AuthenticationPolicyBearer,
73+
);
74+
if (
75+
typeof (model as { [k: string]: unknown; oauth2: Specification.AuthenticationPolicyOauth2 }).oauth2 === 'object'
76+
)
77+
(self as { [k: string]: unknown; oauth2: Specification.AuthenticationPolicyOauth2 }).oauth2 =
78+
new _AuthenticationPolicyOauth2(
79+
(model as { [k: string]: unknown; oauth2: Specification.AuthenticationPolicyOauth2 })
80+
.oauth2 as Specification.AuthenticationPolicyOauth2,
81+
);
6682
}
6783
getLifecycleHooks('CallGRPCWithServiceAuthentication')?.constructor?.(this);
6884
}

src/lib/generated/classes/call-open-api-with-authentication.ts

+22-6
Original file line numberDiff line numberDiff line change
@@ -57,12 +57,28 @@ export class CallOpenAPIWithAuthentication extends ObjectHydrator<Specification.
5757
super(model);
5858
const self = this as unknown as Specification.CallOpenAPIWithAuthentication & object;
5959
if (isObject(model)) {
60-
if (typeof model.basic === 'object')
61-
self.basic = new _AuthenticationPolicyBasic(model.basic as Specification.AuthenticationPolicyBasic);
62-
if (typeof model.bearer === 'object')
63-
self.bearer = new _AuthenticationPolicyBearer(model.bearer as Specification.AuthenticationPolicyBearer);
64-
if (typeof model.oauth2 === 'object')
65-
self.oauth2 = new _AuthenticationPolicyOauth2(model.oauth2 as Specification.AuthenticationPolicyOauth2);
60+
if (typeof (model as { [k: string]: unknown; basic: Specification.AuthenticationPolicyBasic }).basic === 'object')
61+
(self as { [k: string]: unknown; basic: Specification.AuthenticationPolicyBasic }).basic =
62+
new _AuthenticationPolicyBasic(
63+
(model as { [k: string]: unknown; basic: Specification.AuthenticationPolicyBasic })
64+
.basic as Specification.AuthenticationPolicyBasic,
65+
);
66+
if (
67+
typeof (model as { [k: string]: unknown; bearer: Specification.AuthenticationPolicyBearer }).bearer === 'object'
68+
)
69+
(self as { [k: string]: unknown; bearer: Specification.AuthenticationPolicyBearer }).bearer =
70+
new _AuthenticationPolicyBearer(
71+
(model as { [k: string]: unknown; bearer: Specification.AuthenticationPolicyBearer })
72+
.bearer as Specification.AuthenticationPolicyBearer,
73+
);
74+
if (
75+
typeof (model as { [k: string]: unknown; oauth2: Specification.AuthenticationPolicyOauth2 }).oauth2 === 'object'
76+
)
77+
(self as { [k: string]: unknown; oauth2: Specification.AuthenticationPolicyOauth2 }).oauth2 =
78+
new _AuthenticationPolicyOauth2(
79+
(model as { [k: string]: unknown; oauth2: Specification.AuthenticationPolicyOauth2 })
80+
.oauth2 as Specification.AuthenticationPolicyOauth2,
81+
);
6682
}
6783
getLifecycleHooks('CallOpenAPIWithAuthentication')?.constructor?.(this);
6884
}

src/lib/generated/classes/call-task.ts

+16-4
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,22 @@ export class CallTask extends ObjectHydrator<Specification.CallTask> {
5757
super(model);
5858
const self = this as unknown as Specification.CallTask & object;
5959
if (isObject(model)) {
60-
if (typeof model.input === 'object') self.input = new _Input(model.input as Specification.Input);
61-
if (typeof model.output === 'object') self.output = new _Output(model.output as Specification.Output);
62-
if (typeof model.export === 'object') self.export = new _Export(model.export as Specification.Export);
63-
if (typeof model.timeout === 'object') self.timeout = new _Timeout(model.timeout as Specification.Timeout);
60+
if (typeof (model as Specification.TaskBase).input === 'object')
61+
(self as Specification.TaskBase).input = new _Input(
62+
(model as Specification.TaskBase).input as Specification.Input,
63+
);
64+
if (typeof (model as Specification.TaskBase).output === 'object')
65+
(self as Specification.TaskBase).output = new _Output(
66+
(model as Specification.TaskBase).output as Specification.Output,
67+
);
68+
if (typeof (model as Specification.TaskBase).export === 'object')
69+
(self as Specification.TaskBase).export = new _Export(
70+
(model as Specification.TaskBase).export as Specification.Export,
71+
);
72+
if (typeof (model as Specification.TaskBase).timeout === 'object')
73+
(self as Specification.TaskBase).timeout = new _Timeout(
74+
(model as Specification.TaskBase).timeout as Specification.Timeout,
75+
);
6476
}
6577
getLifecycleHooks('CallTask')?.constructor?.(this);
6678
}

src/lib/generated/classes/endpoint-authentication.ts

+22-6
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,28 @@ export class EndpointAuthentication extends ObjectHydrator<Specification.Endpoin
5656
super(model);
5757
const self = this as unknown as Specification.EndpointAuthentication & object;
5858
if (isObject(model)) {
59-
if (typeof model.basic === 'object')
60-
self.basic = new _AuthenticationPolicyBasic(model.basic as Specification.AuthenticationPolicyBasic);
61-
if (typeof model.bearer === 'object')
62-
self.bearer = new _AuthenticationPolicyBearer(model.bearer as Specification.AuthenticationPolicyBearer);
63-
if (typeof model.oauth2 === 'object')
64-
self.oauth2 = new _AuthenticationPolicyOauth2(model.oauth2 as Specification.AuthenticationPolicyOauth2);
59+
if (typeof (model as { [k: string]: unknown; basic: Specification.AuthenticationPolicyBasic }).basic === 'object')
60+
(self as { [k: string]: unknown; basic: Specification.AuthenticationPolicyBasic }).basic =
61+
new _AuthenticationPolicyBasic(
62+
(model as { [k: string]: unknown; basic: Specification.AuthenticationPolicyBasic })
63+
.basic as Specification.AuthenticationPolicyBasic,
64+
);
65+
if (
66+
typeof (model as { [k: string]: unknown; bearer: Specification.AuthenticationPolicyBearer }).bearer === 'object'
67+
)
68+
(self as { [k: string]: unknown; bearer: Specification.AuthenticationPolicyBearer }).bearer =
69+
new _AuthenticationPolicyBearer(
70+
(model as { [k: string]: unknown; bearer: Specification.AuthenticationPolicyBearer })
71+
.bearer as Specification.AuthenticationPolicyBearer,
72+
);
73+
if (
74+
typeof (model as { [k: string]: unknown; oauth2: Specification.AuthenticationPolicyOauth2 }).oauth2 === 'object'
75+
)
76+
(self as { [k: string]: unknown; oauth2: Specification.AuthenticationPolicyOauth2 }).oauth2 =
77+
new _AuthenticationPolicyOauth2(
78+
(model as { [k: string]: unknown; oauth2: Specification.AuthenticationPolicyOauth2 })
79+
.oauth2 as Specification.AuthenticationPolicyOauth2,
80+
);
6581
}
6682
getLifecycleHooks('EndpointAuthentication')?.constructor?.(this);
6783
}

src/lib/generated/classes/event-consumption-strategy.ts

+16-5
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,22 @@ export class EventConsumptionStrategy extends ObjectHydrator<Specification.Event
5656
super(model);
5757
const self = this as unknown as Specification.EventConsumptionStrategy & object;
5858
if (isObject(model)) {
59-
if (typeof model.all === 'object')
60-
self.all = new _EventConsumptionStrategyAll(model.all as Specification.EventConsumptionStrategyAll);
61-
if (typeof model.any === 'object')
62-
self.any = new _EventConsumptionStrategyAny(model.any as Specification.EventConsumptionStrategyAny);
63-
if (typeof model.one === 'object') self.one = new _EventFilter(model.one as Specification.EventFilter);
59+
if (typeof (model as { [k: string]: unknown; all: Specification.EventConsumptionStrategyAll }).all === 'object')
60+
(self as { [k: string]: unknown; all: Specification.EventConsumptionStrategyAll }).all =
61+
new _EventConsumptionStrategyAll(
62+
(model as { [k: string]: unknown; all: Specification.EventConsumptionStrategyAll })
63+
.all as Specification.EventConsumptionStrategyAll,
64+
);
65+
if (typeof (model as { [k: string]: unknown; any: Specification.EventConsumptionStrategyAny }).any === 'object')
66+
(self as { [k: string]: unknown; any: Specification.EventConsumptionStrategyAny }).any =
67+
new _EventConsumptionStrategyAny(
68+
(model as { [k: string]: unknown; any: Specification.EventConsumptionStrategyAny })
69+
.any as Specification.EventConsumptionStrategyAny,
70+
);
71+
if (typeof (model as { [k: string]: unknown; one: Specification.EventFilter }).one === 'object')
72+
(self as { [k: string]: unknown; one: Specification.EventFilter }).one = new _EventFilter(
73+
(model as { [k: string]: unknown; one: Specification.EventFilter }).one as Specification.EventFilter,
74+
);
6475
}
6576
getLifecycleHooks('EventConsumptionStrategy')?.constructor?.(this);
6677
}

src/lib/generated/classes/external-resource-authentication.ts

+22-6
Original file line numberDiff line numberDiff line change
@@ -57,12 +57,28 @@ export class ExternalResourceAuthentication extends ObjectHydrator<Specification
5757
super(model);
5858
const self = this as unknown as Specification.ExternalResourceAuthentication & object;
5959
if (isObject(model)) {
60-
if (typeof model.basic === 'object')
61-
self.basic = new _AuthenticationPolicyBasic(model.basic as Specification.AuthenticationPolicyBasic);
62-
if (typeof model.bearer === 'object')
63-
self.bearer = new _AuthenticationPolicyBearer(model.bearer as Specification.AuthenticationPolicyBearer);
64-
if (typeof model.oauth2 === 'object')
65-
self.oauth2 = new _AuthenticationPolicyOauth2(model.oauth2 as Specification.AuthenticationPolicyOauth2);
60+
if (typeof (model as { [k: string]: unknown; basic: Specification.AuthenticationPolicyBasic }).basic === 'object')
61+
(self as { [k: string]: unknown; basic: Specification.AuthenticationPolicyBasic }).basic =
62+
new _AuthenticationPolicyBasic(
63+
(model as { [k: string]: unknown; basic: Specification.AuthenticationPolicyBasic })
64+
.basic as Specification.AuthenticationPolicyBasic,
65+
);
66+
if (
67+
typeof (model as { [k: string]: unknown; bearer: Specification.AuthenticationPolicyBearer }).bearer === 'object'
68+
)
69+
(self as { [k: string]: unknown; bearer: Specification.AuthenticationPolicyBearer }).bearer =
70+
new _AuthenticationPolicyBearer(
71+
(model as { [k: string]: unknown; bearer: Specification.AuthenticationPolicyBearer })
72+
.bearer as Specification.AuthenticationPolicyBearer,
73+
);
74+
if (
75+
typeof (model as { [k: string]: unknown; oauth2: Specification.AuthenticationPolicyOauth2 }).oauth2 === 'object'
76+
)
77+
(self as { [k: string]: unknown; oauth2: Specification.AuthenticationPolicyOauth2 }).oauth2 =
78+
new _AuthenticationPolicyOauth2(
79+
(model as { [k: string]: unknown; oauth2: Specification.AuthenticationPolicyOauth2 })
80+
.oauth2 as Specification.AuthenticationPolicyOauth2,
81+
);
6682
}
6783
getLifecycleHooks('ExternalResourceAuthentication')?.constructor?.(this);
6884
}

src/lib/generated/classes/run-task-run.ts

+19-6
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,25 @@ export class RunTaskRun extends ObjectHydrator<Specification.RunTaskRun> {
5656
super(model);
5757
const self = this as unknown as Specification.RunTaskRun & object;
5858
if (isObject(model)) {
59-
if (typeof model.container === 'object')
60-
self.container = new _RunTaskRunContainer(model.container as Specification.RunTaskRunContainer);
61-
if (typeof model.shell === 'object')
62-
self.shell = new _RunTaskRunShell(model.shell as Specification.RunTaskRunShell);
63-
if (typeof model.workflow === 'object')
64-
self.workflow = new _RunTaskRunWorkflow(model.workflow as Specification.RunTaskRunWorkflow);
59+
if (
60+
typeof (model as { [k: string]: unknown; container: Specification.RunTaskRunContainer }).container === 'object'
61+
)
62+
(self as { [k: string]: unknown; container: Specification.RunTaskRunContainer }).container =
63+
new _RunTaskRunContainer(
64+
(model as { [k: string]: unknown; container: Specification.RunTaskRunContainer })
65+
.container as Specification.RunTaskRunContainer,
66+
);
67+
if (typeof (model as { [k: string]: unknown; shell: Specification.RunTaskRunShell }).shell === 'object')
68+
(self as { [k: string]: unknown; shell: Specification.RunTaskRunShell }).shell = new _RunTaskRunShell(
69+
(model as { [k: string]: unknown; shell: Specification.RunTaskRunShell })
70+
.shell as Specification.RunTaskRunShell,
71+
);
72+
if (typeof (model as { [k: string]: unknown; workflow: Specification.RunTaskRunWorkflow }).workflow === 'object')
73+
(self as { [k: string]: unknown; workflow: Specification.RunTaskRunWorkflow }).workflow =
74+
new _RunTaskRunWorkflow(
75+
(model as { [k: string]: unknown; workflow: Specification.RunTaskRunWorkflow })
76+
.workflow as Specification.RunTaskRunWorkflow,
77+
);
6578
}
6679
getLifecycleHooks('RunTaskRun')?.constructor?.(this);
6780
}

0 commit comments

Comments
 (0)