diff --git a/packages/driver/package.json b/packages/driver/package.json index 7032befebd..3160aa56ee 100644 --- a/packages/driver/package.json +++ b/packages/driver/package.json @@ -10,7 +10,9 @@ "clean-deps": "rm -rf node_modules", "test": "gulp test" }, + "main": "index.js", "files": [ + "index.js", "dist", "lib" ], diff --git a/packages/driver/test/support/server/server.coffee b/packages/driver/test/support/server/server.coffee index e60d70677e..49770d76f2 100644 --- a/packages/driver/test/support/server/server.coffee +++ b/packages/driver/test/support/server/server.coffee @@ -9,7 +9,7 @@ glob = require("glob") coffee = require("../../../../coffee") str = require("string-to-stream") Promise = require("bluebird") -xhrs = require("@packages/server/lib/controllers/xhrs") +xhrs = require("../../../../server/lib/controllers/xhrs") Runner = require("./runner") args = require("minimist")(process.argv.slice(2)) diff --git a/packages/https-proxy/package.json b/packages/https-proxy/package.json index a45957a91e..5b7a5fc215 100644 --- a/packages/https-proxy/package.json +++ b/packages/https-proxy/package.json @@ -29,7 +29,9 @@ }, "dependencies": { "bluebird": "^3.4.0", + "debug": "^2.6.8", "fs-extra": "^0.30.0", + "lodash": "^4.17.4", "node-forge": "^0.6.39", "semaphore": "^1.0.5", "server-destroy-vvo": "1.0.1", diff --git a/packages/server/test/integration/http_requests_spec.coffee b/packages/server/test/integration/http_requests_spec.coffee index d9b3e8abc6..0f4f188156 100644 --- a/packages/server/test/integration/http_requests_spec.coffee +++ b/packages/server/test/integration/http_requests_spec.coffee @@ -16,7 +16,7 @@ cjsxify = require("cjsxify") streamToPromise = require("stream-to-promise") evilDns = require("evil-dns") Promise = require("bluebird") -httpsServer = require("@packages/https-proxy/test/helpers/https_server") +httpsServer = require("#{root}../https-proxy/test/helpers/https_server") pkg = require("#{root}package.json") config = require("#{root}lib/config") Server = require("#{root}lib/server") diff --git a/packages/server/test/integration/server_spec.coffee b/packages/server/test/integration/server_spec.coffee index 4f4e003063..e7ee78ce5b 100644 --- a/packages/server/test/integration/server_spec.coffee +++ b/packages/server/test/integration/server_spec.coffee @@ -4,7 +4,7 @@ _ = require("lodash") rp = require("request-promise") Promise = require("bluebird") evilDns = require("evil-dns") -httpsServer = require("@packages/https-proxy/test/helpers/https_server") +httpsServer = require("#{root}../https-proxy/test/helpers/https_server") buffers = require("#{root}lib/util/buffers") config = require("#{root}lib/config") Server = require("#{root}lib/server") diff --git a/packages/server/test/integration/websockets_spec.coffee b/packages/server/test/integration/websockets_spec.coffee index 0d3580b589..1701992555 100644 --- a/packages/server/test/integration/websockets_spec.coffee +++ b/packages/server/test/integration/websockets_spec.coffee @@ -6,8 +6,8 @@ ws = require("ws") httpsAgent = require("https-proxy-agent") evilDns = require("evil-dns") Promise = require("bluebird") -socketIo = require("@packages/socket") -httpsServer = require("@packages/https-proxy/test/helpers/https_server") +socketIo = require("#{root}../socket") +httpsServer = require("#{root}../https-proxy/test/helpers/https_server") config = require("#{root}lib/config") Server = require("#{root}lib/server") Automation = require("#{root}lib/automation") diff --git a/scripts/binary/base.coffee b/scripts/binary/base.coffee index 7d083001fa..6649172306 100644 --- a/scripts/binary/base.coffee +++ b/scripts/binary/base.coffee @@ -13,10 +13,13 @@ obfuscator = require("obfuscator") cypressElectron = require("@packages/electron") log = require("./log") meta = require("./meta") -pkg = require("../../package.json") -konfig = require("@packages/server/lib/konfig") -appData = require("@packages/server/lib/util/app_data") -Fixtures = require("@packages/server/test/support/helpers/fixtures") + +root = "../.." +pkg = require(path.join(root, "package.json")) +fromPackages = _.partial(path.join, root, "packages") +konfig = require(fromPackages("server/lib/konfig")) +appData = require(fromPackages("server/lib/util/app_data")) +Fixtures = require(fromPackages("server/test/support/helpers/fixtures")) # pkgr = Promise.promisify(pkgr) fs = Promise.promisifyAll(fs) diff --git a/scripts/binary/build.coffee b/scripts/binary/build.coffee index 356dcad9d7..332fedb527 100644 --- a/scripts/binary/build.coffee +++ b/scripts/binary/build.coffee @@ -1,5 +1,5 @@ _ = require("lodash") -fs = require("fs-extra") +fse = require("fs-extra") del = require("del") path = require("path") gulp = require("gulp") @@ -13,12 +13,13 @@ vinylPaths = require("vinyl-paths") coffee = require("@packages/coffee") electron = require("@packages/electron") +linkPackages = require('../link-packages') meta = require("./meta") packages = require("./util/packages") Darwin = require("./darwin") Linux = require("./linux") -fs = Promise.promisifyAll(fs) +fs = Promise.promisifyAll(fse) logger = (msg, platform) -> console.log(chalk.yellow(msg), chalk.bgWhite(chalk.black(platform))) @@ -94,10 +95,16 @@ module.exports = (platform, version, options = {}) -> fs.outputFileAsync(distDir("index.js"), str) - symlinkPackages = -> - log("#symlinkPackages") - - packages.symlinkAll(distDir("packages", "*", "package.json"), distDir) + copyPackageProxies = (destinationFolder) -> + () -> + log("#copyPackageProxies") + dest = destinationFolder("node_modules", "@packages") + source = path.join(process.cwd(), "node_modules", "@packages") + fs.unlinkAsync(dest).catch(_.noop) + .then(() -> + console.log("Copying #{source} to #{dest}") + fs.copyAsync(source, dest) + ) removeTypeScript = -> ## remove the .ts files in our packages @@ -117,23 +124,6 @@ module.exports = (platform, version, options = {}) -> ) console.log(paths) - symlinkBuildPackages = -> - log("#symlinkBuildPackages") - wildCard = buildAppDir("packages", "*", "package.json") - console.log("packages", wildCard) - packages.symlinkAll( - wildCard, - buildAppDir - ) - - symlinkDistPackages = -> - log("#symlinkDistPackages") - - packages.symlinkAll( - distDir("packages", "*", "package.json"), - distDir - ) - cleanJs = -> log("#cleanJs") @@ -187,13 +177,12 @@ module.exports = (platform, version, options = {}) -> .then(copyPackages) .then(npmInstallPackages) .then(createRootPackage) - .then(symlinkPackages) + .then(copyPackageProxies(distDir)) .then(convertCoffeeToJs) .then(removeTypeScript) .then(cleanJs) - .then(symlinkDistPackages) .then(elBuilder) - .then(symlinkBuildPackages) + .then(copyPackageProxies(buildAppDir)) .then(runSmokeTest) # older build steps diff --git a/scripts/binary/upload.coffee b/scripts/binary/upload.coffee index 7f5e7aa03e..900b8f7290 100644 --- a/scripts/binary/upload.coffee +++ b/scripts/binary/upload.coffee @@ -6,7 +6,7 @@ cp = require("child_process") path = require("path") gulp = require("gulp") human = require("human-interval") -konfig = require("@packages/server/lib/konfig") +konfig = require("../../packages/server/lib/konfig") Promise = require("bluebird") meta = require("./meta") la = require("lazy-ass") diff --git a/scripts/link-packages.js b/scripts/link-packages.js index 3f98966b2f..8359c9c2a7 100644 --- a/scripts/link-packages.js +++ b/scripts/link-packages.js @@ -4,20 +4,88 @@ const fse = require('fs-extra') const path = require('path') const globber = require('glob') const Promise = require('bluebird') +const la = require('lazy-ass') +const is = require('check-more-types') +const debug = require('debug')('cypress:link') +const _ = require('lodash') const fs = Promise.promisifyAll(fse) const glob = Promise.promisify(globber) -const pathToPackages = path.join('node_modules', '@') +const pathToPackages = path.join('node_modules', '@packages') -// glob all of the names of packages -glob('./packages/*') -.map((folder) => { - // strip off the initial './' - // ./packages/foo -> node_modules/@packages/foo - const dest = pathToPackages + folder.slice(2) +function deleteOutputFolder () { + const wildcard = `${pathToPackages}/*` + console.log('deleting all', wildcard) + return glob(wildcard) + .map((filename) => fs.unlinkAsync(filename)) + .catch(_.noop) +} - console.log('symlinking', folder, '->', dest) +function proxyModule (name, pathToMain) { + la(is.unemptyString(name), 'missing name') + la(is.unemptyString(pathToMain), 'missing path to main', pathToMain) + la(!path.isAbsolute(pathToMain), 'path to main should be relative', pathToMain) + return { + name, + version: '0.0.0', + description: `fake proxy module to packages/${name}`, + main: pathToMain, + } +} - return fs.ensureSymlinkAsync(folder, dest) -}) +function proxyRegister (name) { + return `module.exports = require('../../../packages/${name}/register')` +} + +function needsRegister (name) { + return name === '@packages/coffee' || name === '@packages/ts' +} + +function makeProxies () { + return glob('./packages/*/package.json') + .map((filename) => + fs.readJsonAsync(filename) + .then((json) => ({ filename, json })) + ) + .map(({ filename, json }) => { + if (!json.main) { + throw new Error(`Package ${json.name} is missing main`) + } + const dirname = path.dirname(filename) + const bareName = json.name.split('/')[1] + debug(json.name, 'bare name', bareName, 'main', json.main) + const destinationFolder = path.join(pathToPackages, bareName) + const destPackageFilename = path.join(destinationFolder, 'package.json') + const registerPath = path.join(destinationFolder, 'register.js') + const fullMain = path.resolve(dirname, json.main) + debug('full name', fullMain) + const relativePathToMain = path.relative(destinationFolder, fullMain) + debug('relative path to main', relativePathToMain) + + const proxy = proxyModule(json.name, relativePathToMain) + console.log(path.dirname(destPackageFilename), '->', relativePathToMain) + + return fs.outputJsonAsync(destPackageFilename, proxy) + .then(() => { + if (needsRegister(json.name)) { + console.log('adding register file', registerPath) + return fs.outputFileAsync(registerPath, proxyRegister(bareName), 'utf8') + } + }) + }) +} + +function linkPackages () { + return deleteOutputFolder() + .then(makeProxies) + .then(() => { + console.log('✅ require("@packages/") should work now!') + }) +} + +module.exports = linkPackages + +if (!module.parent) { + linkPackages() +}