Troubleshooting Stega

Troubleshooting Stega Encoding

What is Stega?

Val uses stega encoding to embed metadata into strings. This enables visual editing features in Val Studio by tracking which content corresponds to which location in your Val files.

Decoding Stega Content

If you need to access the raw content without stega encoding, use the `val.raw` function:

import { val } from "@/val.config";
import { fetchVal } from "@/val/val.rsc";
import myContent from "./content.val";

const data = await fetchVal(myContent);
const rawText = val.raw(data.text); // Removes stega encoding

Disabling Stega for Specific Fields

To prevent stega encoding on a specific string field, use the `.raw()` method:

const schema = s.object({
  // This field will have stega encoding
  title: s.string(),
  // This field will NOT have stega encoding
  apiKey: s.string().raw(),
});

Important Notes

Keys of records and objects are never stega-encoded. Only the values of string fields are encoded by default.

Troubleshooting

Issue: Unexpected characters in strings

If you see unexpected invisible characters in your strings, they are likely stega-encoded. Use `val.raw()` to decode them or `.raw()` in the schema to disable encoding.

Issue: String comparisons failing

Stega-encoded strings may not match in direct comparisons. Always decode with `val.raw()` before comparing, or use `.raw()` in the schema for fields that need exact matching (like IDs, API keys, or enum values).

Issue: URLs or paths not working

If URLs or file paths contain stega encoding, they may not work correctly. Use `s.string().raw()` for URL and path fields in your schema.

Issue: External API rejecting data

When sending Val content to external APIs, decode it first with `val.raw()` or mark the field as `.raw()` in the schema to prevent issues with validation or processing.