{"version":3,"sources":["../../../src/services/pathname-service.ts"],"names":["path"],"mappings":"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","file":"pathname-service.cjs","sourcesContent":["import path from 'path';\nimport { FrontmatterMetadata } from '../types.js';\nimport { ResolvedConfig } from '../utils/config.js';\nimport { IntentService } from './intent-service.js';\n\nexport interface ParsedPathname {\n  type: string;\n  id: string;\n  extension?: string;\n  active?: boolean;\n  state?: string;\n}\n\nexport interface FileLocation {\n  dirname: string;\n  basename: string;\n}\n\n/**\n * Service for path manipulation and location determination.\n * Does NOT handle any filesystem operations.\n */\nexport class PathnameService {\n  constructor(\n    private config: ResolvedConfig,\n    private intentService: IntentService\n  ) {}\n\n  // Public getter for config\n  getConfig(): ResolvedConfig {\n    return this.config;\n  }\n\n  // Core Path Operations\n  deriveFileLocation(metadata: FrontmatterMetadata): FileLocation {\n    const interpretation = this.intentService.interpretIntent({\n      pathname: '',  // Empty pathname since we're just interpreting metadata\n      metadata\n    });\n\n    // Always return relative paths by stripping any leading slashes\n    const dirname = interpretation.targetLocation.dirname.replace(/^\\/+/, '');\n    const basename = interpretation.targetLocation.basename;\n\n    return {\n      dirname,\n      basename\n    };\n  }\n\n  joinPath(...parts: string[]): string {\n    // Ensure all parts are relative paths by removing any leading slashes\n    const relativeParts = parts.map(part => part.replace(/^\\/+/, ''));\n    return path.join(...relativeParts);\n  }\n\n  resolvePath(pathname: string, from?: string): string {\n    // Always work with relative paths\n    const relativePath = pathname.replace(/^\\/+/, '');\n    const relativeFrom = from?.replace(/^\\/+/, '') || '';\n    \n    // If from is provided, resolve relative to it, otherwise just normalize the path\n    return from ? path.join(relativeFrom, relativePath) : relativePath;\n  }\n\n  toCanonicalPath(pathname: string): string {\n    // Ensure we're working with a relative path\n    const relativePath = pathname.replace(/^\\/+/, '');\n    return path.normalize(relativePath);\n  }\n\n  // Directory Structure\n  getActivityDirectories(): string[] {\n    const dirs = [\n      this.config.inbox_dir || 'inbox',\n      this.config.issues_dir || 'issues'\n    ];\n\n    // Add active state directories\n    for (const state of this.config.active_states) {\n      if (state !== 'inbox') {\n        dirs.push(path.join(this.config.issues_dir || 'issues', `_${state}`));\n      }\n    }\n\n    // Add type directories only for types that were explicitly configured\n    // Note: We use config.types_list directly since it's no longer modified by IntentService\n    for (const type of this.config.types_list) {\n      dirs.push(path.join(this.config.issues_dir || 'issues', type));\n    }\n\n    return dirs;\n  }\n\n  getStateFullPath(state: string): string {\n    if (state === 'inbox') {\n      return this.config.inbox_dir || 'inbox';\n    }\n    return path.join(this.config.issues_dir || 'issues', `_${state}`);\n  }\n\n  getTypeDirs(): string[] {\n    return this.config.types_list.map(type => \n      path.join(this.config.issues_dir || 'issues', type)\n    );\n  }\n\n  // Path Parsing\n  parsePathname(pathname: string): ParsedPathname | null {\n    const parts = pathname.split('/');\n    const dirname = parts.slice(0, -1).join('/');\n    const basename = parts[parts.length - 1];\n\n    // Check if in active state directory\n    const isInActiveStateDir = parts.some(part => part.startsWith('_'));\n    const activeState = isInActiveStateDir ? parts.find(part => part.startsWith('_'))?.substring(1) : undefined;\n\n    // Match type and id from basename\n    const match = basename.match(/^(?:([a-zA-Z0-9]+)-)?([a-zA-Z0-9]+)-([a-zA-Z0-9]+)\\..*$/i);\n    if (!match) {\n      // Special case for filenames without extension\n      if (basename.match(/^[a-zA-Z0-9]+$/i)) {\n        return {\n          id: basename,\n          type: '',\n          active: this.isInboxDirectory(dirname)\n        };\n      }\n      return null;\n    }\n\n    const prefix = match[1];\n    const type = match[2];\n    const id = match[3];\n    const extension = path.extname(basename);\n\n    // If in active state directory, use that state\n    if (activeState) {\n      return {\n        type,\n        id,\n        extension,\n        active: true,\n        state: activeState\n      };\n    }\n\n    // If prefix is an inactive reason, use that\n    if (prefix && this.config.inactive_reasons.includes(prefix)) {\n      return {\n        type,\n        id,\n        extension,\n        active: false,\n        state: prefix\n      };\n    }\n\n    // If in inbox directory, mark as active\n    if (this.isInboxDirectory(dirname)) {\n      return {\n        type,\n        id,\n        extension,\n        active: true,\n        state: 'inbox'\n      };\n    }\n\n    // Default case - in type directory means inactive\n    return {\n      type,\n      id,\n      extension,\n      active: false\n    };\n  }\n\n  parseBasename(basename: string): ParsedPathname | null {\n    // Match state/reason, type and id from basename\n    const match = basename.match(/^([a-zA-Z0-9]+)-([a-zA-Z0-9]+)-([a-zA-Z0-9]+)\\..*$/i);\n    if (match) {\n      const prefix = match[1];\n      const type = match[2];\n      const id = match[3];\n\n      // If prefix is a known inactive reason, treat it as such\n      if (this.config.inactive_reasons.includes(prefix)) {\n        return {\n          state: prefix,\n          type,\n          id,\n          active: false\n        };\n      }\n\n      // If prefix is a known active state, treat it as such\n      if (this.config.active_states.includes(prefix)) {\n        return {\n          state: prefix,\n          type,\n          id,\n          active: true\n        };\n      }\n\n      // Otherwise treat first part as type\n      return {\n        type: prefix,\n        id: type\n      };\n    }\n\n    // Match type and id without state/reason\n    const simpleMatch = basename.match(/^([a-zA-Z0-9]+)-([a-zA-Z0-9]+)\\..*$/i);\n    if (simpleMatch) {\n      return {\n        type: simpleMatch[1],\n        id: simpleMatch[2]\n      };\n    }\n\n    // Special case for filenames without extension\n    if (basename.match(/^[a-zA-Z0-9]+$/i)) {\n      return {\n        id: basename,\n        type: ''\n      };\n    }\n\n    return null;\n  }\n\n  // Path Generation\n  getNewPath(pathname: string, metadata: FrontmatterMetadata): string {\n    const location = this.deriveFileLocation(metadata);\n    return this.joinPath(location.dirname, location.basename);\n  }\n\n  // Directory Type Checks\n  isInboxDirectory(dirname: string): boolean {\n    return dirname.toLowerCase() === (this.config.inbox_dir || 'inbox').toLowerCase();\n  }\n\n  isTypeDirectory(dirname: string): boolean {\n    return this.config.types_list.some(type => type.toLowerCase() === dirname.toLowerCase());\n  }\n\n  // Path Matching\n  matchesId(filename: string, id: string): boolean {\n    const parsed = this.parsePathname(filename);\n    return parsed ? parsed.id.toLowerCase() === id.toLowerCase() : false;\n  }\n\n  // Search Path Generation\n  getPossiblePathsForId(id: string): string[] {\n    const paths: string[] = [\n      this.config.inbox_dir || 'inbox',\n      this.config.issues_dir || 'issues',\n      ...this.config.active_states\n        .filter(state => state !== 'inbox')\n        .map(state => path.join(this.config.issues_dir || 'issues', `_${state}`))\n    ];\n\n    // Add type directories only for types that were explicitly configured\n    // Note: We use config.types_list directly since it's no longer modified by IntentService\n    for (const type of this.config.types_list) {\n      paths.push(path.join(this.config.issues_dir || 'issues', type));\n    }\n\n    return paths;\n  }\n\n  getPossiblePathsForType(type: string): string[] {\n    return [\n      this.config.inbox_dir || 'inbox',\n      ...this.config.active_states\n        .filter(state => state !== 'inbox')\n        .map(state => path.join(this.config.issues_dir || 'issues', `_${state}`)),\n      path.join(this.config.issues_dir || 'issues', type)\n    ];\n  }\n\n  getPossiblePathsForState(state: string): string[] {\n    if (state === 'inbox') {\n      return [this.config.inbox_dir || 'inbox'];\n    }\n\n    // For active states, look in _state directory\n    if (this.config.active_states.includes(state)) {\n      return [path.join(this.config.issues_dir || 'issues', `_${state}`)];\n    }\n\n    // For inactive states (reasons), look in each type directory\n    if (this.config.inactive_reasons.includes(state)) {\n      return this.config.types_list.map(type => \n        path.join(this.config.issues_dir || 'issues', type)\n      );\n    }\n\n    // For unknown states, look everywhere\n    return this.getActivityDirectories();\n  }\n\n  /**\n   * Get the canonical path where a NEW file with this ID should be located.\n   * This returns the default location for new files (inbox).\n   * \n   * To find an existing file by ID, use IssueService.findFileById() instead,\n   * as that method handles all the necessary validation and error checking.\n   * \n   * @param id The ID to get the path for\n   * @returns The canonical path where a new file with this ID should be created\n   */\n  getPathForId(id: string): string {\n    // By default, new IDs go to inbox\n    return path.join(this.config.inbox_dir || 'inbox', `${id}.md`);\n  }\n}"]}