Skip to content

Move metro-config package into monorepo build, enable TS generation - #41836

Closed
byCedric wants to merge 1 commit into
react:mainfrom
byCedric:@bycedric/metro-config/add-type-definitions
Closed

Move metro-config package into monorepo build, enable TS generation#41836
byCedric wants to merge 1 commit into
react:mainfrom
byCedric:@bycedric/metro-config/add-type-definitions

Conversation

@byCedric

@byCedricbyCedric commented Dec 7, 2023

Copy link
Copy Markdown
Contributor

Summary:

This adds @react-native/metro-config to the monorepo build tool and emits the missing typescript declarations.

Right now, we do have typescript declarations on metro-config, but not @react-native/metro-config. Which makes everything a bit harder extend from "the default React Native metro config" in Expo.

Note, I also added the same exports block from @react-native/dev-middleware for conformity.

One open question here is, why aren't we exporting all helper functions from metro-config? To me, its a bit weird that we need both metro-configand@react-native/metro-config as loadConfig isn't exported.

Changelog:

[INTERNAL] [FIXED] - Emit typescript declaration files for @react-native/metro-config

Test Plan:

Run the build tool, and check if the typescript declarations are emitted for @react-native/metro-config.

@facebook-github-botfacebook-github-bot added CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. p: Expo Partner: Expo Partner Shared with Meta Applied via automation to indicate that an Issue or Pull Request has been shared with the team. labels Dec 7, 2023
@byCedric
byCedricforce-pushed the @bycedric/metro-config/add-type-definitions branch 2 times, most recently from 7033c9f to 1907ea8CompareDecember 7, 2023 14:34

@huntiehuntie left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great! I reckoned Expo was providing its own default config package — but perfectly happy to add TypeScript ergonomics :).

I'm just going to make sure this runs in RNTester — believe we may need to add the wrapping .js/.flow.js pattern to have run-from-source behaviour in this repo / internally at Meta.

@byCedric

byCedric commented Dec 7, 2023

Copy link
Copy Markdown
ContributorAuthor

Great! I reckoned Expo was providing its own default config package — but perfectly happy to add TypeScript ergonomics :).

I'm just going to make sure this runs in RNTester — believe we may need to add the wrapping .js/.flow.js pattern to have run-from-source behaviour in this repo / internally at Meta.

We are! But, there are fixes inside this React Native config that aren't backported inside the metro-config package. Things such as these require.resolve blocks.

We keep this "semi-fork" of the default config in @expo/metro-config, but it seems that metro-config should be properly fixed if we want to do that instead. Or am I missing something? 😄

@byCedric

Copy link
Copy Markdown
ContributorAuthor

Also, I think the getDefaultConfig.getDefaultValues should be properly patched as well. Right now, it just overwrites the getDefaultConfig method, without adding getDefaultValues.

@analysis-bot

analysis-bot commented Dec 7, 2023

Copy link
Copy Markdown
PlatformEngineArchSize (bytes)Diff
androidhermesarm64-v8a16,513,663-17
androidhermesarmeabi-v7an/a--
androidhermesx86n/a--
androidhermesx86_64n/a--
androidjscarm64-v8a19,884,244-3
androidjscarmeabi-v7an/a--
androidjscx86n/a--
androidjscx86_64n/a--

Base commit: a8ca9b0
Branch: main

@byCedric
byCedricforce-pushed the @bycedric/metro-config/add-type-definitions branch from 1907ea8 to f6c8fd4CompareDecember 7, 2023 15:09
@huntiehuntie changed the title fix(metro-config): emit typescript declarations for @react-native/metro-configMove metro-config package into monorepo build, enable TS generationDec 7, 2023

@huntiehuntie left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks!

@facebook-github-bot

Copy link
Copy Markdown
Contributor

@huntie has imported this pull request. If you are a Meta employee, you can view this diff on Phabricator.

@huntie

Copy link
Copy Markdown
Collaborator

One open question here is, why aren't we exporting all helper functions from metro-config? To me, its a bit weird that we need both metro-config and @react-native/metro-config as loadConfig isn't exported.

Ah, just spotted this question. The reasoning here is that only mergeConfig is needed inside a consuming metro.config.js file, since it returns an object/function that will be loaded by Metro.

loadConfig is side-effectful and part of Metro's internals (it's ultimately used to read metro.config.js in a project) — it's beyond the scope of the above.

*
* @flow
* @noformat
* @flow strict-local

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah my bad, let's loosen this to @flow so that CI passes.

@facebook-github-botfacebook-github-bot added the Merged This PR has been merged. label Feb 12, 2024
@facebook-github-bot

Copy link
Copy Markdown
Contributor

@huntie merged this pull request in b41a33e.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA SignedThis label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed.MergedThis PR has been merged.p: ExpoPartner: ExpoPartnerShared with MetaApplied via automation to indicate that an Issue or Pull Request has been shared with the team.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@byCedric@analysis-bot@facebook-github-bot@huntie
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Move metro-config package into monorepo build, enable TS generation by byCedric · Pull Request #41836 · react/react-native · GitHub
Skip to content

