* add duckdb-ui-client & other ts pkgs * workflow fixes * fix working dir * no sparse checkout; specify package.json path * path to pnpm-lock.yaml * add check & build test * workflow step descriptions * use comments & names * one more naming tweak
34 lines
1.0 KiB
TypeScript
34 lines
1.0 KiB
TypeScript
import { displayStringForDuckDBValue } from './conversion/displayStringForDuckDBValue.js';
|
|
import { jsonFromDuckDBValue } from './conversion/jsonFromDuckDBValue.js';
|
|
import { DuckDBStructEntry } from './DuckDBStructEntry.js';
|
|
import { Json } from './Json.js';
|
|
import { SpecialDuckDBValue } from './SpecialDuckDBValue.js';
|
|
|
|
export class DuckDBStructValue extends SpecialDuckDBValue {
|
|
public readonly entries: readonly DuckDBStructEntry[];
|
|
|
|
constructor(entries: readonly DuckDBStructEntry[]) {
|
|
super();
|
|
this.entries = entries;
|
|
}
|
|
|
|
public toDuckDBString(): string {
|
|
const entryStrings = this.entries.map(
|
|
({ key, value }) =>
|
|
`${displayStringForDuckDBValue(key)}: ${displayStringForDuckDBValue(
|
|
value,
|
|
)}`,
|
|
);
|
|
return `{${entryStrings.join(', ')}}`;
|
|
}
|
|
|
|
public toJson(): Json {
|
|
const result: Json = {};
|
|
for (const { key, value } of this.entries) {
|
|
const keyString = displayStringForDuckDBValue(key);
|
|
result[keyString] = jsonFromDuckDBValue(value);
|
|
}
|
|
return result;
|
|
}
|
|
}
|