```ts
/**
 * Renders a text leaf as the letter 's', its length in decimal, a colon, then the text itself.
 * @param text - The text to render.
 * @returns The wire notation for the text.
 * @throws Error if the input is not a string or contains a newline.
 */
export function wireText(text: string): string {
  if (typeof text !== 'string') throw new Error('Input must be a string');
  if (text.includes('\n')) throw new Error('Text cannot contain a newline');
  return `s${text.length}:${text}`;
}

/**
 * Renders any supported value as wire notation.
 * @param value - The value to render.
 * @returns The wire notation for the value.
 * @throws Error if the input is not a text, whole number, or list.
 */
export function wireValue(value: unknown): string {
  if (typeof value === 'string') return wireText(value);
  if (Number.isInteger(value)) return `n${value < 0 ? '-' : ''}${Math.abs(value)};`;
  if (Array.isArray(value)) {
    const elements = value.map(wireValue).join('');
    return `[${elements}]`;
  }
  throw new Error('Input must be a text, whole number, or list');
}
```