var assert = require("assert"); module.exports = function(options) { assert(options.staticPrefix, "Option 'staticPrefix' must be set"); assert(options.workspaceDir, "Option 'workspaceDir' must be set"); assert(options.workspaceId, "Option 'workspaceId' must be set"); assert(options.workspaceName, "Option 'workspaceName' must be set"); assert(options.home, "Option 'home' must be set"); assert(options.platform, "Option 'platform' must be set"); // normalize workspacedir and home paths function normalize(path) { path = path.replace(/([^/])\/$/, "$1"); if (options.platform == "win32") path = path.replace(/\\/g, "/"); return path; } options.workspaceDir = normalize(options.workspaceDir); options.installPath = normalize(options.installPath); options.home = normalize(options.home); var workspaceDir = options.workspaceDir; var debug = options.debug !== undefined ? options.debug : false; var collab = options.collab; var packaging = options.packaging; var staticPrefix = options.staticPrefix; var nodeBin = options.nodeBin || ["node"]; var nodePath = options.nodePath || ""; var runners = options.runners || {}; var builders = options.builders || {}; var hosted = !options.local && !options.dev; var devel = options.standalone && !options.local || options.mode === "devel" || options.dev; var localExtendFiles = options.localExtend || options.standalone; // allow extend code access only to C9-deveoped plugins var extendToken = options.extendToken || "token"; var plugins = [ // C9 { packagePath: "plugins/c9.core/c9", startdate: new Date(), version: options.manifest.version + " (" + options.manifest.revision + ")", debug: debug, workspaceId: options.workspaceId, workspaceDir: workspaceDir, name: options.workspaceName, readonly: options.readonly, isAdmin: options.isAdmin, staticUrl: staticPrefix, hosted: hosted, hostname: options.appHostname, local: options.local, env: options.env || "devel", home: options.home, platform: options.platform, arch: options.arch, installed: options.installed, projectId: options.project.id, projectName: options.projectName || "Project", configName: options.configName, standalone: options.standalone }, { packagePath: "plugins/c9.core/settings", settings: options.settings, userConfigPath: options.settingDir, hosted: hosted }, "plugins/c9.core/ext", { packagePath: "plugins/c9.core/http-xhr", debug: !options.packed }, // { // packagePath: "plugins/c9.core/client", // baseUrl: options.apiUrl // }, "plugins/c9.core/util", { packagePath: "plugins/c9.ide.plugins/loader", plugins: options.plugins || [], loadFromDisk: options.standalone }, { packagePath: "plugins/c9.ide.plugins/installer", updates: options.pluginUpdates || [] }, { packagePath: "plugins/c9.ide.plugins/manager", staticPrefix: staticPrefix + "/plugins/c9.ide.plugins" }, { packagePath: "plugins/c9.ide.plugins/debug" }, { packagePath: "plugins/c9.ide.plugins/market" }, // VFS "plugins/c9.vfs.client/vfs.ping", { packagePath: "plugins/c9.vfs.client/vfs_client", debug: debug, installPath: options.installPath, dashboardUrl: options.dashboardUrl, accountUrl: options.accountUrl }, { packagePath: "plugins/c9.vfs.client/endpoint", readonly: options.readonly, region: options.region, pid: options.project.id, servers: options.vfsServers, updateServers: hosted }, { packagePath: "plugins/c9.ide.auth/auth", accessToken: options.accessToken || "token", ideBaseUrl: options.ideBaseUrl, apiUrl: options.apiUrl, userId: options.user.id }, { packagePath: "plugins/c9.core/api", apiUrl: options.apiUrl, projectId: options.project.id }, // Editors "plugins/c9.ide.editors/document", { packagePath: "plugins/c9.ide.editors/editors", defaultEditor: "ace" }, "plugins/c9.ide.editors/editor", "plugins/c9.ide.editors/imgview", { packagePath: "plugins/c9.ide.imgeditor/imgeditor", staticPrefix: staticPrefix + "/plugins/c9.ide.imgeditor" }, "plugins/c9.ide.editors/urlview", // "plugins/c9.ide.editors/htmlview", "plugins/c9.ide.editors/tab", { packagePath: "plugins/c9.ide.editors/tabmanager", loadFilesAtInit: false }, { packagePath: "plugins/c9.ide.editors/metadata" }, "plugins/c9.ide.editors/pane", "plugins/c9.ide.editors/undomanager", "plugins/c9.ide.newresource/newresource", "plugins/c9.ide.newresource/open", "plugins/c9.ide.undo/undo", { packagePath: "plugins/c9.ide.closeconfirmation/closeconfirmation", defaultValue: options.local }, { packagePath: "plugins/c9.ide.openfiles/openfiles", staticPrefix: staticPrefix + "/plugins/c9.ide.layout.classic", defaultShow: options.local }, { packagePath: "plugins/c9.ide.metrics/metrics", hosted: hosted }, // Ace && Commands "plugins/c9.ide.keys/commands", "plugins/c9.ide.keys/editor", { packagePath: "plugins/c9.ide.ace/ace", staticPrefix: staticPrefix + "/plugins/c9.ide.layout.classic", workerPrefix: options.workerPrefix }, "plugins/c9.ide.ace/themes", "plugins/c9.ide.ace.stripws/stripws", "plugins/c9.ide.ace.repl/editor", // "plugins/c9.ide.ace.split/split", { packagePath: "plugins/c9.ide.ace.gotoline/gotoline", staticPrefix: staticPrefix + "/plugins/c9.ide.ace.gotoline" }, { packagePath: "plugins/c9.ide.ace.statusbar/statusbar", staticPrefix: staticPrefix + "/plugins/c9.ide.layout.classic" }, "plugins/c9.ide.ace.keymaps/keymaps", "plugins/c9.ide.ace.keymaps/cli", "plugins/c9.ide.ace.emmet/emmet", // Find { packagePath: "plugins/c9.ide.find/find", basePath: workspaceDir }, { packagePath: "plugins/c9.ide.find/find.nak", ignore: "", useHttp: true, basePath: workspaceDir, installPath: options.installPath, nak: options.nakBin || "~/.c9/node_modules/nak/bin/nak", node: options.nodeBin, local: options.local, installPath: options.installPath }, { packagePath: "plugins/c9.ide.find.infiles/findinfiles", staticPrefix: staticPrefix + "/plugins/c9.ide.find.infiles" }, { packagePath: "plugins/c9.ide.find.replace/findreplace", staticPrefix: staticPrefix + "/plugins/c9.ide.find.replace" }, // UI { packagePath: "plugins/c9.ide.ui/ui", staticPrefix: staticPrefix + "/plugins/c9.ide.ui" }, "plugins/c9.ide.ui/anims", "plugins/c9.ide.ui/tooltip", { packagePath: "plugins/c9.ide.ui/menus", autoInit: !options.local }, "plugins/c9.ide.ui/forms", { packagePath: "plugins/c9.ide.ui/widgets.list", staticPrefix: staticPrefix + "/plugins/c9.ide.layout.classic" }, "plugins/c9.ide.ui/widgets.tree", "plugins/c9.ide.ui/widgets.datagrid", "plugins/c9.ide.ui/widgets.terminal", "plugins/c9.ide.ui/focus", "plugins/c9.ide.ui/lib_apf", "plugins/c9.ide.dialog/dialog", "plugins/c9.ide.dialog.common/alert", "plugins/c9.ide.dialog.common/alert_internal", "plugins/c9.ide.dialog.common/confirm", "plugins/c9.ide.dialog.common/filechange", "plugins/c9.ide.dialog.common/fileoverwrite", "plugins/c9.ide.dialog.common/fileremove", "plugins/c9.ide.dialog.common/question", { packagePath: "plugins/c9.ide.dialog.common/error", staticPrefix: staticPrefix + "/plugins/c9.ide.layout.classic" }, { packagePath: "plugins/c9.ide.dialog.common/notification", staticPrefix: staticPrefix + "/plugins/c9.ide.layout.classic" }, { packagePath: "plugins/c9.ide.dialog.login/login", noLogout: !options.local }, "plugins/c9.ide.dialog.file/file", "plugins/c9.ide.dialog.wizard/wizard", // VFS "plugins/c9.fs/proc", "plugins/c9.fs/proc.apigen", "plugins/c9.fs/net", { packagePath: "plugins/c9.fs/fs", baseProc: workspaceDir }, "plugins/c9.fs/fs.errors", "plugins/c9.fs/fs.cache.xml", { packagePath: "plugins/c9.ide.readonly/access_control", dashboardUrl: options.dashboardUrl, readonly: options.readonly }, // Watcher "plugins/c9.ide.threewaymerge/threewaymerge", "plugins/c9.ide.watcher/watcher", { packagePath: "plugins/c9.ide.watcher/gui", collab: collab }, // Language { packagePath: "plugins/c9.ide.language/language", workspaceDir: workspaceDir, workerPrefix: options.CORSWorkerPrefix // "/static/standalone/worker" }, "plugins/c9.ide.language/keyhandler", "plugins/c9.ide.language/complete", "plugins/c9.ide.language/marker", "plugins/c9.ide.language/refactor", "plugins/c9.ide.language/tooltip", "plugins/c9.ide.language/jumptodef", "plugins/c9.ide.language/worker_util_helper", "plugins/c9.ide.language.generic/generic", "plugins/c9.ide.language.css/css", "plugins/c9.ide.language.html/html", "plugins/c9.ide.language.javascript/javascript", "plugins/c9.ide.language.javascript.immediate/immediate", "plugins/c9.ide.language.javascript.infer/jsinfer", "plugins/c9.ide.language.javascript.tern/tern", "plugins/c9.ide.language.javascript.tern/architect_resolver", "plugins/c9.ide.language.javascript.eslint/eslint", { packagePath: "plugins/c9.ide.language.jsonalyzer/jsonalyzer", extendToken: extendToken, workspaceDir: workspaceDir, homeDir: options.home, bashBin: options.bashBin, useCollab: collab, useSend: !collab && (options.local || options.standalone), maxServerCallInterval: 2000 }, // Run { packagePath: "plugins/c9.ide.run/run", base: workspaceDir, staticPrefix: staticPrefix + "/plugins/c9.ide.run", tmux: options.tmux, runners: runners, installPath: options.correctedInstallPath, local: options.local }, { packagePath: "plugins/c9.ide.run/gui", staticPrefix: staticPrefix + "/plugins/c9.ide.layout.classic", defaultConfigs: {} }, { packagePath: "plugins/c9.ide.run.build/build", base: workspaceDir, builders: builders }, { packagePath: "plugins/c9.ide.run.build/gui" }, // "plugins/c9.ide.run.debug/debuggers/sourcemap", { packagePath: "plugins/c9.ide.run.debug/debuggers/debugger", staticPrefix: staticPrefix + "/plugins/c9.ide.layout.classic" }, { packagePath: "plugins/c9.ide.run.debug/debuggers/v8/v8debugger", basePath: workspaceDir }, { packagePath: "plugins/c9.ide.run.debug/debuggers/socket", nodeBin: nodeBin }, "plugins/c9.ide.run.debug/breakpoints", "plugins/c9.ide.run.debug/debugpanel", "plugins/c9.ide.run.debug/callstack", { packagePath: "plugins/c9.ide.immediate/immediate", staticPrefix: staticPrefix + "/plugins/c9.ide.layout.classic" }, "plugins/c9.ide.immediate/evaluator", "plugins/c9.ide.immediate/evaluators/browserjs", "plugins/c9.ide.immediate/evaluators/debugnode", "plugins/c9.ide.run.debug/variables", "plugins/c9.ide.run.debug/watches", "plugins/c9.ide.run.debug/liveinspect", "plugins/c9.ide.run.debug.xdebug/xdebug", // Console { packagePath: "plugins/c9.ide.terminal/terminal", tmux: options.tmux, root: workspaceDir, tmpdir: options.tmpdir, shell: options.shell || "", staticPrefix: staticPrefix + "/plugins/c9.ide.terminal", installPath: options.correctedInstallPath }, { packagePath: "plugins/c9.ide.terminal/predict_echo" }, { packagePath: "plugins/c9.ide.terminal/link_handler", previewUrl: options.previewUrl }, { packagePath: "plugins/c9.ide.terminal.monitor/monitor", bashBin: options.bashBin }, { packagePath: "plugins/c9.ide.terminal.monitor/message_view", staticPrefix: options.staticPrefix + "/plugins/c9.ide.layout.classic" }, "plugins/c9.ide.terminal/opentermhere", { packagePath: "plugins/c9.ide.run/output", staticPrefix: options.staticPrefix + "/plugins/c9.ide.layout.classic", tmux: options.tmux, basePath: workspaceDir }, { packagePath: "plugins/c9.ide.console/console", staticPrefix: staticPrefix + "/plugins/c9.ide.layout.classic", defaultState: options.project.scmurl ? { type: "pane", nodes: [{ type: "tab", editorType: "terminal", active: "true", document: { changed: false, meta: { timestamp: Date.now() }, filter: true, title: "bash - \"Cloning ...\"", tooltip: "bash - \"Cloning ...\"", terminal: { id: "clone", cwd: "" } } }, { type: "tab", editorType: "immediate", document: { title: "Immediate" } }] } : null }, // Layout & Panels { packagePath: "plugins/c9.ide.layout.classic/layout", staticPrefix: staticPrefix + "/plugins/c9.ide.layout.classic", dashboardUrl: options.dashboardUrl, cdn: options.useCdn }, "plugins/c9.ide.theme.flat/flat-light", { packagePath: "plugins/c9.ide.layout.classic/preload", themePrefix: options.themePrefix, defaultTheme: "dark" }, { packagePath: "plugins/c9.ide.tree/tree", staticPrefix: staticPrefix + "/plugins/c9.ide.layout.classic", defaultExpanded: true }, { packagePath: "plugins/c9.ide.tree/favorites", startEmpty: options.local, alwaysScope: options.local, realRoot: true, home: options.local ? options.home : "~" }, "plugins/c9.ide.mount/mount", { packagePath: "plugins/c9.ide.mount/ftp", curlftpfsBin: options.mount.curlftpfsBin, fusermountBin: options.mount.fusermountBin }, { packagePath: "plugins/c9.ide.mount/sftp", sshfsBin: options.mount.sshfsBin, fusermountBin: options.mount.fusermountBin }, { packagePath: "plugins/c9.ide.upload/dragdrop", treeAsPane: options.local }, { packagePath: "plugins/c9.ide.upload/upload", staticPrefix: staticPrefix + "/plugins/c9.ide.upload" }, { packagePath: "plugins/c9.ide.upload/upload_manager", workerPrefix: "plugins/c9.ide.upload" }, { packagePath: "plugins/c9.ide.upload/upload_progress", staticPrefix: staticPrefix + "/plugins/c9.ide.layout.classic" }, { packagePath: "plugins/c9.ide.navigate/navigate", loadListAtInit: false }, { packagePath: "plugins/c9.ide.keys/panel" }, { packagePath: "plugins/c9.ide.language/outline", staticPrefix: staticPrefix + "/plugins/c9.ide.language" }, { packagePath: "plugins/c9.ide.panels/panels", staticPrefix: staticPrefix + "/plugins/c9.ide.layout.classic", defaultActiveLeft: "tree" }, "plugins/c9.ide.panels/panel", "plugins/c9.ide.panels/area", // Installer { packagePath: "plugins/c9.ide.installer/gui", staticPrefix: staticPrefix + "/plugins/c9.ide.layout.classic", }, "plugins/c9.automate/automate", "plugins/c9.ide.installer/commands/centos", "plugins/c9.ide.installer/commands/bash", "plugins/c9.ide.installer/commands/npm", "plugins/c9.ide.installer/commands/symlink", { packagePath: "plugins/c9.ide.installer/commands/tar.gz", bashBin: options.bashBin }, "plugins/c9.ide.installer/commands/ubuntu", { packagePath: "plugins/c9.ide.installer/installer", homeDir: options.homeDir, installSelfCheck: true, installPath: options.installPath }, // Previewer { packagePath: "plugins/c9.ide.preview/preview", staticPrefix: staticPrefix + "/plugins/c9.ide.preview", defaultPreviewer: "preview.browser", previewUrl: options.previewUrl, local: options.local }, "plugins/c9.ide.preview/previewer", "plugins/c9.ide.preview/previewers/raw", { packagePath: "plugins/c9.ide.preview.browser/browser", local: options.local }, { packagePath: "plugins/c9.ide.preview.markdown/markdown", staticPrefix: staticPrefix, htmlPath: "/plugins/c9.ide.preview.markdown/markdown.html", local: options.local }, "plugins/c9.ide.remote/manager", "plugins/c9.ide.remote/documents/htmldocument", "plugins/c9.ide.remote/documents/cssdocument", "plugins/c9.ide.remote/documents/jsdocument", { packagePath: "plugins/c9.ide.remote/transports/postmessage", previewBaseUrl: options.previewBaseUrl }, // "plugins/c9.ide.remote/transports/debugger", // "plugins/c9.ide.remote/transports/websocket", // Formatters "plugins/c9.ide.format/format", "plugins/c9.ide.format/formatters/jsbeautify", // Other "plugins/c9.ide.download/download", { packagePath: "plugins/c9.ide.info/info", installPath: options.installPath, user: { id: options.user.id, name: options.user.name, fullname: options.user.fullname, email: options.user.email, pubkey: options.user.pubkey, date_add: options.user.date_add, active: options.user.active, alpha: options.user.alpha, beta: options.user.beta, c9version: options.user.c9version, no_newsletter: options.user.no_newsletter, subscription_on_signup: options.user.subscription_on_signup, premium: options.user.premium, region: options.user.region }, project: { id: options.project.id, name: options.project.name, contents: options.project.contents, descr: options.project.descr, remote: options.project.remote } }, { packagePath: "plugins/c9.ide.welcome/welcome", staticPrefix: staticPrefix + "/plugins/c9.ide.welcome", intro: "Welcome to Cloud9. Use this welcome screen " + "to tweak the look & feel of the Cloud9 user interface. ", checkOS: true }, { packagePath: "plugins/c9.cli.bridge/bridge", port: 17123, startBridge: options.startBridge }, { packagePath: "plugins/c9.cli.bridge/bridge_commands", basePath: workspaceDir }, { packagePath: "plugins/c9.ide.help.support/support", baseurl: options.ideBaseUrl, userSnapApiKey: options.support.userSnapApiKey, screenshotSupport: true }, { packagePath: "plugins/c9.ide.help/help", staticPrefix: staticPrefix + "/plugins/c9.ide.help" }, { packagePath: "plugins/c9.ide.configuration/configure" }, "plugins/c9.ide.save/save", "plugins/c9.ide.recentfiles/recentfiles", { packagePath: "plugins/c9.ide.save/autosave" }, { packagePath: "plugins/c9.ide.clipboard/clipboard", local: options.local }, { packagePath: "plugins/c9.ide.clipboard/html5" }, "plugins/c9.ide.behaviors/tabs", // { // packagePath: "plugins/c9.ide.behaviors/dashboard", // staticPrefix : staticPrefix + "/plugins/c9.ide.behaviors" // }, { packagePath: "plugins/c9.ide.behaviors/page", staticPrefix: staticPrefix + "/plugins/c9.ide.behaviors" }, "plugins/c9.ide.browsersupport/browsersupport", { packagePath: "plugins/c9.ide.preferences/preferences", staticPrefix: staticPrefix + "/plugins/c9.ide.preferences" }, "plugins/c9.ide.preferences/preferencepanel", { packagePath: "plugins/c9.ide.preferences/general", installPath: options.installPath, local: options.local }, { packagePath: "plugins/c9.ide.preferences/project", basePath: workspaceDir, local: options.local }, { packagePath: "plugins/c9.ide.login/login", staticPrefix: staticPrefix + "/plugins/c9.ide.login", ideBaseUrl: options.ideBaseUrl, dashboardUrl: options.dashboardUrl, accountUrl: options.accountUrl, local: options.local }, { packagePath: "plugins/c9.ide.pubsub/pubsub-client", extendToken: extendToken }, { packagePath: "plugins/c9.ide.collab/notifications/bubble", staticPrefix: staticPrefix + "/plugins/c9.ide.collab/notifications" }, ]; if (packaging || !devel) { plugins.push({ packagePath: "plugins/c9.ide.errorhandler/raygun_error_handler", version: options.manifest.version, revision: options.manifest.revision, apiKey: options.raygun.apiKey || options.raygun.client.apiKey }); } if (packaging || devel) { plugins.push({ packagePath: "plugins/c9.ide.errorhandler/simple_error_handler", version: options.manifest.version, revision: options.manifest.revision }); } // Collab if (packaging || !collab) { plugins.push( "plugins/c9.ide.language.jsonalyzer/mock_collab" ); } if (packaging || collab) { plugins.push( { packagePath: "plugins/c9.ide.collab/connect", extendToken: extendToken, enable: collab, debug: debug, localServerFile: localExtendFiles, nodeBin: nodeBin, nodePath: nodePath, basePath: workspaceDir }, "plugins/c9.ide.collab/collab", "plugins/c9.ide.collab/collabpanel", { packagePath: "plugins/c9.ide.collab/workspace", hosted: hosted, isAdmin: options.isAdmin }, "plugins/c9.ide.collab/util", { packagePath: "plugins/c9.ide.collab/ot/document", minDelay: 500, maxDelay: 10000 }, { packagePath: "plugins/c9.ide.collab/cursor_layer", staticPrefix: staticPrefix + "/plugins/c9.ide.collab" }, "plugins/c9.ide.collab/author_layer", { packagePath: "plugins/c9.ide.collab/timeslider/timeslider", staticPrefix: staticPrefix + "/plugins/c9.ide.collab/timeslider" }, // Collab panels { packagePath: "plugins/c9.ide.collab/notifications/notifications", hosted: hosted, isAdmin: options.isAdmin }, "plugins/c9.ide.collab/members/members_panel", { packagePath: "plugins/c9.ide.collab/share/share", previewUrl: options.previewUrl, local: options.local }, { packagePath: "plugins/c9.ide.collab/members/members", staticPrefix: staticPrefix + "/plugins/c9.ide.layout.classic" }, { packagePath: "plugins/c9.ide.collab/chat/chat", staticPrefix: staticPrefix + "/plugins/c9.ide.collab/chat" }); } return plugins; };