Skip to content
This repository has been archived by the owner on Jan 13, 2022. It is now read-only.

Commit

Permalink
runat-1128988: Rationalize commands 1: Create item groups
Browse files Browse the repository at this point in the history
The various places in GCLI where we created a new system all had their
own list of items in their own groups, that were mostly the same sets
over again. So we broke them into the logical groups to make
maintenance easier, and importing simpler.

Signed-off-by: Joe Walker <jwalker@mozilla.com>
  • Loading branch information
joewalker committed Feb 6, 2015
1 parent 118be54 commit 75c9db4
Show file tree
Hide file tree
Showing 12 changed files with 272 additions and 241 deletions.
44 changes: 6 additions & 38 deletions gcli.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,46 +21,14 @@ exports.gcliHome = __dirname;

var system = require('./lib/gcli/system').createSystem();

/*
* GCLI is built from a number of components (called items) composed as
* required for each environment.
* When adding to or removing from this list, we should keep the basics in sync
* with the other environments.
* See:
* - lib/gcli/index.js: Generic basic set (without commands)
* - lib/gcli/demo.js: Adds demo commands to basic set for use in web demo
* - gcli.js: Add commands to basic set for use in Node command line
* - mozilla/gcli/index.js: From scratch listing for Firefox
* - lib/gcli/connectors/index.js: Client only items when executing remotely
* - lib/gcli/connectors/direct.js: Test items for connecting to in-process GCLI
*/
var items = [
require('./lib/gcli/index').items,

require('./lib/gcli/cli').items,
require('./lib/gcli/commands/clear').items,
require('./lib/gcli/commands/connect').items,
require('./lib/gcli/commands/context').items,
require('./lib/gcli/commands/exec').items,
require('./lib/gcli/commands/global').items,
require('./lib/gcli/commands/help').items,
require('./lib/gcli/commands/intro').items,
require('./lib/gcli/commands/lang').items,
require('./lib/gcli/commands/mocks').items,
require('./lib/gcli/commands/pref').items,
require('./lib/gcli/commands/preflist').items,
require('./lib/gcli/commands/test').items,

require('./lib/gcli/commands/demo/alert').items,
require('./lib/gcli/commands/demo/demo').items,
require('./lib/gcli/commands/demo/echo').items,
require('./lib/gcli/commands/demo/sleep').items,
require('./lib/gcli/items/basic').items,
require('./lib/gcli/items/ui').items,
require('./lib/gcli/items/remote').items,
require('./lib/gcli/items/standard').items,
require('./lib/gcli/items/demo').items,
require('./lib/gcli/items/server').items,

require('./lib/gcli/commands/server/exit').items,
require('./lib/gcli/commands/server/firefox').items,
require('./lib/gcli/commands/server/orion').items,
require('./lib/gcli/commands/server/server').items,
require('./lib/gcli/commands/server/standard').items
].reduce(function(prev, curr) { return prev.concat(curr); }, []);

system.addItems(items);
Expand Down
7 changes: 4 additions & 3 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,13 @@
paths: { i18n: '../scripts/i18n', text: '../scripts/text' }
});

