Commit Graph

1013 Commits

Author SHA1 Message Date
Jean Lauliac 86914666e5 metro-buck: check validity of segments
Reviewed By: davidaurelio

Differential Revision: D6496312

fbshipit-source-id: 586dc8d9f64d13cfddaf6bfe768e8f7b3442561a
2017-12-14 09:59:47 -08:00
Brian Shin d2075f3743 Add inline support code for PlatformOS
Reviewed By: mjesun

Differential Revision: D6491061

fbshipit-source-id: e51b50e8a5b1c497946f8dfa3a95bd7599877018
2017-12-13 09:45:20 -08:00
Brian Shin 1a37164dac Extract some platform related code to a separate file
Reviewed By: davidaurelio

Differential Revision: D6491060

fbshipit-source-id: e8d040495b549e1925932b4ded4b44dd1f81fff6
2017-12-13 09:45:20 -08:00
Rafael Oleza db47372f06 Pass runBeforeMainModule option correctly when building prod bundles
Summary:
On D6248242, runBeforeMainModule was changed to `getModulesRunBeforeMainModule`, but the entry point used by opensource to build prod bundles was not updated. We couldn't catch this since we don't use this codepath internally

Fixes https://github.com/facebook/metro/issues/73

Reviewed By: mjesun

Differential Revision: D6556097

fbshipit-source-id: 889eaf825c7c3cdebe1ca4fc9831020a4a7d56dc
2017-12-13 08:30:59 -08:00
Nat Mote 26159b6638 Update to Flow v0.61.0
Reviewed By: gabelevi

Differential Revision: D6540122

fbshipit-source-id: 0ded15d3b368555d12c693feb4bf491bd9092355
2017-12-12 10:44:53 -08:00
Jean Lauliac 26c7a96f44 metro: JSTransformer/worker: report the filename when a dynamic dep is encountered
Reviewed By: rafeca

Differential Revision: D6544291

fbshipit-source-id: 618851850b50d49a29c767ba0d21a7bad522c4ca
2017-12-12 06:14:30 -08:00
Jean Lauliac 2bd9a503a1 metro: collectDependencies: fix error message
Reviewed By: rafeca

Differential Revision: D6544283

fbshipit-source-id: d2e7144ae6f77f312e02ef7720212e9505bd002e
2017-12-12 06:14:30 -08:00
Rafael Oleza 6f0d786e57 Simplify the inlineRequires transform option on incremental builds
Reviewed By: davidaurelio

Differential Revision: D6533845

fbshipit-source-id: ae38defafe70344d0bb0b80d2266dff0e9b273b1
2017-12-11 13:00:00 -08:00
Rafael Oleza 5e65dfcf81 Consolidate eslint config + fix some issues
Reviewed By: davidaurelio

Differential Revision: D6519564

fbshipit-source-id: 0cd894e92dfde451f8ee69d6c7c3d4cbd73b83ea
2017-12-11 12:32:20 -08:00
Jean Lauliac f044f42030 metro-buck: add e2e testing of command
Reviewed By: davidaurelio

Differential Revision: D6533842

fbshipit-source-id: b641559eb3085bac57ab3a1cc80a3f2f86b7ec92
2017-12-11 11:16:21 -08:00
Maël Nison f66eb477ba Adds an indirection layer to enhance the Metro middleware
Reviewed By: BYK

Differential Revision: D6436722

fbshipit-source-id: d864960e2eb7c8c2a96e9869c0b340cc6257808e
2017-12-11 10:15:08 -08:00
Rafael Oleza fa08cb3c99 Add metro-source-map dependency to metro package
Differential Revision: D6532856

fbshipit-source-id: c6df2ad47e2befbff809103da4dcea7b5eb71dad
2017-12-11 10:01:47 -08:00
Adam Ernst 62dcb400ca Back out D6509723
Reviewed By: danzimm

Differential Revision: D6529249

fbshipit-source-id: 71c4ca9f83edfd030f77f3b67290b5751384c731
2017-12-09 13:46:35 -08:00
David Aurelio ae5ebc8078 No compound assignement operators
Summary:
Addresses a performance regression introduced by automatic linting: Compound assignment operators are much slower than keeping assignment separate on `let` bindings in certain versions of v8.

This reverts the relevant changes and configures eslint to *disallow* these operators explicitly in `metro-source-map`.

Reviewed By: mjesun

Differential Revision: D6520485

fbshipit-source-id: 16f35f5cd691ce6b1924480cbc30fbaa1275f730
2017-12-09 13:46:35 -08:00
Rafael Oleza c5e83dd86a Log bundling errors to scuba
Reviewed By: davidaurelio

Differential Revision: D6519623

fbshipit-source-id: a8e54639a041e300bb98d8a9744490fdeae17d1a
2017-12-09 13:30:05 -08:00
Adam Liechty f347e4ff47 Expose createModuleIdFactory as bundler option
Summary:
**Summary**

`createModuleIdFactory` is already used in `metro` internally, but is currently always a fixed function.
This enables `metro.runBuild()` to be run with a custom module ID factory.

One use case: building a base bundle, on top of which other application-specific bundles could reference modules in the base.  The application-specific IDs need to not conflict with those in the base bundle, and all references to modules in the base must resolve to the correct ID in the base bundle.  A custom ID factory can make all this possible.

**Test plan**

<!-- Demonstrate the code is solid. Example: The exact commands you ran and their output, screenshots / videos if the pull request changes UI. -->

Using `metro.runBuild(...)` with these changes, I was able to substitute in a custom ID factory

```javascript
const fs = require('fs')
const metro = require('metro')

const baseManifestFileContents = JSON.parse(fs.readFileSync('./baseManifest.json'))
// baseManifest looks like:
// { "modules": { ...
//    "react/index.js": { "id": 12 },
//    "react/cjs/react.production.min.js": { "id": 13 }, ...  } }

const opts = {
  dev: false,
  entry: 'index.js',
  out: './out.bundle',
  platform: 'ios',
  projectRoots: ['.', 'node_modules'],
  config: {
    createModuleIdFactory: createModuleIdFactory(baseManifestFileContents)
  }
}

metro.runBuild(opts)

// Creates a sample custom ID factory
function createModuleIdFactory(manifestFileContents) {
  return function createModuleIdFactory() {
    const fileToIdMap = new Map()
    let nextId = manifestFileContents ? getNextIdAfterBaseManifest(manifestFileContents) : 0

    return path => {
      const sourcePath = path
        .replace(process.cwd() + '/node_modules/', '')
        .replace(process.cwd(), '.')

      // If module is in the base manifest, return its ID
      if (manifestFileContents && manifestFileContents.modules[sourcePath]) {
        return manifestFileContents.modules[sourcePath].id
      }

      // Otherwise, get it from the map or create a new ID
      if (!fileToIdMap.has(path)) {
        fileToIdMap.set(path, nextId)
        nextId += 1
      }
      return fileToIdMap.get(path)
    }
  }

  function getNextIdAfterBaseManifest(manifestFileContents) {
    return Object.keys(manifestFileContents.modules).reduce((id, key) => {
      if (manifestFileContents.modules[key].id > id) {
        return manifestFileContents.modules[key].id
      }
      return id
    }, 0) + 1
  }
}
```

With the sample module ID factory above, the output looks like the following, where defined module IDs start at a higher number to avoid the base module IDs, but may depend on modules in the base bundle (lower numbers).

```javascript
...
__d(function(r,o,t,i,n){t.exports=r.ErrorUtils},551,[]);
__d(function(n,t,o,r,u){'use strict';var e,c=t(u[0]);e=c.now?function(){return c.now()}:function(){return Date.now()},o.exports=e},552,[553]);
...
__d(function(e,t,r,s,l){'use strict'; ...},564,[18,565,27]);
...
```
Closes https://github.com/facebook/metro/pull/100

Reviewed By: mjesun

Differential Revision: D6508351

Pulled By: rafeca

fbshipit-source-id: f2cfe5c373a6c83c8ae6c526435538633a7c9c2a
2017-12-08 06:29:23 -08:00
Rafael Oleza 6d7ba472ee Consolidate AssetData flow types
Reviewed By: jeanlauliac

Differential Revision: D6497429

fbshipit-source-id: cd9abe2d8c5b2b7eb48d8a0335ea5bfa8ac13269
2017-12-08 04:44:26 -08:00
Rafael Oleza 452ee5962d Add metro-source-map dependency to metro package
Reviewed By: cpojer

Differential Revision: D6509723

fbshipit-source-id: da92908c9272148112a98defed328d64cc1bf791
2017-12-08 04:16:06 -08:00
Jean Lauliac 2ecf6c9450 metro: introduce asyncRequire function
Reviewed By: davidaurelio

Differential Revision: D6498107

fbshipit-source-id: a9c4ab634e60f19b7058205eddcd248f57f63500
2017-12-07 10:49:27 -08:00
Peter van der Zee 636c0ed5c9 Kick off metro-core by moving the source-map generator
Reviewed By: rafeca

Differential Revision: D6448594

fbshipit-source-id: 8498ae8ff62e5afc6ae92c56b7c15cdaf8acd3a1
2017-12-07 09:33:50 -08:00
Adam Ernst 9e4cfb4c93 Upgrade to 1.9.1
Reviewed By: vjeux

Differential Revision: D6497877

fbshipit-source-id: 3b88b96e375ddf1fbe039a0593569bbdde40a2dc
2017-12-06 17:31:38 -08:00
Miguel Jimenez Esun 3a377ee0a7 Upgrade Jest to "21.3.0-beta.13"
Reviewed By: rafeca

Differential Revision: D6497197

fbshipit-source-id: b816f4b02cf35abee4ce4098c30291b32656ed04
2017-12-06 09:04:51 -08:00
Rafael Oleza 758ce871e6 Get rid of AssetServer
Reviewed By: mjesun

Differential Revision: D6488612

fbshipit-source-id: e6144f0e143c0008d47342077b4a2c6c15765edc
2017-12-06 07:32:47 -08:00
Rafael Oleza 5bff35f09e Remove getAssetData() method from AssetServer
Reviewed By: mjesun

Differential Revision: D6488537

fbshipit-source-id: 48c27e9cf5802c62fb25aac592ac1c5bcd6cc87f
2017-12-06 07:32:46 -08:00
Jean Lauliac 0e6f72b1ed metro: cleanup collectDependencies
Reviewed By: rafeca

Differential Revision: D6474108

fbshipit-source-id: fd497a248d3552a75e572b1ef8365cc5424c2c00
2017-12-06 03:17:09 -08:00
Rafael Oleza 0e583a981f Get rid of outdated_dependencies
Reviewed By: jeanlauliac

Differential Revision: D6485979

fbshipit-source-id: 8cf21a8c531d96df93f66e1cc465fe7ae044ef8e
2017-12-05 10:45:24 -08:00
Rafael Oleza d8cb904104 Bump metro@0.23.0
Reviewed By: davidaurelio

Differential Revision: D6484402

fbshipit-source-id: e934edc5319aec3c6f36927a0c8d5b48c304719e
2017-12-05 09:28:57 -08:00
Peter van der Zee dfa05cbcd4 Enable flow type for a file and fix a related typo/bug
Reviewed By: rafeca

Differential Revision: D6473575

fbshipit-source-id: 7b96b6bfb2aff96e6d4697ad29fd96fb85d1ceda
2017-12-05 01:31:30 -08:00
Rafael Oleza 5c06a80fd7 Remove old wrapping logic
Reviewed By: davidaurelio

Differential Revision: D6439155

fbshipit-source-id: 3332b9c7952c90411d0c595f184f92aeffd4ddd2
2017-12-04 16:46:17 -08:00
Rafael Oleza 8c43848a1e Move the asset JS generation logic to the worker
Summary:
With this, we do all the transformation and wrapping of files inside the workers, which mean faster initial builds (because parallelization and caching), and more legacy code that can be removed (see the following diff).

I've done some tests locally, and while the initial builds are slightly faster, the increase is not super substantial (the big win was in the diff were I moved the wrapping of JS files, in this diff only the assets transformation has speed up).

The most important thing that this diff enables is the possibility of doing the minification of modules also in the worker. This will mean that we can cache minified files and prod builds will get significantly faster - almost as fast as development builds (this will be relevant mainly for the opensource community).

Reviewed By: davidaurelio

Differential Revision: D6439144

fbshipit-source-id: ba2200569a668fcbe68dbfa2b3b60b3db6673326
2017-12-04 16:46:15 -08:00
Rafael Oleza f3ea76a0b4 Simplify AssetModule logic
Reviewed By: jeanlauliac

Differential Revision: D6438714

fbshipit-source-id: ec1cfe0d439b1dcb07a0861872df5318f468396a
2017-12-04 16:46:15 -08:00
Rafael Oleza fbdbd7ae2c Make Module.getName() return relative paths for non-haste modules
Reviewed By: davidaurelio

Differential Revision: D6473739

fbshipit-source-id: d459040f99148ae4be0d58c40d5eef7bb5e2b929
2017-12-04 16:46:15 -08:00
Rafael Oleza e324b229bb Make getAssetData() method stateless
Reviewed By: davidaurelio

Differential Revision: D6436349

fbshipit-source-id: 3544ae2824ada191f8ad8909f3b6cef13f208975
2017-12-04 16:46:13 -08:00
Rafael Oleza 8b28294bbd Do not cache hash generation in the AssetServer
Reviewed By: davidaurelio

Differential Revision: D6436249

fbshipit-source-id: eebbd92ebfdf1c8f12dbbcf3f5a66166fb1bc828
2017-12-04 16:46:11 -08:00
Rafael Oleza 5fb41e6fc8 Move AssetServer methods that do not require any state out of AssetServer
Reviewed By: davidaurelio

Differential Revision: D6436227

fbshipit-source-id: f276c88b6c954e864c966758a9ec0a17f0aca55f
2017-12-04 16:46:10 -08:00
Marshall Roch 7924e70fe4 @allow-large-files [flow] deploy flow 0.60
Reviewed By: gabelevi

Differential Revision: D6466441

fbshipit-source-id: c51eeb53a2465498ad77b3865b5f8c03758d1d35
2017-12-04 13:30:30 -08:00
Rafael Oleza 3016e74efd Add X-Metro-Files-Changed-Count header to Delta responses
Reviewed By: davidaurelio

Differential Revision: D6473909

fbshipit-source-id: bd71693816007bf961f4b3a7f10b7b6380d158e0
2017-12-04 13:00:12 -08:00
Rafael Oleza b456f7b61a Remove old extract-dependencies logic
Reviewed By: davidaurelio

Differential Revision: D6447749

fbshipit-source-id: 39c4960da65a9d8ab1e2615d48f5c2868a17f82b
2017-12-04 08:14:55 -08:00
Jean Lauliac 03e735d232 metro: fix collect-dependencies for the async/BundleSegments case
Reviewed By: cpojer

Differential Revision: D6462925

fbshipit-source-id: ca83176a7c7f47346daf16703cefb86172dc35b5
2017-12-02 04:58:52 -08:00
Rafael Oleza de7f1d90f2 Support null transformer AST output
Summary: This fixes https://github.com/facebook/metro/issues/99, which causes issues when metro tries to build files that are ignored by babel (if babel transformer ignores a file, it returns a null AST, which makes the collectDependencies logic break).

Reviewed By: mjesun

Differential Revision: D6466878

fbshipit-source-id: b5030e03775b982958a0b9204f4efccc8940ae4d
2017-12-02 00:28:42 -08:00
Rafael Oleza 5d76d340e5 Check for inverseDependencies existance before calling HMR
Differential Revision: D6449768

fbshipit-source-id: d9fe8b54fec0754ffb8ce2db1e87f180862a57a3
2017-12-01 08:59:20 -08:00
Rafael Oleza 8cf97e332f Use async/await in AssetServer methods
Reviewed By: davidaurelio

Differential Revision: D6435849

fbshipit-source-id: c665dfd6737e636f06c7056a89609730a5041a53
2017-11-30 04:03:29 -08:00
Rafael Oleza e19f82d408 Remove unused param from AssetServer
Reviewed By: jeanlauliac

Differential Revision: D6435881

fbshipit-source-id: 1d6d354e63a67f566e69d894bc22999e32b9a76f
2017-11-30 04:03:29 -08:00
Rafael Oleza 750e62bcdf Remove transformAndExtractDependencies() method in worker
Reviewed By: mjesun, davidaurelio

Differential Revision: D6433590

fbshipit-source-id: ef3c31d73a831fabe2a6f1be6051b0cb5c7e6c55
2017-11-30 04:03:29 -08:00
Jean Lauliac 86aba17329 metro: clean up Module option, remove some from state
Reviewed By: davidaurelio

Differential Revision: D6435957

fbshipit-source-id: eaed8f5c1d4d18d6ff0bde34892f059a01fe1a65
2017-11-30 04:03:29 -08:00
Jean Lauliac ec4a0ce527 packager-worker-for-buck: resolve at bundling time using js_library resolution information
Reviewed By: davidaurelio

Differential Revision: D6414372

fbshipit-source-id: 7bb0404e51a6130dfc89adb9476ad829020e76f0
2017-11-30 04:03:29 -08:00
Christoph Nakazawa 66b381a5c7 Export Config/defaults on Metro's main module
Reviewed By: arcanis

Differential Revision: D6435529

fbshipit-source-id: a9549dc5900025fcc798ccb92b49e96c982c2e1e
2017-11-30 04:03:29 -08:00
cpojer 0f7ad193c7 Rename metro-bundler to metro
Reviewed By: davidaurelio

Differential Revision: D6413420

fbshipit-source-id: f13184b8157de2c3aeaa7f2647becc175f62cdbb
2017-11-30 11:56:25 +00:00
Maël Nison 9249ebcea7 Adds a (deprecated) --reset-cache option
Reviewed By: BYK

Differential Revision: D6424553

fbshipit-source-id: f84064f86a985ab19794ea3d94410dceac77a95b
2017-11-29 00:45:23 -08:00
Burak Yigit Kaya cf9ef1b30f Make `assetTransforms` option available to the new metro CLI
Reviewed By: arcanis

Differential Revision: D6424404

fbshipit-source-id: 30c56128b914d86491fce6276775d75e7b497146
2017-11-29 00:45:23 -08:00
Peter van der Zee 37995e2196 Add a bundle type to logger output and type
Reviewed By: rafeca

Differential Revision: D6405599

