{"version":3,"file":"list-files.mjs","names":[],"sources":["../src/list-files.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n                       ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/stryke.\n\n Website:                  https://stormsoftware.com\n Repository:               https://github.com/storm-software/stryke\n Documentation:            https://docs.stormsoftware.com/projects/stryke\n Contact:                  https://stormsoftware.com/contact\n\n SPDX-License-Identifier:  Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport { joinPaths } from \"@stryke/path\";\nimport { isString } from \"@stryke/type-checks\";\nimport type { AssetGlob } from \"@stryke/types/file\";\nimport defu from \"defu\";\nimport type { GlobOptions, GlobOptionsWithFileTypesTrue, Path } from \"glob\";\nimport { glob } from \"glob\";\n\nexport type ListOptions = GlobOptions;\nexport type InferListReturnType<TOptions extends GlobOptions> =\n  TOptions[\"withFileTypes\"] extends true ? Path[] : string[];\n\nconst DEFAULT_OPTIONS: ListOptions = {\n  dot: true\n};\n\n/**\n * A files and directories listing helper function\n *\n * @param filesGlob - A glob pattern to match files\n * @returns A list of file paths\n */\nexport async function list<TOptions extends ListOptions>(\n  filesGlob: string | Omit<AssetGlob, \"output\">,\n  options?: TOptions\n): Promise<InferListReturnType<TOptions>> {\n  return glob(\n    isString(filesGlob)\n      ? filesGlob.includes(\"*\")\n        ? filesGlob\n        : joinPaths(filesGlob, \"**/*\")\n      : filesGlob.input\n        ? joinPaths(filesGlob.input, filesGlob.glob)\n        : filesGlob.glob,\n    defu(\n      isString(filesGlob)\n        ? {}\n        : { dot: filesGlob.dot, ignore: filesGlob.ignore },\n      options ?? {},\n      DEFAULT_OPTIONS\n    )\n  ) as Promise<InferListReturnType<TOptions>>;\n}\n\n/**\n * A synchronous files and directories listing helper function\n *\n * @param filesGlob - A glob pattern to match files\n * @returns A list of file paths\n */\nexport function listSync<TOptions extends ListOptions>(\n  filesGlob: string | Omit<AssetGlob, \"output\">,\n  options?: TOptions\n): InferListReturnType<TOptions> {\n  return glob.sync(\n    isString(filesGlob)\n      ? filesGlob.includes(\"*\")\n        ? filesGlob\n        : joinPaths(filesGlob, \"**/*\")\n      : filesGlob.input\n        ? joinPaths(filesGlob.input, filesGlob.glob)\n        : filesGlob.glob,\n    defu(\n      isString(filesGlob)\n        ? {}\n        : { dot: filesGlob.dot, ignore: filesGlob.ignore },\n      options ?? {},\n      DEFAULT_OPTIONS\n    )\n  ) as InferListReturnType<TOptions>;\n}\n\n/**\n * A file listing helper function\n *\n * @param filesGlob - A glob pattern to match files\n * @returns A list of file paths\n */\nexport async function listFiles<TOptions extends ListOptions>(\n  filesGlob: string | Omit<AssetGlob, \"output\">,\n  options?: TOptions\n) {\n  const result = (\n    await list(\n      filesGlob,\n      defu(\n        { withFileTypes: true },\n        options ?? {}\n      ) as GlobOptionsWithFileTypesTrue\n    )\n  ).filter(ret => ret.isFile());\n  if (!options?.withFileTypes) {\n    return result.map(file => file.fullpath()) as InferListReturnType<TOptions>;\n  }\n\n  return result as InferListReturnType<TOptions>;\n}\n\n/**\n * A synchronous file listing helper function\n *\n * @param filesGlob - A glob pattern to match files\n * @returns A list of file paths\n */\nexport function listFilesSync<TOptions extends ListOptions>(\n  filesGlob: string | Omit<AssetGlob, \"output\">,\n  options?: TOptions\n) {\n  const result = listSync(\n    filesGlob,\n    defu({ withFileTypes: true }, options ?? {}) as GlobOptionsWithFileTypesTrue\n  ).filter(ret => ret.isFile());\n  if (!options?.withFileTypes) {\n    return result.map(file => file.fullpath()) as InferListReturnType<TOptions>;\n  }\n\n  return result as InferListReturnType<TOptions>;\n}\n\n/**\n * A directories listing helper function\n *\n * @param filesGlob - A glob pattern to match files\n * @returns A list of file paths\n */\nexport async function listDirectories<TOptions extends ListOptions>(\n  filesGlob: string | Omit<AssetGlob, \"output\">,\n  options?: TOptions\n) {\n  const result = (\n    await list(\n      filesGlob,\n      defu(\n        { withFileTypes: true },\n        options ?? {}\n      ) as GlobOptionsWithFileTypesTrue\n    )\n  ).filter(ret => ret.isDirectory());\n  if (!options?.withFileTypes) {\n    return result.map(file => file.fullpath()) as InferListReturnType<TOptions>;\n  }\n\n  return result as InferListReturnType<TOptions>;\n}\n\n/**\n * A synchronous directories listing helper function\n *\n * @param filesGlob - A glob pattern to match files\n * @returns A list of file paths\n */\nexport function listDirectoriesSync<TOptions extends ListOptions>(\n  filesGlob: string | Omit<AssetGlob, \"output\">,\n  options?: TOptions\n) {\n  const result = listSync(\n    filesGlob,\n    defu({ withFileTypes: true }, options ?? {}) as GlobOptionsWithFileTypesTrue\n  ).filter(ret => ret.isDirectory());\n  if (!options?.withFileTypes) {\n    return result.map(file => file.fullpath()) as InferListReturnType<TOptions>;\n  }\n\n  return result as InferListReturnType<TOptions>;\n}\n"],"mappings":";;;;;;AA6BA,MAAM,kBAA+B,EACnC,KAAK,MACN;;;;;;;AAQD,eAAsB,KACpB,WACA,SACwC;AACxC,QAAO,KACL,SAAS,UAAU,GACf,UAAU,SAAS,IAAI,GACrB,YACA,UAAU,WAAW,OAAO,GAC9B,UAAU,QACR,UAAU,UAAU,OAAO,UAAU,KAAK,GAC1C,UAAU,MAChB,KACE,SAAS,UAAU,GACf,EAAE,GACF;EAAE,KAAK,UAAU;EAAK,QAAQ,UAAU;EAAQ,EACpD,WAAW,EAAE,EACb,gBACD,CACF;;;;;;;;AASH,SAAgB,SACd,WACA,SAC+B;AAC/B,QAAO,KAAK,KACV,SAAS,UAAU,GACf,UAAU,SAAS,IAAI,GACrB,YACA,UAAU,WAAW,OAAO,GAC9B,UAAU,QACR,UAAU,UAAU,OAAO,UAAU,KAAK,GAC1C,UAAU,MAChB,KACE,SAAS,UAAU,GACf,EAAE,GACF;EAAE,KAAK,UAAU;EAAK,QAAQ,UAAU;EAAQ,EACpD,WAAW,EAAE,EACb,gBACD,CACF;;;;;;;;AASH,eAAsB,UACpB,WACA,SACA;CACA,MAAM,UACJ,MAAM,KACJ,WACA,KACE,EAAE,eAAe,MAAM,EACvB,WAAW,EAAE,CACd,CACF,EACD,QAAO,QAAO,IAAI,QAAQ,CAAC;AAC7B,KAAI,CAAC,SAAS,cACZ,QAAO,OAAO,KAAI,SAAQ,KAAK,UAAU,CAAC;AAG5C,QAAO;;;;;;;;AAST,SAAgB,cACd,WACA,SACA;CACA,MAAM,SAAS,SACb,WACA,KAAK,EAAE,eAAe,MAAM,EAAE,WAAW,EAAE,CAAC,CAC7C,CAAC,QAAO,QAAO,IAAI,QAAQ,CAAC;AAC7B,KAAI,CAAC,SAAS,cACZ,QAAO,OAAO,KAAI,SAAQ,KAAK,UAAU,CAAC;AAG5C,QAAO;;;;;;;;AAST,eAAsB,gBACpB,WACA,SACA;CACA,MAAM,UACJ,MAAM,KACJ,WACA,KACE,EAAE,eAAe,MAAM,EACvB,WAAW,EAAE,CACd,CACF,EACD,QAAO,QAAO,IAAI,aAAa,CAAC;AAClC,KAAI,CAAC,SAAS,cACZ,QAAO,OAAO,KAAI,SAAQ,KAAK,UAAU,CAAC;AAG5C,QAAO;;;;;;;;AAST,SAAgB,oBACd,WACA,SACA;CACA,MAAM,SAAS,SACb,WACA,KAAK,EAAE,eAAe,MAAM,EAAE,WAAW,EAAE,CAAC,CAC7C,CAAC,QAAO,QAAO,IAAI,aAAa,CAAC;AAClC,KAAI,CAAC,SAAS,cACZ,QAAO,OAAO,KAAI,SAAQ,KAAK,UAAU,CAAC;AAG5C,QAAO"}