var modules = [ 'gcli/index', 'gcli/demo', 'gcli/test/index' ];
var modules = [ 'gcli/index', 'gcli/items/demo', 'gcli/test/index' ];
require(modules, function(gcli, demo, test) {
// Add the commands/types/converters as required
var system = gcli.createSystem();
system.addItems(gcli.items); // The basic set that most people need
system.addItems(demo.items); // Demo commands
system.addItems(gcli.items); // Common infrastructure: types, etc
system.addItems(gcli.commandItems); // Common set of useful commands
system.addItems(demo.items); // Extra demo commands

gcli.createTerminal(system).then(function(terminal) {
terminal.language.showIntro(); // Intro text
Expand Down
45 changes: 7 additions & 38 deletions lib/gcli/connectors/direct.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,44 +25,6 @@ var Promise = require('../util/promise').Promise;
var Remoter = require('./remoted').Remoter;
var Connection = require('./connectors').Connection;

var items = [
require('../types/delegate').items,
require('../types/selection').items,

require('../types/array').items,
require('../types/boolean').items,
require('../types/command').items,
require('../types/date').items,
require('../types/file').items,
require('../types/javascript').items,
require('../types/node').items,
require('../types/number').items,
require('../types/resource').items,
require('../types/setting').items,
require('../types/string').items,
require('../types/union').items,
require('../types/url').items,

require('../cli').items,

require('../commands/clear').items,
require('../commands/connect').items,
require('../commands/context').items,
require('../commands/exec').items,
require('../commands/global').items,
require('../commands/help').items,
require('../commands/intro').items,
require('../commands/lang').items,
require('../commands/mocks').items,
require('../commands/preflist').items,
require('../commands/pref').items,
require('../commands/test').items,
require('../commands/demo/alert').items,
require('../commands/demo/echo').items,
require('../commands/demo/sleep').items

].reduce(function(prev, curr) { return prev.concat(curr); }, []);

exports.items = [
{
// Communicate with a 'remote' server that isn't remote at all
Expand All @@ -78,6 +40,13 @@ exports.items = [
function DirectConnection() {
this._emit = this._emit.bind(this);

// The items to use in our new command line
var items = [
require('../items/basic').items,
require('../items/standard').items,
require('../items/demo').items,
].reduce(function(prev, curr) { return prev.concat(curr); }, []);

// This is the 'server'
var system = createSystem();
system.addItems(items);
Expand Down
55 changes: 6 additions & 49 deletions lib/gcli/connectors/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,58 +23,15 @@ var Types = require('../types/types').Types;
// Patch-up IE9
require('../util/legacy');

/*
* GCLI is built from a number of components (called items) composed as
* required for each environment.
* When adding to or removing from this list, we should keep the basics in sync
* with the other environments.
* See:
* - lib/gcli/index.js: Generic basic set (without commands)
* - lib/gcli/demo.js: Adds demo commands to basic set for use in web demo
* - gcli.js: Add commands to basic set for use in Node command line
* - lib/gcli/index.js: From scratch listing for Firefox
* - lib/gcli/connectors/index.js: Client only items when executing remotely
* - lib/gcli/connectors/direct.js: Test items for connecting to in-process GCLI
/**
*
*/
var items = [
// First we need to add the local types which other types depend on
require('../types/delegate').items,
require('../types/selection').items,
require('../types/array').items,

require('../types/boolean').items,
require('../types/command').items,
require('../types/date').items,
require('../types/file').items,
require('../types/javascript').items,
require('../types/node').items,
require('../types/number').items,
require('../types/resource').items,
require('../types/setting').items,
require('../types/string').items,
require('../types/union').items,
require('../types/url').items,

require('../fields/fields').items,
require('../fields/delegate').items,
require('../fields/selection').items,

require('../ui/intro').items,
require('../ui/focus').items,

require('../converters/converters').items,
require('../converters/basic').items,
require('../converters/html').items,
require('../converters/terminal').items,

require('../languages/command').items,
require('../languages/javascript').items,

require('./direct').items,
// require('./rdp').items, // Firefox remote debug protocol
require('./websocket').items,
require('./xhr').items,
require('../items/basic').items,
require('../items/ui').items,
require('../items/remote').items,

// TODO: why is this here?
require('../commands/context').items,

].reduce(function(prev, curr) { return prev.concat(curr); }, []);
Expand Down
58 changes: 0 additions & 58 deletions lib/gcli/demo.js

This file was deleted.

88 changes: 33 additions & 55 deletions lib/gcli/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,66 +16,44 @@

'use strict';

var createSystem = require('./system').createSystem;
var Terminal = require('./ui/terminal').Terminal;

// Patch-up old browsers
require('./util/legacy');

/*
* GCLI is built from a number of components (called items) composed as
* required for each environment.
* When adding to or removing from this list, we should keep the basics in sync
* with the other environments.
* See:
* - lib/gcli/index.js: Generic basic set (without commands)
* - lib/gcli/demo.js: Adds demo commands to basic set for use in web demo
* - gcli.js: Add commands to basic set for use in Node command line
* - mozilla/gcli/index.js: From scratch listing for Firefox
* - lib/gcli/connectors/index.js: Client only items when executing remotely
* - lib/gcli/connectors/direct.js: Test items for connecting to in-process GCLI
* The intent of this module is to pull together all the parts needed to start
* a command line to make it easier to get started.
*
* Basic usage is like this:
*
* var gcli = require('gcli/index');
*
* // A system is a set of commands/types/etc that the command line uses
* var system = gcli.createSystem();
* system.addItems(gcli.items);
* system.addItems(gcli.commandItems);
* system.addItems([
* // Your own commands go here
* ]);
*
* // Create the UI
* gcli.createTerminal(system).then(function(terminal) {
* // Take any actions when the command line starts for example
* terminal.language.showIntro();
* });
*/
exports.items = [
require('./types/delegate').items,
require('./types/selection').items,
require('./types/array').items,

require('./types/boolean').items,
require('./types/command').items,
require('./types/date').items,
require('./types/file').items,
require('./types/javascript').items,
require('./types/node').items,
require('./types/number').items,
require('./types/resource').items,
require('./types/setting').items,
require('./types/string').items,
require('./types/union').items,
require('./types/url').items,

require('./fields/fields').items,
require('./fields/delegate').items,
require('./fields/selection').items,

require('./ui/focus').items,
require('./ui/intro').items,

require('./converters/converters').items,
require('./converters/basic').items,
require('./converters/html').items,
require('./converters/terminal').items,
// Patch-up old browsers
require('./util/legacy');

require('./languages/command').items,
require('./languages/javascript').items,
exports.createSystem = require('./system').createSystem;

// require('./connectors/direct').items, // Loopback for testing only
// require('./connectors/rdp').items, // Firefox remote debug protocol
require('./connectors/websocket').items,
require('./connectors/xhr').items,
var Terminal = require('./ui/terminal').Terminal;
exports.createTerminal = Terminal.create.bind(Terminal);

// No commands in the basic set
/**
* This is all the items we need for a basic GCLI (except for the commands)
*/
exports.items = [
require('./items/basic').items,
require('./items/ui').items,
require('./items/remote').items,
].reduce(function(prev, curr) { return prev.concat(curr); }, []);

exports.createSystem = createSystem;

exports.createTerminal = Terminal.create.bind(Terminal);
exports.commandItems = require('./items/standard').items;
Loading

0 comments on commit 75c9db4

Please sign in to comment.