cloud-red
Version:
Harnessing Serverless for your cloud integration needs
114 lines (100 loc) • 3.43 kB
JavaScript
/**
* Copyright JS Foundation and other contributors, http://js.foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**/
var fs = require('fs-extra');
var when = require('when');
var fspath = require('path');
var log = require('../../../../util').log; // TODO: separate module
var util = require('./util');
var library = require('./library');
var sessions = require('./sessions');
var runtimeSettings = require('./settings');
var projects = require('./projects');
var initialFlowLoadComplete = false;
var settings;
var localfilesystem = {
init: function(_settings, runtime) {
settings = _settings;
var promises = [];
if (!settings.userDir) {
try {
fs.statSync(fspath.join(process.env.NODE_RED_HOME, '.config.json'));
settings.userDir = process.env.NODE_RED_HOME;
} catch (err) {
try {
// Consider compatibility for older versions
if (process.env.HOMEPATH) {
fs.statSync(
fspath.join(process.env.HOMEPATH, '.node-red', '.config.json')
);
settings.userDir = fspath.join(process.env.HOMEPATH, '.node-red');
}
} catch (err) {}
if (!settings.userDir) {
settings.userDir = fspath.join(
process.env.HOME ||
process.env.USERPROFILE ||
process.env.HOMEPATH ||
process.env.NODE_RED_HOME,
'.node-red'
);
if (!settings.readOnly) {
promises.push(
fs.ensureDir(fspath.join(settings.userDir, 'node_modules'))
);
}
}
}
}
sessions.init(settings);
runtimeSettings.init(settings);
promises.push(library.init(settings));
promises.push(projects.init(settings, runtime));
var packageFile = fspath.join(settings.userDir, 'package.json');
var packagePromise = when.resolve();
if (!settings.readOnly) {
packagePromise = function() {
try {
fs.statSync(packageFile);
} catch (err) {
var defaultPackage = {
name: 'node-red-project',
description: 'A Node-RED Project',
version: '0.0.1',
private: true
};
return util.writeFile(
packageFile,
JSON.stringify(defaultPackage, '', 4)
);
}
return true;
};
}
return when.all(promises).then(packagePromise);
},
getFlows: projects.getFlows,
saveFlows: projects.saveFlows,
getCredentials: projects.getCredentials,
saveCredentials: projects.saveCredentials,
getSettings: runtimeSettings.getSettings,
saveSettings: runtimeSettings.saveSettings,
getSessions: sessions.getSessions,
saveSessions: sessions.saveSessions,
getLibraryEntry: library.getLibraryEntry,
saveLibraryEntry: library.saveLibraryEntry,
projects: projects
};
module.exports = localfilesystem;