Move metro-config package into monorepo build, enable TS generation - #41836

Closed
byCedric wants to merge 1 commit into
react:mainfrom
byCedric:@bycedric/metro-config/add-type-definitions
Closed

Move metro-config package into monorepo build, enable TS generation#41836
byCedric wants to merge 1 commit into
react:mainfrom
byCedric:@bycedric/metro-config/add-type-definitions

Conversation

@byCedric

@byCedricbyCedric commented Dec 7, 2023

Copy link
Copy Markdown
Contributor

Summary:

This adds @react-native/metro-config to the monorepo build tool and emits the missing typescript declarations.

Right now, we do have typescript declarations on metro-config, but not @react-native/metro-config. Which makes everything a bit harder extend from "the default React Native metro config" in Expo.

Note, I also added the same exports block from @react-native/dev-middleware for conformity.

One open question here is, why aren't we exporting all helper functions from metro-config? To me, its a bit weird that we need both metro-configand@react-native/metro-config as loadConfig isn't exported.

Changelog:

[INTERNAL] [FIXED] - Emit typescript declaration files for @react-native/metro-config

Test Plan:

Run the build tool, and check if the typescript declarations are emitted for @react-native/metro-config.

@facebook-github-botfacebook-github-bot added CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. p: Expo Partner: Expo Partner Shared with Meta Applied via automation to indicate that an Issue or Pull Request has been shared with the team. labels Dec 7, 2023
@byCedric
byCedricforce-pushed the @bycedric/metro-config/add-type-definitions branch 2 times, most recently from 7033c9f to 1907ea8CompareDecember 7, 2023 14:34

@huntiehuntie left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great! I reckoned Expo was providing its own default config package — but perfectly happy to add TypeScript ergonomics :).

I'm just going to make sure this runs in RNTester — believe we may need to add the wrapping .js/.flow.js pattern to have run-from-source behaviour in this repo / internally at Meta.

@byCedric

byCedric commented Dec 7, 2023

Copy link
Copy Markdown
ContributorAuthor

Great! I reckoned Expo was providing its own default config package — but perfectly happy to add TypeScript ergonomics :).

I'm just going to make sure this runs in RNTester — believe we may need to add the wrapping .js/.flow.js pattern to have run-from-source behaviour in this repo / internally at Meta.

We are! But, there are fixes inside this React Native config that aren't backported inside the metro-config package. Things such as these require.resolve blocks.

We keep this "semi-fork" of the default config in @expo/metro-config, but it seems that metro-config should be properly fixed if we want to do that instead. Or am I missing something? 😄

@byCedric

Copy link
Copy Markdown
ContributorAuthor

Also, I think the getDefaultConfig.getDefaultValues should be properly patched as well. Right now, it just overwrites the getDefaultConfig method, without adding getDefaultValues.

@analysis-bot

analysis-bot commented Dec 7, 2023

Copy link
Copy Markdown
PlatformEngineArchSize (bytes)Diff
androidhermesarm64-v8a16,513,663-17
androidhermesarmeabi-v7an/a--
androidhermesx86n/a--
androidhermesx86_64n/a--
androidjscarm64-v8a19,884,244-3
androidjscarmeabi-v7an/a--
androidjscx86n/a--
androidjscx86_64n/a--

Base commit: a8ca9b0
Branch: main

@byCedric
byCedricforce-pushed the @bycedric/metro-config/add-type-definitions branch from 1907ea8 to f6c8fd4CompareDecember 7, 2023 15:09
@huntiehuntie changed the title fix(metro-config): emit typescript declarations for @react-native/metro-configMove metro-config package into monorepo build, enable TS generationDec 7, 2023

@huntiehuntie left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks!

@facebook-github-bot

Copy link
Copy Markdown
Contributor

@huntie has imported this pull request. If you are a Meta employee, you can view this diff on Phabricator.

@huntie

Copy link
Copy Markdown
Collaborator

One open question here is, why aren't we exporting all helper functions from metro-config? To me, its a bit weird that we need both metro-config and @react-native/metro-config as loadConfig isn't exported.

Ah, just spotted this question. The reasoning here is that only mergeConfig is needed inside a consuming metro.config.js file, since it returns an object/function that will be loaded by Metro.

loadConfig is side-effectful and part of Metro's internals (it's ultimately used to read metro.config.js in a project) — it's beyond the scope of the above.

*
* @flow
* @noformat
* @flow strict-local

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah my bad, let's loosen this to @flow so that CI passes.

@facebook-github-botfacebook-github-bot added the Merged This PR has been merged. label Feb 12, 2024
@facebook-github-bot

Copy link
Copy Markdown
Contributor

@huntie merged this pull request in b41a33e.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA SignedThis label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed.MergedThis PR has been merged.p: ExpoPartner: ExpoPartnerShared with MetaApplied via automation to indicate that an Issue or Pull Request has been shared with the team.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@byCedric@analysis-bot@facebook-github-bot@huntie
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Move metro-config package into monorepo build, enable TS generation by byCedric · Pull Request #41836 · react/react-native · GitHub
Skip to content

