tscircuit/ti
ti tscircuit library
- Version
- 1.0.198
- License
- unset
- Stars
- 0
system-block-ui/src/rendering/project-zip-options.ts
export const DEFAULT_PROJECT_EXPORT_NAME = "GeneratedSystem";
export interface ProjectZipOptions {
projectName?: string;
}
/** Copy package-owned bytes into the ArrayBuffer shape accepted by Blob. */
export const copyBytesToArrayBuffer = (bytes: Uint8Array): ArrayBuffer => {
const copy = new Uint8Array(bytes.byteLength);
copy.set(bytes);
return copy.buffer;
};
const WINDOWS_RESERVED_FILE_NAME =
/^(?:CON|PRN|AUX|NUL|COM[1-9]|LPT[1-9])(?:\.|$)/i;
/** Produce a portable single-segment filename shared by every ECAD exporter. */
export const getSafeProjectExportName = (
options: ProjectZipOptions = {},
): string => {
const requestedName = options.projectName ?? DEFAULT_PROJECT_EXPORT_NAME;
const safeName = requestedName
.normalize("NFKC")
.trim()
.replace(/[^A-Za-z0-9._-]+/g, "-")
.replace(/-{2,}/g, "-")
.replace(/^[.-]+|[.-]+$/g, "")
.slice(0, 80)
.replace(/[.-]+$/g, "");
if (!safeName) return DEFAULT_PROJECT_EXPORT_NAME;
return WINDOWS_RESERVED_FILE_NAME.test(safeName)
? `project-${safeName}`
: safeName;
};