{"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":";;;;;AAKA,MAAMA,gBAAAA,GAAmB;AACvB,IAAA,YAAA;AACA,IAAA,oBAAA;AACA,IAAA,aAAA;AACA,IAAA,oBAAA;AACA,IAAA,YAAA;AACA,IAAA,cAAA;AACA,IAAA,iBAAA;AACA,IAAA,eAAA;AACA,IAAA,eAAA;AACA,IAAA,aAAA;AACA,IAAA,mBAAA;AACA,IAAA,aAAA;AACA,IAAA,sBAAA;AACA,IAAA;AACD,CAAA;AAED,MAAMC,aAAAA,GAAgB,CAACC,UAAAA,EAAoBC,IAAAA,EAAcC,cAAAA,GAAAA;AACvDA,IAAAA,cAAAA,CAAeC,IAAI,CAAA,GAAIL,gBAAAA,CAAAA;AACvB,IAAA,MAAMM,gBAAAA,GAAmBC,IAAAA,CAAKC,IAAI,CAACN,UAAAA,EAAYC,IAAAA,CAAAA;AAC/C,IAAA,IAAIM,SAAAA,GAAY,KAAA;IAChB,KAAK,MAAMC,WAAWN,cAAAA,CAAgB;QACpC,IAAIM,OAAAA,CAAQC,UAAU,CAAC,GAAA,CAAA,EAAM;AAC3B,YAAA,IAAIC,SAAAA,CAAUN,gBAAAA,EAAkBI,OAAAA,CAAQG,KAAK,CAAC,CAAA,CAAA,EAAI;gBAAEC,SAAAA,EAAW,IAAA;gBAAMC,GAAAA,EAAK;aAAK,CAAA,EAAI;gBACjF,OAAO,KAAA;AACT,YAAA;QACF,CAAA,MAAO,IAAIH,SAAAA,CAAUN,gBAAAA,EAAkBI,OAAAA,EAAS;YAAEI,SAAAA,EAAW,IAAA;YAAMC,GAAAA,EAAK;SAAK,CAAA,EAAI;AAC/E,YAAA,IAAIR,IAAAA,CAAKS,QAAQ,CAACb,IAAAA,CAAAA,KAAU,UAAA,EAAY;gBACtCM,SAAAA,GAAY,IAAA;AACd,YAAA;AACF,QAAA;AACF,IAAA;IACA,OAAOA,SAAAA;AACT;AAEA,MAAMQ,WAAW,OACfC,OAAAA,EACAd,iBAA2B,EAAE,EAC7Be,YAAoB,EAAE,GAAA;AAEtB,IAAA,MAAMC,eAAyB,EAAE;IACjC,MAAMC,OAAAA,GAAU,MAAMC,GAAAA,CAAIC,OAAO,CAAChB,IAAAA,CAAKC,IAAI,CAACU,OAAAA,EAASC,SAAAA,CAAAA,CAAAA;IAErD,KAAK,MAAMK,SAASH,OAAAA,CAAS;AAC3B,QAAA,MAAMI,iBAAAA,GAAoBlB,IAAAA,CAAKC,IAAI,CAACW,SAAAA,EAAWK,KAAAA,CAAAA;AAC/C,QAAA,MAAME,SAAAA,GAAYnB,IAAAA,CAAKoB,QAAQ,CAACT,OAAAA,EAASO,iBAAAA,CAAAA;QACzC,MAAMhB,SAAAA,GAAYR,aAAAA,CAAciB,OAAAA,EAASO,iBAAAA,EAAmBrB,cAAAA,CAAAA;AAE5D,QAAA,IAAI,CAACK,SAAAA,EAAW;AACd,YAAA,IAAIa,GAAAA,CAAIM,QAAQ,CAACF,SAAAA,CAAAA,CAAWG,WAAW,EAAA,EAAI;AACzC,gBAAA,MAAMC,QAAAA,GAAW,MAAMb,QAAAA,CAASC,OAAAA,EAASd,cAAAA,EAAgBqB,iBAAAA,CAAAA;AACzDL,gBAAAA,YAAAA,CAAaf,IAAI,CAAA,GAAIyB,QAAAA,CAAAA;YACvB,CAAA,MAAO;AACLV,gBAAAA,YAAAA,CAAaf,IAAI,CAACqB,SAAAA,CAAAA;AACpB,YAAA;AACF,QAAA;AACF,IAAA;IACA,OAAON,YAAAA;AACT,CAAA;AAEA,MAAMW,gBAAgB,OAAO7B,UAAAA,GAAAA;AAC3B,IAAA,MAAM8B,aAAAA,GAAgBzB,IAAAA,CAAK0B,OAAO,CAAC/B,UAAAA,EAAY,YAAA,CAAA;AAC/C,IAAA,MAAMgC,SAAAA,GAAY,MAAMZ,GAAAA,CAAIa,UAAU,CAACH,aAAAA,CAAAA;IAEvC,IAAI,CAACE,SAAAA,EAAW,OAAO,EAAE;AAEzB,IAAA,MAAME,gBAAAA,GAAmB,MAAMd,GAAAA,CAAIe,QAAQ,CAACL,aAAAA,EAAe,MAAA,CAAA;AAE3D,IAAA,OAAOI,gBAAAA,CACJE,KAAK,CAAC,OAAA,CAAA,CACNC,MAAM,CAAC,CAACC,IAAAA,GAASC,OAAAA,CAAQD,KAAKE,IAAI,EAAA,CAAA,IAAO,CAACF,IAAAA,CAAK7B,UAAU,CAAC,GAAA,CAAA,CAAA;AAC/D,CAAA;AAEA,MAAMgC,kBAAAA,GAAqB,OACzBC,WAAAA,EACAC,gBAAAA,EACAC,QAAAA,GAAAA;IAEA,MAAM1C,cAAAA,GAAiB,MAAM2B,aAAAA,CAAcc,gBAAAA,CAAAA;IAC3C,MAAME,eAAAA,GAAkB,MAAM9B,QAAAA,CAAS4B,gBAAAA,EAAkBzC,cAAAA,CAAAA;IAEzD,OAAO4C,GAAAA,CAAIC,CAAC,CACV;QACEC,IAAAA,EAAM,IAAA;QACN/C,IAAAA,EAAMI,IAAAA,CAAK0B,OAAO,CAACW,WAAAA,EAAaE,QAAAA;KAClC,EACAC,eAAAA,CAAAA;AAEJ;;;;"}