Move metro-config package into monorepo build, enable TS generation - #41836

Closed
byCedric wants to merge 1 commit into
react:mainfrom
byCedric:@bycedric/metro-config/add-type-definitions
Closed

Move metro-config package into monorepo build, enable TS generation#41836
byCedric wants to merge 1 commit into
react:mainfrom
byCedric:@bycedric/metro-config/add-type-definitions

Conversation

@byCedric

@byCedricbyCedric commented Dec 7, 2023

Copy link
Copy Markdown
Contributor

Summary:

This adds @react-native/metro-config to the monorepo build tool and emits the missing typescript declarations.

Right now, we do have typescript declarations on metro-config, but not @react-native/metro-config. Which makes everything a bit harder extend from "the default React Native metro config" in Expo.

Note, I also added the same exports block from @react-native/dev-middleware for conformity.

One open question here is, why aren't we exporting all helper functions from metro-config? To me, its a bit weird that we need both metro-configand@react-native/metro-config as loadConfig isn't exported.

Changelog:

[INTERNAL] [FIXED] - Emit typescript declaration files for @react-native/metro-config

Test Plan:

Run the build tool, and check if the typescript declarations are emitted for @react-native/metro-config.

@facebook-github-botfacebook-github-bot added CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. p: Expo Partner: Expo Partner Shared with Meta Applied via automation to indicate that an Issue or Pull Request has been shared with the team. labels Dec 7, 2023
@byCedric
byCedricforce-pushed the @bycedric/metro-config/add-type-definitions branch 2 times, most recently from 7033c9f to 1907ea8CompareDecember 7, 2023 14:34

@huntiehuntie left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great! I reckoned Expo was providing its own default config package — but perfectly happy to add TypeScript ergonomics :).

I'm just going to make sure this runs in RNTester — believe we may need to add the wrapping .js/.flow.js pattern to have run-from-source behaviour in this repo / internally at Meta.

@byCedric

byCedric commented Dec 7, 2023

Copy link
Copy Markdown
ContributorAuthor

Great! I reckoned Expo was providing its own default config package — but perfectly happy to add TypeScript ergonomics :).

I'm just going to make sure this runs in RNTester — believe we may need to add the wrapping .js/.flow.js pattern to have run-from-source behaviour in this repo / internally at Meta.

We are! But, there are fixes inside this React Native config that aren't backported inside the metro-config package. Things such as these require.resolve blocks.

We keep this "semi-fork" of the default config in @expo/metro-config, but it seems that metro-config should be properly fixed if we want to do that instead. Or am I missing something? 😄

@byCedric

Copy link
Copy Markdown
ContributorAuthor

Also, I think the getDefaultConfig.getDefaultValues should be properly patched as well. Right now, it just overwrites the getDefaultConfig method, without adding getDefaultValues.

@analysis-bot

analysis-bot commented Dec 7, 2023

Copy link
Copy Markdown
PlatformEngineArchSize (bytes)Diff
androidhermesarm64-v8a16,513,663-17
androidhermesarmeabi-v7an/a--
androidhermesx86n/a--
androidhermesx86_64n/a--
androidjscarm64-v8a19,884,244-3
androidjscarmeabi-v7an/a--
androidjscx86n/a--
androidjscx86_64n/a--

Base commit: a8ca9b0
Branch: main

@byCedric
byCedricforce-pushed the @bycedric/metro-config/add-type-definitions branch from 1907ea8 to f6c8fd4CompareDecember 7, 2023 15:09
@huntiehuntie changed the title fix(metro-config): emit typescript declarations for @react-native/metro-configMove metro-config package into monorepo build, enable TS generationDec 7, 2023

@huntiehuntie left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks!

@facebook-github-bot

Copy link
Copy Markdown
Contributor

@huntie has imported this pull request. If you are a Meta employee, you can view this diff on Phabricator.

@huntie

Copy link
Copy Markdown
Collaborator

One open question here is, why aren't we exporting all helper functions from metro-config? To me, its a bit weird that we need both metro-config and @react-native/metro-config as loadConfig isn't exported.

Ah, just spotted this question. The reasoning here is that only mergeConfig is needed inside a consuming metro.config.js file, since it returns an object/function that will be loaded by Metro.

loadConfig is side-effectful and part of Metro's internals (it's ultimately used to read metro.config.js in a project) — it's beyond the scope of the above.

*
* @flow
* @noformat
* @flow strict-local

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah my bad, let's loosen this to @flow so that CI passes.

@facebook-github-botfacebook-github-bot added the Merged This PR has been merged. label Feb 12, 2024
@facebook-github-bot

Copy link
Copy Markdown
Contributor

@huntie merged this pull request in b41a33e.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA SignedThis label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed.MergedThis PR has been merged.p: ExpoPartner: ExpoPartnerShared with MetaApplied via automation to indicate that an Issue or Pull Request has been shared with the team.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@byCedric@analysis-bot@facebook-github-bot@huntie
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Move metro-config package into monorepo build, enable TS generation by byCedric · Pull Request #41836 · react/react-native · GitHub
Skip to content

