Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/chore/monorepo'
Browse files Browse the repository at this point in the history
  • Loading branch information
fguitton committed Jun 27, 2018
2 parents cc82d03 + 416a6f5 commit 249a18e
Show file tree
Hide file tree
Showing 429 changed files with 47,659 additions and 1,595 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
#!/usr/bin/env node

var chalk = require('chalk');
var commander = require('commander');
var package = require('./package.json');
var fs = require('fs-extra');
var path = require('path');

var currentNodeVersion = process.versions.node;
if (currentNodeVersion.split('.')[0] < 7) {
console.error(
chalk.red(
'Borderline Create Extension requires ' +
chalk.bold('Node 7 or higher.') + '\n' +
'Please update your version of Node.'
)
);
process.exit(1);
}

var extensionName = undefined;
var program = commander
.version(package.version)
.arguments('<name>')
.option('--verbose', 'enable verbose [optional]')
.usage('<name>')
.on('--help', function () {
console.log();
console.log(chalk.cyan('The extension will be created in a directory of the same name.'));
console.log();
})
.action(function (name) {
extensionName = name;
})
.parse(process.argv);

/* Ensure extension name is provided */
if (typeof extensionName === 'undefined' || extensionName === '' || !extensionName ) {
console.log();
console.error(chalk.red('Missing extension name'));
console.error(program.help());
console.log();
process.exit(1);
}

/* Creating the extension folder */
createExtension(extensionName, './src/', program.verbose);

function createExtension(extensionName, extensionPath, verbose) {
var templateDir = path.join(__dirname, 'template');
var extensionDir = path.join(extensionPath, extensionName);

if (! fs.existsSync(templateDir)) {
console.log(chalk.red('Missing template: ') + templateDir);
process.exit(1);
}
fs.copySync(templateDir, extensionDir);

if (verbose)
console.log(chalk.cyan('Created extension from template'));

var extensionPackagePath = path.join(extensionDir, 'package.json');
var extensionPackage = fs.readJsonSync(extensionPackagePath);
extensionPackage.name = extensionName;
fs.writeJsonSync(extensionPackagePath, extensionPackage);
if (verbose)
console.log(chalk.cyan('Rewrite package.json successful'));

var manifestPackagePath = path.join(extensionDir, 'manifest.json');
var manifestPackage = fs.readJsonSync(manifestPackagePath);
manifestPackage.name = extensionName;
manifestPackage.id = Math.floor(Math.random() * 0xffffffffffffffff).toString(32); //Careful with collision
fs.writeJsonSync(manifestPackagePath, manifestPackage);
if (verbose)
console.log(chalk.cyan('Rewrite manifest.json successful'));

console.log(chalk.green('Creating extension success :D'));


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"port": 3000,
"mongoUrl": "mongodb://dev:[email protected]:27017/borderline",
"pluginSourcesFolder": "./src/",
"pluginBuildFolder": "./.build",
"pluginFileSystemFolder": "./.filesystem",
"pluginPackageFolder": "./packages"
}
55 changes: 55 additions & 0 deletions packages/borderline-create-extension/borderline-dev-server.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
var chalk = require('chalk');
var fs = require('fs-extra');
var path = require('path');
var spawn = require('cross-spawn');
var express = require('express');

var config = require('./borderline-dev-config.json');

//Cleanups previous dev environments
fs.emptyDirSync(config.pluginBuildFolder);
fs.emptyDirSync(config.pluginFileSystemFolder);

//Creating webpack processes to compile extensions
var extensions = fs.readdirSync(config.pluginSourcesFolder);
for (var i = 0; i < extensions.length; i++) {
var extensionDirectory = path.join(config.pluginSourcesFolder, extensions[i]);

buildExtension(extensionDirectory);
}

function buildExtension(extensionDirectory) {
//Run npm build command from extension dir
var build_proc = spawn('npm', ['run', 'build-dev'], {stdio: 'inherit', cwd: extensionDirectory});
build_proc.on('close', function (exitCode) {
if (exitCode !== 0) {
console.log(chalk.red('Install package dependencies failed'));
process.exit(1);
}
else {
console.log(chalk.green('Exiting webpack watcher'));
}
});
}

