- naming/engine: lexer/parser/AST/render for {{ }} / if-elif-else / whitelisted filters
(default pad pad2 upper lower trim replace truncate date join); rejects for/set/attribute/
subscript/call/~/% with line:col errors and 'did you mean' hints
- naming/variables: variable table aligned with MoviePilot names plus ours (cut, airDate,
issue, slotName, libraryRoot ...); buildNamingVars from parsed release + entity + units
- naming/layout: split by literal '/', segment roles (category/root/season/sub/file),
value escaping, reserved names, 255-byte segments, validateNamingTemplate
- naming/defaults: MP default movie/tv + our variety template, v1 syntax upgrade,
entity > root > global override resolution, builtin preview samples
- path/binding: resolveTargetDirectory keeps bound dirs, only unbound segments render;
renderMediaFileName = last segment of the full template; DEFAULT_TEMPLATES = MP v2
- differential: 34 cases vs MP (21 identical, 13 documented deviations)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
19 lines
725 B
TypeScript
19 lines
725 B
TypeScript
export {
|
|
DEFAULT_TEMPLATES,
|
|
type FileNameResult,
|
|
type LibraryRoot,
|
|
type NamingTemplateSet,
|
|
type NewBinding,
|
|
type PathBinding,
|
|
pickNamingTemplate,
|
|
type ResolveTargetInput,
|
|
renderMediaFileName,
|
|
resolveTargetDirectory,
|
|
type TargetDirectoryDecision,
|
|
validateTemplateSet,
|
|
} from "./binding.ts";
|
|
export { detectPathConflicts, type ExistingPath, type PathConflict, type PlannedPath } from "./conflicts.ts";
|
|
export { type MapResult, type PathMapping, toDownloaderPath, toHostPath, validatePathMappings } from "./mapping.ts";
|
|
export { cleanSegment, escapeNamingValue, sanitizeFileName, sanitizeSegment, utf8Length } from "./sanitize.ts";
|
|
export { buildNamingContext, type NamingContext } from "./template.ts";
|