{"version":3,"file":"index.cjs","sources":["../src/config/ProjectConfig.ts","../src/project/deepDefaults.ts","../src/project/FilesystemHost.ts","../src/project/resolveComponents.ts","../src/project/resolveDirectives.ts","../src/project/VueProject.ts","../src/index.ts"],"sourcesContent":["import type { ImportSource } from './ImportSource'\nimport type { ProjectPreferences } from './ProjectPreferences'\n\nexport interface ProjectConfig {\n  globalComponents?: Array<string | Record<string, string | ImportSource>>\n  globalDirectives?: Array<string | Record<string, string | ImportSource>>\n  preferences?: Partial<ProjectPreferences>\n}\n\nexport interface ResolvedProjectConfig {\n  globalComponents: Record<string, ImportSource[]>\n  globalDirectives: Record<string, ImportSource[]>\n  preferences: ProjectPreferences\n}\n\nexport const DEFAULT_PROJECT_CONFIG: ResolvedProjectConfig = {\n  globalComponents: {},\n  globalDirectives: {},\n  preferences: {\n    componentsDirectories: ['src/components'],\n    script: { mode: 'setup', language: 'js' },\n    style: { language: 'css' },\n    template: {\n      directiveSyntax: 'shorthand',\n      propCase: 'camel',\n      tagCase: 'auto',\n    },\n  },\n}\n","import type { DeepPartial } from '@vuedx/shared'\n\nexport function deepDefaults<T extends object>(a: T, b?: DeepPartial<T>): T\nexport function deepDefaults(a: any, b: any): any {\n  if (b == null) return a\n  Object.keys(b).forEach((key) => {\n    const valueA = a[key]\n    const valueB = b[key]\n\n    if (valueB === undefined) return\n    if (valueA == null || Array.isArray(valueB)) {\n      a[key] = valueB\n    } else if (typeof valueA === 'object' && typeof valueB === 'object') {\n      a[key] = deepDefaults(valueA, valueB)\n    } else {\n      a[key] = valueB\n    }\n  })\n\n  return a\n}\n","import * as Path from 'path'\nimport { toPosixPath } from '@vuedx/shared'\n\nexport interface FileWatcher {\n  close(): void\n}\nexport enum FileWatcherEventKind {\n  Created = 0,\n  Changed = 1,\n  Deleted = 2,\n}\nexport type FileWatcherCallback = (\n  fileName: string,\n  eventKind: FileWatcherEventKind,\n) => void\nexport type DirectoryWatcherCallback = (fileName: string) => void\nexport interface FilesystemHost {\n  readDirectory(rootDir: string, extensions: string[]): string[]\n  fileExists(path: string): boolean\n  readFile(path: string): string | undefined\n  watchFile(path: string, callback: FileWatcherCallback): FileWatcher\n  watchDirectory(\n    path: string,\n    callback: DirectoryWatcherCallback,\n    recursive?: boolean,\n  ): FileWatcher\n}\n\nexport function findNearestFile(\n  fs: FilesystemHost,\n  dir: string,\n  name: string,\n): string | null {\n  let cur = toPosixPath(dir)\n  while (cur.length > 1) {\n    const fileName = Path.posix.resolve(cur, name)\n    if (fs.fileExists(fileName)) return fileName\n    cur = Path.posix.dirname(cur)\n  }\n\n  return null\n}\n","import { getComponentName, isString } from '@vuedx/shared'\nimport Path from 'path'\nimport type { ImportSource } from '../config/ImportSource'\n\nexport function resolveComponents(\n  rootDir: string,\n  resources: Array<string | Record<string, string | ImportSource>>,\n): Record<string, ImportSource[]> {\n  const components: Record<string, ImportSource[]> = {}\n\n  const add = (name: string, source: ImportSource): void => {\n    const sources = components[name] ?? (components[name] = [])\n    if (\n      sources.some(\n        (item) =>\n          item.moduleName === source.moduleName &&\n          item.exportName === source.exportName,\n      )\n    ) {\n      return // duplicate\n    }\n\n    sources.push(source)\n  }\n\n  for (const resource of resources) {\n    if (isString(resource)) {\n      add(getComponentName(resource), {\n        moduleName: resolve(resource),\n      })\n    } else {\n      Object.entries(resource).forEach(([key, value]) => {\n        add(key, isString(value) ? { moduleName: resolve(value) } : value)\n      })\n    }\n  }\n\n  return components\n\n  function resolve(resource: string): string {\n    if (resource.startsWith('.')) return Path.posix.resolve(rootDir, resource)\n    else return resource\n  }\n}\n","import { isString } from '@vuedx/shared'\nimport Path from 'path'\nimport type { ImportSource } from '../config/ImportSource'\n\nexport function resolveDirectives(\n  rootDir: string,\n  resources: Array<string | Record<string, string | ImportSource>>,\n): Record<string, ImportSource[]> {\n  const directives: Record<string, ImportSource[]> = {}\n\n  const add = (name: string, source: ImportSource): void => {\n    const sources = directives[name] ?? (directives[name] = [])\n    if (\n      sources.some(\n        (item) =>\n          item.moduleName === source.moduleName &&\n          item.exportName === source.exportName,\n      )\n    ) {\n      return // duplicate\n    }\n\n    sources.push(source)\n  }\n\n  for (const resource of resources) {\n    if (isString(resource)) {\n      // ~ not supported for directives.\n    } else\n      Object.entries(resource).forEach(([key, value]) => {\n        add(key, isString(value) ? { moduleName: resolve(value) } : value)\n      })\n  }\n\n  return directives\n\n  function resolve(resource: string): string {\n    if (resource.startsWith('.')) return Path.posix.resolve(rootDir, resource)\n    else return resource\n  }\n}\n","import {\n  DEFAULT_PROJECT_CONFIG,\n  ProjectConfig,\n  ResolvedProjectConfig,\n} from '../config/ProjectConfig'\nimport { deepDefaults } from './deepDefaults'\nimport {\n  FilesystemHost,\n  FileWatcher,\n  FileWatcherEventKind,\n  findNearestFile,\n} from './FilesystemHost'\nimport { resolveComponents } from './resolveComponents'\nimport { resolveDirectives } from './resolveDirectives'\nimport JSON5 from 'json5'\nimport * as Path from 'path'\n\nexport class VueProject {\n  static create(fs: FilesystemHost, rootDir: string): VueProject {\n    const projectFile = Path.posix.resolve(rootDir, 'vueconfig.json')\n    const packageFile = findNearestFile(fs, rootDir, 'package.json')\n\n    return new VueProject(\n      fs,\n      rootDir,\n      packageFile,\n      fs.fileExists(projectFile) ? projectFile : null,\n    )\n  }\n\n  private readonly watchers: FileWatcher[] = []\n\n  private _vueVersion: string\n  private _projectVersion: number = 1\n\n  public readonly runtimeFile: string\n\n  public get vueVersion(): string {\n    return this._vueVersion\n  }\n\n  public get projectVersion(): number {\n    return this._projectVersion\n  }\n\n  private constructor(\n    protected readonly fs: FilesystemHost,\n    public readonly rootDir: string,\n    public readonly packageFile: string | null = null,\n    public readonly projectFile: string | null = null,\n  ) {\n    this._vueVersion = '3.2.0'\n    this.runtimeFile = Path.resolve(\n      rootDir,\n      'project.vuedx_project_runtime.d.ts',\n    )\n    this.onPackageFileChange()\n    this.onProjectFileChange()\n\n    if (packageFile != null) {\n      this.watchers.push(\n        fs.watchFile(packageFile, (_fileName, event) => {\n          if (event === FileWatcherEventKind.Changed) {\n            this.onPackageFileChange()\n          }\n        }),\n      )\n    }\n\n    if (projectFile != null) {\n      this.watchers.push(\n        fs.watchFile(projectFile, (_fileName, event) => {\n          if (event === FileWatcherEventKind.Changed) {\n            this.onProjectFileChange()\n          } else if (event === FileWatcherEventKind.Deleted) {\n            this._config = DEFAULT_PROJECT_CONFIG\n          }\n        }),\n      )\n    }\n  }\n\n  private onProjectFileChange(): void {\n    if (this.projectFile == null) return\n\n    const content = this.fs.readFile(this.projectFile)\n    if (content != null) {\n      try {\n        this.setConfig(JSON5.parse(content))\n      } catch (e) {\n        const error = e as Error\n        console.error(\n          `[VueDX] (ProjectConfig) ${error.message} ${error.stack ?? ''}`,\n        )\n      }\n    }\n  }\n\n  private onPackageFileChange(): void {\n    if (this.packageFile == null) return\n\n    const content = this.fs.readFile(this.packageFile)\n    if (content != null) {\n      try {\n        const pkg = JSON.parse(content)\n        this.loadDependencies({\n          ...pkg.devDependencies,\n          ...pkg.dependencies,\n        })\n      } catch (e) {\n        const error = e as Error\n        console.error(\n          `[VueDX] (ProjectConfig) ${error.message} ${error.stack ?? ''}`,\n        )\n      }\n\n      const vueVersion = this._dependencies['vue']\n      if (vueVersion != null) {\n        this._vueVersion = vueVersion\n      }\n    }\n  }\n\n  private loadDependencies(dependencies: Record<string, string>): void {\n    if (this.packageFile == null) return\n    const modulesDir = Path.posix.resolve(\n      Path.posix.dirname(this.packageFile),\n      'node_modules',\n    )\n\n    Object.keys(dependencies).forEach((packageName) => {\n      const fileName = Path.posix.resolve(\n        modulesDir,\n        packageName,\n        'package.json',\n      )\n\n      if (this.fs.fileExists(fileName)) {\n        try {\n          this._dependencies[packageName] = JSON.parse(\n            this.fs.readFile(fileName) ?? '{}',\n          ).version\n        } catch (e) {\n          const error = e as Error\n          console.error(\n            `[VueDX] (ProjectConfig) ${error.message} in ${fileName} ${\n              error.stack ?? ''\n            }`,\n          )\n          this._dependencies[packageName] = '0.0.0'\n        }\n      }\n    })\n  }\n\n  public dispose(): void {\n    this.watchers.forEach((watcher) => watcher.close())\n    this.watchers.length = 0\n  }\n\n  public _dependencies: Record<string, string> = {}\n  public get dependencies(): Readonly<Record<string, string>> {\n    return this._dependencies\n  }\n\n  private _config = DEFAULT_PROJECT_CONFIG\n  public get config(): Readonly<ResolvedProjectConfig> {\n    return this._config\n  }\n\n  private setConfig(config: ProjectConfig): void {\n    this._config = {\n      globalComponents: this._config.globalComponents,\n      globalDirectives: this._config.globalDirectives,\n      preferences: deepDefaults(this._config.preferences, config.preferences),\n    }\n\n    if (config.globalComponents != null) {\n      this._config.globalComponents = resolveComponents(\n        this.rootDir,\n        config.globalComponents,\n      )\n    }\n\n    if (config.globalDirectives != null) {\n      this._config.globalDirectives = resolveDirectives(\n        this.rootDir,\n        config.globalDirectives,\n      )\n    }\n\n    this._projectVersion += 1\n  }\n\n  public get kind(): 'inferred' | 'configured' {\n    return this.projectFile == null ? 'inferred' : 'configured'\n  }\n}\n","export const version = VERSION\nexport type {\n  ProjectConfig,\n  ResolvedProjectConfig,\n} from './config/ProjectConfig'\nexport type { ProjectPreferences } from './config/ProjectPreferences'\nexport type { FilesystemHost } from './project/FilesystemHost'\nexport { VueProject } from './project/VueProject'\n"],"names":["toPosixPath","Path","isString","getComponentName","JSON5"],"mappings":"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"}