Move metro-config package into monorepo build, enable TS generation - #41836

Closed
byCedric wants to merge 1 commit into
react:mainfrom
byCedric:@bycedric/metro-config/add-type-definitions
Closed

Move metro-config package into monorepo build, enable TS generation#41836
byCedric wants to merge 1 commit into
react:mainfrom
byCedric:@bycedric/metro-config/add-type-definitions

Conversation

@byCedric

@byCedricbyCedric commented Dec 7, 2023

Copy link
Copy Markdown
Contributor

Summary:

This adds @react-native/metro-config to the monorepo build tool and emits the missing typescript declarations.

Right now, we do have typescript declarations on metro-config, but not @react-native/metro-config. Which makes everything a bit harder extend from "the default React Native metro config" in Expo.

Note, I also added the same exports block from @react-native/dev-middleware for conformity.

One open question here is, why aren't we exporting all helper functions from metro-config? To me, its a bit weird that we need both metro-configand@react-native/metro-config as loadConfig isn't exported.

Changelog:

[INTERNAL] [FIXED] - Emit typescript declaration files for @react-native/metro-config

Test Plan:

Run the build tool, and check if the typescript declarations are emitted for @react-native/metro-config.

@facebook-github-botfacebook-github-bot added CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. p: Expo Partner: Expo Partner Shared with Meta Applied via automation to indicate that an Issue or Pull Request has been shared with the team. labels Dec 7, 2023
@byCedric
byCedricforce-pushed the @bycedric/metro-config/add-type-definitions branch 2 times, most recently from 7033c9f to 1907ea8CompareDecember 7, 2023 14:34

@huntiehuntie left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great! I reckoned Expo was providing its own default config package — but perfectly happy to add TypeScript ergonomics :).

I'm just going to make sure this runs in RNTester — believe we may need to add the wrapping .js/.flow.js pattern to have run-from-source behaviour in this repo / internally at Meta.

@byCedric

byCedric commented Dec 7, 2023

Copy link
Copy Markdown
ContributorAuthor

Great! I reckoned Expo was providing its own default config package — but perfectly happy to add TypeScript ergonomics :).

I'm just going to make sure this runs in RNTester — believe we may need to add the wrapping .js/.flow.js pattern to have run-from-source behaviour in this repo / internally at Meta.

We are! But, there are fixes inside this React Native config that aren't backported inside the metro-config package. Things such as these require.resolve blocks.

We keep this "semi-fork" of the default config in @expo/metro-config, but it seems that metro-config should be properly fixed if we want to do that instead. Or am I missing something? 😄

@byCedric

Copy link
Copy Markdown
ContributorAuthor

Also, I think the getDefaultConfig.getDefaultValues should be properly patched as well. Right now, it just overwrites the getDefaultConfig method, without adding getDefaultValues.

@analysis-bot

analysis-bot commented Dec 7, 2023

Copy link
Copy Markdown
PlatformEngineArchSize (bytes)Diff
androidhermesarm64-v8a16,513,663-17
androidhermesarmeabi-v7an/a--
androidhermesx86n/a--
androidhermesx86_64n/a--
androidjscarm64-v8a19,884,244-3
androidjscarmeabi-v7an/a--
androidjscx86n/a--
androidjscx86_64n/a--

Base commit: a8ca9b0
Branch: main

@byCedric
byCedricforce-pushed the @bycedric/metro-config/add-type-definitions branch from 1907ea8 to f6c8fd4CompareDecember 7, 2023 15:09
@huntiehuntie changed the title fix(metro-config): emit typescript declarations for @react-native/metro-configMove metro-config package into monorepo build, enable TS generationDec 7, 2023

@huntiehuntie left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks!

@facebook-github-bot

Copy link
Copy Markdown
Contributor

@huntie has imported this pull request. If you are a Meta employee, you can view this diff on Phabricator.

@huntie

Copy link
Copy Markdown
Collaborator

One open question here is, why aren't we exporting all helper functions from metro-config? To me, its a bit weird that we need both metro-config and @react-native/metro-config as loadConfig isn't exported.

Ah, just spotted this question. The reasoning here is that only mergeConfig is needed inside a consuming metro.config.js file, since it returns an object/function that will be loaded by Metro.

loadConfig is side-effectful and part of Metro's internals (it's ultimately used to read metro.config.js in a project) — it's beyond the scope of the above.

*
* @flow
* @noformat
* @flow strict-local

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah my bad, let's loosen this to @flow so that CI passes.

@facebook-github-botfacebook-github-bot added the Merged This PR has been merged. label Feb 12, 2024
@facebook-github-bot

Copy link
Copy Markdown
Contributor

@huntie merged this pull request in b41a33e.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA SignedThis label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed.MergedThis PR has been merged.p: ExpoPartner: ExpoPartnerShared with MetaApplied via automation to indicate that an Issue or Pull Request has been shared with the team.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@byCedric@analysis-bot@facebook-github-bot@huntie
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' Move metro-config package into monorepo build, enable TS generation by byCedric · Pull Request #41836 · react/react-native · GitHub
Skip to content

