Skip to content

Commit 941b47c

Browse files
committed
fix: Unbounded slice getter returns undefined instead of empty array
1 parent 70b4480 commit 941b47c

1 file changed

Lines changed: 6 additions & 5 deletions

File tree

src/api/writer-generator/typescript/profile-slices.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -246,24 +246,25 @@ export const generateSliceGetters = (
246246
const isUnbounded = sliceDef.array && (sliceDef.max === 0 || sliceDef.max === undefined);
247247

248248
if (isUnbounded) {
249-
// Unbounded slice: return an array
249+
// Unbounded slice: return an array or undefined
250250
const defaultReturn = defaultMode === "raw" ? `${baseType}[]` : `${flatTypeName}[]`;
251251

252252
// Overload signatures
253-
w.lineSM(`public ${getMethodName}(mode: 'flat'): ${flatTypeName}[]`);
254-
w.lineSM(`public ${getMethodName}(mode: 'raw'): ${baseType}[]`);
255-
w.lineSM(`public ${getMethodName}(): ${defaultReturn}`);
253+
w.lineSM(`public ${getMethodName}(mode: 'flat'): ${flatTypeName}[] | undefined`);
254+
w.lineSM(`public ${getMethodName}(mode: 'raw'): ${baseType}[] | undefined`);
255+
w.lineSM(`public ${getMethodName}(): ${defaultReturn} | undefined`);
256256

257257
// Implementation
258258
w.curlyBlock(
259259
[
260260
"public",
261261
getMethodName,
262-
`(mode: 'flat' | 'raw' = '${defaultMode}'): (${flatTypeName} | ${baseType})[]`,
262+
`(mode: 'flat' | 'raw' = '${defaultMode}'): (${flatTypeName} | ${baseType})[] | undefined`,
263263
],
264264
() => {
265265
w.line(`const match = ${matchRef}`);
266266
w.line(`const items = getArraySliceAll(${fieldAccess}, match)`);
267+
w.line("if (items.length === 0) return undefined");
267268
if (sliceDef.typeDiscriminator) {
268269
w.line(`if (mode === 'raw') return items as ${baseType}[]`);
269270
} else {

0 commit comments

Comments
 (0)