| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776 |
- import { invokeTauriCommand } from './helpers/tauri.js';
- import { BaseDirectory } from './fs.js';
- import { isWindows } from './helpers/os-check.js';
- // Copyright 2019-2023 Tauri Programme within The Commons Conservancy
- // SPDX-License-Identifier: Apache-2.0
- // SPDX-License-Identifier: MIT
- /**
- * The path module provides utilities for working with file and directory paths.
- *
- * This package is also accessible with `window.__TAURI__.path` when [`build.withGlobalTauri`](https://tauri.app/v1/api/config/#buildconfig.withglobaltauri) in `tauri.conf.json` is set to `true`.
- *
- * The APIs must be added to [`tauri.allowlist.path`](https://tauri.app/v1/api/config/#allowlistconfig.path) in `tauri.conf.json`:
- * ```json
- * {
- * "tauri": {
- * "allowlist": {
- * "path": {
- * "all": true, // enable all Path APIs
- * }
- * }
- * }
- * }
- * ```
- * It is recommended to allowlist only the APIs you use for optimal bundle size and security.
- * @module
- */
- /**
- * Returns the path to the suggested directory for your app config files.
- *
- * @deprecated since 1.2.0: Will be removed in 2.0.0. Use {@link appConfigDir} or {@link appDataDir} instead.
- * @since 1.0.0
- */
- async function appDir() {
- return appConfigDir();
- }
- /**
- * Returns the path to the suggested directory for your app's config files.
- * Resolves to `${configDir}/${bundleIdentifier}`, where `bundleIdentifier` is the value [`tauri.bundle.identifier`](https://tauri.app/v1/api/config/#bundleconfig.identifier) is configured in `tauri.conf.json`.
- * @example
- * ```typescript
- * import { appConfigDir } from '@tauri-apps/api/path';
- * const appConfigDirPath = await appConfigDir();
- * ```
- *
- * @since 1.2.0
- */
- async function appConfigDir() {
- return invokeTauriCommand({
- __tauriModule: 'Path',
- message: {
- cmd: 'resolvePath',
- path: '',
- directory: BaseDirectory.AppConfig
- }
- });
- }
- /**
- * Returns the path to the suggested directory for your app's data files.
- * Resolves to `${dataDir}/${bundleIdentifier}`, where `bundleIdentifier` is the value [`tauri.bundle.identifier`](https://tauri.app/v1/api/config/#bundleconfig.identifier) is configured in `tauri.conf.json`.
- * @example
- * ```typescript
- * import { appDataDir } from '@tauri-apps/api/path';
- * const appDataDirPath = await appDataDir();
- * ```
- *
- * @since 1.2.0
- */
- async function appDataDir() {
- return invokeTauriCommand({
- __tauriModule: 'Path',
- message: {
- cmd: 'resolvePath',
- path: '',
- directory: BaseDirectory.AppData
- }
- });
- }
- /**
- * Returns the path to the suggested directory for your app's local data files.
- * Resolves to `${localDataDir}/${bundleIdentifier}`, where `bundleIdentifier` is the value [`tauri.bundle.identifier`](https://tauri.app/v1/api/config/#bundleconfig.identifier) is configured in `tauri.conf.json`.
- * @example
- * ```typescript
- * import { appLocalDataDir } from '@tauri-apps/api/path';
- * const appLocalDataDirPath = await appLocalDataDir();
- * ```
- *
- * @since 1.2.0
- */
- async function appLocalDataDir() {
- return invokeTauriCommand({
- __tauriModule: 'Path',
- message: {
- cmd: 'resolvePath',
- path: '',
- directory: BaseDirectory.AppLocalData
- }
- });
- }
- /**
- * Returns the path to the suggested directory for your app's cache files.
- * Resolves to `${cacheDir}/${bundleIdentifier}`, where `bundleIdentifier` is the value [`tauri.bundle.identifier`](https://tauri.app/v1/api/config/#bundleconfig.identifier) is configured in `tauri.conf.json`.
- * @example
- * ```typescript
- * import { appCacheDir } from '@tauri-apps/api/path';
- * const appCacheDirPath = await appCacheDir();
- * ```
- *
- * @since 1.2.0
- */
- async function appCacheDir() {
- return invokeTauriCommand({
- __tauriModule: 'Path',
- message: {
- cmd: 'resolvePath',
- path: '',
- directory: BaseDirectory.AppCache
- }
- });
- }
- /**
- * Returns the path to the user's audio directory.
- *
- * #### Platform-specific
- *
- * - **Linux:** Resolves to [`xdg-user-dirs`](https://www.freedesktop.org/wiki/Software/xdg-user-dirs/)' `XDG_MUSIC_DIR`.
- * - **macOS:** Resolves to `$HOME/Music`.
- * - **Windows:** Resolves to `{FOLDERID_Music}`.
- * @example
- * ```typescript
- * import { audioDir } from '@tauri-apps/api/path';
- * const audioDirPath = await audioDir();
- * ```
- *
- * @since 1.0.0
- */
- async function audioDir() {
- return invokeTauriCommand({
- __tauriModule: 'Path',
- message: {
- cmd: 'resolvePath',
- path: '',
- directory: BaseDirectory.Audio
- }
- });
- }
- /**
- * Returns the path to the user's cache directory.
- *
- * #### Platform-specific
- *
- * - **Linux:** Resolves to `$XDG_CACHE_HOME` or `$HOME/.cache`.
- * - **macOS:** Resolves to `$HOME/Library/Caches`.
- * - **Windows:** Resolves to `{FOLDERID_LocalAppData}`.
- * @example
- * ```typescript
- * import { cacheDir } from '@tauri-apps/api/path';
- * const cacheDirPath = await cacheDir();
- * ```
- *
- * @since 1.0.0
- */
- async function cacheDir() {
- return invokeTauriCommand({
- __tauriModule: 'Path',
- message: {
- cmd: 'resolvePath',
- path: '',
- directory: BaseDirectory.Cache
- }
- });
- }
- /**
- * Returns the path to the user's config directory.
- *
- * #### Platform-specific
- *
- * - **Linux:** Resolves to `$XDG_CONFIG_HOME` or `$HOME/.config`.
- * - **macOS:** Resolves to `$HOME/Library/Application Support`.
- * - **Windows:** Resolves to `{FOLDERID_RoamingAppData}`.
- * @example
- * ```typescript
- * import { configDir } from '@tauri-apps/api/path';
- * const configDirPath = await configDir();
- * ```
- *
- * @since 1.0.0
- */
- async function configDir() {
- return invokeTauriCommand({
- __tauriModule: 'Path',
- message: {
- cmd: 'resolvePath',
- path: '',
- directory: BaseDirectory.Config
- }
- });
- }
- /**
- * Returns the path to the user's data directory.
- *
- * #### Platform-specific
- *
- * - **Linux:** Resolves to `$XDG_DATA_HOME` or `$HOME/.local/share`.
- * - **macOS:** Resolves to `$HOME/Library/Application Support`.
- * - **Windows:** Resolves to `{FOLDERID_RoamingAppData}`.
- * @example
- * ```typescript
- * import { dataDir } from '@tauri-apps/api/path';
- * const dataDirPath = await dataDir();
- * ```
- *
- * @since 1.0.0
- */
- async function dataDir() {
- return invokeTauriCommand({
- __tauriModule: 'Path',
- message: {
- cmd: 'resolvePath',
- path: '',
- directory: BaseDirectory.Data
- }
- });
- }
- /**
- * Returns the path to the user's desktop directory.
- *
- * #### Platform-specific
- *
- * - **Linux:** Resolves to [`xdg-user-dirs`](https://www.freedesktop.org/wiki/Software/xdg-user-dirs/)' `XDG_DESKTOP_DIR`.
- * - **macOS:** Resolves to `$HOME/Desktop`.
- * - **Windows:** Resolves to `{FOLDERID_Desktop}`.
- * @example
- * ```typescript
- * import { desktopDir } from '@tauri-apps/api/path';
- * const desktopPath = await desktopDir();
- * ```
- *
- * @since 1.0.0
- */
- async function desktopDir() {
- return invokeTauriCommand({
- __tauriModule: 'Path',
- message: {
- cmd: 'resolvePath',
- path: '',
- directory: BaseDirectory.Desktop
- }
- });
- }
- /**
- * Returns the path to the user's document directory.
- * @example
- * ```typescript
- * import { documentDir } from '@tauri-apps/api/path';
- * const documentDirPath = await documentDir();
- * ```
- *
- * #### Platform-specific
- *
- * - **Linux:** Resolves to [`xdg-user-dirs`](https://www.freedesktop.org/wiki/Software/xdg-user-dirs/)' `XDG_DOCUMENTS_DIR`.
- * - **macOS:** Resolves to `$HOME/Documents`.
- * - **Windows:** Resolves to `{FOLDERID_Documents}`.
- *
- * @since 1.0.0
- */
- async function documentDir() {
- return invokeTauriCommand({
- __tauriModule: 'Path',
- message: {
- cmd: 'resolvePath',
- path: '',
- directory: BaseDirectory.Document
- }
- });
- }
- /**
- * Returns the path to the user's download directory.
- *
- * #### Platform-specific
- *
- * - **Linux**: Resolves to [`xdg-user-dirs`](https://www.freedesktop.org/wiki/Software/xdg-user-dirs/)' `XDG_DOWNLOAD_DIR`.
- * - **macOS**: Resolves to `$HOME/Downloads`.
- * - **Windows**: Resolves to `{FOLDERID_Downloads}`.
- * @example
- * ```typescript
- * import { downloadDir } from '@tauri-apps/api/path';
- * const downloadDirPath = await downloadDir();
- * ```
- *
- * @since 1.0.0
- */
- async function downloadDir() {
- return invokeTauriCommand({
- __tauriModule: 'Path',
- message: {
- cmd: 'resolvePath',
- path: '',
- directory: BaseDirectory.Download
- }
- });
- }
- /**
- * Returns the path to the user's executable directory.
- *
- * #### Platform-specific
- *
- * - **Linux:** Resolves to `$XDG_BIN_HOME/../bin` or `$XDG_DATA_HOME/../bin` or `$HOME/.local/bin`.
- * - **macOS:** Not supported.
- * - **Windows:** Not supported.
- * @example
- * ```typescript
- * import { executableDir } from '@tauri-apps/api/path';
- * const executableDirPath = await executableDir();
- * ```
- *
- * @since 1.0.0
- */
- async function executableDir() {
- return invokeTauriCommand({
- __tauriModule: 'Path',
- message: {
- cmd: 'resolvePath',
- path: '',
- directory: BaseDirectory.Executable
- }
- });
- }
- /**
- * Returns the path to the user's font directory.
- *
- * #### Platform-specific
- *
- * - **Linux:** Resolves to `$XDG_DATA_HOME/fonts` or `$HOME/.local/share/fonts`.
- * - **macOS:** Resolves to `$HOME/Library/Fonts`.
- * - **Windows:** Not supported.
- * @example
- * ```typescript
- * import { fontDir } from '@tauri-apps/api/path';
- * const fontDirPath = await fontDir();
- * ```
- *
- * @since 1.0.0
- */
- async function fontDir() {
- return invokeTauriCommand({
- __tauriModule: 'Path',
- message: {
- cmd: 'resolvePath',
- path: '',
- directory: BaseDirectory.Font
- }
- });
- }
- /**
- * Returns the path to the user's home directory.
- *
- * #### Platform-specific
- *
- * - **Linux:** Resolves to `$HOME`.
- * - **macOS:** Resolves to `$HOME`.
- * - **Windows:** Resolves to `{FOLDERID_Profile}`.
- * @example
- * ```typescript
- * import { homeDir } from '@tauri-apps/api/path';
- * const homeDirPath = await homeDir();
- * ```
- *
- * @since 1.0.0
- */
- async function homeDir() {
- return invokeTauriCommand({
- __tauriModule: 'Path',
- message: {
- cmd: 'resolvePath',
- path: '',
- directory: BaseDirectory.Home
- }
- });
- }
- /**
- * Returns the path to the user's local data directory.
- *
- * #### Platform-specific
- *
- * - **Linux:** Resolves to `$XDG_DATA_HOME` or `$HOME/.local/share`.
- * - **macOS:** Resolves to `$HOME/Library/Application Support`.
- * - **Windows:** Resolves to `{FOLDERID_LocalAppData}`.
- * @example
- * ```typescript
- * import { localDataDir } from '@tauri-apps/api/path';
- * const localDataDirPath = await localDataDir();
- * ```
- *
- * @since 1.0.0
- */
- async function localDataDir() {
- return invokeTauriCommand({
- __tauriModule: 'Path',
- message: {
- cmd: 'resolvePath',
- path: '',
- directory: BaseDirectory.LocalData
- }
- });
- }
- /**
- * Returns the path to the user's picture directory.
- *
- * #### Platform-specific
- *
- * - **Linux:** Resolves to [`xdg-user-dirs`](https://www.freedesktop.org/wiki/Software/xdg-user-dirs/)' `XDG_PICTURES_DIR`.
- * - **macOS:** Resolves to `$HOME/Pictures`.
- * - **Windows:** Resolves to `{FOLDERID_Pictures}`.
- * @example
- * ```typescript
- * import { pictureDir } from '@tauri-apps/api/path';
- * const pictureDirPath = await pictureDir();
- * ```
- *
- * @since 1.0.0
- */
- async function pictureDir() {
- return invokeTauriCommand({
- __tauriModule: 'Path',
- message: {
- cmd: 'resolvePath',
- path: '',
- directory: BaseDirectory.Picture
- }
- });
- }
- /**
- * Returns the path to the user's public directory.
- *
- * #### Platform-specific
- *
- * - **Linux:** Resolves to [`xdg-user-dirs`](https://www.freedesktop.org/wiki/Software/xdg-user-dirs/)' `XDG_PUBLICSHARE_DIR`.
- * - **macOS:** Resolves to `$HOME/Public`.
- * - **Windows:** Resolves to `{FOLDERID_Public}`.
- * @example
- * ```typescript
- * import { publicDir } from '@tauri-apps/api/path';
- * const publicDirPath = await publicDir();
- * ```
- *
- * @since 1.0.0
- */
- async function publicDir() {
- return invokeTauriCommand({
- __tauriModule: 'Path',
- message: {
- cmd: 'resolvePath',
- path: '',
- directory: BaseDirectory.Public
- }
- });
- }
- /**
- * Returns the path to the application's resource directory.
- * To resolve a resource path, see the [[resolveResource | `resolveResource API`]].
- * @example
- * ```typescript
- * import { resourceDir } from '@tauri-apps/api/path';
- * const resourceDirPath = await resourceDir();
- * ```
- *
- * @since 1.0.0
- */
- async function resourceDir() {
- return invokeTauriCommand({
- __tauriModule: 'Path',
- message: {
- cmd: 'resolvePath',
- path: '',
- directory: BaseDirectory.Resource
- }
- });
- }
- /**
- * Resolve the path to a resource file.
- * @example
- * ```typescript
- * import { resolveResource } from '@tauri-apps/api/path';
- * const resourcePath = await resolveResource('script.sh');
- * ```
- *
- * @param resourcePath The path to the resource.
- * Must follow the same syntax as defined in `tauri.conf.json > tauri > bundle > resources`, i.e. keeping subfolders and parent dir components (`../`).
- * @returns The full path to the resource.
- *
- * @since 1.0.0
- */
- async function resolveResource(resourcePath) {
- return invokeTauriCommand({
- __tauriModule: 'Path',
- message: {
- cmd: 'resolvePath',
- path: resourcePath,
- directory: BaseDirectory.Resource
- }
- });
- }
- /**
- * Returns the path to the user's runtime directory.
- *
- * #### Platform-specific
- *
- * - **Linux:** Resolves to `$XDG_RUNTIME_DIR`.
- * - **macOS:** Not supported.
- * - **Windows:** Not supported.
- * @example
- * ```typescript
- * import { runtimeDir } from '@tauri-apps/api/path';
- * const runtimeDirPath = await runtimeDir();
- * ```
- *
- * @since 1.0.0
- */
- async function runtimeDir() {
- return invokeTauriCommand({
- __tauriModule: 'Path',
- message: {
- cmd: 'resolvePath',
- path: '',
- directory: BaseDirectory.Runtime
- }
- });
- }
- /**
- * Returns the path to the user's template directory.
- *
- * #### Platform-specific
- *
- * - **Linux:** Resolves to [`xdg-user-dirs`](https://www.freedesktop.org/wiki/Software/xdg-user-dirs/)' `XDG_TEMPLATES_DIR`.
- * - **macOS:** Not supported.
- * - **Windows:** Resolves to `{FOLDERID_Templates}`.
- * @example
- * ```typescript
- * import { templateDir } from '@tauri-apps/api/path';
- * const templateDirPath = await templateDir();
- * ```
- *
- * @since 1.0.0
- */
- async function templateDir() {
- return invokeTauriCommand({
- __tauriModule: 'Path',
- message: {
- cmd: 'resolvePath',
- path: '',
- directory: BaseDirectory.Template
- }
- });
- }
- /**
- * Returns the path to the user's video directory.
- *
- * #### Platform-specific
- *
- * - **Linux:** Resolves to [`xdg-user-dirs`](https://www.freedesktop.org/wiki/Software/xdg-user-dirs/)' `XDG_VIDEOS_DIR`.
- * - **macOS:** Resolves to `$HOME/Movies`.
- * - **Windows:** Resolves to `{FOLDERID_Videos}`.
- * @example
- * ```typescript
- * import { videoDir } from '@tauri-apps/api/path';
- * const videoDirPath = await videoDir();
- * ```
- *
- * @since 1.0.0
- */
- async function videoDir() {
- return invokeTauriCommand({
- __tauriModule: 'Path',
- message: {
- cmd: 'resolvePath',
- path: '',
- directory: BaseDirectory.Video
- }
- });
- }
- /**
- * Returns the path to the suggested log directory.
- *
- * @deprecated since 1.2.0: Will be removed in 2.0.0. Use {@link appLogDir} instead.
- * @since 1.0.0
- */
- async function logDir() {
- return appLogDir();
- }
- /**
- * Returns the path to the suggested directory for your app's log files.
- *
- * #### Platform-specific
- *
- * - **Linux:** Resolves to `${configDir}/${bundleIdentifier}/logs`.
- * - **macOS:** Resolves to `${homeDir}/Library/Logs/{bundleIdentifier}`
- * - **Windows:** Resolves to `${configDir}/${bundleIdentifier}/logs`.
- * @example
- * ```typescript
- * import { appLogDir } from '@tauri-apps/api/path';
- * const appLogDirPath = await appLogDir();
- * ```
- *
- * @since 1.2.0
- */
- async function appLogDir() {
- return invokeTauriCommand({
- __tauriModule: 'Path',
- message: {
- cmd: 'resolvePath',
- path: '',
- directory: BaseDirectory.AppLog
- }
- });
- }
- /**
- * Provides the platform-specific path segment separator:
- * - `\` on Windows
- * - `/` on POSIX
- *
- * @since 1.0.0
- */
- const sep = isWindows() ? '\\' : '/';
- /**
- * Provides the platform-specific path segment delimiter:
- * - `;` on Windows
- * - `:` on POSIX
- *
- * @since 1.0.0
- */
- const delimiter = isWindows() ? ';' : ':';
- /**
- * Resolves a sequence of `paths` or `path` segments into an absolute path.
- * @example
- * ```typescript
- * import { resolve, appDataDir } from '@tauri-apps/api/path';
- * const appDataDirPath = await appDataDir();
- * const path = await resolve(appDataDirPath, '..', 'users', 'tauri', 'avatar.png');
- * ```
- *
- * @since 1.0.0
- */
- async function resolve(...paths) {
- return invokeTauriCommand({
- __tauriModule: 'Path',
- message: {
- cmd: 'resolve',
- paths
- }
- });
- }
- /**
- * Normalizes the given `path`, resolving `'..'` and `'.'` segments and resolve symbolic links.
- * @example
- * ```typescript
- * import { normalize, appDataDir } from '@tauri-apps/api/path';
- * const appDataDirPath = await appDataDir();
- * const path = await normalize(appDataDirPath, '..', 'users', 'tauri', 'avatar.png');
- * ```
- *
- * @since 1.0.0
- */
- async function normalize(path) {
- return invokeTauriCommand({
- __tauriModule: 'Path',
- message: {
- cmd: 'normalize',
- path
- }
- });
- }
- /**
- * Joins all given `path` segments together using the platform-specific separator as a delimiter, then normalizes the resulting path.
- * @example
- * ```typescript
- * import { join, appDataDir } from '@tauri-apps/api/path';
- * const appDataDirPath = await appDataDir();
- * const path = await join(appDataDirPath, 'users', 'tauri', 'avatar.png');
- * ```
- *
- * @since 1.0.0
- */
- async function join(...paths) {
- return invokeTauriCommand({
- __tauriModule: 'Path',
- message: {
- cmd: 'join',
- paths
- }
- });
- }
- /**
- * Returns the directory name of a `path`. Trailing directory separators are ignored.
- * @example
- * ```typescript
- * import { dirname } from '@tauri-apps/api/path';
- * const dir = await dirname('/path/to/somedir/');
- * assert(dir === 'somedir');
- * ```
- *
- * @since 1.0.0
- */
- async function dirname(path) {
- return invokeTauriCommand({
- __tauriModule: 'Path',
- message: {
- cmd: 'dirname',
- path
- }
- });
- }
- /**
- * Returns the extension of the `path`.
- * @example
- * ```typescript
- * import { extname } from '@tauri-apps/api/path';
- * const ext = await extname('/path/to/file.html');
- * assert(ext === 'html');
- * ```
- *
- * @since 1.0.0
- */
- async function extname(path) {
- return invokeTauriCommand({
- __tauriModule: 'Path',
- message: {
- cmd: 'extname',
- path
- }
- });
- }
- /**
- * Returns the last portion of a `path`. Trailing directory separators are ignored.
- * @example
- * ```typescript
- * import { basename } from '@tauri-apps/api/path';
- * const base = await basename('path/to/app.conf');
- * assert(base === 'app.conf');
- * ```
- *
- * @param ext An optional file extension to be removed from the returned path.
- *
- * @since 1.0.0
- */
- async function basename(path, ext) {
- return invokeTauriCommand({
- __tauriModule: 'Path',
- message: {
- cmd: 'basename',
- path,
- ext
- }
- });
- }
- /**
- * Returns whether the path is absolute or not.
- * @example
- * ```typescript
- * import { isAbsolute } from '@tauri-apps/api/path';
- * assert(await isAbsolute('/home/tauri'));
- * ```
- *
- * @since 1.0.0
- */
- async function isAbsolute(path) {
- return invokeTauriCommand({
- __tauriModule: 'Path',
- message: {
- cmd: 'isAbsolute',
- path
- }
- });
- }
- export { BaseDirectory, appCacheDir, appConfigDir, appDataDir, appDir, appLocalDataDir, appLogDir, audioDir, basename, cacheDir, configDir, dataDir, delimiter, desktopDir, dirname, documentDir, downloadDir, executableDir, extname, fontDir, homeDir, isAbsolute, join, localDataDir, logDir, normalize, pictureDir, publicDir, resolve, resolveResource, resourceDir, runtimeDir, sep, templateDir, videoDir };
|