Move metro-config package into monorepo build, enable TS generation - #41836

Closed
byCedric wants to merge 1 commit into
react:mainfrom
byCedric:@bycedric/metro-config/add-type-definitions
Closed

Move metro-config package into monorepo build, enable TS generation#41836
byCedric wants to merge 1 commit into
react:mainfrom
byCedric:@bycedric/metro-config/add-type-definitions

Conversation

@byCedric

@byCedricbyCedric commented Dec 7, 2023

Copy link
Copy Markdown
Contributor

Summary:

This adds @react-native/metro-config to the monorepo build tool and emits the missing typescript declarations.

Right now, we do have typescript declarations on metro-config, but not @react-native/metro-config. Which makes everything a bit harder extend from "the default React Native metro config" in Expo.

Note, I also added the same exports block from @react-native/dev-middleware for conformity.

One open question here is, why aren't we exporting all helper functions from metro-config? To me, its a bit weird that we need both metro-configand@react-native/metro-config as loadConfig isn't exported.

Changelog:

[INTERNAL] [FIXED] - Emit typescript declaration files for @react-native/metro-config

Test Plan:

Run the build tool, and check if the typescript declarations are emitted for @react-native/metro-config.

@facebook-github-botfacebook-github-bot added CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. p: Expo Partner: Expo Partner Shared with Meta Applied via automation to indicate that an Issue or Pull Request has been shared with the team. labels Dec 7, 2023
@byCedric
byCedricforce-pushed the @bycedric/metro-config/add-type-definitions branch 2 times, most recently from 7033c9f to 1907ea8CompareDecember 7, 2023 14:34

@huntiehuntie left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great! I reckoned Expo was providing its own default config package — but perfectly happy to add TypeScript ergonomics :).

I'm just going to make sure this runs in RNTester — believe we may need to add the wrapping .js/.flow.js pattern to have run-from-source behaviour in this repo / internally at Meta.

@byCedric

byCedric commented Dec 7, 2023

Copy link
Copy Markdown
ContributorAuthor

Great! I reckoned Expo was providing its own default config package — but perfectly happy to add TypeScript ergonomics :).

I'm just going to make sure this runs in RNTester — believe we may need to add the wrapping .js/.flow.js pattern to have run-from-source behaviour in this repo / internally at Meta.

We are! But, there are fixes inside this React Native config that aren't backported inside the metro-config package. Things such as these require.resolve blocks.

We keep this "semi-fork" of the default config in @expo/metro-config, but it seems that metro-config should be properly fixed if we want to do that instead. Or am I missing something? 😄

@byCedric

Copy link
Copy Markdown
ContributorAuthor

Also, I think the getDefaultConfig.getDefaultValues should be properly patched as well. Right now, it just overwrites the getDefaultConfig method, without adding getDefaultValues.

@analysis-bot

analysis-bot commented Dec 7, 2023

Copy link
Copy Markdown
PlatformEngineArchSize (bytes)Diff
androidhermesarm64-v8a16,513,663-17
androidhermesarmeabi-v7an/a--
androidhermesx86n/a--
androidhermesx86_64n/a--
androidjscarm64-v8a19,884,244-3
androidjscarmeabi-v7an/a--
androidjscx86n/a--
androidjscx86_64n/a--

Base commit: a8ca9b0
Branch: main

@byCedric
byCedricforce-pushed the @bycedric/metro-config/add-type-definitions branch from 1907ea8 to f6c8fd4CompareDecember 7, 2023 15:09
@huntiehuntie changed the title fix(metro-config): emit typescript declarations for @react-native/metro-configMove metro-config package into monorepo build, enable TS generationDec 7, 2023

@huntiehuntie left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks!

@facebook-github-bot

Copy link
Copy Markdown
Contributor

@huntie has imported this pull request. If you are a Meta employee, you can view this diff on Phabricator.

@huntie

Copy link
Copy Markdown
Collaborator

One open question here is, why aren't we exporting all helper functions from metro-config? To me, its a bit weird that we need both metro-config and @react-native/metro-config as loadConfig isn't exported.

Ah, just spotted this question. The reasoning here is that only mergeConfig is needed inside a consuming metro.config.js file, since it returns an object/function that will be loaded by Metro.

loadConfig is side-effectful and part of Metro's internals (it's ultimately used to read metro.config.js in a project) — it's beyond the scope of the above.

*
* @flow
* @noformat
* @flow strict-local

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah my bad, let's loosen this to @flow so that CI passes.

@facebook-github-botfacebook-github-bot added the Merged This PR has been merged. label Feb 12, 2024
@facebook-github-bot

Copy link
Copy Markdown
Contributor

@huntie merged this pull request in b41a33e.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA SignedThis label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed.MergedThis PR has been merged.p: ExpoPartner: ExpoPartnerShared with MetaApplied via automation to indicate that an Issue or Pull Request has been shared with the team.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@byCedric@analysis-bot@facebook-github-bot@huntie
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Move metro-config package into monorepo build, enable TS generation by byCedric · Pull Request #41836 · react/react-native · GitHub
Skip to content

