135 lines
2.3 KiB
JavaScript
135 lines
2.3 KiB
JavaScript
'use strict'
|
|
|
|
// Dependencies
|
|
let path = require( 'path' ),
|
|
util = require( 'util' ),
|
|
File = require( './file.class.js' )
|
|
|
|
class Project
|
|
{
|
|
constructor()
|
|
{
|
|
this.folders = {
|
|
root:
|
|
{
|
|
name : 'root',
|
|
files : {},
|
|
folders: {}
|
|
}
|
|
}
|
|
}
|
|
|
|
update_file( _path, _content )
|
|
{
|
|
// Set up
|
|
let normalize_path = path.normalize( _path ),
|
|
parsed_path = path.parse( normalize_path )
|
|
|
|
// Retrieve folder
|
|
let folder = this.get_folder( parsed_path.dir )
|
|
|
|
// Folder doesn't exist
|
|
if( !folder )
|
|
{
|
|
// Create folders
|
|
folder = this.create_folder( parsed_path.dir )
|
|
}
|
|
|
|
// Retrieve file
|
|
let file = folder.files[ parsed_path.base ]
|
|
|
|
// File doesn't exist
|
|
if( !file )
|
|
{
|
|
file = new File( parsed_path.base )
|
|
folder.files[ file.name ] = file
|
|
}
|
|
|
|
file.create_version( _content )
|
|
}
|
|
|
|
get_folder( _path )
|
|
{
|
|
let path_parts = _path.split( path.sep ),
|
|
folder = this.folders.root
|
|
|
|
for( let _path_part of path_parts )
|
|
{
|
|
folder = folder.folders[ _path_part ]
|
|
|
|
// Folder not found
|
|
if(typeof folder === 'undefined')
|
|
return false
|
|
}
|
|
|
|
return folder
|
|
}
|
|
|
|
create_folder( _path )
|
|
{
|
|
// Set up
|
|
let path_parts = _path.split( path.sep ),
|
|
folder = this.folders.root
|
|
|
|
for( let _path_part of path_parts )
|
|
{
|
|
// Temporary folder
|
|
let __folder = folder.folders[ _path_part ]
|
|
|
|
// Folder doesn't exist
|
|
if( typeof __folder === 'undefined' )
|
|
{
|
|
__folder = {}
|
|
__folder.name = _path_part
|
|
__folder.files = {}
|
|
__folder.folders = {}
|
|
|
|
folder.folders[ _path_part ] = __folder
|
|
}
|
|
|
|
folder = __folder
|
|
}
|
|
|
|
return folder;
|
|
}
|
|
|
|
// clean_folders()
|
|
// {
|
|
// // Empty all
|
|
// this.folders.all = {}
|
|
|
|
// let clean_folder = function( folder )
|
|
// {
|
|
// for( let _folder_name in folder.folders )
|
|
// {
|
|
// clean_folder( folder.folders[ _folder_name ] )
|
|
// }
|
|
// }
|
|
|
|
// clean_folder( this.folders.root )
|
|
// }
|
|
|
|
delete_file( _path )
|
|
{
|
|
// Set up
|
|
let normalize_path = path.normalize( _path ),
|
|
parsed_path = path.parse( normalize_path )
|
|
|
|
// Retrieve folder
|
|
let folder = this.get_folder( parsed_path.dir )
|
|
|
|
// Folder found
|
|
if( folder )
|
|
{
|
|
let file = folder.files[ parsed_path.base ]
|
|
|
|
// File found
|
|
if( file )
|
|
{
|
|
delete folder.files[ parsed_path.base ]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = Project |