fbshipit-source-id: 2f3da971d55fae28fbd94ed9f60d3bc2be176d6a
2017-11-28 04:55:00 -08:00
Rafael Oleza b0de96c74a Small refactor in module resolution
Reviewed By: jeanlauliac

Differential Revision: D6417509

fbshipit-source-id: 9c6abb8ceebb7048c775c9c9d21cd881f7e56c1f
2017-11-28 04:35:55 -08:00
Maël Nison 5cc0939454 Automatically watches the metro configuration file
Reviewed By: BYK

Differential Revision: D6408358

fbshipit-source-id: d167534c9c51c3c079148d982ef4ab44c8be0d75
2017-11-28 04:35:55 -08:00
Miguel Jimenez Esun b282031517 Make tests compatible with the latest Jest version
Reviewed By: cpojer

Differential Revision: D6419868

fbshipit-source-id: f01a3f4d54ca1aa3539d92363a51f70247642463
2017-11-28 03:34:45 -08:00
Rafael Oleza ac2aa718c0 Bump metro-bundler@0.22.1
Reviewed By: mjesun

Differential Revision: D6415105

fbshipit-source-id: 51687fd20fc5958a3b18d704ffa100400d208057
2017-11-27 11:29:54 -08:00
Rafael Oleza d46e4ecb6a Keep the dependencyMaps consistent between runs
Reviewed By: mjesun

Differential Revision: D6413998

fbshipit-source-id: fd0ff9a82dcca23603977456b51213216c370f8d
2017-11-27 08:52:03 -08:00
Maël Nison 167bda72b0 Fixes various issues on the Metro CLI
Reviewed By: rafeca

Differential Revision: D6407718

fbshipit-source-id: 871dd77fad4fcf8f6b0fa628bacc0dfb6cb51484
2017-11-27 04:36:12 -08:00
Burak Yigit Kaya 319220d870 Do not return a promise from transformers unless we have to
Reviewed By: mjesun

Differential Revision: D6405568

fbshipit-source-id: 09463442aecdb844e18498c3b3ce169d2915fe77
2017-11-27 02:32:39 -08:00
Rafael Oleza 091f8560f2 Make inlineRequires boolean when passed to the transformer
Reviewed By: mjesun

Differential Revision: D6408081

fbshipit-source-id: 812c8e3983677f4133ef3080525859a4a70418b7
2017-11-26 11:20:57 -08:00
Rafael Oleza 2d03a34bbc Remove isJSON() method from Module
Reviewed By: cpojer

Differential Revision: D6408739

fbshipit-source-id: 3f1b76ca54937fbc433d4e7a804a9703a3a2ccb7
2017-11-24 13:06:22 -08:00
Rafael Oleza 75047399d8 Simplify transform options + pass minify to the transformer
Reviewed By: mjesun

Differential Revision: D6406614

fbshipit-source-id: 722e8e209c7b7c922139f0777b9b3bd2a77bf735
2017-11-24 13:06:22 -08:00
Christoph Nakazawa 06466e4f6e Remove some of the whitespace from the progess output
Reviewed By: rafeca

Differential Revision: D6408458

fbshipit-source-id: 2e6c50baedbd53ce4271edc337fada3b628d9c63
2017-11-24 11:56:57 -08:00
Rafael Oleza b08ce130fd Move wrapModule logic for scripts, modules and JSON files to the transformer
Reviewed By: davidaurelio

Differential Revision: D6389116

fbshipit-source-id: fa43bd54669849c22b6b9d155ab07676b2455ef7
2017-11-23 15:40:03 -08:00
Rafael Oleza b193fc3436 BREAKING: metro transformers should only output AST
Reviewed By: jeanlauliac

Differential Revision: D6396416

fbshipit-source-id: e4c6f0c0feb1ac638dc13dd3eb400f1bc72b5d44
2017-11-23 15:40:03 -08:00
Jean Lauliac f434d43f54 metro-bundler: RAM bundles cannot contain scripts masquerading as modules
Reviewed By: davidaurelio

Differential Revision: D6405614

fbshipit-source-id: 6c21fd30d6246f50c34e9f23a193452737a3b67b
2017-11-23 12:10:21 -08:00
Peter van der Zee ccd8eae0b0 Fix terminal string chunker to ignore non-printable color seqs
Reviewed By: rafeca

Differential Revision: D6405127

fbshipit-source-id: 94fd12a04db43a790af34fdee36be9d7f8ecf59d
2017-11-23 10:11:54 -08:00
Burak Yigit Kaya b7ba5c7ee1 Support async transformers
Reviewed By: rafeca, mjesun

Differential Revision: D6405491

fbshipit-source-id: 7110135e9f75ab43c03710abfa8e582577662ab3
2017-11-23 09:56:44 -08:00
Peter van der Zee a766a4a499 Update http progress output in cli; add platform, shorten rest
Reviewed By: rafeca, davidaurelio

Differential Revision: D6395717

fbshipit-source-id: 0fed7f29539bb59bc300d88b09a99be13bbb42ba
2017-11-23 08:27:13 -08:00
Rafael Oleza 6557272f8c Avoid losing deltas when unexpected errors happen on the DeltaTransformer
Reviewed By: jeanlauliac

Differential Revision: D6402261

fbshipit-source-id: 6a1a18c1bd7d4f7cecd5a5e9114f6eb493d40b4d
2017-11-23 08:27:13 -08:00
Rafael Oleza 70dadc63f9 Update Readme + change default transform
Reviewed By: cpojer

Differential Revision: D6401596

fbshipit-source-id: 8928abb825933edd84c508a4f04f50c748725722
2017-11-23 03:06:48 -08:00
Burak Yigit Kaya 7b5ae96479 Add option to bypass AssetRegistry and sending assets to transforms
Reviewed By: rafeca

Differential Revision: D6385816

fbshipit-source-id: b94fb125bee0576cfb25170aa86a253c10a3d862
2017-11-23 02:38:19 -08:00
Rafael Oleza 5f58ae0e84 Metro reads AST from transformers if available
Reviewed By: BYK

Differential Revision: D6396330

fbshipit-source-id: 10539a1cce81b090a781df7d75515d52ece9ef9c
2017-11-22 13:36:20 -08:00
Rafael Oleza c9e0589171 Allow HMR client accept wrapped modules from metro
Reviewed By: davidaurelio

Differential Revision: D6385273

fbshipit-source-id: 15109332aceb4c0523c668a54b1bf40d8e8fba80
2017-11-22 11:37:20 -08:00
Jean Lauliac 52a76cb5af packager-worker-for-buck: refactor and fix source map output
Reviewed By: davidaurelio

Differential Revision: D6385199

fbshipit-source-id: f104f7b000dde131b57b671d14d4ec4e0d30d7a2
2017-11-22 05:08:49 -08:00
Peter van der Zee efceeacd77 Move Option types from Server to shared/types.flow
Reviewed By: davidaurelio

Differential Revision: D6384292

fbshipit-source-id: 58cba889f549cbd7a8c82856d5283048f4f2a8c5
2017-11-22 03:57:33 -08:00
Rafael Oleza d4b7cb5d08 Bump metro to v0.21.1
Reviewed By: mjesun

Differential Revision: D6385524

fbshipit-source-id: 189f03466f8e84a9ac3acfd1aa0faf4f39d394f2
2017-11-21 10:28:18 -08:00
Jean Lauliac 507fbd7d7e packager-worker-for-buck: store resolutions at library level
Reviewed By: davidaurelio

Differential Revision: D6359267

fbshipit-source-id: 795d451c6ff32c07842e9e067778136180a9988e
2017-11-21 07:08:28 -08:00
Rafael Oleza 6ec09775ef Upgrade uglify-es to 3.1.9
Reviewed By: davidaurelio

Differential Revision: D6309485

fbshipit-source-id: 17d8b66a2a676a9a556509e28a48ee703fc6da89
2017-11-21 06:44:11 -08:00
Rafael Oleza 085dd97fa0 Change getModuleId() signature to directly accept a path
Reviewed By: mjesun

Differential Revision: D6373180

fbshipit-source-id: d6b49431adf85e7587cf0fe858d9dc9b9afeee06
2017-11-21 05:45:44 -08:00
Rafael Oleza e58b7f1d73 Do not calculate inverseDependencies when processing a standard delta bundle
Reviewed By: mjesun

Differential Revision: D6373006

fbshipit-source-id: 86863595b1e5f0417e898f19f21ed83147b46db3
2017-11-21 05:45:44 -08:00
Jean Lauliac b77f177f92 metro-bundler: add additional tip for resolution errors
Summary: Rebase of a PR, closes https://github.com/facebook/metro-bundler/pull/39/files

Reviewed By: cpojer

Differential Revision: D6372967

fbshipit-source-id: 84c77b7e445269638616abde56b728ea6d3e475c
2017-11-21 02:23:09 -08:00
Maël Nison c2c99c4c1b Fixes for the Metro cli
Reviewed By: BYK

Differential Revision: D6348698

fbshipit-source-id: 3a00d9af7e03c5d636e2a51ce95842ca7d45b6e1
2017-11-20 10:47:46 -08:00
Rafael Oleza eb1ddfdcd9 Fix initializing packager logging
Reviewed By: cpojer

Differential Revision: D6359527

fbshipit-source-id: 0741955ca0efd6d5735637407e1bc140f04c3bbf
2017-11-18 17:10:51 -08:00
Christoph Nakazawa 6d756334a8 Fix CI
Reviewed By: rafeca

Differential Revision: D6368078

fbshipit-source-id: 04232ac3762ce4c9581c694a60c1372b2f495af0
2017-11-18 10:45:32 -08:00
Christoph Nakazawa 2c6aa5c5d8 Remove unused vars
Reviewed By: davidaurelio

Differential Revision: D6362298

fbshipit-source-id: 8a79663e4f83d7b15919f2a1a8dd9416900f3203
2017-11-18 01:10:15 -08:00
Christoph Nakazawa 5fdef3bdb2 Update Flow and Lerna for the Metro repo
Summary: I'm working on getting CI to pass. As a first step, I'll upgrade the lerna setup to use Yarn's workspaces (when yarn is run from the Metro root) as well as upgrading Flow to the same version we use in xplat. I also copied over the Jest type definitions. This should fix all type errors for a start.

Reviewed By: davidaurelio

Differential Revision: D6361276

fbshipit-source-id: 4e8661b7d5fe4e3f6dd1e6923891bd2d23c9b4db
2017-11-18 01:10:15 -08:00
Maël Nison c6b0134398 Removes debug
Reviewed By: rafeca

Differential Revision: D6358889

fbshipit-source-id: f04a6dd33dac72d0ad9ceb56c49215ebc53452ff
2017-11-17 07:51:46 -08:00
Jean Lauliac f0a4418b5b metro-bundler: ModuleGraph: nit: reduce code nesting
Reviewed By: davidaurelio

Differential Revision: D6324409

fbshipit-source-id: da7626772cb24b4f3749962e72e5952982b917d6
2017-11-15 06:22:04 -08:00
Rafael Oleza c04393b397 Fix sending multipart delta responses
Reviewed By: jeanlauliac

Differential Revision: D6328147

fbshipit-source-id: fcd16e64180a49bad0a0c606ab0f2bdd2d9ac0ee
2017-11-15 03:06:04 -08:00
Jean Lauliac 56e790f958 metro-bundler: ModuleGraph: fix in-memory node-haste impl error
Reviewed By: cpojer

Differential Revision: D6323532

fbshipit-source-id: 067be85171d8d8839c977bd2aa7fdc7efc178f0a
2017-11-14 06:08:17 -08:00
Benjamin Weggersen b75f385524 Normalize module name to have platform specific folder separators
Summary:
<!-- Thanks for submitting a pull request! Please provide enough information so that others can review your pull request. The two fields below are mandatory. -->

**Summary**

<!-- Explain the **motivation** for making this change. What existing problem does the pull request solve? -->

It is currently not possible to resolve specific module imports (such as `react-native/Libraries/Image/AssetRegistry` using forward slashes as folder separators) using a custom mapping defined in `extraNodeModules` on Windows. This PR solves this issue by normalizing module names to use platform-specific folder separators before splitting the module name using `path.sep` as separators.

**Test plan**

<!-- Demonstrate the code is solid. Example: The exact commands you ran and their output, screenshots / videos if the pull request changes UI. -->