Move metro-config package into monorepo build, enable TS generation - #41836

Closed
byCedric wants to merge 1 commit into
react:mainfrom
byCedric:@bycedric/metro-config/add-type-definitions
Closed

Move metro-config package into monorepo build, enable TS generation#41836
byCedric wants to merge 1 commit into
react:mainfrom
byCedric:@bycedric/metro-config/add-type-definitions

Conversation

@byCedric

@byCedricbyCedric commented Dec 7, 2023

Copy link
Copy Markdown
Contributor

Summary:

This adds @react-native/metro-config to the monorepo build tool and emits the missing typescript declarations.

Right now, we do have typescript declarations on metro-config, but not @react-native/metro-config. Which makes everything a bit harder extend from "the default React Native metro config" in Expo.

Note, I also added the same exports block from @react-native/dev-middleware for conformity.

One open question here is, why aren't we exporting all helper functions from metro-config? To me, its a bit weird that we need both metro-configand@react-native/metro-config as loadConfig isn't exported.

Changelog:

[INTERNAL] [FIXED] - Emit typescript declaration files for @react-native/metro-config

Test Plan:

Run the build tool, and check if the typescript declarations are emitted for @react-native/metro-config.

@facebook-github-botfacebook-github-bot added CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. p: Expo Partner: Expo Partner Shared with Meta Applied via automation to indicate that an Issue or Pull Request has been shared with the team. labels Dec 7, 2023
@byCedric
byCedricforce-pushed the @bycedric/metro-config/add-type-definitions branch 2 times, most recently from 7033c9f to 1907ea8CompareDecember 7, 2023 14:34

@huntiehuntie left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great! I reckoned Expo was providing its own default config package — but perfectly happy to add TypeScript ergonomics :).

I'm just going to make sure this runs in RNTester — believe we may need to add the wrapping .js/.flow.js pattern to have run-from-source behaviour in this repo / internally at Meta.

@byCedric

byCedric commented Dec 7, 2023

Copy link
Copy Markdown
ContributorAuthor

Great! I reckoned Expo was providing its own default config package — but perfectly happy to add TypeScript ergonomics :).

I'm just going to make sure this runs in RNTester — believe we may need to add the wrapping .js/.flow.js pattern to have run-from-source behaviour in this repo / internally at Meta.

We are! But, there are fixes inside this React Native config that aren't backported inside the metro-config package. Things such as these require.resolve blocks.

We keep this "semi-fork" of the default config in @expo/metro-config, but it seems that metro-config should be properly fixed if we want to do that instead. Or am I missing something? 😄

@byCedric

Copy link
Copy Markdown
ContributorAuthor

Also, I think the getDefaultConfig.getDefaultValues should be properly patched as well. Right now, it just overwrites the getDefaultConfig method, without adding getDefaultValues.

@analysis-bot

analysis-bot commented Dec 7, 2023

Copy link
Copy Markdown
PlatformEngineArchSize (bytes)Diff
androidhermesarm64-v8a16,513,663-17
androidhermesarmeabi-v7an/a--
androidhermesx86n/a--
androidhermesx86_64n/a--
androidjscarm64-v8a19,884,244-3
androidjscarmeabi-v7an/a--
androidjscx86n/a--
androidjscx86_64n/a--

Base commit: a8ca9b0
Branch: main

@byCedric
byCedricforce-pushed the @bycedric/metro-config/add-type-definitions branch from 1907ea8 to f6c8fd4CompareDecember 7, 2023 15:09
@huntiehuntie changed the title fix(metro-config): emit typescript declarations for @react-native/metro-configMove metro-config package into monorepo build, enable TS generationDec 7, 2023

@huntiehuntie left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks!

@facebook-github-bot

Copy link
Copy Markdown
Contributor

@huntie has imported this pull request. If you are a Meta employee, you can view this diff on Phabricator.

@huntie

Copy link
Copy Markdown
Collaborator

One open question here is, why aren't we exporting all helper functions from metro-config? To me, its a bit weird that we need both metro-config and @react-native/metro-config as loadConfig isn't exported.

Ah, just spotted this question. The reasoning here is that only mergeConfig is needed inside a consuming metro.config.js file, since it returns an object/function that will be loaded by Metro.

loadConfig is side-effectful and part of Metro's internals (it's ultimately used to read metro.config.js in a project) — it's beyond the scope of the above.

*
* @flow
* @noformat
* @flow strict-local

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah my bad, let's loosen this to @flow so that CI passes.

@facebook-github-botfacebook-github-bot added the Merged This PR has been merged. label Feb 12, 2024
@facebook-github-bot

Copy link
Copy Markdown
Contributor

@huntie merged this pull request in b41a33e.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA SignedThis label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed.MergedThis PR has been merged.p: ExpoPartner: ExpoPartnerShared with MetaApplied via automation to indicate that an Issue or Pull Request has been shared with the team.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@byCedric@analysis-bot@facebook-github-bot@huntie
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Move metro-config package into monorepo build, enable TS generation by byCedric · Pull Request #41836 · react/react-native · GitHub
Skip to content

