{"version":3,"file":"compress-files.mjs","sources":["../../src/utils/compress-files.ts"],"sourcesContent":["import * as fse from 'fs-extra';\nimport * as tar from 'tar';\nimport * as path from 'path';\nimport { minimatch } from 'minimatch';\n\nconst IGNORED_PATTERNS = [\n  '**/.git/**',\n  '**/node_modules/**',\n  '**/build/**',\n  '**/data/uploads/**',\n  '**/dist/**',\n  '**/.cache/**',\n  '**/.circleci/**',\n  '**/.github/**',\n  '**/.gitignore',\n  '**/.gitkeep',\n  '**/.gitlab-ci.yml',\n  '**/.idea/**',\n  '**/public/uploads/**',\n  '**/.vscode/**',\n];\n\nconst isIgnoredFile = (folderPath: string, file: string, ignorePatterns: string[]): boolean => {\n  ignorePatterns.push(...IGNORED_PATTERNS);\n  const relativeFilePath = path.join(folderPath, file);\n  let isIgnored = false;\n  for (const pattern of ignorePatterns) {\n    if (pattern.startsWith('!')) {\n      if (minimatch(relativeFilePath, pattern.slice(1), { matchBase: true, dot: true })) {\n        return false;\n      }\n    } else if (minimatch(relativeFilePath, pattern, { matchBase: true, dot: true })) {\n      if (path.basename(file) !== '.gitkeep') {\n        isIgnored = true;\n      }\n    }\n  }\n  return isIgnored;\n};\n\nconst getFiles = async (\n  dirPath: string,\n  ignorePatterns: string[] = [],\n  subfolder: string = ''\n): Promise<string[]> => {\n  const arrayOfFiles: string[] = [];\n  const entries = await fse.readdir(path.join(dirPath, subfolder));\n\n  for (const entry of entries) {\n    const entryPathFromRoot = path.join(subfolder, entry);\n    const entryPath = path.relative(dirPath, entryPathFromRoot);\n    const isIgnored = isIgnoredFile(dirPath, entryPathFromRoot, ignorePatterns);\n\n    if (!isIgnored) {\n      if (fse.statSync(entryPath).isDirectory()) {\n        const subFiles = await getFiles(dirPath, ignorePatterns, entryPathFromRoot);\n        arrayOfFiles.push(...subFiles);\n      } else {\n        arrayOfFiles.push(entryPath);\n      }\n    }\n  }\n  return arrayOfFiles;\n};\n\nconst readGitignore = async (folderPath: string): Promise<string[]> => {\n  const gitignorePath = path.resolve(folderPath, '.gitignore');\n  const pathExist = await fse.pathExists(gitignorePath);\n\n  if (!pathExist) return [];\n\n  const gitignoreContent = await fse.readFile(gitignorePath, 'utf8');\n\n  return gitignoreContent\n    .split(/\\r?\\n/)\n    .filter((line) => Boolean(line.trim()) && !line.startsWith('#'));\n};\n\nconst compressFilesToTar = async (\n  storagePath: string,\n  folderToCompress: string,\n  filename: string\n): Promise<void> => {\n  const ignorePatterns = await readGitignore(folderToCompress);\n  const filesToCompress = await getFiles(folderToCompress, ignorePatterns);\n\n  return tar.c(\n    {\n      gzip: true,\n      file: path.resolve(storagePath, filename),\n    },\n    filesToCompress\n  );\n};\n\nexport { compressFilesToTar, isIgnoredFile };\n"],"names":["IGNORED_PATTERNS","isIgnoredFile","folderPath","file","ignorePatterns","push","relativeFilePath","path","join","isIgnored","pattern","startsWith","minimatch","slice","matchBase","dot","basename","getFiles","dirPath","subfolder","arrayOfFiles","entries","fse","readdir","entry","entryPathFromRoot","entryPath","relative","statSync","isDirectory","subFiles","readGitignore","gitignorePath","resolve","pathExist","pathExists","gitignoreContent","readFile","split","filter","line","Boolean","trim","compressFilesToTar","storagePath","folderToCompress","filename","filesToCompress","tar","c","gzip"],"mappings":"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"}