@workos/oagen-emitters 0.7.1 → 0.7.2
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/.release-please-manifest.json +1 -1
- package/CHANGELOG.md +7 -0
- package/dist/index.mjs +1 -1
- package/dist/{plugin-h8Onp2Ma.mjs → plugin-CGPujyaL.mjs} +37 -3
- package/dist/plugin-CGPujyaL.mjs.map +1 -0
- package/dist/plugin.mjs +1 -1
- package/package.json +1 -1
- package/src/php/models.ts +37 -2
- package/dist/plugin-h8Onp2Ma.mjs.map +0 -1
package/dist/plugin.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as workosEmittersPlugin } from "./plugin-
|
|
1
|
+
import { t as workosEmittersPlugin } from "./plugin-CGPujyaL.mjs";
|
|
2
2
|
export { workosEmittersPlugin };
|
package/package.json
CHANGED
package/src/php/models.ts
CHANGED
|
@@ -133,6 +133,31 @@ export function generateModels(models: Model[], ctx: EmitterContext): GeneratedF
|
|
|
133
133
|
return files;
|
|
134
134
|
}
|
|
135
135
|
|
|
136
|
+
/**
|
|
137
|
+
* Resolve a degenerate union to a single TypeRef when possible.
|
|
138
|
+
* - allOf: PHP collapses to the first variant (mirrors `mapTypeRef`).
|
|
139
|
+
* - oneOf/anyOf where every variant has the same generated PHP type: collapse
|
|
140
|
+
* to that variant (e.g. discriminated unions whose branches the IR pinned to
|
|
141
|
+
* one model name).
|
|
142
|
+
* Returns null when the union is genuinely polymorphic.
|
|
143
|
+
*/
|
|
144
|
+
function resolveDegenerateUnion(ref: TypeRef): TypeRef | null {
|
|
145
|
+
if (ref.kind !== 'union') return null;
|
|
146
|
+
if (ref.compositionKind === 'allOf') return ref.variants[0] ?? null;
|
|
147
|
+
if (ref.variants.length === 0) return null;
|
|
148
|
+
const signature = (v: TypeRef): string => {
|
|
149
|
+
if (v.kind === 'model') return `model:${v.name}`;
|
|
150
|
+
if (v.kind === 'enum') return `enum:${v.name}`;
|
|
151
|
+
return `kind:${v.kind}`;
|
|
152
|
+
};
|
|
153
|
+
const first = ref.variants[0];
|
|
154
|
+
const firstSig = signature(first);
|
|
155
|
+
for (const v of ref.variants) {
|
|
156
|
+
if (signature(v) !== firstSig) return null;
|
|
157
|
+
}
|
|
158
|
+
return first;
|
|
159
|
+
}
|
|
160
|
+
|
|
136
161
|
/**
|
|
137
162
|
* Generate the fromArray accessor expression for a field.
|
|
138
163
|
*/
|
|
@@ -194,8 +219,11 @@ function generateFromArrayValue(ref: TypeRef, accessor: string): string {
|
|
|
194
219
|
return accessor;
|
|
195
220
|
case 'nullable':
|
|
196
221
|
return generateFromArrayValue(ref.inner, accessor);
|
|
197
|
-
case 'union':
|
|
222
|
+
case 'union': {
|
|
223
|
+
const resolved = resolveDegenerateUnion(ref);
|
|
224
|
+
if (resolved) return generateFromArrayValue(resolved, accessor);
|
|
198
225
|
return accessor;
|
|
226
|
+
}
|
|
199
227
|
case 'map':
|
|
200
228
|
return accessor;
|
|
201
229
|
case 'literal':
|
|
@@ -225,6 +253,10 @@ function isComplexType(ref: TypeRef): boolean {
|
|
|
225
253
|
return isComplexType(ref.items);
|
|
226
254
|
case 'nullable':
|
|
227
255
|
return isComplexType(ref.inner);
|
|
256
|
+
case 'union': {
|
|
257
|
+
const resolved = resolveDegenerateUnion(ref);
|
|
258
|
+
return resolved ? isComplexType(resolved) : false;
|
|
259
|
+
}
|
|
228
260
|
default:
|
|
229
261
|
return false;
|
|
230
262
|
}
|
|
@@ -266,8 +298,11 @@ function generateToArrayValue(ref: TypeRef, accessor: string, nullable = false):
|
|
|
266
298
|
return generateToArrayValue(ref.inner, accessor, true);
|
|
267
299
|
case 'map':
|
|
268
300
|
return accessor;
|
|
269
|
-
case 'union':
|
|
301
|
+
case 'union': {
|
|
302
|
+
const resolved = resolveDegenerateUnion(ref);
|
|
303
|
+
if (resolved) return generateToArrayValue(resolved, accessor, nullable);
|
|
270
304
|
return accessor;
|
|
305
|
+
}
|
|
271
306
|
case 'literal':
|
|
272
307
|
return accessor;
|
|
273
308
|
}
|