Move metro-config package into monorepo build, enable TS generation - #41836

Closed
byCedric wants to merge 1 commit into
react:mainfrom
byCedric:@bycedric/metro-config/add-type-definitions
Closed

Move metro-config package into monorepo build, enable TS generation#41836
byCedric wants to merge 1 commit into
react:mainfrom
byCedric:@bycedric/metro-config/add-type-definitions

Conversation

@byCedric

@byCedricbyCedric commented Dec 7, 2023

Copy link
Copy Markdown
Contributor

Summary:

This adds @react-native/metro-config to the monorepo build tool and emits the missing typescript declarations.

Right now, we do have typescript declarations on metro-config, but not @react-native/metro-config. Which makes everything a bit harder extend from "the default React Native metro config" in Expo.

Note, I also added the same exports block from @react-native/dev-middleware for conformity.

One open question here is, why aren't we exporting all helper functions from metro-config? To me, its a bit weird that we need both metro-configand@react-native/metro-config as loadConfig isn't exported.

Changelog:

[INTERNAL] [FIXED] - Emit typescript declaration files for @react-native/metro-config

Test Plan:

Run the build tool, and check if the typescript declarations are emitted for @react-native/metro-config.

@facebook-github-botfacebook-github-bot added CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. p: Expo Partner: Expo Partner Shared with Meta Applied via automation to indicate that an Issue or Pull Request has been shared with the team. labels Dec 7, 2023
@byCedric
byCedricforce-pushed the @bycedric/metro-config/add-type-definitions branch 2 times, most recently from 7033c9f to 1907ea8CompareDecember 7, 2023 14:34

@huntiehuntie left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great! I reckoned Expo was providing its own default config package — but perfectly happy to add TypeScript ergonomics :).

I'm just going to make sure this runs in RNTester — believe we may need to add the wrapping .js/.flow.js pattern to have run-from-source behaviour in this repo / internally at Meta.

@byCedric

byCedric commented Dec 7, 2023

Copy link
Copy Markdown
ContributorAuthor

Great! I reckoned Expo was providing its own default config package — but perfectly happy to add TypeScript ergonomics :).

I'm just going to make sure this runs in RNTester — believe we may need to add the wrapping .js/.flow.js pattern to have run-from-source behaviour in this repo / internally at Meta.

We are! But, there are fixes inside this React Native config that aren't backported inside the metro-config package. Things such as these require.resolve blocks.

We keep this "semi-fork" of the default config in @expo/metro-config, but it seems that metro-config should be properly fixed if we want to do that instead. Or am I missing something? 😄

@byCedric

Copy link
Copy Markdown
ContributorAuthor

Also, I think the getDefaultConfig.getDefaultValues should be properly patched as well. Right now, it just overwrites the getDefaultConfig method, without adding getDefaultValues.

@analysis-bot

analysis-bot commented Dec 7, 2023

Copy link
Copy Markdown
PlatformEngineArchSize (bytes)Diff
androidhermesarm64-v8a16,513,663-17
androidhermesarmeabi-v7an/a--
androidhermesx86n/a--
androidhermesx86_64n/a--
androidjscarm64-v8a19,884,244-3
androidjscarmeabi-v7an/a--
androidjscx86n/a--
androidjscx86_64n/a--

Base commit: a8ca9b0
Branch: main

@byCedric
byCedricforce-pushed the @bycedric/metro-config/add-type-definitions branch from 1907ea8 to f6c8fd4CompareDecember 7, 2023 15:09
@huntiehuntie changed the title fix(metro-config): emit typescript declarations for @react-native/metro-configMove metro-config package into monorepo build, enable TS generationDec 7, 2023

@huntiehuntie left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks!

@facebook-github-bot

Copy link
Copy Markdown
Contributor

@huntie has imported this pull request. If you are a Meta employee, you can view this diff on Phabricator.

@huntie

Copy link
Copy Markdown
Collaborator

One open question here is, why aren't we exporting all helper functions from metro-config? To me, its a bit weird that we need both metro-config and @react-native/metro-config as loadConfig isn't exported.

Ah, just spotted this question. The reasoning here is that only mergeConfig is needed inside a consuming metro.config.js file, since it returns an object/function that will be loaded by Metro.

loadConfig is side-effectful and part of Metro's internals (it's ultimately used to read metro.config.js in a project) — it's beyond the scope of the above.

*
* @flow
* @noformat
* @flow strict-local

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah my bad, let's loosen this to @flow so that CI passes.

@facebook-github-botfacebook-github-bot added the Merged This PR has been merged. label Feb 12, 2024
@facebook-github-bot

Copy link
Copy Markdown
Contributor

@huntie merged this pull request in b41a33e.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA SignedThis label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed.MergedThis PR has been merged.p: ExpoPartner: ExpoPartnerShared with MetaApplied via automation to indicate that an Issue or Pull Request has been shared with the team.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@byCedric@analysis-bot@facebook-github-bot@huntie
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); Move metro-config package into monorepo build, enable TS generation by byCedric · Pull Request #41836 · react/react-native · GitHub
Skip to content