We use `extraNodeModules` to create a mapping between `react-native` and a forked and scoped version of react-native (i.e. `scope/react-native`). If we import a specific file from react-native (such as [`react-native/Libraries/Image/AssetRegistry`](https://github.com/facebook/react-native/blob/master/local-cli/core/Constants.js), which gets referenced when importing image assets), `ModuleResolution.js` is not able to extract the first folder name on Windows. This first folder name is the name of the module (`react-native` in the previous example) and is used to query `extraNodeModules` for possible matches. It is not able to find this folder name because the module name is split using `path.sep` as a separator, which is `'\\'` on Windows. Most module names use forward slashes as folder separators. The solution is to normalize `toModuleName` before we split on `path.sep`.
Closes https://github.com/facebook/metro-bundler/pull/89

Differential Revision: D6312391

Pulled By: jeanlauliac

fbshipit-source-id: 920c52633e8c9584ecb2bdd309dc4a8516c3199b
2017-11-14 02:52:35 -08:00
Maël Nison 1bd30c977d Adds an experimental metro-cli to metro-bundler
Reviewed By: davidaurelio

Differential Revision: D6129384

fbshipit-source-id: b32049ad17aeae74cde23dbaa79845e6a4a51507
2017-11-13 17:36:35 -08:00
Rafael Oleza e1b5fe79fa Remove ModuleTransport/ResolutionResponse modules and lots of logic from Resolver/ResolutionRequest
Reviewed By: davidaurelio

Differential Revision: D6284728

fbshipit-source-id: 53d27cd65b8c96ed6d6872eb16a9b5d1e14db85e
2017-11-13 16:43:36 -08:00
Rafael Oleza 860dcc4867 Use current DependencyGraph tests as integration tests for the traverseDependency logic
Reviewed By: davidaurelio

Differential Revision: D6284627

fbshipit-source-id: 7e3f21c53142238f7d50444627c417388a4c1d1d
2017-11-13 16:43:36 -08:00
Rafael Oleza f1728e4c7b Add support for the postProcessModules param
Reviewed By: davidaurelio

Differential Revision: D6277777

fbshipit-source-id: b9a0341f17f3829ccc3daf7db89275f07e435803
2017-11-13 16:43:36 -08:00
Caleb Meredith 42a547551f Flow 0.59 xplat/js deploy
Reviewed By: avikchaudhuri

Differential Revision: D6300238

fbshipit-source-id: a6839fa2a9bbc50c3832a3f5b1cac2a6d2bd96b7
2017-11-10 21:12:40 -08:00
Rafael Oleza 1dec296000 Downgrade uglify-js from 3.1.8 to 3.1.1
Summary:
Uglify@3.1.7 is causing some perf issues (more specifically, this commit: 5b4b07e9a7) that are impacting TTI on RN views and increased memory usage.

More specifically, code like:

```
function nonTrivialFn(pre) {
  return pre + Math.random();
}
function hotFunctionCalledALotOfTimes(num) {
  return nonTrivialFn(num + Math.random());
}
hotFunctionCalledALotOfTimes(3);
hotFunctionCalledALotOfTimes(5);
```

in v3.1.7 gets converted to:

```
function hotFunctionCalledALotOfTimes(num){
  return function(pre) {
    return pre + Math.random();
  }(num + Math.random())
}
hotFunctionCalledALotOfTimes(3);
hotFunctionCalledALotOfTimes(5);
```

This causes a function creation each time `hotFunctionCalledALotOfTimes` is called.

By comparison, in v3.1.6, that previous code was converted to:

```
function nonTrivialFn(pre){
  return pre + Math.random()
}
function hotFunctionCalledALotOfTimes(num){
  return nonTrivialFn(num + Math.random())
}
hotFunctionCalledALotOfTimes(3);
hotFunctionCalledALotOfTimes(5);
```

Reviewed By: jeanlauliac, alexeylang

Differential Revision: D6296740

fbshipit-source-id: b3988d886e607103ec3ae6b9763b2f0411a8aa3c
2017-11-10 04:52:50 -08:00
Miguel Jimenez Esun e08b34239e Add asset size to the module
Reviewed By: jeanlauliac

Differential Revision: D6284248

fbshipit-source-id: 3b860d7b123a1d2470c7b6c7e9e9082d0622c369
2017-11-10 03:20:52 -08:00
Rafael Oleza e7b4e50813 Fix flow types of sourcemaps
Reviewed By: davidaurelio

Differential Revision: D6271757

fbshipit-source-id: abf9c91a4ebd36eb4cd77acf75c40f85fbecd5f9
2017-11-08 13:03:43 -08:00
Rafael Oleza 7b93876541 Remove old Bundler/* logic
Reviewed By: mjesun

Differential Revision: D6259048

fbshipit-source-id: b39e4c602a0af9d2ad91b72a699b1369526ac9f2
2017-11-08 13:03:43 -08:00
Rafael Oleza 2eefccc72a Remove old bundler code from Server class
Reviewed By: mjesun

Differential Revision: D6255868

fbshipit-source-id: 74695129199c8be43e13c97f2ae2ca2c03b801eb
2017-11-08 13:03:43 -08:00
Rafael Oleza 8f45fb6bf3 BREAKING: Bump metro-bundler to v0.21.0
Summary:
`metro-bundler` v0.21 contains a rewritten bundling mechanism, with simplified logic and much faster rebuild times, called delta bundler. This release contains a couple of breaking changes:

* Now, when using a custom transformer, the list of additional babel plugins to apply are passed to the `transform()` method. These are used in non-dev mode for optimization purposes (Check 367a5f5db8 (diff-40653f0c822ac59a5af13d5b4ab31d84) to see how to handle them from the transformer).
* Now, when using a custom transformer outputting `rawMappings`, the transformer does not need to call the `compactMappings` method before returning (check d74685fd1d (diff-40653f0c822ac59a5af13d5b4ab31d84) for more info).
* We've removed support for two config parameters: `postProcessModules` and `postProcessBundleSourcemap`.

Reviewed By: davidaurelio

Differential Revision: D6186035

fbshipit-source-id: 242c5c2a954c6b9b6f339d345f888eaa44704579
2017-11-08 09:20:17 -08:00
Rafael Oleza 08ed373a60 Add postMinifyModule param support to Delta Bundler
Reviewed By: mjesun

Differential Revision: D6264450

fbshipit-source-id: 1dd0bc8c5957d99b6f4b6722c843fe9cc284ec3a
2017-11-08 07:07:46 -08:00
Rafael Oleza 98518c9fff Add ramGroups and preloadedModules support when creating RAM bundles
Reviewed By: davidaurelio

Differential Revision: D6250307

fbshipit-source-id: b7143fa31ded9fcaa28025f05b9d28013361ea0e
2017-11-08 07:07:46 -08:00
Miguel Jimenez Esun 91f724d69d Update Jest to 21.3.0-beta.8
Reviewed By: davidaurelio

Differential Revision: D6221784

fbshipit-source-id: 189e895378635dd21d14d6fb1f93510a52c90742
2017-11-08 06:50:53 -08:00
Rafael Oleza ed55e0a53f Remove cyclic dependency when getting the transform options
Reviewed By: davidaurelio

Differential Revision: D6231766

fbshipit-source-id: ae200a4507febcd47bcc636d0e62f01eb6a93477
2017-11-08 04:07:07 -08:00
Andreas Amsenius b0c79aa193 Upgrade uglify-es to fix minification issues
Summary:
**Summary**

Minification fails or minified bundle may crash due to uglify-es bugs which have been fixed recently. See https://github.com/facebook/react-native/issues/16689

**Test plan**

Try to production bundle a project using ex-navigation, which fails with:
```
Maximum call stack size exceeded
```

Use this patch and see that bundling suceeds. There are also minified runtime errors solved by this change, see https://github.com/facebook/react-native/issues/16689 for more information.
Closes https://github.com/facebook/metro-bundler/pull/85

Reviewed By: mjesun

Differential Revision: D6259177

Pulled By: rafeca

fbshipit-source-id: 55987eb338b06938181c0da74d104d23eeb135b6
2017-11-07 08:28:17 -08:00
Rafael Oleza 8fe2d588bc Use Delta Bundler to get all bundle assets
Reviewed By: mjesun

Differential Revision: D6255563

fbshipit-source-id: fe08021ef6be8528ddcbb553be62e8a8cf2bcf0a
2017-11-07 08:10:32 -08:00
Miguel Jimenez Esun d4dcd4c6fa Migrate metro-bundler to jest-worker
Summary:
This diff migrates Metro Bundler from `worker-farm` to `jest-worker`:

* Fully removes the custom patched `worker-farm` fork.
* Removes //a lot// of non-clear Flow types used to cast functions from callbacks to promises.
* Reduces cyclomatic complexity of the `Transformer` class by using `async`/`await`.
* Cleans all additional methods inside `JSTransformer/index.js`, by moving them to a single class and properly scoping them.

**Note:**  this diff does not still enable the ability to bind files to workers by using `computeWorkerKey`; this will come at a later stage.

Reviewed By: davidaurelio

Differential Revision: D6247532

fbshipit-source-id: 51259360a5c15117996777a3be74b73b583f595e
2017-11-07 07:52:16 -08:00
Jean Lauliac 81bfef0389 metro-bundler: allow different run-before-main-module depending on entry point
Reviewed By: davidaurelio

Differential Revision: D6248242

fbshipit-source-id: 9471820fce926e676170e3024bd48c9d7335c1a7
2017-11-07 07:41:58 -08:00
David Aurelio 2c5a2fec66 fix `$FlowFixMe`
Reviewed By: rafeca

Differential Revision: D6258938

fbshipit-source-id: 7331d0a3216c1714099139fe6c6ab8fe11771fae
2017-11-07 06:22:55 -08:00
Jean Lauliac dbb2d44c42 metro-bundler: collect-dependencies: expose async deps
Summary: To determine whether segment boundaries are properly covered by async imports rather than requires, we need to get knowledge about it higher up in the stack. This changeset exposes which of the dependencies are async as an array of indices within the `dependencies` array (I'd prefer avoiding duplicating the strings because they could get inconsistent, and I don't want to have 2 separate arrays of names either because we'd have to modify a bunch of stuff across the stack to support that).

Reviewed By: davidaurelio

Differential Revision: D6220236

fbshipit-source-id: 1ee36bc7c59f7f27e089f7771a24c45c8bd57b5d
2017-11-06 03:40:10 -08:00
Jean Lauliac 41ec9e6d4d react-native: BundleSegments
Reviewed By: davidaurelio

Differential Revision: D6231309

fbshipit-source-id: 565cbadedc5fd8ab25025b5846c098f24fb15a82
2017-11-06 03:40:10 -08:00
Miguel Jimenez Esun 0a292a2a58 Add code for generating remote assets
Reviewed By: davidaurelio

Differential Revision: D6201839

fbshipit-source-id: 78c81eae03c6137ba9bbe33cd7aab8b87020f8d2
2017-11-03 06:10:20 -07:00
Jia Li 0664367460 Revert D6210177: react-native: BundleSegments
Differential Revision: D6210177

fbshipit-source-id: 8cb4ee37cd03698e9f3980a9819269086a9d6eab
2017-11-02 12:04:31 -07:00
Avik Chaudhuri 4ed2139567 @allow-large-files Flow 0.58 upgrade for xplat/js
Reviewed By: yungsters

Differential Revision: D6219339

fbshipit-source-id: f003111500ef5971b9a95f26d43cee6644c16abe
2017-11-02 10:51:15 -07:00
Jean Lauliac 3129532cd9 react-native: BundleSegments
Reviewed By: davidaurelio

Differential Revision: D6210177

fbshipit-source-id: c39e4118389a9739e9e70ba34feb5d335a7f2546
2017-11-02 09:57:43 -07:00
Miguel Jimenez Esun 1ec323bbd5 Adding @email tags to most of the tests
Reviewed By: rafeca

Differential Revision: D6185623

fbshipit-source-id: 30df83288fe85516d8d5a1617a4fb8fea826ed6f
2017-11-02 06:25:10 -07:00
Rafael Oleza 26718da993 Fix flacky Server-test in metro
Reviewed By: mjesun

Differential Revision: D6220171

fbshipit-source-id: 603671db9a6345dd039c443eb14593e3631c7a88
2017-11-02 06:18:20 -07:00
Rafael Oleza cecb9bae99 Make metro always use the delta bundler
Reviewed By: jeanlauliac

Differential Revision: D6208727

fbshipit-source-id: 08589cc92de340d896833cfee2ed14b48b1e6f38
2017-11-01 20:02:10 -07:00
Rafael Oleza cdfe5b0f20 Remove buildBundle() method from metro public API
Reviewed By: mjesun

Differential Revision: D6208701

fbshipit-source-id: 9e2f20df778cdaad542466692256ca4740a7fb38
2017-11-01 14:53:59 -07:00
Jean Lauliac 64645cbaab react-native: move out the hardcoded import() transform
Reviewed By: davidaurelio

Differential Revision: D6196869

fbshipit-source-id: 237cd269a2f382851102e3e1ba3208f1460f8c0a
2017-11-01 05:36:24 -07:00
Rafael Oleza cd67cd4794 Update shared/output modules to accept the output from the Delta Bundler
Reviewed By: davidaurelio

Differential Revision: D6186386

fbshipit-source-id: 6160f5a02891dbfb56c6350239703ace91e53690
2017-10-31 10:26:10 -07:00
Rafael Oleza ff7ec2e6bf Prepare metro to build production bundles using the Delta Bundler
Reviewed By: davidaurelio

Differential Revision: D6186012

fbshipit-source-id: a9c2757211345881e3feba331bdbe66cdc0f6b97
2017-10-31 10:26:10 -07:00
Rafael Oleza 775867445a Make sourcemap flow types non-nullable
Reviewed By: mjesun

Differential Revision: D6185460

fbshipit-source-id: c33bac5f0e70c142d6238043ce8c2996f1d1ee50
2017-10-31 10:26:10 -07:00
Rafael Oleza 437a6a3f27 Add minify support to the Delta Bundler
Reviewed By: davidaurelio

Differential Revision: D6163566

fbshipit-source-id: d49eab159ee1d1b4453136f21e25e48154d0142a
2017-10-31 10:26:10 -07:00
Rafael Oleza 772d21f72d Move the getAssetData() logic out of the Bundler
Reviewed By: davidaurelio

Differential Revision: D6183424

fbshipit-source-id: 47a658de25ac0943f4b82e7eb90c1018e9d0357d
2017-10-31 09:16:18 -07:00
Rafael Oleza 2850627a66 Add prettier to metro-bundler
Reviewed By: mjesun

Differential Revision: D6187278

fbshipit-source-id: 05b0881743b69c4a1eb491a6f8c57581081a85e4
2017-10-31 03:51:26 -07:00
Jean Lauliac bada7f8684 metro-bundler: ModuleGraph tests: @flow
Summary: Having types in tests ensure that we're testing what the API is supposed to process and not something else. In that case, adding type revealed that we were mistakenly passing strings instead of `Buffer` objects to the transform and optimize functions, but it would still work because `toString` was called over it. Passing proper `Buffer` objects as expected ensures that it doesn't just work with strings, and that the integration of these files in the rest of the application works as expected. This changeset fixes these callsites and add a few invariants here and there. We use `invariant` instead of `expect()` because Flow understands only the former as a type refinement, even though `expect` would also be a form of possible refinement. I don't think it's a big deal.

Reviewed By: davidaurelio

Differential Revision: D6160019

fbshipit-source-id: cbcbb05d7bccf9e1b9f6bb3ea30b0bb2925aef1b
2017-10-30 11:05:13 -07:00
Jean Lauliac c293f4bfab metro-bundler: stricter TransformedCodeFile type and fix use sites
Summary: Here's a good example why Flow "exact types" are useful: there are a few place where we were adding unusused fields in the objects. As these fields end up in JSON files used to communicate with Buck, this can amount to a waste of resources. This changeset make the type exact and removes the unused fields.

Reviewed By: mjesun

Differential Revision: D6159350

fbshipit-source-id: 8cdf29d5729253f119778943ad961eacb8990c04
2017-10-26 07:57:00 -07:00
Rafael Oleza 0e764686e1 Add id to DeltaEntry object
Reviewed By: mjesun

Differential Revision: D6158753

fbshipit-source-id: 5997e36c8d85da750113250e5180a1f54ee14b76
2017-10-26 03:28:55 -07:00
Jean Lauliac e4dad595e1 xplat/js: replace import() calls by require.async() calls
Reviewed By: mjesun

Differential Revision: D6147316

fbshipit-source-id: b93a247ce0830a5db250824d22e81a3b786daf36
2017-10-26 02:21:05 -07:00
Jean Lauliac d01f514fa0 metro-bundler: ModuleGraph: add support for require.async() when collecting dependencies
Summary: This is the last step remaining before enabling the `import()` syntax to use `require.async()` (for now that function is just doing a simple `require()` in behind).

Reviewed By: davidaurelio

Differential Revision: D6147030

fbshipit-source-id: 5cd8ee6cc550816ae3cdea0b457dc2419c99e7a7
2017-10-26 02:21:05 -07:00
Rafael Oleza d74685fd1d Remove compactMapping call from JS transformer
Reviewed By: mjesun

Differential Revision: D6136200

fbshipit-source-id: a38cf19c247f60c0bfee01c39fae070043a76332
2017-10-25 10:28:03 -07:00
Rafael Oleza fa4091c63e Make insertion of modules into the delta structure deterministic
Summary:
After checking more deeply, there were still situations where the delta bundler could generate different bundles between runs: when a module is required by two different modules (it has two or more inverse dependencies), that module would not always be inserted after the first inverse dependency in the bundle, which would cause some bundling order discrepancies.

In order to fix that, the bundler now re-traverses synchronously the dependency graph using a DFS traversing algorithm to guarantee the same order. This will add some small runtime overhead (specially when generating the initial bundle), but it's not worrying (from benchmarks in my macbook pro it'll add ~10ms of initial build for every 1000 modules traversed, being this overhead linear).

Reviewed By: mjesun

Differential Revision: D6124993

fbshipit-source-id: 9bc7cb329f01a7860c7d3b52c3376c643ea5cf3b
2017-10-24 12:28:46 -07:00
Rafael Oleza 0a225fc1e3 Add wordwrap dependency
Summary:
The `formatBanner.js` file is requiring the `wordwrap` package, but it was not defined in the package.json. Somehow this was working before (maybe the package was being downloaded by another depdendency or maybe `formatBanner` was not used).

This fixes https://github.com/facebook/metro-bundler/issues/79

Reviewed By: mjesun

Differential Revision: D6136865

fbshipit-source-id: 722dd61cb936fca893453f4cfc3248718a329779
2017-10-24 12:28:46 -07:00
Miguel Jimenez Esun b9023bd626 Backed out changeset c188b39e104f
Reviewed By: fkgozali

Differential Revision: D6111799

fbshipit-source-id: 34213f79135fb605aa2af60182cc1182b10aa602
2017-10-20 12:44:07 -07:00
Rafael Oleza 367a5f5db8 Apply inline code + constant fold transforms when dev is false
Reviewed By: davidaurelio

Differential Revision: D5940962

fbshipit-source-id: 699d45416bade8471164d6ddf5ef3ade535376b3
2017-10-19 18:53:43 -07:00
Miguel Jimenez Esun 0fdf36d06d Support for remote assets
Reviewed By: davidaurelio

Differential Revision: D6030886

fbshipit-source-id: c188b39e104f5c3f65a98336fecbffc93091ff4c
2017-10-19 18:39:49 -07:00
Rafael Oleza 1a2a46a9fb Always set the runBeforeMainModule bundle param on buildBundle()
Summary: This diff fixes https://github.com/facebook/metro-bundler/issues/78 by adding the `runBeforeMainModule` server parameter to the bundler. This is not the cleanest solution, but will be fixed once we use the Delta Bundler for builds from the CLI

Reviewed By: davidaurelio

Differential Revision: D6074469

fbshipit-source-id: 068926ef671d9f897ad9f1bd0540036a97340c00
2017-10-18 12:24:26 -07:00
Rafael Oleza 58f3fa957e Make sure that modules not present in the dependency graph are initially required
Reviewed By: davidaurelio

Differential Revision: D6071529

fbshipit-source-id: 916768e85657207d1f7a2bf41d0aa11abd158ee7
2017-10-18 12:24:26 -07:00
Rafael Oleza 941b25a2ca Ignore some irrelevant URL params in order to calculate the bundle cache
Reviewed By: davidaurelio

Differential Revision: D6086420

fbshipit-source-id: 52c1d5dc53d23b3963e663f4033446344b892659
2017-10-18 12:24:26 -07:00
Rafael Oleza e9d2575b26 Make the module ids deterministic between runs
Reviewed By: Hypuk

Differential Revision: D6082114

fbshipit-source-id: fd43b64818a1da192c9252a9d2aed918a130517c
2017-10-18 12:00:07 -07:00
David Aurelio 86ffdae347 Dependencies file: add size as attributes
Summary:
Adds module size as `fb_`-prefixed node attributes to the digraph output of dependencies.

The list of edges is now followed by a list of node declarations, that use the `fb_size` attribute to expose the module size in bytes.

E.g:

```
digraph {
	"a" -> "b";
	"b" -> "c";
	"a"[fb_size=123];
	"b"[fb_size=456];
	"c"[fb_size=789];
}

```

Reviewed By: fkgozali

Differential Revision: D6064861

fbshipit-source-id: 73127e08c5e38075b5112053de12f9abac1102ee
2017-10-17 03:55:26 -07:00
Jean Lauliac 55a22d2c5c metro-bundler/src/ModuleGraph: test image asset transform
Reviewed By: davidaurelio

Differential Revision: D6039836

fbshipit-source-id: 0fc022b72892f8a7064482f63e19b9fa5a3d5b00
2017-10-12 10:01:31 -07:00
Jean Lauliac 0608332cb9 metro-bundler/src/ModuleGraph: throw on empty asset images
Reviewed By: fkgozali

Differential Revision: D6030788

fbshipit-source-id: 000757096f7af68c077e80829f48d52814752599
2017-10-12 10:01:31 -07:00
Kathy Gray 9bb438ed1d Upgrade babel generator
Reviewed By: arcanis

Differential Revision: D6008862

fbshipit-source-id: f8c0bc35d696453fd7cda82ce614d084cbc867e0
2017-10-12 07:52:01 -07:00
Jean Lauliac 6074d897db js1 metro-bundler: add script to publish new version
Reviewed By: davidaurelio

Differential Revision: D6019220

fbshipit-source-id: 97bb53323b29609e192f0e4f4d79b6be6440b98e
2017-10-12 03:23:38 -07:00
Burak Yigit Kaya d1d59d81e5 Show filename and line number on dynamic require errors
Reviewed By: cpojer

Differential Revision: D6008549

fbshipit-source-id: 72fde0a3f97841a020a6fc877f86513e9a7b8521
2017-10-10 06:43:08 -07:00
Burak Yigit Kaya a60ba098c5 Add option for disabling global hot key usage
Reviewed By: mjesun

Differential Revision: D6008860

fbshipit-source-id: 604059e2f2b738e6df2c756f3cdc62981544de64
2017-10-10 03:55:27 -07:00
Burak Yigit Kaya 9f8d4ad4fe Make bablyon parse files in module mode
Reviewed By: davidaurelio

Differential Revision: D6008659

fbshipit-source-id: 6ec3a5e1470e91208a6e71eeca3a2f7c5e755acf
2017-10-09 10:27:46 -07:00
Jani Eväkallio b2002609c1 Fixes Platform.OS and process.env.NODE_ENV inlining resulting in an invalid AST
Summary:
Resolves https://github.com/facebook/metro-bundler/issues/27

**Summary**

There is an edge case where tools like react-primitives need to assign to `Platform.OS`,
but the inline transformation results in an invalid AST.

When Platform.OS is unconditionally inlined, the following scenario:
````
Platform.OS = 'ios';
````
Is transformed to:
```
"ios"="ios"
````

And results in error `Property left of AssignmentExpression expected node to be of a type ["LVal"] but instead got "StringLiteral"**`.

See issue in react-primitives: https://github.com/lelandrichardson/react-primitives/issues/79

This patch checks whether the current node is on the left hand side of an AssignmentExpression
and skips the inlining when this is the case.

It also does the same for `process.env.NODE_ENV`, which suffers from the same problem. See related closed issue https://github.com/facebook/react-native/issues/7607#issuecomment-221425153 which was resolved by using bracket notation `process.env["NODE_ENV"]` instead.

**Test plan**

Unit tests included.

**Notes**

This is my first contribution to Metro, and haven't worked with Babel AST a lot, so constructive feedback on the implementation is welcome.
Closes https://github.com/facebook/metro-bundler/pull/45

Reviewed By: cpojer

Differential Revision: D5974615

Pulled By: mjesun

fbshipit-source-id: 224e63cef24f450b33e17ff9c0e0c0cea46bc70e
2017-10-09 08:23:04 -07:00
Daniel Mueller 475a580569 Add require.getModules
Summary:
In order to aid with debugging inline requires we add a method that
will give us the modules.

**Summary**

I was looking for a way to see what modules had been loaded when I was working with inline requires. I had tried using beginEvent on Systrace, but I was worried that there were modules that I might have missed (I'm not certain if all the loaded files are polyfills before the entryFile is invoked for instance). By adding getModules() it simplifies seeing what modules are loaded.

**Test plan**

At the root of my app `index.ios.js`:

```

import App from './App';
import { AppRegistry } from 'react-native';

AppRegistry.registerComponent('App', () => App);

// after 3 seconds the initial app data should have loaded, so lets take a look:
setTimeout(() => {
  console.log(require.getModules());
}, 3000);

```

**NOTE**
If there is a way to get to this easily (via the debugger or some other mechanism) I would be happy to use that instead and add documentation for it.
Closes https://github.com/facebook/metro-bundler/pull/37

Differential Revision: D6008180

Pulled By: cpojer

fbshipit-source-id: 850103bbce166bf65a0cbd710582198c66273db5
2017-10-09 08:08:43 -07:00
Richard Girges c4307d7170 Prevent error on safely-handled requires using non-static arguments
Summary:
**Summary**
This is the workaround that cpojer suggested in #65 and should resolve the biggest pain point that developers are experiencing in that issue: using moment.js in React Native. Hopefully this at least serves as a starting point to reaching a decent solution for libraries using non-static `require()` statements.

**Test plan**
- Expected error when non-static-argument-based `require()` is nested more than one level deep within a `try` statement
- Expected no error when non-static-argument-based `require()` is nested directly within a `try` statement

```bash
ip-192-168-1-10:trueflipapp richard$ react-native bundle --entry-file index.js --platform ios --bundle-output /tmp/test.js --reset-cache
Scanning folders for symlinks in /repo/trueflip/sandbox/code/trueflipapp/node_modules (8ms)
Scanning folders for symlinks in /repo/trueflip/sandbox/code/trueflipapp/node_modules (8ms)
Loading dependency graph, done.
warning: the transform cache was reset.
bundle: start
bundle: finish
bundle: Writing bundle output to: /tmp/test.js
bundle: Done writing bundle output
```

Closes https://github.com/facebook/metro-bundler/pull/69

Differential Revision: D6008567

Pulled By: cpojer

fbshipit-source-id: f9be328cf50dc47c7433ffeb5eb053b398c92122
2017-10-09 08:08:43 -07:00
Jean Lauliac 51d4754efc metro-bundler: AmbiguousModuleResolutionError: provide default message
Reviewed By: davidaurelio

Differential Revision: D5986044

fbshipit-source-id: f61d351f91fed3638177bd3c10702f1cb0742a21
2017-10-09 07:45:01 -07:00
Matt Labrum 6c60f61cbd Fix importing a dot file from the root directory doesn't work
Summary:
Hi,
**Summary**
This fixes #40 where bundler cannot resolve a file starting with `.` from the root package directory.

it just adds a check to see if the absolute path filename is the same as the localpath filename then lets it through.

**Test plan**
- Steps to reproduce have been written up in #40

Thanks!
Closes https://github.com/facebook/metro-bundler/pull/54

Reviewed By: cpojer

Differential Revision: D5974618

Pulled By: mjesun

fbshipit-source-id: 4b7113c3bed20f2c908739881d61410d651e6ed7
2017-10-09 05:51:07 -07:00
Zachary Kim d07bfa1532 Whitelist node opt --max-old-space-size for JSTransformer
Summary:
Whitelist node opt `--max-old-space-size` for JSTransformer.

Bundling can choke on the default node memory settings for those of us generating large index.js files. This change allows supplied node options to make it through to the node processes spawned by the JSTransformer worker farm.
Closes https://github.com/facebook/metro-bundler/pull/70

Differential Revision: D6008141

Pulled By: cpojer

fbshipit-source-id: 1ef3b436ea30baf3f255a4fd718fe4d958d70c65
2017-10-09 04:28:39 -07:00
Jean Lauliac 1349edad70 Fix edge case of moving a haste file to a different folder
Reviewed By: davidaurelio

Differential Revision: D5945574

fbshipit-source-id: 5fdd12c0af1b7a92012f4be71ce18f44e42ad4e1
2017-10-05 04:51:40 -07:00
Jean Lauliac e235f6a9fd metro-bundler: writeFile: limit concurrency
Reviewed By: cpojer

Differential Revision: D5975830

fbshipit-source-id: c35be29e8dd64d9653cd24814c5d9f1ef89755dd
2017-10-05 03:27:59 -07:00
Rafael Oleza 6d0c371d65 Handle the case where a file gets modified and deleted afterwards
Reviewed By: jeanlauliac

Differential Revision: D5944099

fbshipit-source-id: 7d41cf849dc53936cb014c44ce02f106853733c6
2017-10-04 04:21:02 -07:00
Sam Goldman 87cfc05ea6 Upgrade Flow to v0.56.0
Reviewed By: calebmer

Differential Revision: D5958715

fbshipit-source-id: 7feda03a9540e69bf8d9b4eb89720248ff43294f
2017-10-02 21:05:38 -07:00
Matt Bruce 86a69bf25d Change all calls to no-console from no-console-disallow
Reviewed By: TheSavior

Differential Revision: D5944700

fbshipit-source-id: cdd78d1b32fa98d8a792a39ccc3cb37241ab4366
2017-09-29 16:37:02 -07:00
Rafael Oleza f32c1edb8d Implement getOrderedDependencyPaths() using the Delta Bundler
Reviewed By: jeanlauliac

Differential Revision: D5922153

fbshipit-source-id: d5d595f99053d0eacde37fe0cedcba2ca86bd6f7
2017-09-29 15:06:49 -07:00
Rafael Oleza 09ee6d9cbe Add Source Map support to e2e deltas in chrome debugger
Reviewed By: jeanlauliac

Differential Revision: D5917380

fbshipit-source-id: 31391bc03c420b8e7af5c840fbea2fb0dd5f7bbc
2017-09-29 05:58:31 -07:00
Rafael Oleza 07d73a3af2 Improve progress bar when using delta dependencies traversal
Reviewed By: davidaurelio

Differential Revision: D5901052

fbshipit-source-id: a06584bfbd287f6d8d9b53fb5918dfa7d88bceef
2017-09-28 15:10:50 -07:00
Rafael Oleza a606e79af0 Integrate the incremental dependency traversor into the Delta Bundler
Reviewed By: davidaurelio

Differential Revision: D5880892

fbshipit-source-id: d6e04b59aee5fe0bf671553c98f728be054e01b9
2017-09-28 15:10:50 -07:00
Rafael Oleza 7e65f2f1ea Add module for incrementally traversing the dependencies
Reviewed By: davidaurelio

Differential Revision: D5880827

fbshipit-source-id: 9500c54c2f93726449a413321b9e4ef46825b977
2017-09-28 15:10:50 -07:00
Christoph Nakazawa 34b108b37e Small Config defaults cleanup
Reviewed By: davidaurelio

Differential Revision: D5841910

fbshipit-source-id: e3645a115da4a445dd2b16cf9adccf68462513f9
2017-09-28 10:07:06 -07:00
Rafael Oleza ccbe4bc78c Use Delta Bundler for symbolication of errors endpoint
Reviewed By: jeanlauliac

Differential Revision: D5913798

fbshipit-source-id: 5a8aaa6b39aa864424eabb94748cbff24b463b81
2017-09-28 09:28:16 -07:00
Rafael Oleza 8302fcb92b Bump metro-bundler dependency to 0.19.x
Reviewed By: cpojer

Differential Revision: D5920597

fbshipit-source-id: fdc4f50ffdb43487e7c3480b7cc587b7ff483681
2017-09-27 14:36:30 -07:00
Christopher Chedeau f4d9fccee6 Codemod to 1.7.0
Differential Revision: D5763302

fbshipit-source-id: a91ca1786c7ac8eb9aa3dd43555a7a223dc6f9cf
2017-09-26 23:46:09 -07:00
Rafael Oleza 7c69e832b2 Add support to metro server to send Deltas to devices
Reviewed By: jeanlauliac

Differential Revision: D5890498

fbshipit-source-id: 3ce5c3edb69598adffd2224a418647f3b8897945
2017-09-26 18:06:31 -07:00
Rafael Oleza a3a60c912a Make Module.getName() synchronous
Reviewed By: cpojer

Differential Revision: D5911221

fbshipit-source-id: 2381d70008adff9e0f7613fe43c8fb562222acd6
2017-09-26 17:23:20 -07:00
Rafael Oleza eefb8e9fc5 Make the runBeforeMainModule config param to RN repo and make it absolute
Reviewed By: davidaurelio

Differential Revision: D5880700

fbshipit-source-id: 5df6781026030395900388c561283abadefa6511
2017-09-26 13:07:13 -07:00
Rafael Oleza 7ba76a32e1 Change format of dependencyPairs param received by wrapModule()
Reviewed By: jeanlauliac

Differential Revision: D5880766

fbshipit-source-id: ef9f0ec2d7dcc4e47f5dacb9d899b5f1fde18e8f
2017-09-26 07:09:21 -07:00
Rafael Oleza 24be572cf5 Fix integration snapshots + add emails to test
Reviewed By: davidaurelio

Differential Revision: D5910903

fbshipit-source-id: 2d7d95db99303ce1106203f6146173b0030c4096
2017-09-26 06:53:41 -07:00
Jean Lauliac 21eef9ebb1 RN buck: add bundle splitting
Reviewed By: davidaurelio

Differential Revision: D5854013

fbshipit-source-id: 97e706d2e40ccb18397950f3d09763dd2498aee8
2017-09-26 04:21:38 -07:00
David Aurelio afb91bccd3 Don’t save original source code
Reviewed By: jeanlauliac

Differential Revision: D5901918

fbshipit-source-id: 68332b07f34ac4fd5491868cbc9f81283dae8d91
2017-09-25 18:06:58 -07:00
Jean Lauliac 0c2e414337 RN: add bundleId to nativeRequire() call
Reviewed By: davidaurelio

Differential Revision: D5863569

fbshipit-source-id: 62f65032f103b5bd20252343c771d0cd01950109
2017-09-25 09:06:49 -07:00
Jean Lauliac c4f9ee5720 metro-bundler: fix jest-haste-map require
Summary:
Addresses https://github.com/facebook/metro-bundler/issues/62

Apparently with some versions of `jest-haste-map`, the nested source file returns the module wrapped with `default` instead of the exports themselves (due to some ES6 babel transform, I am guessing). I wasn't able to reproduce this myself yet, but I think a good first step is to avoid using nested library files in the first place, ie. only use what's exported at the top-level.

Reviewed By: rafeca

Differential Revision: D5890757

fbshipit-source-id: 1196264b5626eda65c4aae222db2a1620f901c55
2017-09-25 07:20:58 -07:00
Jean Lauliac 3b6fddc746 RN buck: move asset work into transform worker
Reviewed By: davidaurelio

Differential Revision: D5872268

fbshipit-source-id: 829a0d26930f8893b93a5f42ef7026350dc01f29
2017-09-22 07:25:03 -07:00
Rafael Oleza e736518c43 Remove unneeded params from `getTransformOptions()`
Reviewed By: jeanlauliac

Differential Revision: D5880687

fbshipit-source-id: ef9683b1272133a9b38005cb8ba43d80b9ac6ec8
2017-09-21 09:27:05 -07:00
Sina Sabet f700c9e54d Removing unnecessary eslint enable/disable comments (round 2)
Reviewed By: TheSavior

Differential Revision: D5865725

fbshipit-source-id: 92d5e4376956a05c23aeeb84a4996626d82e0fb6
2017-09-20 23:39:49 -07:00
Jean Lauliac 39238acb78 RN: add some test to module system
Reviewed By: davidaurelio

Differential Revision: D5862757

fbshipit-source-id: cf5c88c4bb9d65368df07f6e85b207c90565bad9
2017-09-20 11:05:49 -07:00
Jean Lauliac 7d92dd2b5d RN buck: fix Flow error
Reviewed By: davidaurelio

Differential Revision: D5871509

fbshipit-source-id: 91bd020b95d33a854b5649daea1a0b8d7782706d
2017-09-20 09:22:56 -07:00
Lee Byron 9f4ca4a541 Synchronize all relay packages
Reviewed By: mjmahone

Differential Revision: D5842774

fbshipit-source-id: 40c57619901e15b0baa62c59837fc887c100652b
2017-09-19 22:56:43 -07:00
Ian Levesque 522a0460a1 Revert D5841425: Removing unnecessary eslint enable/disable comments
Differential Revision: D5841425

fbshipit-source-id: 5a5bb73eafce9e09c89fe9f0cf57676cfc962a5a
2017-09-19 13:26:30 -07:00
Sina Sabet 114b00ee34 Removing unnecessary eslint enable/disable comments
Reviewed By: TheSavior

Differential Revision: D5841425

fbshipit-source-id: cf30e47e0a544230595b8298c6bca67cbee2fb08
2017-09-19 12:52:15 -07:00
David Aurelio ad927b93dc Upgrade uglify to v3 + es support
Summary: Upgrades uglify to version 3 with (experimental) ES6 support turned on.

Reviewed By: jeanlauliac

Differential Revision: D5842410

fbshipit-source-id: 1c8ccea15785bc5bb1c68d7a83b75881432d0ce2
2017-09-19 12:23:53 -07:00
David Aurelio 025e1841d9 Get rid of `async/queue`
Summary:
This replaces `async/queue` with a hand-rolled queue that does not yield to the event loop if a unit of work can be run synchronously.

Anecdotally, this leads to a > 11x speedup for the graph traversal when all data is available synchronously, e.g. from an in-memory cache.

Reviewed By: jeanlauliac

Differential Revision: D5861763

fbshipit-source-id: f7cf5f916a13adf9ca418d7522cd2f19df596fba
2017-09-19 09:21:40 -07:00
David Aurelio c546349da4 `GraphFn` returns promise rather than taking callback
Summary: Changes `GraphFn` to return a promise rather than taking a callback. This is more in line with call sites, which so far have been using `denodeify`.

Reviewed By: jeanlauliac

Differential Revision: D5857192

fbshipit-source-id: 61bbbef4fbf24b0b91c4a3008541eaa5a1af0f7a
2017-09-19 09:21:40 -07:00
David Aurelio 5aaf148179 `@format` for `Graph-test.js`
Reviewed By: jeanlauliac

Differential Revision: D5857069

fbshipit-source-id: 38e58f11579161a94d5201d016cf8b0ba3681eb4
2017-09-19 09:21:37 -07:00
David Aurelio 6062a9bd34 `LoadFn`/`ResolveFn` without callbacks
Summary:
Changes `LoadFn` to be synchronous or return a promise, and `ResolveFn` to be synchronsous.

This makes for a nicer API, without losing the property of not yielding to the event loop for synchronous work.

Reviewed By: jeanlauliac

Differential Revision: D5855963

fbshipit-source-id: 4b3c3363f4e49a9890586462925e8e400872feb2
2017-09-19 09:21:32 -07:00
David Aurelio 3f2b200e01 Fix creation of indexed RAM bundles
Reviewed By: jeanlauliac

Differential Revision: D5852737

fbshipit-source-id: 98e16fbd69d9ad3666acfc86e5de308175102643
2017-09-18 11:08:44 -07:00
Rafael Oleza f6e2e17900 HMR: Include updated modules in the correct order
Reviewed By: davidaurelio

Differential Revision: D5852269

fbshipit-source-id: 519564a4899b22d16a2ab3be4b466e21783e8f86
2017-09-18 09:06:43 -07:00
Jean Lauliac a7ad7502aa RN buck: ModuleGraph: get rid of callbacks, async/await for the best
Reviewed By: davidaurelio

Differential Revision: D5842855

fbshipit-source-id: 71f9e799db4ad312213a20c1b1a93280e934d1e7
2017-09-18 04:21:14 -07:00
Rafael Oleza 539885386a Remove unneeded await in sync method
Reviewed By: cpojer

Differential Revision: D5851184

fbshipit-source-id: 4a6f5cbd9d1237843c349b5944bd17767f84f625
2017-09-18 03:53:19 -07:00
Rafael Oleza 77f6ac080d Handle renames/deletes of modules correctly
Reviewed By: cpojer

Differential Revision: D5845030

fbshipit-source-id: a33af56bf5a479768eaf64b42ec3251a724c0315
2017-09-16 09:07:40 -07:00
Rafael Oleza f9526cf486 Fix issue when there is transform errors
Reviewed By: mjesun

Differential Revision: D5843842

fbshipit-source-id: a9c5efde86248a5e4b188012360d8830d2049985
2017-09-15 17:24:56 -07:00
David Aurelio d56cef3493 Don’t use unnecessary transforms for node 8
Summary: When running with node 8, the babel plugins `async-to-generator` and `syntax-trailing-function-commas` are unnecessary. Removing them makes runtime transpilation faster, and the resulting code is closer to the original (useful with debugging: less unmapped code areas, better breakpoint support, less renamed variables).

Reviewed By: mjesun

Differential Revision: D5842305

fbshipit-source-id: d99f719794e4a8f48fd10b0349fbb36f2994666e
2017-09-15 12:06:42 -07:00
Christoph Nakazawa 2a64bd390e Use the Config type from Metro
Reviewed By: davidaurelio

Differential Revision: D5832633

fbshipit-source-id: 8e4e0e6a2907e485a5627c87161af2d0672b4f56
2017-09-15 05:10:08 -07:00
Christoph Nakazawa 34b1fb6abf Add Config object and loading mechanism
Summary:
This copies the basic loading mechanism and default config from the RN local cli into Metro and exposes it under `metro-bundler`, and switches internal scripts over to it.

davidaurelio: I changed the packager-worker-for-buck to hardcode the rn.cli file, like we do in other files. I would like to pull the "find" mechanism that traverses up to find a config into Metro at some point, but for now I'd prefer to keep it lean until we need it. Let me know if that doesn't work for you.

The next diff will switch the RN cli over to these functions also.

Reviewed By: davidaurelio

Differential Revision: D5832596

fbshipit-source-id: a3e167644d96c8831e5a83378e8ba143e62426db
2017-09-15 01:39:30 -07:00
Christoph Nakazawa 37a7a3b018 Add ConfigT type
Summary: As a first step in defining a new public API and CLI for Metro, I'd like to pull the generally useful pieces from the RN cli into Metro. This diff makes it as a non-breaking change (so we don't have to bump the version of Metro for RN) by updating only the imports outside of the react-native-github folder.

Reviewed By: davidaurelio

Differential Revision: D5832464

fbshipit-source-id: 11b00b5517665441763c2207d577ae0e110c681b
2017-09-15 01:39:30 -07:00
Christoph Nakazawa 80a3306448 Bump metro-bundler dependency to 0.17
Reviewed By: davidaurelio

Differential Revision: D5834180

fbshipit-source-id: 121efc7000bff7aff121d44e6b0b8eed1d4e81ae
2017-09-14 22:09:13 -07:00
Alexander Gugel db7ea0b5f7 Add hook for accessing aggregated resolution cache
Reviewed By: mjesun

Differential Revision: D5775425

fbshipit-source-id: 9e1855d9a161f60d7163a208c5539264ba67d3fd
2017-09-14 18:53:57 -07:00
Rafael Oleza 300cd924e0 Add logging for HMR changes
Reviewed By: davidaurelio

Differential Revision: D5833673

fbshipit-source-id: 5cfc9e7de6b761130093f785f2f9b829093571d0
2017-09-14 16:43:53 -07:00
Rafael Oleza bfa19e9db0 Do not include polyfills in the inlineRequiresBlacklistFiles transform option
Reviewed By: davidaurelio

Differential Revision: D5834728

fbshipit-source-id: 7c531b2464fb0bda50fdfa527112313060f11a0c
2017-09-14 14:08:34 -07:00
Rafael Oleza 4f31807cf8 Add multipart response functionality to the full bundler created by Delta Bunlder
Reviewed By: jeanlauliac

Differential Revision: D5825701

fbshipit-source-id: 481d36420396e2fcb457397905c69fb5720f43b2
2017-09-14 10:21:12 -07:00
Rafael Oleza 61fb142520 Bump babel-preset-react-native dependency in metro bundler
Reviewed By: jeanlauliac

Differential Revision: D5833281

fbshipit-source-id: 42a62e71b77467973d15d60419a33c310082d015
2017-09-14 09:05:52 -07:00
Rafael Oleza 9294f5a46a Multiple requests to the Delta Bundler when there is an error should produce an Error
Reviewed By: jeanlauliac

Differential Revision: D5814215

fbshipit-source-id: 9a72057078819d07ddbd5d4f949d7bdf13aff29e
2017-09-14 08:25:36 -07:00
David Aurelio 3401cfe768 disable all dev settings for base transform
Reviewed By: fkgozali

Differential Revision: D5824578

fbshipit-source-id: 7503700b82dc2b4de4c2d941829ba837ddcd5f3c
2017-09-13 16:53:45 -07:00
Rafael Oleza 0a1e79a820 Replace the ETag header by the Last-Modified to improve performance
Reviewed By: mjesun

Differential Revision: D5823545

fbshipit-source-id: 57eac5548e626eeed05f9b454e3f54b114193eb0
2017-09-13 13:08:05 -07:00
Rafael Oleza b64a07e38b Make DeltaBundler HMR handle errors correctly
Reviewed By: jeanlauliac

Differential Revision: D5814107

fbshipit-source-id: 2bcc52901eff5f2330453c7dc948a0b4ac0332db
2017-09-13 10:12:55 -07:00
Christoph Nakazawa 5422f802f5 Use hasteImpl in the Buck worker
Reviewed By: davidaurelio

Differential Revision: D5803422

fbshipit-source-id: de3aa40ab8ea9ec54e61173b3d6556351394089f
2017-09-13 00:09:09 -07:00
Kevin Gozali 8654b558ca fix output path for the UNBUNDLE magic file
Summary: Fixed the UNBUNDLE magic file location to match what JniJSModulesUnbundle.cpp expects.

Reviewed By: sahrens

Differential Revision: D5821637

fbshipit-source-id: 4342e4bb4d139b4eba77dd92a53b1683041fc7e9
2017-09-12 22:43:13 -07:00
Rafael Oleza 449e943d91 Add 'bundler' column to metro bundler logs
Reviewed By: davidaurelio

Differential Revision: D5809350

fbshipit-source-id: 7e1b9dcda26f3c199ff1723e21c670659d9cf747
2017-09-12 09:11:14 -07:00
Miguel Jimenez Esun 090df5c104 Make cache method public
Reviewed By: jeanlauliac

Differential Revision: D5804391

fbshipit-source-id: 8da732a440111ca5d89d51fa9e4c2727d386bbff
2017-09-12 08:11:29 -07:00
Rafael Oleza 5fa193bdee Move createModuleIdFactory() to a separate module
Reviewed By: jeanlauliac

Differential Revision: D5813714

fbshipit-source-id: 17ae2cf1751d30f6f18bb896576747871b8a0b68
2017-09-12 08:11:29 -07:00
Rafael Oleza bd51bc3c2f Use getModuleForPath() method from Resolver instead of Bundler
Reviewed By: davidaurelio

Differential Revision: D5813534

fbshipit-source-id: dbd005c2f9b478be58f33bd30df16e94159509da
2017-09-12 07:11:30 -07:00
Christoph Nakazawa d9ff4fa1dc Apply @format to root level files
Reviewed By: davidaurelio

Differential Revision: D5803464

fbshipit-source-id: e250a3ada33790b989f1e70990438c300bfb6d52
2017-09-12 01:06:05 -07:00
Rafael Oleza c51161d209 Fix issue calculating dependencyPairs when adding a new dependency
Reviewed By: cpojer

Differential Revision: D5812028

fbshipit-source-id: ced2cb19e87b3622d16f4c59d58d6711ce5161df
2017-09-12 01:06:05 -07:00
Christoph Nakazawa b3e817285b Remove HasteMap
Reviewed By: davidaurelio

Differential Revision: D5803275

fbshipit-source-id: 2e64733d8ef400a61d116b21cd53185934dd3d57
2017-09-11 23:54:09 -07:00
Christoph Nakazawa 61a0116dd4 Prevent logspew in symbolication worker-test
Reviewed By: mjesun

Differential Revision: D5803050

fbshipit-source-id: b585d073191ae521e8bc8cabb90a15d2a176d6da
2017-09-11 19:44:11 -07:00
Christoph Nakazawa 92fa17f70e Fix DependencyGraph-test log-spew
Reviewed By: mjesun

Differential Revision: D5803016

fbshipit-source-id: fc94590331fb77796cb5d2bbc96f963b7b5f8c7c
2017-09-11 19:44:11 -07:00
Christoph Nakazawa 86a943bbcd Branding: "packager" -> "Metro Bundler"
Summary:
This diff renames all the stragglers in comments and strings from variations of "packager" to "Metro Bundler". I did one of three:

* Rename "packager" to "Metro Bundler"
* Rename "react-native-packager" to "Metro Bundler"
* Remove "packager" when code inside of Metro implies that it's about Metro

I also removed `Glossary.md` because it is unmaintained and very old. mjesun is currently starting to write documentation for Metro which will supersede whatever was there before.

Reviewed By: mjesun

Differential Revision: D5802993

fbshipit-source-id: ba99cb5ed04d84b0f7b7a8a0bf28ed99280a940a
2017-09-11 19:44:11 -07:00
Rafael Oleza 8e2252d35d Implement end() method in DeltaBundler
Reviewed By: jeanlauliac

Differential Revision: D5803466

fbshipit-source-id: 78a29cd943774506694513987d97d9f37be04485
2017-09-11 08:27:56 -07:00
Rafael Oleza 197d885ec1 Add X-Metro-Files-Changed-Count HTTP header to the response when using Delta Bundler
Reviewed By: mjesun

Differential Revision: D5793977

fbshipit-source-id: 9e0783356ca7574077d4eb06489e9837f033d986
2017-09-11 08:27:56 -07:00
Rafael Oleza bf64ba58d3 Integrate the Source Map generator from Delta Bundler into the metro server
Reviewed By: mjesun

Differential Revision: D5793423

fbshipit-source-id: a26b6d67405d6ec0d59479cfe5091159a29018d1
2017-09-11 08:27:56 -07:00
Rafael Oleza e57e0002d1 Add Source Maps support to Delta Bundler
Reviewed By: jeanlauliac

Differential Revision: D5793499

fbshipit-source-id: 67e49ed5f5bc9ccae2fb4982cd506fc03259589a
2017-09-11 08:27:56 -07:00
Rafael Oleza dcf30322a5 Do not minify a bundle when calling wrapModule()
Reviewed By: jeanlauliac

Differential Revision: D5791079

fbshipit-source-id: 942d2963e17153508b4a7c5bd48e11b7cb3fdcd4
2017-09-11 08:27:56 -07:00
Rafael Oleza 2593ea2ad4 Make the sourcemaps generation module independent of ModuleTransport
Reviewed By: jeanlauliac

Differential Revision: D5789998

fbshipit-source-id: a460ccb0baa62d0edb4e0da2b6f4d4abaa7fe222
2017-09-11 08:27:56 -07:00
Rafael Oleza 5ee6de217d Disable using babel-generated sourcemaps from the metro bundler server
Reviewed By: jeanlauliac

Differential Revision: D5785354

fbshipit-source-id: be1a5c114b12af356804ff3b4ed6c4263d66fa0c
2017-09-11 08:27:56 -07:00
Jean Lauliac 36b2f8d67f RN packager: wrap-worker-fn.js: syncify
Reviewed By: davidaurelio

Differential Revision: D5803796

fbshipit-source-id: d6b7d169a2c17864e8ce68d82df8e898d966e404
2017-09-11 07:41:44 -07:00
Jean Lauliac 69eb3430b6 RN packager: transform-module.js: syncify everything
Reviewed By: davidaurelio

Differential Revision: D5803768

fbshipit-source-id: 06c28e6c30fce347780d953312646a449d0026d9
2017-09-11 07:41:44 -07:00
Jean Lauliac 7ccbcc5ebc metro-bundler: fix Flow errors in OSS
Reviewed By: cpojer

Differential Revision: D5775151

fbshipit-source-id: 730ab160fdf5ea35f8047eb55a7e2844ba7a7c14
2017-09-08 06:39:36 -07:00
Rafael Oleza 286c5ccdd9 Bump metro-bundler to 0.16.0
Reviewed By: davidaurelio

Differential Revision: D5793558

fbshipit-source-id: c5d7f3029b889987613034150ba13a72b4850421
2017-09-08 06:23:47 -07:00
Jean Lauliac 890de8436f xplat/js: switch to new oncall javascript_foundation
Reviewed By: cpojer

Differential Revision: D5774897

fbshipit-source-id: 6b3246aeda9fe3bee89065ed2ac244282e496373
2017-09-08 03:39:34 -07:00
Rafael Oleza 177c4fb1ab Do not bundle deleted modules in HMR
Reviewed By: mjesun

Differential Revision: D5777831

fbshipit-source-id: dd3551194eca99097cea5a1944555cd8adff9f19
2017-09-07 10:21:19 -07:00
Marshall Roch 14428a67e5 @allow-large-files Flow v0.54.0
Reviewed By: leebyron

Differential Revision: D5773490

fbshipit-source-id: 2c54bb6326f23edbe9a969f3010f79da8189923e
2017-09-06 03:31:10 -07:00
Jean Lauliac a94654255b packager-worker-for-buck: include all entries point for getting extra configuration
Reviewed By: davidaurelio

Differential Revision: D5764794

fbshipit-source-id: a9bddd05a66c1d5a45f5dd4d04517dbe86ea5b76
2017-09-05 10:54:17 -07:00
Rafael Oleza 0265758e5e Create brand-new HMR server using the Delta Bundler
Reviewed By: mjesun

Differential Revision: D5765024

fbshipit-source-id: 3f51ab1564a93b8268e51c0a0a97ea3ef5bd6681
2017-09-05 07:21:06 -07:00
Rafael Oleza 387a55de40 Make the DeltaCalculator and the DeltaTransformer emit change events
Reviewed By: jeanlauliac

Differential Revision: D5765042

fbshipit-source-id: 5b45cc425b6afb4f8cead80ce967263936baa8c1
2017-09-05 07:21:06 -07:00
Rafael Oleza 8b6d69b645 Return the inverseDependencies from the Delta Bundler to support HMR
Reviewed By: jeanlauliac

Differential Revision: D5763905

fbshipit-source-id: 6b95c8dfded5fc30ec2e7a558ab25550d9a1c333
2017-09-05 07:21:06 -07:00
Miguel Jimenez Esun d4a93eb2fa Update Jest to v21
Reviewed By: cpojer

Differential Revision: D5765333

fbshipit-source-id: 94ea448c4380fdc68f42f84eb3963322ea18ec70
2017-09-05 05:25:02 -07:00
Rafael Oleza 1f90522a13 Upgrade metro-bunder to v0.15.0
Summary: Some breaking changes require a new release.

Reviewed By: cpojer

Differential Revision: D5766207

fbshipit-source-id: d0ebc5cb46fbd2ad167c0a3369d0f354346f61b9
2017-09-05 05:25:02 -07:00
Rafael Oleza e18d4e1b89 Enable delta bundler on metro-bundler behind a cli argument
Reviewed By: mjesun

Differential Revision: D5761110

fbshipit-source-id: 83127f63679caffbc4f335f52f6f5eda398e8c05
2017-09-04 13:53:55 -07:00
Rafael Oleza 7b17ca335d Add DeltaPatcher module to handle Delta bundles
Reviewed By: jeanlauliac

Differential Revision: D5761096

fbshipit-source-id: 8c8ef5fb720b08e3f4f097c5a76f793dc4f1c1da
2017-09-04 13:53:55 -07:00
Rafael Oleza 52fcaf4a10 Delta Bundler: Initial implementation of the Delta Bundler
Reviewed By: jeanlauliac

Differential Revision: D5760233

fbshipit-source-id: 5f829d48401889b1391719564119951a1cf3c792
2017-09-04 13:53:55 -07:00
Rafael Oleza 8c8cfb364f Expose some private methods from the Bundler and the DependencyGraph
Reviewed By: jeanlauliac

Differential Revision: D5755556

fbshipit-source-id: cff95e3464154883fd872bf8ab916276a1f09027
2017-09-04 13:53:55 -07:00
Rafael Oleza 70a0916dd2 Change signature of Resolver.wrapModule() to not depend on ResolutionResponse
Reviewed By: mjesun

Differential Revision: D5757102

fbshipit-source-id: 1cb514612ec431e48d669607c5332f26d19f53a0
2017-09-04 13:53:55 -07:00
Rafael Oleza ebb14a56c6 Add prependPolyfills option param to getDependencies()
Reviewed By: jeanlauliac

Differential Revision: D5755548

fbshipit-source-id: 599d3fb6d9acb34f5970ad83947daeb5f28f86d3
2017-09-04 13:53:55 -07:00
Rafael Oleza 9c251076cf Fix sourceMap flow annotations by making them nullable
Reviewed By: mjesun

Differential Revision: D5755671

fbshipit-source-id: 19be8475b1f1b54bc55b64a1de4b8a446e125c65
2017-09-04 13:53:55 -07:00
Miguel Jimenez Esun 2377f04f4a Always report filename
Reviewed By: cpojer

Differential Revision: D5764824

fbshipit-source-id: cb90e429176764d4a1043fd57bbfee223361a182
2017-09-04 13:53:55 -07:00
Jean Lauliac 6e415bcb2f metro-bunder: v0.14.0
Summary: Some breaking changes require a new release.

Reviewed By: cpojer

Differential Revision: D5763898

fbshipit-source-id: 0580c9b1256c2c019adc5fb2f771c54d7e7a0bf1
2017-09-04 04:42:16 -07:00
Rafael Oleza 717a8c7f61 Improve HMR performance by allowing to specify bundlingOptions to getShallowDependencies() method
Reviewed By: jeanlauliac

Differential Revision: D5745205

fbshipit-source-id: a69ac40bb676a809e3786681179e2b4bac392ce6
2017-09-01 08:51:22 -07:00
Jean Lauliac 8907de28ac metro-bundler: v0.13
Reviewed By: cpojer

Differential Revision: D5754623

fbshipit-source-id: b70bfa105e6752db5350b82433bd64e1ca45f33b
2017-09-01 07:36:11 -07:00
Jean Lauliac 1142f05d59 metro-bundler: v0.12
Reviewed By: cpojer

Differential Revision: D5745702

fbshipit-source-id: 6dc88811525e1595f58b23b7d0ebd5cc9f309785
2017-08-31 10:52:51 -07:00
Jean Lauliac 1c6a96f2b3 metro-bundler: ModuleGraph/output: @format
Reviewed By: cpojer

Differential Revision: D5745469

fbshipit-source-id: 7aa923736d6eb257f547a6d41b4329ce3406c805
2017-08-31 07:24:33 -07:00
Miguel Jimenez Esun 9254941133 Treat package.json's first
Reviewed By: fkgozali

Differential Revision: D5736600

fbshipit-source-id: f2947d4b1fb057ea33dd84e3c8cd878d5bfeda49
2017-08-30 12:08:48 -07:00
Rafael Oleza 909480887e Fix flow types of getShallowDependencies()
Reviewed By: mjesun

Differential Revision: D5735278

fbshipit-source-id: b9a2797a89a3893a5196ef8fe15d2ab8aa00e544
2017-08-30 08:20:38 -07:00
Rafael Oleza 21cc11c5ae Only include hmr transforms when in dev mode
Reviewed By: arcanis

Differential Revision: D5732348

fbshipit-source-id: cc70d3ee6531f1f8345d6a04827ca802382525d8
2017-08-30 03:54:59 -07:00
Miguel Jimenez Esun 84ae805e78 Make metro-bundler use a no-op transformer by default
Summary: When starting to use `metro-bundler` as a standalone server, I found quite complicated the fact that it needs a transformer by default. Moreover, the transformer is not passed as a reference to a JS object, but as a path to a required file. I removed the need to be required, and defaulted to a dummy, basic transform, that does nothing by default. This avoids having to create an extra file and linking to it (potentially needing to involve `path` and other extra modules).

Reviewed By: cpojer

Differential Revision: D5622906

fbshipit-source-id: 0c2b1bec86fa542b3c05de42c89d4b5bb4384b34
2017-08-29 09:42:50 -07:00
yeyuanfeng 3731fa7c3c TransformCaching: fix GC condition judgement error
Summary:
<!-- Thanks for submitting a pull request! Please provide enough information so that others can review your pull request. The two fields below are mandatory. -->

**Summary**

<!-- Explain the **motivation** for making this change. What existing problem does the pull request solve? -->
I am sending this PR to fix an error in TransformCaching module. See this issue [TransformCaching module try to collect cache every time I build bundle #46](https://github.com/facebook/metro-bundler/issues/46).

**Test plan**

<!-- Demonstrate the code is solid. Example: The exact commands you ran and their output, screenshots / videos if the pull request changes UI. -->
```
/**
   * When restarting packager we want to avoid running the collection over
   * again, so we store the last collection time in a file and we check that
   * first.
   */
  _collectCacheIfOldSync() {
    const {_rootPath} = this;
    const cacheCollectionFilePath = path.join(_rootPath, 'last_collected');
    const lastCollected = Number.parseInt(
      tryReadFileSync(cacheCollectionFilePath) || '',
      10,
    );
    if (
      Number.isInteger(lastCollected) &&
      Date.now() - lastCollected < GARBAGE_COLLECTION_PERIOD
    ) {
      return;
    }
    const effectiveCacheDirPath = path.join(_rootPath, CACHE_SUB_DIR);
    mkdirp.sync(effectiveCacheDirPath);
    collectCacheSync(effectiveCacheDirPath);
    fs.writeFileSync(cacheCollectionFilePath, Date.now().toString());
  }
```
Steps:
1. Create a new react-native project.
2. Put your breakpoint at this sentence `collectCacheSync(effectiveCacheDirPath);`.
3. Bundle the project, program will break at `collectCacheSync(effectiveCacheDirPath);`
4. Resume the program, finish the first time bundle.
5. Bundle again, this time program won't break.
Closes https://github.com/facebook/metro-bundler/pull/48

Differential Revision: D5726161

Pulled By: jeanlauliac

fbshipit-source-id: 0865f1bf25d6eb36f067ac3dc7764df9fd5026dc
2017-08-29 08:27:24 -07:00
Rafael Oleza 50ef3138cf Metro HMR: Add file parameter to getShallowDependencies()
Reviewed By: jeanlauliac

Differential Revision: D5687991

fbshipit-source-id: c2db3986c6a5ec81ed1350ded92dfcf1b529c2bc
2017-08-24 08:20:34 -07:00
Rafael Oleza 679309987b Fix HMR when adding/renaming assets
Summary:
The HMR logic used to try to calculate the dependencies of every new added (or modified) file, including assets. This resulted in a TransformError.

This commit adds a check that stops the HMR bundling once it finds out that the updated file is an asset

Reviewed By: cpojer

Differential Revision: D5697391

fbshipit-source-id: faf7ccad76ac4922b70ed1c7ce8ce32b03c4e8ee
2017-08-24 07:40:35 -07:00
Miguel Jimenez Esun b2331471d5 Remove the timeout
Summary: We were not using the timeout at all, so we decided to remove it. Also, the current value is pretty high, so it should never fail unless there's something really bad.

Reviewed By: jeanlauliac

Differential Revision: D5640839

fbshipit-source-id: 3eaa567a6828902376fe5df9fe3f4e96b83a23bd
2017-08-23 07:50:36 -07:00
Jean Lauliac 87aa1cc166 worker-farm: add @format
Reviewed By: davidaurelio

Differential Revision: D5658177

fbshipit-source-id: 59565a57243c6f8ce0d9aceaad5dc542992cd45b
2017-08-21 04:50:46 -07:00
Jean Lauliac bf25e49665 metro-bundler: collect-dependencies: harden requirements for require()
Reviewed By: davidaurelio

Differential Revision: D5658522

fbshipit-source-id: 2970d62bcb18d57595c666d680407a23eccda77b
2017-08-21 04:35:59 -07:00
Jean Lauliac 6a0efc0853 metro-bundler: ModuleGraph worker: @format
Reviewed By: davidaurelio

Differential Revision: D5658384

fbshipit-source-id: 918017a117e5fb574b3f6801104b4db2708a0eff
2017-08-21 04:35:59 -07:00
Ben Nham 72455941ba add number of files changed to bundle response
Reviewed By: davidaurelio

Differential Revision: D5650181

fbshipit-source-id: 16c7842a79bec6cf4fb5bfeffc4bc8a835c7ce83
2017-08-21 04:06:22 -07:00
Andres Suarez 6d4b8e0c8d Upgrade to babylon@6.18.0
Reviewed By: davidaurelio

Differential Revision: D5652526

fbshipit-source-id: 4e1f217c924b9eee33e9f9eae447962617af7e22
2017-08-18 11:21:41 -07:00
Alex Dvornikov 5cd43a675b Default to "compact: false" in the code generate phase
Reviewed By: davidaurelio

Differential Revision: D5630578

fbshipit-source-id: 5049be735f41f1207b8ca329f4a78fc92f683c23
2017-08-18 05:05:43 -07:00
Jean Lauliac 936b8c31e7 metro-bundler: elaborate the global cache test a bit
Reviewed By: davidaurelio

Differential Revision: D5650882

fbshipit-source-id: b1f283f00e6e200f3b731126ed7a273fe782aeaa
2017-08-18 04:13:53 -07:00
Jean Lauliac 55986976b1 metro-bundler: temporary increase of the transform timeout
Summary:
We'll revert when the root problem is fixed, that should mitigate for now.

What might be the root problem, I believe, is that when there are some cached files already on the machine, we immediately try to build all the dependencies, but the worker farm is queuing these and it takes a long time to finish. The timeout should include only the transformation time, not the queuing. I'll fix that separately.

Reviewed By: mjesun

Differential Revision: D5650380

fbshipit-source-id: f4b045876cc822caee3998f69ca98ea986709bf4
2017-08-17 11:36:12 -07:00
Jean Lauliac c6794aabd9 metro-bundler: extract calls to require.async()
Reviewed By: davidaurelio

Differential Revision: D5639493

fbshipit-source-id: d74aae95a238cf97b7daafad41ce9cbdccc84c1b
2017-08-17 06:41:18 -07:00
Jean Lauliac 66182916de metro-bundler: extract-dependencies: nit fix
Reviewed By: davidaurelio

Differential Revision: D5639285

fbshipit-source-id: 1f163160e72cb8a63c0c23846ad1b6cc3da13602
2017-08-17 06:41:15 -07:00
David Aurelio 35979c7b00 JSTransformer: pass on `--heap-growing-percent`
Reviewed By: jeanlauliac

Differential Revision: D5648906

fbshipit-source-id: 240b3044dd1268cf5f8bb41710647050368ddefb
2017-08-17 05:08:49 -07:00
Miguel Jimenez Esun b3b2d10500 Do not assume we are using processRequest in an express app
Summary: It might be that Metro bundler is getting used directly with the `http` module and not within an express app. If that's the case, the `next` method will not exist, so we have to guard against it.

Reviewed By: davidaurelio

Differential Revision: D5639944

fbshipit-source-id: bcee4a70f6a7b643218b11af0d8aedbc7762eead
2017-08-17 04:42:10 -07:00
Rafael Oleza e4acb91914 Remove hot parameter from HMR url
Summary: This is the last piece of work to make all the clients do a single request for both HMR/non-HMR modes. I'm not completely sure how this URL is used by the client, but it does not need the `hot` param.

Reviewed By: davidaurelio

Differential Revision: D5639946

fbshipit-source-id: a76f9ba7b9ace625352a156761d3ee2809f80c92
2017-08-16 19:12:43 -07:00
Rafael Oleza 409a2ae809 Always use the HMR transforms when building the bundle from the metro-bundler server
Summary:
This diff enables the HMR transforms for any bundle requested through the metro-bundler HTTP server, so it ignores the `hot` parameter passed in the URL.

This allows much faster switches when enabling/disabling HMR, since metro-bundler does not need to re-compile each single file again, while not impacting substantially build times when HMR is off.

I've done some lightweight benchmarks on my machine and these are the results (all the tests have been done after running metro-bundler with a clean cache and restarting the app).

**Before**

Time to build (HMR off): 1x (baseline)
Time to build (HMR on): 1.90x

**This diff**

Time to build (HMR off): 1.009x
Time to build (HMR on): 1.036x

(The reason why now it takes double the time to load the HMR bundle than the non-HMR bundle after launching the app is because the device after a restart always asks for the non-HMR bundle and afterwards the HMR bundle, causing the server to have to build both bundles).

**Bundle size**
In terms of bundle size, adding the HMR transforms increases the size by around 3-4% (this regression is due to the wrappers added around React components, and will depend on the app).

**Next steps**

There are two improvements to do after this diff:

1. Remove the `hot=true` parameter from the clients when they request the bundle. This will reduce by half the memory used by metro-bundler when switching from non-HMR to HMR (or when opening the app with HMR enabled), since metro-bundler caches the bundles based on url.
2. After this diff, the `hot` parameter in the various options objects will not make much sense, so my suggestion is to just remove it from everywhere and instead of checking for that parameter in the transformer, check for `dev=true` there.

Reviewed By: davidaurelio

Differential Revision: D5623623

fbshipit-source-id: cb76b9182e55f442e2987fcf59eee2ba2571578e
2017-08-15 18:44:03 -07:00
Jean Lauliac a78be6ce0a metro-bundler: get longer stack traces in workers
Reviewed By: davidaurelio

Differential Revision: D5630365

fbshipit-source-id: df397afe80f12a6d8a587cb3e657bcb22b2377f3
2017-08-15 08:43:11 -07:00
Miguel Jimenez Esun e9d815c1fa Reduce source map in 44.5 MiB for Nuclide
Reviewed By: pakoito, davidaurelio

Differential Revision: D5611240

fbshipit-source-id: b0090f6d07d3e08408fc27e91e462a2019130880
2017-08-14 12:07:37 -07:00
Jean Lauliac 08947acde3 RN cli: remove project temp dir experiment
Reviewed By: mjesun

Differential Revision: D5621056

fbshipit-source-id: 464353bc3e68e9e3657e1fbb02aca467b2daa5ca
2017-08-14 03:56:06 -07:00
David Aurelio 30d85a4b05 Terminal: Throttle output to ~30fps
Reviewed By: rafeca

Differential Revision: D5612088

fbshipit-source-id: 3567eb477e771ec680f17ae273dc4daae91614c0
2017-08-11 14:40:24 -07:00
Miguel Jimenez Esun 506e3ec358 Update Jest to 20.1.0-echo.1
Reviewed By: cpojer

Differential Revision: D5591819

fbshipit-source-id: 91830096988d88a6f0601d73225a12ae31e61a17
2017-08-10 07:37:05 -07:00
Brian Vaughn 36b22341b5 React 16 beta 5 sync (5495e49...c3718c4)
Reviewed By: spicyj

Differential Revision: D5564030

fbshipit-source-id: fd3e6133df7ee8e7488a3c515ce6c783c11d9401
2017-08-09 12:25:12 -07:00
David Aurelio 7e6816d99c Remove unused type imports
Reviewed By: cpojer

Differential Revision: D5579025

fbshipit-source-id: b1b4a73db59ec071b18c873a8e676f0722ae109a
2017-08-07 17:44:04 -07:00
Miguel Jimenez Esun 38fce3a7fb Remove redundant calls for addModuleIdsToModuleWrapper
Reviewed By: davidaurelio

Differential Revision: D5526561

fbshipit-source-id: e3452899062587d3b4b5f87a7de01cb0be7a3cb9
2017-08-01 09:52:45 -07:00
David Aurelio 35e5b486c3 Make `ResolveFn` sync
Summary: now that `ResolutionRequest.resolveDependency` is synchronous, we can also make `ResolveFn` synchronous.

Reviewed By: fkgozali

Differential Revision: D5528094

fbshipit-source-id: 0b40df29024b809a99b7e577716b24e9fa499578
2017-07-31 17:46:01 -07:00
David Aurelio 0272069002 Only write assets referenced in a bundle
Summary: Adds filtering to the assets written from a Buck build, so that we don’t write all assets present in libs, but rather only the ones included in the bundle.

Reviewed By: cpojer

Differential Revision: D5522844

fbshipit-source-id: fcca3567b726dfab1ecf9560932fd6e1a174b31f
2017-07-31 10:12:11 -07:00
Jean Lauliac e032e6621f metro-bundler: upgrade all jest refs to delta.4
Reviewed By: mjesun

Differential Revision: D5503722

fbshipit-source-id: ca5d1e684e6b909804ae2be8c2055439dda611f5
2017-07-28 13:02:53 -07:00
Jean Lauliac f332dbee47 metro-bundler: Resolver @format
Reviewed By: cpojer

Differential Revision: D5514920

fbshipit-source-id: 59b8ab3555aca1703b22049382f39d1d67401c4f
2017-07-28 13:02:53 -07:00
David Aurelio 2dda50893f Saner entry point
Summary: makes flow typing for the entry point more sound and fixes two issues

Reviewed By: BYK

Differential Revision: D5507650

fbshipit-source-id: 6b03f7de792ffcece4d0d61950e136a61ea7db2e
2017-07-27 18:15:34 -07:00
Dmitry Zakharov 43457e6674 Make intentions clearer in code of require.js
Reviewed By: javache

Differential Revision: D5479898

fbshipit-source-id: de73d5cffed4200b81f1d8335a3962a37702df63
2017-07-27 13:59:47 -07:00
Jean Lauliac 1a75751a3b metro-bundler: hash enableBabelRCLookup in global cache
Reviewed By: mjesun

Differential Revision: D5502800

fbshipit-source-id: f6cb01e57a3a385c256f1e77420ca670fe77e5de
2017-07-27 12:29:58 -07:00
Jean Lauliac c37f730c57 metro-bundler: 0.11.0
Reviewed By: davidaurelio

Differential Revision: D5494606

fbshipit-source-id: 2049fe162b76fa6ffeec9f87871276057d84f892
2017-07-27 11:51:18 -07:00
Jean Lauliac 14b88b6ad4 metro-bundler: @format lib/
Reviewed By: cpojer

Differential Revision: D5493458

fbshipit-source-id: 05ac2895125b1419996a66f3ef155bc2cec11c02
2017-07-26 12:24:22 -07:00
Christoph Nakazawa 521e25bded Improve Metro's TransformError message for transform errors.
Reviewed By: davidaurelio

Differential Revision: D5470538

fbshipit-source-id: dea3e798c26964bb789917e73bb06a7629af7aa4
2017-07-25 13:54:43 -07:00
Jean Lauliac ce0da03a05 metro-bundler: moar @format
Reviewed By: mjesun

Differential Revision: D5484885

fbshipit-source-id: f9ae126931f0c9f611ee5b5b96243656e86f4ba4
2017-07-24 22:37:19 -07:00
Jean Lauliac 9f1cce4e89 metro-bundler: bundle test: fix test for no polyfills
Reviewed By: mjesun

Differential Revision: D5481856

fbshipit-source-id: b5516d7d74ba15886f1126f6d881a66559d0fb1e
2017-07-24 22:37:19 -07:00
Jean Lauliac 5ba56250b5 metro-bundler: remove hardcoded AssetRegistry path
Reviewed By: davidaurelio

Differential Revision: D5452553

fbshipit-source-id: e0a6f56d3bc03f4ba7f34fbee1ae418495dcc6cd
2017-07-24 17:07:30 -07:00
Jean Lauliac 74e78ee43f metro-bundler: @format node-haste subdir
Summary: Format everything, one subdir at a time.

Reviewed By: mjesun

Differential Revision: D5481590

fbshipit-source-id: 6d9157e6857d61b8116bcf9285bd4be415c5ba01
2017-07-24 15:30:30 -07:00
James Ide 0f3d7117d4 Add an option to enable/disable .babelrc lookup
Summary:
By default, when Babel transforms a file, it looks for .babelrc in the file's directory and all parent directories until it finds a .babelrc file. This means that when Metro tries to transform `<PROJECT_ROOT>/node_modules/dep/mod.js`, it searches for `<PROJECT_ROOT>/node_modules/dep/.babelrc`. If that .babelrc actually exists, Babel will try to apply it.

In practice, this often causes problems because packages that include .babelrc often do so unintentionally -- they don't intend for the package consumer to look at that .babelrc file. One thing we've done a lot is `rm` all .babelrc files under node_modules -- this commit effectively achieves the same in a less destructive way by telling Babel not to look up .babelrc files. (To clarify, Metro will still apply the .babelrc file in the project root.)

Since the current behavior is to look at .babelrc files, this commit keeps that behavior for now. We'll consider overriding the default behavior (that is, making Babel not lookup .babelrc files) in the default configuration of Expo/RN projects. If this goes well and we empirically find that people are having a better time, we may want to consider flipping this option's default in Metro, so that Metro tells Babel not to look up .babelrc files by default.
Closes https://github.com/facebook/metro-bundler/pull/31

Differential Revision: D5469620

Pulled By: jeanlauliac

fbshipit-source-id: fe7a1042feafff843e1a6d8cc9487eb6ff8e8358
2017-07-24 13:43:26 -07:00
Jean Lauliac 42d61ea63a metro-bundler: global cache: add uri info to the FetchFailedError
Reviewed By: davidaurelio

Differential Revision: D5451939

fbshipit-source-id: 8fa460f714919488ab7a592e123e91adde4ed4c2
2017-07-24 12:09:46 -07:00
Jean Lauliac fd6c2a4013 v0.10.0
Summary: Closes https://github.com/facebook/metro-bundler/pull/32

Differential Revision: D5469676

Pulled By: jeanlauliac

fbshipit-source-id: 68cf83d43582fa0543e28810df48915911760ce3
2017-07-21 04:54:57 -07:00
Janic Duplessis 16bb5571c6 Add Content-Length header to *.bundle responses
Summary:
The main goal of this is to be able to show bundle download progress in a follow up PR for react-native.

**Test plan**
Tested that it is possible to show bundle download progress in react-native using this header and added unit test.
Closes https://github.com/facebook/metro-bundler/pull/28

Reviewed By: davidaurelio

Differential Revision: D5443344

Pulled By: jeanlauliac

fbshipit-source-id: 63fd655c964d7df526125fbe55eb9c7cccd7dba9
2017-07-21 03:51:48 -07:00
Jean Lauliac 3cc83da403 metro-bundler: Server: report ambiguous module resolution better
Reviewed By: mjesun

Differential Revision: D5444129

fbshipit-source-id: 311d20c7ee4c00ec2d4c52d83bd6c5a94221b552
2017-07-20 10:21:49 -07:00
Miguel Jimenez Esun 3cbc2f3ec4 Revert D5388655: BREAKING: Add regenerator-runtime on demand, based on the files
Differential Revision: D5388655

fbshipit-source-id: 2f92d6ae69f4772195aeca7493f53209388b3ad0
2017-07-19 12:14:28 -07:00
Miguel Jimenez Esun d7521c53ae BREAKING: Add regenerator-runtime on demand, based on the files
Summary:
Adding a Babel plugin that will analyze the file looking for any potential candidate to use `regenerator-runtime`, and if so, will inject dynamically the module. The module is injected per file, so we avoid polluting the global environment. The plugin is also able to inject the `require` call beforehand, so that the inliner can pick them and inline them.

The Babel plugin is part of `react-native-babel-preset`, so as long as you are using this preset you are safe. If not, you should include the specific transformer into your list of plugins, as `react-native-babel-preset/transforms/transform-regenerator-runtime-insertion.js`.

Reviewed By: davidaurelio

Differential Revision: D5388655

fbshipit-source-id: dc403f3d5e2d807529eb8569a85c45fec36a6a3e
2017-07-19 11:11:16 -07:00
Jean Lauliac 1ae97c72a2 fix inner yarn.lock
Summary:
I corrupted the yarn.lock when trying to downgrade that module. This change brings the correct resolution in the `yarn.lock`.
Closes https://github.com/facebook/metro-bundler/pull/29

Differential Revision: D5452305

Pulled By: jeanlauliac

fbshipit-source-id: 54026cfd9cf269e2b432dd92f16bd6db9fa4603c
2017-07-19 09:14:47 -07:00
Jean Lauliac 7f68aa8493 metro-bundler: TerminalReporter: fix comment
Reviewed By: davidaurelio

Differential Revision: D5442902

fbshipit-source-id: bb9ccc05c4a6a69027448bad42880313732304a1
2017-07-18 10:31:48 -07:00
Jean Lauliac e023fe12d2 metro-bundler: downgrade block-scoping Babel plugin
Summary: Downgrade the locked version of Babel block scoping, kinda temporarily until we upgrade internally. This makes in on par with the version we use internally, so that the `basic_bundle` test had the same results on both infrastructures. This doesn't change a single thing for `metro-bundler` consumers, because this `yarn.lock` file is only used for testing/CI, not when the library is installed as part of a project.

Reviewed By: cpojer

Differential Revision: D5442368

fbshipit-source-id: f3033e450855f7d61ac775a46719d7b1743960c5
2017-07-18 08:13:02 -07:00
Jean Lauliac 9815cd6e6f metro-bunder: fix DependencyGraph-test for new jest-haste-map duplicates API
Summary: Now we have a nice specific error type for duplicates errors. This changeset have been commited before but was reverted as part of a stack, so here we go again.

Reviewed By: cpojer

Differential Revision: D5442363

fbshipit-source-id: 068c8decaf20cd4f9a73d9d54984030c79cff606
2017-07-18 08:13:02 -07:00
Jean Lauliac be9219b852 metro-bundler: Resolver: explicit option list
Summary: I appears `Object.assign` is not properly typed-checked by Flow, and silently so, so I propose we switch to an explicit list until we find an alternative solution. I prefer to have strong typing especially for options, and as the lack of typing has caused breakage before.

Reviewed By: cpojer

Differential Revision: D5442319

fbshipit-source-id: 82b0ec760c7dea6da6f7932896243147ce12ebf9
2017-07-18 04:40:35 -07:00
Jean Lauliac f58a9fa922 metro-bundler: Resolver: handle empty blacklistRE
Reviewed By: cpojer

Differential Revision: D5442309

fbshipit-source-id: f00283bf659100d9269c85b188e2e2fd44cbdc99
2017-07-18 04:40:34 -07:00
Mehdi Mulani e4b94a4d77 Revert D5424282, D5433438, D5424365, D5417982 to unbreak React Native
fbshipit-source-id: 0b32966feabeff6b785dae52a173854e6805f150
2017-07-17 16:37:39 -07:00
Jean Lauliac 635e41027c metro-bundler: put __tests__ blacklisting into default blacklist instead
Summary: I'd like to get rid of the function as blacklist, because it's impossible to process properly at the `jest-haste-map` level (https://github.com/facebook/jest/pull/4047). The reason we use a function in Metro bundler is because we excludes all the `__tests__` modules. However, I removed this exclusion completely, and I could build our package without any problem and with no difference in the final bundle. I can only assume, then, that this line is only here for slightly increasing performance. Therefore, I think it's reasonnable to move it as part of the default blacklist shipped with Metro bundler instead.

Reviewed By: cpojer

Differential Revision: D5434351

fbshipit-source-id: dea39f6299985143d25fcb3b7b365d793acd64a9
2017-07-17 11:24:06 -07:00
Jean Lauliac 40c4317086 metro-bunder: fix DependencyGraph-test for new jest-haste-map duplicates API
Summary: Now we have a nice specific error type for duplicates errors.

Reviewed By: cpojer

Differential Revision: D5433438

fbshipit-source-id: 47cad9ca6bf0bdec91a158ccb2807b6c5571966a
2017-07-17 09:36:03 -07:00
Miguel Jimenez Esun ffbc1c80a8 Remove default polyfills from metro-bundler
Reviewed By: davidaurelio

Differential Revision: D5423673

fbshipit-source-id: a66655cd72d56eb60a8a79a298ebfbc746b5ad10
2017-07-17 03:10:18 -07:00
Miguel Jimenez Esun 3f4135e444 Update Jest to 20.1.0, chi.1
Reviewed By: davidaurelio

Differential Revision: D5423945

fbshipit-source-id: deb58ba9288883b5d671148aeaa59da6629d0de4
2017-07-14 10:07:30 -07:00
Jean Lauliac 4399621d36 metro-bundler: upgrade jest to 20.1
Summary: This put it on par with the version we use on other projects. This new version breaks assumptions about the way Promise/ticks/timers use to work, and I was not able to make it work properly synchronously. Since it's fragile anyway (because rely on Promise and feature internals), I propose the switch to async as done in this changeset. If `res.end` is not called, tests will just timeout instead.

Reviewed By: cpojer

Differential Revision: D5423823

fbshipit-source-id: 015e808a2cf2b8297a36b16feeb811a6e745a835
2017-07-14 08:11:09 -07:00
Jean Lauliac 2ee051599a metro-bundler: fix DependencyGraph-test
Reviewed By: mjesun

Differential Revision: D5423513

fbshipit-source-id: a0093bb8d26d4c16790ed90cae21350451ebe04a
2017-07-14 07:42:11 -07:00
Miguel Jimenez Esun e787159f9e Revert D5406562: Remove default polyfills from metro-bundler
Differential Revision: D5406562

fbshipit-source-id: fe8222b9f6c04117dc0e0226c34f0f39df701c0d
2017-07-13 11:23:01 -07:00
Miguel Jimenez Esun abf49f0a02 Remove default polyfills from metro-bundler
Reviewed By: davidaurelio

Differential Revision: D5406562

fbshipit-source-id: 76a8850ab8e987407421084054d1d0eb23ff645d
2017-07-13 09:13:08 -07:00
Jean Lauliac ec01441adf metro-bundler: ModuleResolution: extract _loadAsFileOrDir()
Summary: Going one step further, we can start working around the throwing version. To simply some code, I also piggybacked the addition of helper functions `resolvedAs` and `failedFor` in this changeset, hope it's okay. I can split if necessary.

Reviewed By: davidaurelio

Differential Revision: D5415196

fbshipit-source-id: 1bd5955b5733866af52fa873bcd1d9e4ce8215cf
2017-07-13 08:37:07 -07:00
Jean Lauliac 4a9c7b9f30 metro-bundler: ModuleResolution: inline loadAsDirOrThrow
Reviewed By: cpojer, davidaurelio

Differential Revision: D5407426

fbshipit-source-id: 0e45b671d6696745ea37b99071f4e5bc2a6b4106
2017-07-13 06:24:43 -07:00
Jean Lauliac bc75b94b7e metro-bundler: ModuleResolution: remove loadAsFileOrThrow
Reviewed By: cpojer

Differential Revision: D5406612

fbshipit-source-id: bd20e1c9aa23b6988ab02c8c0459335874d7d346
2017-07-13 06:24:43 -07:00
Jean Lauliac 392a129b56 package-json-sync-test: verify metro-bundler dependencies as well
Reviewed By: davidaurelio

Differential Revision: D5370620

fbshipit-source-id: fdcbcd0b9bb78f37745ace28f9f8c17b8b8fd52e
2017-07-11 03:38:03 -07:00
Christoph Nakazawa b26b048c78 Revert D5321193: BREAKING: Add regenerator-runtime on demand, based on the files
Differential Revision: D5321193

fbshipit-source-id: 9113ed78e59ae9e9f3f86ca2fda2db3bd8c0dd7c
2017-07-07 10:51:29 -07:00
David Aurelio 0e4b4f7c7b Update `throat` dependency to 3.2.0
Summary: it has flow definitions now. OMG!

Reviewed By: cpojer

Differential Revision: D5381183

fbshipit-source-id: bdb3863b24da9802eeeb8a7d08f05d629f735178
2017-07-07 09:18:27 -07:00
Miguel Jimenez Esun 298d8b3e3e BREAKING: Add regenerator-runtime on demand, based on the files
Summary:
Adding a Babel plugin that will analyze the file looking for any potential candidate to use `regenerator-runtime`, and if so, will inject dynamically the module. The module is injected per file, so we avoid polluting the global environment. The plugin is also able to inject the `require` call beforehand, so that the inliner can pick them and inline them.

The Babel plugin is part of `react-native-babel-preset`, so as long as you are using this preset you are safe. If not, you should include the specific transformer into your list of plugins, as `react-native-babel-preset/transforms/transform-regenerator-runtime-insertion.js`.

Reviewed By: davidaurelio

Differential Revision: D5321193

fbshipit-source-id: fd4805b28c8a2b986842e23570a64003370d2067
2017-07-07 07:42:13 -07:00
Jean Lauliac 029483d796 metro-bundler: tweak babel-register callsite
Summary:
This fixes https://github.com/facebook/react-native/issues/14530 on my local repro. The reason the original problem appears is because when requiring the preset itself, what I think is a bug in babel-register kicks in and it starts transforming the presets themselves. That fails because these preset don't actually have the correct transforms plugins installed/specified in their `package.json` (they do it at prepublish time).
Closes https://github.com/facebook/metro-bundler/pull/21

Reviewed By: cpojer

Differential Revision: D5380795

Pulled By: jeanlauliac

fbshipit-source-id: 023fd6b36dc7ebd26961878edd71d423ea9856b5
2017-07-07 04:10:28 -07:00
Jean Lauliac 7450484d94 metro-bundler: fix DependencyGraph-test
Reviewed By: mjesun

Differential Revision: D5371267

fbshipit-source-id: 689f7c5b2920cb15d7ba6c50c34a94344b2a686b
2017-07-07 03:23:27 -07:00
David Aurelio 7111cf6e4e Bump dependencies
Summary: Bump dependencies to the same version that react native uses

Reviewed By: jeanlauliac

Differential Revision: D5364009

fbshipit-source-id: 302db951a5509584da13a18a7fab6965e0b1e394
2017-07-06 14:36:22 -07:00
David Aurelio efa753c2e4 Restore file header for RAM bundles
Summary: Restores the ability to write the expected header for indexed RAM bundles by avoiding to stringify buffers as utf8. Some minor cleanups included

Reviewed By: javache

Differential Revision: D5351839

fbshipit-source-id: 056661b064336ff74571b9f44c16d709fc59145b
2017-06-30 11:07:02 -07:00
Jean Lauliac b96d886982 metro-bundler: upgrade jest-haste-map
Reviewed By: cpojer

Differential Revision: D5346860

fbshipit-source-id: 16e9eeeb28804af81428745fda4ffc05a461845c
2017-06-29 08:36:14 -07:00
Christopher Chedeau e0ea0aae1d Codemod prettier to 1.5.2
Differential Revision: D5339725

fbshipit-source-id: 631338436a7d69b0ab0721507bdab4ae4e207065
2017-06-28 13:00:25 -07:00
David Aurelio 429c1e8032 Use `jest-docblock`
Summary:
Remove our internal docbloc module and use `jest-docblock` instead.

The development server is using `jest-haste-map` exclusively, which in turn relies on `jest-docblock`, which differs slightly from our own docblock module.

Depending on only one version greatly reduces the number of edge cases

Reviewed By: cpojer

Differential Revision: D5328472

fbshipit-source-id: 4a31d8159519e01a83fda04b76e8f14f0beb16af
2017-06-27 03:51:37 -07:00
Chris Blappert f7ad406c23 Packager postprocessing hook
Reviewed By: davidaurelio

Differential Revision: D5244060

fbshipit-source-id: 3f5f9ab9aeeb63eca13d6dab089c2bda42f70c33
2017-06-26 10:36:25 -07:00
David Aurelio 3cf8242128 Trim doc block annotations after parsing
Summary:
Trims doc block annotations. This mitigates problems with leading and trailing spaces in `providesModule` annotations.

This module doesn’t have tests, but it is exclusively used for `providesModule` annotations right now.

Reviewed By: mjesun

Differential Revision: D5319814

fbshipit-source-id: de55df5b4b199738f9b01151eb86f3c863485b15
2017-06-26 06:11:42 -07:00
David Aurelio 01e1ff3b0a metro-bundler: fix e2e test
Reviewed By: jeanlauliac

Differential Revision: D5310764

fbshipit-source-id: 275285086f92e7cb6a4e94afeb8ec535c663097c
2017-06-24 17:08:15 -07:00
David Aurelio 5f0c5b231e Allow to resolve assets with explicit platform extension
Summary: Given a file `test.android.png`, this allows it to be found as `test.android` for arbitrary platforms.

Reviewed By: bestander

Differential Revision: D5305807

fbshipit-source-id: d869a1da0cc502f853314790385734897f269d6a
2017-06-23 16:40:33 -07:00
David Aurelio b62669e2da Publish v0.9.0
Reviewed By: bestander

Differential Revision: D5310936

fbshipit-source-id: a4d1b5f273c3fd6ba631834175d7e37e8589ef16
2017-06-23 13:07:43 -07:00
David Aurelio 08699062d5 npm package has `src/` rather than `build/`
Summary:
We use custom npm scripts (`prepare-release`, `cleanup-release`) to

- move `src` to `src.orig`, and `build` to `src` before creating the tarball
- move everything back afterwards

We run these scripts with lerna before and after publishing. Custom hooks avoid problems with `prepublishOnly` and `postpublish` not being run at opportune times, `prepack` and `postpack` not being supported by npm v4 and yarn, and using `lerna run prepublishOnly` resulting in duplicated execution of the command.

This ensures that development is closer to what is pulled in from npm.

Reviewed By: jeanlauliac

Differential Revision: D5310133

fbshipit-source-id: 6b9885c88b936ef3fe5f1858738ad63d581a8731
2017-06-23 09:06:33 -07:00
Pieter De Baets a0fcbd7f11 Always stub console object
Summary: In some execution environment there's no console object available.

Reviewed By: davidaurelio

Differential Revision: D5303105

fbshipit-source-id: 1d348640c966c9460105ea92ec8a5087ee1b75f1
2017-06-23 08:01:59 -07:00
Miguel Jimenez Esun 30458c15ae WIP: Adding an output to provide a dot file with the dependency graph
Reviewed By: davidaurelio

Differential Revision: D5284123

fbshipit-source-id: e7c7519c4fefb66245dab3c5f205a8643067693a
2017-06-21 07:06:30 -07:00
Miguel Jimenez Esun b462183830 Adding support for RAM bundles - multiple files version
Reviewed By: davidaurelio

Differential Revision: D5277684

fbshipit-source-id: 77041375026d5c186022c8108acace7b519902fb
2017-06-20 11:57:15 -07:00
James Ide be1843cddc Add font file extensions (otf and ttf) to default supported extensions
Summary:
This makes it a little more convenient to dynamically load font files. We currently do with help from the "assetExts" config flag and find that we specify it a lot. Would you be interested in taking this PR?
Closes https://github.com/facebook/metro-bundler/pull/14

Differential Revision: D5284158

Pulled By: jeanlauliac

fbshipit-source-id: d102cf4776b9e3659c33e15d9d72f7ea0ea52d57
2017-06-20 11:08:28 -07:00
Jean Lauliac 089461c0a8 metor-bundler: DependencyGraph-test: fixes last remaining tests with proper end()-ing
Summary:
With these last fixes, the test is now finishing properly instead of hanging up forever! This means tests should now hopefully pass on CircleCI, amazing!

I had to disable a test that was actually broken, I'd like to fix that in a separate changeset.

Reviewed By: davidaurelio

Differential Revision: D5282917

fbshipit-source-id: d61b13ed40da7cd43a542ad916158a2aefecda18
2017-06-20 04:44:49 -07:00
Jean Lauliac 1566ae81dd metro-bundler: DependencyGraph-test: re-enable win32 test subset for any platform
Reviewed By: davidaurelio

Differential Revision: D5275358

fbshipit-source-id: c14b8a054a85bff0374c5f3ef7e4edc7a1d1f06d
2017-06-20 03:37:19 -07:00
James Ide 75fa67e14d Add the blacklist creation function to the list of exports
Summary:
We use a custom rn-cli.config.js file that specifies a custom blacklist. In addition to blacklisting some of our own directories, we still want to keep RN's default rules for what to blacklist so we also call into the packager's blacklist.
Closes https://github.com/facebook/metro-bundler/pull/13

Differential Revision: D5275117

Pulled By: davidaurelio

fbshipit-source-id: 0ad79fa47b8730af5a2c4e9ecbedf02b7d673b6c
2017-06-19 10:51:08 -07:00
Jean Lauliac d60b783e82 metro-bundler: DependencyGraph-test: use processDgraph for 'file watch updating' section
Summary: Use `processDgraph` so that the instance is properly ended. Tested using `yarn jest DependencyGraph-test`

Reviewed By: davidaurelio

Differential Revision: D5274139

fbshipit-source-id: 82e919e0f7248ddd01de9c8fa3908c3943184016
2017-06-19 10:07:25 -07:00
Jean Lauliac 3248d9945a metro-bundler: DependencyGraph-test: use processDgraph for 'node_modules (win32)' section
Summary: Use `processDgraph` so that the instance is properly ended. Tested using `yarn jest DependencyGraph-test`

Reviewed By: davidaurelio

Differential Revision: D5274137

fbshipit-source-id: d4f46d9b2c02622c81bd178c2b76c9cea89b6dd0
2017-06-19 10:07:25 -07:00
Jean Lauliac 88f0f0acfc metro-bundler: DependencyGraph-test: use processDgraph for 'node_modules (posix)' section
Summary: Use `processDgraph` so that the instance is properly ended. Tested using `yarn jest DependencyGraph-test`

Reviewed By: davidaurelio

Differential Revision: D5274132

fbshipit-source-id: 9a19482f969f105d4e2ec6dffc5ae901a5a7da32
2017-06-19 10:07:25 -07:00
Christoph Pojer 54c4aed3b4 Print proper error from uglify
Reviewed By: jeanlauliac

Differential Revision: D5264809

fbshipit-source-id: 2a2c7c9af74e8c87acf68e2e9205c85b7aea2fb9
2017-06-16 10:25:44 -07:00
David Aurelio 2a085f0c1b Display snippets of TransformErrors
Reviewed By: cpojer

Differential Revision: D5247080

fbshipit-source-id: a0c4515476246e6da4c33c9129f6273af838d04f
2017-06-16 09:39:03 -07:00
Miguel Jiménez Esún af67937bba Export source maps utilities
Reviewed By: kittens

Differential Revision: D5249991

fbshipit-source-id: e2ad21bfa3497bc08c5afdcb0c7d9b76dc5dcc25
2017-06-15 10:38:57 -07:00
Mark Vayngrib ee31015d5c add breaking test, fix edge case for replacing browser "main" field
Summary:
**Summary**

fixes edge case for replacing browser "main" field, when "main" field value is a file name rather than a file path

**Test plan**

added breaking test in 1st commit, fix in 2nd commit
Closes https://github.com/facebook/metro-bundler/pull/3

Reviewed By: cpojer

Differential Revision: D5255292

Pulled By: jeanlauliac

fbshipit-source-id: 65764144adfcda9f6dbdf8f5f754186b05e1a8bb
2017-06-15 09:11:41 -07:00
David Aurelio 1e6b34f415 Backed out changeset db8638eebe2d
Reviewed By: alexeylang

Differential Revision: D5246311

fbshipit-source-id: cb12964c27a6d1e6fa719a979a8f0ebcc8efae8a
2017-06-14 09:53:06 -07:00
David Aurelio 20ed5b8d3a Remove `retainLines` and `sourceMaps` options
Summary:
`retainLines` is no longer necessary with the much improved source map generation.
`sourceMaps` is handled by the transformer itself.

Reviewed By: cpojer

Differential Revision: D5237103

fbshipit-source-id: e5c6bf5aa9d553fce9c3f4d59b3ea0057d45cfdc
2017-06-14 09:38:25 -07:00
Jean Lauliac d437b31fea metro-bundler: DependencyGraph-test: switch a bunch of tests to processDgraph()
Reviewed By: davidaurelio

Differential Revision: D5245656

fbshipit-source-id: 276e7406af2f6afb361d14b5c6e1dd5b9f1f6ddb
2017-06-14 08:08:44 -07:00
Jean Lauliac 4012f96c25 metro-bundler: DependencyGraph-test: proof of concept for proper test cleanup
Summary: The `DependencyGraph-test` hangs forever if run in isolation because the watch mode is not properly ended. I propose we just wrap each test in a function that does the correct thing, and also migrate tests to `async`/`await`.

Reviewed By: cpojer

Differential Revision: D5245477

fbshipit-source-id: ea30c0e637e0c7b85afe4c76c5e985846ae9b243
2017-06-14 07:13:19 -07:00
David Aurelio e87a8205d8 Handle synchronous errors in `worker.transformCode`
Summary: `worker.transformCode` is a callback-taking function, but did not properly guard against errors thrown in its body.

Reviewed By: cpojer

Differential Revision: D5245253

fbshipit-source-id: 3fd08b68dd8605f664b316652ebd1f9497b2dac9
2017-06-14 05:06:20 -07:00
David Aurelio fdc8f37a5b Replace `RNP:` debug prefix with `Metro:`
Reviewed By: jeanlauliac

Differential Revision: D5236970

fbshipit-source-id: 8bd1d38f009018e9cafef13188bee82351614890
2017-06-14 04:54:42 -07:00
Jean Lauliac 7e9f368ee5 metro-bundler: recreate temp dir if does not exist
Summary: That happens after a reboot on macOS for example, because temp dir is wiped.

Reviewed By: davidaurelio

Differential Revision: D5236249

fbshipit-source-id: be19cd97a7488850e3195b3fc419779ed0df2c38
2017-06-14 04:36:31 -07:00
Christoph Pojer 9127fce33c Add --maxWorkers flag and allow transformers to run in-band.
Summary:
This diff cleans up some cruft and adds some features:

* It removes the usage of an env variable to control workers.
* It removes the lazy and handwavy calculation on how many workers to use for jest-haste-map. Jest itself uses the maximum amount of workers available and it has never been reported as an issue – especially since it is a one-time startup cost of about 3 seconds on a cold cache only.
* It adds a `--max-workers` flag to replace the env variable. This one is able to control both the number of workers for `jest-haste-map` as well as the transformers.
* It makes the transformers run in the parent process if 1 or fewer workers are are specified. This should help with debugging.

Once you approve this diff, I will publish a new version of metro to npm and update the version used in RN and remove the use of the env variable altogether: https://our.intern.facebook.com/intern/biggrep/?corpus=xplat&filename=&case=false&view=default&extre=&s=REACT_NATIVE_MAX_WORKERS&engine=apr_strmatch&context=false&filter[uninteresting]=false&filter[intern]=false&filter[test]=false&grep_regex=

Note: the process of adding a CLI option is really broken. Commander also has a weird API. We should consider building a better public API for Metro and then consider how to build a new CLI on top of it and simplify our internal integration. I really don't like how Metro is integrated across pieces of the RN cli in ways that is hard to manage. But that is a larger task for another time :)

Reviewed By: jeanlauliac

Differential Revision: D5217726

fbshipit-source-id: 74efddbb87755a9e744c816fbc62efa21f6a79bf
2017-06-13 09:21:40 -07:00
Jean Lauliac 626fe47667 metro-bundler: fix percent progress output
Reviewed By: davidaurelio

Differential Revision: D5236226

fbshipit-source-id: efbbf46f4212a66a6357b7d87059f89354b6f50b
2017-06-13 08:40:52 -07:00
Jean Lauliac d3195fa528 ResolutionRequest: extract module resolution
Reviewed By: davidaurelio

Differential Revision: D5218015

fbshipit-source-id: 6e34df5913d96a0b518f9403309658ea0b559730
2017-06-13 07:27:24 -07:00
Miguel Jiménez Esún b559412a08 Pass bundle options to the reporter to provide additional information
Reviewed By: jeanlauliac

Differential Revision: D5172384

fbshipit-source-id: f2e4cf677f8113060b257ddec6b585870786a336
2017-06-12 10:52:16 -07:00
David Aurelio 573d9edfd0 Upgrade uglify to v3 + es support
Summary: Upgrades uglify to version 3 with (experimental) ES6 support turned on.

Reviewed By: cpojer

Differential Revision: D5227245

fbshipit-source-id: db8638eebe2daf40b60570cac34905e9a7288705
2017-06-12 10:11:20 -07:00
David Aurelio 2678b8fb0d Add nested yarn.lock 2017-06-12 18:07:19 +01:00
Jean Lauliac 5bae61e611 metro-bundler: fix DependencyGraph-test
Reviewed By: cpojer

Differential Revision: D5227270

fbshipit-source-id: 3d36394cafa658070d84d7b5ace2af48d20cc9d7
2017-06-12 07:09:12 -07:00
Jean Lauliac d4bb0d3282 metro-bunder: caching: when using project dir, keep cache itself in temp
Summary: I wanted to settle #18056064 once and for all. This solution both uses (1) random generation of temp dir, and (2) minimal overhead in the repo. The reason random generation of temporary folder directory names should always be used is the same as why [`mktemp(3)` should never be used](http://man7.org/linux/man-pages/man3/mktemp.3.html#BUGS). The reason we don't want the cache to be fully stored locally (2) is because watchman would catch too many change events we don't care about, hitting performance. Additionally, (1) has the benefit that when one clones the repo from fresh, it'll also always start with a fresh cache. (1) uses a function equivalent to [`mkdtemp(3)`](http://man7.org/linux/man-pages/man3/mkdtemp.3.html), that we cannot use here because it's POSIX and not exposed by the Node.js API.

Reviewed By: davidaurelio

Differential Revision: D5199698

fbshipit-source-id: a660ebbc470e1fe90ed1ab9d0c9fda063b06f90c
2017-06-12 04:50:58 -07:00
David Aurelio 4460ed5307 Unify invocations to `uglify.minify`
Summary: Puts all invocations of `uglify.minify` into one place to facilitate the upgrade to Uglify 3

Reviewed By: cpojer

Differential Revision: D5218415

fbshipit-source-id: 8085255205f80bfda06e0092c9e268a85947763b
2017-06-12 02:22:13 -07:00
Miguel Jiménez Esún bc654954a7 Add prettier to metro-bundler, fixing code styling issues
Reviewed By: cpojer

Differential Revision: D5215552

fbshipit-source-id: 64106d322ccd3a39701a41e4efda4975db9aa52c
2017-06-12 01:20:50 -07:00
Christoph Pojer 150aa19fcb Remove babelRegisterOnly call in workers
Reviewed By: jeanlauliac

Differential Revision: D5208950

fbshipit-source-id: 093c1a67ed830480b42f556ee2d6be4ecfce9f0d
2017-06-09 07:22:26 -07:00
Jean Lauliac c1ff8b5b81 metro-bundler: rename Terminal back to normal
Summary: The 'class' suffix was just to workaround case-insensitivity on macOS.

Reviewed By: cpojer

Differential Revision: D5208747

fbshipit-source-id: 46bff156145880b9a894ff70b0c3dff0895a6d6c
2017-06-08 12:54:15 -07:00
David Aurelio 127f3312ed Fix mock inclusion
Summary:
The 'fs' mock was set up to require 'graceful-fs', which used to delegate to the corresponding mock. After turning off automocking, this no longer necessarily works.
This moves the mock to `fs.js` and makes the mock for graceful-fs require the fs mock via a relative path.

Reviewed By: cpojer

Differential Revision: D5209130

fbshipit-source-id: d468577e09d18382d0b9602ad0964dd880ec2366
2017-06-08 10:15:23 -07:00
Jean Lauliac 795c436cb1 FBGlobalTransformCache: retry 3 times, wait between retries
Summary: That should improve the hit rate a little bit, notably for the cache-filling script. On OSS side, this changeset only adds the sleep() function as `FBGlobalTransformCache` is not exposed.

Reviewed By: cpojer

Differential Revision: D5201196

fbshipit-source-id: c2d8e1a1b03edd9e7747b3202c574b0783f4117d
2017-06-08 09:36:39 -07:00
Jean Lauliac 71275b4018 metro-bundler: ResolutionRequest: remove dep on HasteFS type
Summary: We don't actually need this object anymore, just the function to test a file existence. This simplification allows us to phase out the 'old' HasteFS object easier, as well as adding retry logic using the real filesystem.

Reviewed By: cpojer

Differential Revision: D5208550

fbshipit-source-id: a03317e4385d793643e2dbee5d6782491d20e33c
2017-06-08 09:08:30 -07:00
Christoph Pojer 802094c6f0 @format JSTransformer
Reviewed By: jeanlauliac

Differential Revision: D5208868

fbshipit-source-id: 3b80197c4e879974f9129ccfc4e4a7ca7d4b4258
2017-06-08 07:37:49 -07:00
Christoph Pojer 5e6d70d4d6 Disable automocking from tests
Summary: We are flipping the switch all over Facebook, now that this part of the code is isolated we can do it in Metro as well.

Reviewed By: davidaurelio

Differential Revision: D5199449

fbshipit-source-id: 20c1bacc6dd2d314bd76bc5cc0ecd13266bf81c6
2017-06-08 05:52:18 -07:00
Jean Lauliac 01ecd43c62 FBGlobalTransformCache: retry on server-side errors
Reviewed By: cpojer

Differential Revision: D5200923

fbshipit-source-id: 9fd0d65e8d663437d27a3837580b07e386f70120
2017-06-07 11:22:12 -07:00
Christoph Pojer ef7965df63 Update package.json
Reviewed By: jeanlauliac

Differential Revision: D5183469

fbshipit-source-id: 89c17c80398afb7755d8e7dec5116e62fbbc520e
2017-06-06 12:37:37 -07:00
Jean Lauliac de34d9677c metro-bundler: fix integration test
Reviewed By: cpojer

Differential Revision: D5192165

fbshipit-source-id: 9ec8c8e5b6580e72c94771ff865337eb20e5dc94
2017-06-06 11:56:16 -07:00
Christoph Pojer 3d6b143d72 Add .npmignore
Reviewed By: davidaurelio

Differential Revision: D5190512

fbshipit-source-id: 7ab4b19f5b2c0f2ed5b1c28f3818e988313d96a4
2017-06-06 08:41:04 -07:00
Christoph Pojer 7085ed9f93 Update README
Reviewed By: jeanlauliac

Differential Revision: D5183348

fbshipit-source-id: d71bd7a6c5f20cd8954072814918adf4194abc57
2017-06-06 03:29:08 -07:00
Jean Lauliac 9dad135be1 Revert D5129231: packager: enable throwOnModuleCollision for jest-haste-map
Differential Revision: D5129231

fbshipit-source-id: 23e7f9246b55773dab98ee0cbcf38b1c8d5b4f30
2017-06-05 04:07:18 -07:00
Jean Lauliac c1ed0d872b add fake AssetRegistry module 2017-06-02 18:37:14 +01:00
Christoph Pojer 8977650ba3 New README
Summary: This is a basic README for the new repo. We'll eventually expand on this as more pieces get open sourced and we'll evolve the three identifying tags over time.

Reviewed By: jeanlauliac

Differential Revision: D5172314

fbshipit-source-id: 8e5dd8567eadbcb839ee9860a22929fd6a77ee2e
2017-06-02 09:37:05 -07:00
Jean Lauliac 3b705a1124 react-native: attachHMRServer: make it generic
Reviewed By: cpojer

Differential Revision: D5172344

fbshipit-source-id: ab8b39e1924d66d37da9734455ed9a72cf59906e
2017-06-02 09:37:05 -07:00
Kevin Gozali de70d376ca add --dev flag to the packager's dependencies command
Summary:
The packager dependencies CLI command always operates on --dev=true today. This means any tooling that needs to get the production dependencies (--dev=false) will always get the dev-mode list instead. For instance:

```
if (__DEV__) {
  require('Foobar');
}
```

Previously, `Foobar.js` will always be listed in the CLI output. With this change, setting `--dev false` option will correctly skip `Foobar.js` in the output.

Reviewed By: cpojer

Differential Revision: D5163184

fbshipit-source-id: 203221ee5d6ecb7df575442f12f6c4c489bfbd46
2017-06-01 14:06:30 -07:00
Jean Lauliac 7974a5b745 metro-bundler: AssetServer: remove fs timeouts
Reviewed By: cpojer

Differential Revision: D5164550

fbshipit-source-id: 2d294906c7deb67468dd9f85aa5ca998bdadcef3
2017-06-01 10:08:23 -07:00
Jean Lauliac 9095fd12bf metro-bundler: fix integration test for OSS
Summary: This should fix the e2e test for OSS.

Reviewed By: cpojer

Differential Revision: D5164267

fbshipit-source-id: d858b4811f0eb80ca7363177f4f384b66af13994
2017-06-01 10:08:23 -07:00
Christoph Pojer bbdc4b8152 Update to metro-bundler from npm
Reviewed By: kittens

Differential Revision: D5163718

fbshipit-source-id: c21d3b9b6201d1a9509686cf235b611549652975
2017-06-01 04:38:32 -07:00
Jean Lauliac 98847474cd metro-bundler: Terminal: remove global state
Reviewed By: cpojer

Differential Revision: D5155075

fbshipit-source-id: 1d64bdd0ae13087aca620b65892832e3a1229c4a
2017-06-01 03:06:28 -07:00
Christoph Pojer 921005d44d Move remaining Metro Bundler files around.
Reviewed By: jeanlauliac

Differential Revision: D5154653

fbshipit-source-id: 482bf9829263d5d8f3d0b951ee58e2020236cc2c
2017-05-31 11:08:01 -07:00
Jean Lauliac db5e2e5a8a metro-bundler: ResolutionRequest: extract FileNameResolver
Summary: I want to untangle `ResolutionRequest` once and for all, that starts by pulling stuff out :-)

Reviewed By: cpojer

Differential Revision: D5155316

fbshipit-source-id: a46ee9b40c6705edcac169adcfdffe25058ec810
2017-05-31 10:51:31 -07:00
Jean Lauliac 51da59f9e6 metro-bundler: use buildID instead of entry path for reporting
Summary: This fixes a longstanding bug that happens when 2 bundles with the same entry path but different options (dev, minify, etc.) get mixed up in the reporting. To prevent that we just use a unique build ID for each bundle that the Server handles separately.

Reviewed By: cpojer

Differential Revision: D5147049

fbshipit-source-id: da5c9cfe8c6a5d888b5be737947800d213081d86
2017-05-31 04:06:52 -07:00
cpojer 1a53b6b9a5 Remove setupBabel. 2017-05-31 11:28:05 +01:00