mirror of
https://github.com/appwrite/console.git
synced 2026-06-06 19:27:48 +00:00
231 lines
4.7 KiB
TypeScript
231 lines
4.7 KiB
TypeScript
import { addNotification } from '$lib/stores/notifications';
|
|
import ignore from 'ignore';
|
|
import { createTarGzip } from 'nanotar';
|
|
|
|
export interface FileData {
|
|
path: string;
|
|
buffer: ArrayBuffer;
|
|
}
|
|
|
|
export async function processFileList(files: FileList): Promise<FileData[]> {
|
|
const fileArray = Array.from(files);
|
|
const ignorer = ignore();
|
|
|
|
// Check for .gitignore file
|
|
const gitignoreFile = fileArray.find(
|
|
(file) => file.webkitRelativePath.endsWith('.gitignore') || file.name === '.gitignore'
|
|
);
|
|
|
|
if (gitignoreFile) {
|
|
const gitignoreContent = await gitignoreFile.text();
|
|
ignorer.add(gitignoreContent);
|
|
} else {
|
|
ignorer.add(defaultIgnore);
|
|
}
|
|
|
|
// Filter files using ignorer
|
|
const filteredFiles = fileArray.filter((file) => {
|
|
const path = file.webkitRelativePath || file.name;
|
|
return !ignorer.ignores(path);
|
|
});
|
|
const filePromises = filteredFiles.map(async (file) => {
|
|
try {
|
|
const buffer = await file.arrayBuffer();
|
|
return {
|
|
path: file?.webkitRelativePath || file.name,
|
|
buffer: buffer
|
|
};
|
|
} catch (e) {
|
|
// console.log(file);
|
|
return null;
|
|
}
|
|
});
|
|
|
|
return Promise.all(filePromises);
|
|
}
|
|
|
|
export async function gzipUpload(files: FileList) {
|
|
let uploadFile: File;
|
|
const tick = performance.now();
|
|
if (!files?.length) return;
|
|
|
|
// If the file is a tar.gz file, then return it as is
|
|
if (
|
|
files?.length === 1 &&
|
|
files.item(0).type === 'application/gzip' &&
|
|
files.item(0).name.split('.').pop() === 'tar'
|
|
) {
|
|
uploadFile = files.item(0);
|
|
}
|
|
// Else process the file to mantain the folder structure and create a .tar.gz file
|
|
else {
|
|
try {
|
|
const processedFiles = await processFileList(files);
|
|
const tar = await createTarGzip(
|
|
processedFiles.map((f) => ({
|
|
name: f.path,
|
|
data: f.buffer
|
|
}))
|
|
);
|
|
const blob = new Blob([tar], { type: 'application/gzip' });
|
|
const file = new File([blob], 'deployment.tar.gz', {
|
|
type: 'application/gzip'
|
|
});
|
|
uploadFile = file;
|
|
} catch (e) {
|
|
addNotification({
|
|
type: 'error',
|
|
message: e
|
|
});
|
|
}
|
|
}
|
|
console.log(uploadFile);
|
|
const tock = performance.now();
|
|
console.log('Time taken to process files:', tock - tick);
|
|
|
|
return uploadFile;
|
|
}
|
|
|
|
export const defaultIgnore = `
|
|
### Node ###
|
|
# Logs
|
|
logs
|
|
*.log
|
|
npm-debug.log*
|
|
yarn-debug.log*
|
|
yarn-error.log*
|
|
lerna-debug.log*
|
|
.pnpm-debug.log*
|
|
|
|
# Diagnostic reports (https://nodejs.org/api/report.html)
|
|
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
|
|
|
|
# Runtime data
|
|
pids
|
|
*.pid
|
|
*.seed
|
|
*.pid.lock
|
|
|
|
# Directory for instrumented libs generated by jscoverage/JSCover
|
|
lib-cov
|
|
|
|
# Coverage directory used by tools like istanbul
|
|
coverage
|
|
*.lcov
|
|
|
|
# nyc test coverage
|
|
.nyc_output
|
|
|
|
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
|
|
.grunt
|
|
|
|
# Bower dependency directory (https://bower.io/)
|
|
bower_components
|
|
|
|
# node-waf configuration
|
|
.lock-wscript
|
|
|
|
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
|
build/Release
|
|
|
|
# Dependency directories
|
|
node_modules/
|
|
jspm_packages/
|
|
|
|
# Snowpack dependency directory (https://snowpack.dev/)
|
|
web_modules/
|
|
|
|
# TypeScript cache
|
|
*.tsbuildinfo
|
|
|
|
# Optional npm cache directory
|
|
.npm
|
|
|
|
# Optional eslint cache
|
|
.eslintcache
|
|
|
|
# Optional stylelint cache
|
|
.stylelintcache
|
|
|
|
# Microbundle cache
|
|
.rpt2_cache/
|
|
.rts2_cache_cjs/
|
|
.rts2_cache_es/
|
|
.rts2_cache_umd/
|
|
|
|
# Optional REPL history
|
|
.node_repl_history
|
|
|
|
# Output of 'npm pack'
|
|
*.tgz
|
|
|
|
# Yarn Integrity file
|
|
.yarn-integrity
|
|
|
|
# dotenv environment variable files
|
|
.env
|
|
.env.development.local
|
|
.env.test.local
|
|
.env.production.local
|
|
.env.local
|
|
|
|
# parcel-bundler cache (https://parceljs.org/)
|
|
.cache
|
|
.parcel-cache
|
|
|
|
# Next.js build output
|
|
.next
|
|
out
|
|
|
|
# Nuxt.js build / generate output
|
|
.nuxt
|
|
dist
|
|
|
|
# Gatsby files
|
|
.cache/
|
|
# Comment in the public line in if your project uses Gatsby and not Next.js
|
|
# https://nextjs.org/blog/next-9-1#public-directory-support
|
|
# public
|
|
|
|
# vuepress build output
|
|
.vuepress/dist
|
|
|
|
# vuepress v2.x temp and cache directory
|
|
.temp
|
|
|
|
# Docusaurus cache and generated files
|
|
.docusaurus
|
|
|
|
# Serverless directories
|
|
.serverless/
|
|
|
|
# FuseBox cache
|
|
.fusebox/
|
|
|
|
# DynamoDB Local files
|
|
.dynamodb/
|
|
|
|
# TernJS port file
|
|
.tern-port
|
|
|
|
# Stores VSCode versions used for testing VSCode extensions
|
|
.vscode-test
|
|
|
|
# yarn v2
|
|
.yarn/cache
|
|
.yarn/unplugged
|
|
.yarn/build-state.yml
|
|
.yarn/install-state.gz
|
|
.pnp.*
|
|
|
|
### Node Patch ###
|
|
# Serverless Webpack directories
|
|
.webpack/
|
|
|
|
# Optional stylelint cache
|
|
|
|
# SvelteKit build / generate output
|
|
.svelte-kit
|
|
|
|
`;
|