Move metro-config package into monorepo build, enable TS generation - #41836

Closed
byCedric wants to merge 1 commit into
react:mainfrom
byCedric:@bycedric/metro-config/add-type-definitions
Closed

Move metro-config package into monorepo build, enable TS generation#41836
byCedric wants to merge 1 commit into
react:mainfrom
byCedric:@bycedric/metro-config/add-type-definitions

Conversation

@byCedric

@byCedricbyCedric commented Dec 7, 2023

Copy link
Copy Markdown
Contributor

Summary:

This adds @react-native/metro-config to the monorepo build tool and emits the missing typescript declarations.

Right now, we do have typescript declarations on metro-config, but not @react-native/metro-config. Which makes everything a bit harder extend from "the default React Native metro config" in Expo.

Note, I also added the same exports block from @react-native/dev-middleware for conformity.

One open question here is, why aren't we exporting all helper functions from metro-config? To me, its a bit weird that we need both metro-configand@react-native/metro-config as loadConfig isn't exported.

Changelog:

[INTERNAL] [FIXED] - Emit typescript declaration files for @react-native/metro-config

Test Plan:

Run the build tool, and check if the typescript declarations are emitted for @react-native/metro-config.

@facebook-github-botfacebook-github-bot added CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. p: Expo Partner: Expo Partner Shared with Meta Applied via automation to indicate that an Issue or Pull Request has been shared with the team. labels Dec 7, 2023
@byCedric
byCedricforce-pushed the @bycedric/metro-config/add-type-definitions branch 2 times, most recently from 7033c9f to 1907ea8CompareDecember 7, 2023 14:34

@huntiehuntie left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great! I reckoned Expo was providing its own default config package — but perfectly happy to add TypeScript ergonomics :).

I'm just going to make sure this runs in RNTester — believe we may need to add the wrapping .js/.flow.js pattern to have run-from-source behaviour in this repo / internally at Meta.

@byCedric

byCedric commented Dec 7, 2023

Copy link
Copy Markdown
ContributorAuthor

Great! I reckoned Expo was providing its own default config package — but perfectly happy to add TypeScript ergonomics :).

I'm just going to make sure this runs in RNTester — believe we may need to add the wrapping .js/.flow.js pattern to have run-from-source behaviour in this repo / internally at Meta.

We are! But, there are fixes inside this React Native config that aren't backported inside the metro-config package. Things such as these require.resolve blocks.

We keep this "semi-fork" of the default config in @expo/metro-config, but it seems that metro-config should be properly fixed if we want to do that instead. Or am I missing something? 😄

@byCedric

Copy link
Copy Markdown
ContributorAuthor

Also, I think the getDefaultConfig.getDefaultValues should be properly patched as well. Right now, it just overwrites the getDefaultConfig method, without adding getDefaultValues.

@analysis-bot

analysis-bot commented Dec 7, 2023

Copy link
Copy Markdown
PlatformEngineArchSize (bytes)Diff
androidhermesarm64-v8a16,513,663-17
androidhermesarmeabi-v7an/a--
androidhermesx86n/a--
androidhermesx86_64n/a--
androidjscarm64-v8a19,884,244-3
androidjscarmeabi-v7an/a--
androidjscx86n/a--
androidjscx86_64n/a--

Base commit: a8ca9b0
Branch: main

@byCedric
byCedricforce-pushed the @bycedric/metro-config/add-type-definitions branch from 1907ea8 to f6c8fd4CompareDecember 7, 2023 15:09
@huntiehuntie changed the title fix(metro-config): emit typescript declarations for @react-native/metro-configMove metro-config package into monorepo build, enable TS generationDec 7, 2023

@huntiehuntie left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks!

@facebook-github-bot

Copy link
Copy Markdown
Contributor

@huntie has imported this pull request. If you are a Meta employee, you can view this diff on Phabricator.

@huntie

Copy link
Copy Markdown
Collaborator

One open question here is, why aren't we exporting all helper functions from metro-config? To me, its a bit weird that we need both metro-config and @react-native/metro-config as loadConfig isn't exported.

Ah, just spotted this question. The reasoning here is that only mergeConfig is needed inside a consuming metro.config.js file, since it returns an object/function that will be loaded by Metro.

loadConfig is side-effectful and part of Metro's internals (it's ultimately used to read metro.config.js in a project) — it's beyond the scope of the above.

*
* @flow
* @noformat
* @flow strict-local

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah my bad, let's loosen this to @flow so that CI passes.

@facebook-github-botfacebook-github-bot added the Merged This PR has been merged. label Feb 12, 2024
@facebook-github-bot

Copy link
Copy Markdown
Contributor

@huntie merged this pull request in b41a33e.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA SignedThis label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed.MergedThis PR has been merged.p: ExpoPartner: ExpoPartnerShared with MetaApplied via automation to indicate that an Issue or Pull Request has been shared with the team.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@byCedric@analysis-bot@facebook-github-bot@huntie