//Creating express server
var app = express();
var BorderlineServer = require('borderline-server');
//Remove unwanted express headers
app.set('x-powered-by', false);
//Use Borderline server in dev mode
app.use(BorderlineServer({
mongoUrl: config.mongoUrl,
pluginSourcesFolder: config.pluginBuildFolder,
pluginFileSystemFolder: config.pluginFileSystemFolder,
development: true
}
));
//Listen on config port
app.listen(config.port, function (err) {
if (err) {
return console.error(chalk.red(err));
}

console.log(chalk.green('Listening at http://localhost:' + config.port.toString()));
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
var chalk = require('chalk');
var fs = require('fs-extra');
var path = require('path');
var spawn = require('cross-spawn');
var archiver = require('archiver');

var config = require('./borderline-dev-config.json');

//Cleanups previous dev environments
fs.emptyDirSync(config.pluginBuildFolder);
fs.emptyDirSync(config.pluginPackageFolder);

//Creating webpack processes to compile extensions
var extensions = fs.readdirSync(config.pluginSourcesFolder);
for (var i = 0; i < extensions.length; i++) {

var extensionDirectory = path.resolve(path.join(config.pluginSourcesFolder, extensions[i]));
packExtension(extensionDirectory);
}

function packExtension(extensionDirectory)
{
//Run npm build command from extension dir
var build_proc = spawn('npm', ['run', 'build-prod'], {stdio: 'inherit', cwd: extensionDirectory});
build_proc.on('close', function (exitCode) {
if (exitCode !== 0) {
console.log(chalk.red('Build package failed'));
process.exit(1);
}
else {
console.log(chalk.green('Webpack bundling successful'));

var buildTrace = fs.readJSONSync(path.join(extensionDirectory, 'manifest.json'));
var packageName = buildTrace.name + '-' + buildTrace.version;

var buildDirectory = path.join(config.pluginBuildFolder, buildTrace.build);
var packageTarget = path.join(config.pluginPackageFolder, packageName) + '.zip';

var output = fs.createWriteStream(packageTarget);
var zipArchive = archiver('zip');
zipArchive.pipe(output);
zipArchive.directory(buildDirectory, packageName);
zipArchive.finalize();
output.on('close', function () {
console.log(chalk.green('Written package ' + packageName + '.zip'));
});
output.on('error', function (err) {
console.log(chalk.red('Writting package ' + packageName + '.zip failed: ' + err));
process.exit(1);
})
}
});
}
43 changes: 43 additions & 0 deletions packages/borderline-create-extension/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
{
"name": "@borderline/create-extension",
"version": "0.2.0",
"description": "Create extensions for the Borderline platform",
"repository": {
"type": "git",
"url": "git+https://github.com/dsi-icl/borderline.git"
},
"author": "Jean Grizet",
"license": "MIT",
"bugs": {
"url": "https://github.com/dsi-icl/borderline/issues"
},
"homepage": "https://github.com/dsi-icl/borderline/tree/master/packages/borderline-create-extensions#readme",
"engines": {
"node": ">=7"
},
"files": [
"template/",
"borderline-create-extension.js",
"borderline-package-extension.js",
"borderline-dev-server.js"
],
"bin": {
"borderline-create": "node ./borderline-create-extension.js",
"borderline-package": "node ./borderline-package-extension.js",
"borderline-dev": "node ./borderline-dev-server.js"
},
"scripts": {
"create": "node ./borderline-create-extension.js",
"package": "node ./borderline-package-extension.js",
"dev": "node ./borderline-dev-server.js"
},
"devDependencies": {},
"dependencies": {
"borderline-server": "^0.1.16",
"chalk": "^1.1.3",
"commander": "^2.9.0",
"express": "^4.15.2",
"fs-extra": "^2.0.0",
"archiver": "1.3.0"
}
}
11 changes: 11 additions & 0 deletions packages/borderline-create-extension/template/.babelrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"presets": [
"es2015",
"react",
"stage-0"
],
"plugins": [
"react-hot-loader/babel",
"transform-decorators-legacy"
]
}
66 changes: 66 additions & 0 deletions packages/borderline-create-extension/template/.eslintrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
{
"extends": "eslint:recommended",
"env": {
"browser": true,
"node": true,
"es6": true
},
"parser": "babel-eslint",
"plugins": [
"react"
],
"ecmaFeatures": {
"arrowFunctions": true,
"binaryLiterals": true,
"blockBindings": true,
"classes": true,
"defaultParams": true,
"destructuring": true,
"forOf": true,
"generators": true,
"modules": true,
"objectLiteralComputedProperties": true,
"objectLiteralDuplicateProperties": true,
"objectLiteralShorthandMethods": true,
"objectLiteralShorthandProperties": true,
"octalLiterals": true,
"regexUFlag": true,
"regexYFlag": true,
"spread": true,
"superInFunctions": true,
"templateStrings": true,
"unicodeCodePointEscapes": true,
"globalReturn": true,
"jsx": true
},
"rules": {
"react/jsx-uses-react": 2,
"react/jsx-uses-vars": 2,
"react/react-in-jsx-scope": 2,
"no-alert": 2,
"no-console": 1,
"quotes": [
2,
"single"
],
"semi": [
2,
"always"
],
"strict": [
2,
"global"
],
// "indent": [
// 1,
// 4
// ],
"space-infix-ops": 2,
"spaced-comment": 1,
"space-in-parens": 2,
"space-unary-ops": 2,
"no-trailing-spaces": 1,
"no-irregular-whitespace": 2,
"no-unused-vars": 1
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
// Insert client template code here

38 changes: 38 additions & 0 deletions packages/borderline-create-extension/template/code/server/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
function TemplatePlugin() {
this.getTemplate = TemplatePlugin.prototype.getTemplate.bind(this);
this.postTemplate = TemplatePlugin.prototype.postTemplate.bind(this);
this.putTemplate = TemplatePlugin.prototype.putTemplate.bind(this);
this.deleteTemplate = TemplatePlugin.prototype.deleteTemplate.bind(this);
}

TemplatePlugin.prototype.attach = function(expressAppRouter) {
expressAppRouter.get('/default', this.getTemplate);
expressAppRouter.post('/default', this.postTemplate);
expressAppRouter.put('/default', this.putTemplate);
expressAppRouter.delete('/default', this.deleteTemplate);
};

TemplatePlugin.prototype.detach = function() {
};

TemplatePlugin.prototype.getTemplate = function(req, res) {
res.status(200);
res.json({message: "Template GET"});
};

TemplatePlugin.prototype.postTemplate = function(req, res) {
res.status(200);
res.json({message: "Template POST"});
};

TemplatePlugin.prototype.putTemplate = function(req, res) {
res.status(200);
res.json({message: "Template PUT"});
};

TemplatePlugin.prototype.deleteTemplate = function(req, res) {
res.status(200);
res.json({message: "Template DELETE"});
};

module.exports = TemplatePlugin;
7 changes: 7 additions & 0 deletions packages/borderline-create-extension/template/manifest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"name": "Borderline internal extension",
"version": "0.0.1",
"description": "Generated Borderline internal extension",
"author": "Tezirg",
"build": null
}
Loading

0 comments on commit 249a18e

Please sign in to comment.