fix: Remove Flow from @react-native/assets-registry - registry.js - #44002

Closed
codinsonn wants to merge 3 commits into
react:mainfrom
codinsonn:patch-1
Closed

fix: Remove Flow from @react-native/assets-registry - registry.js#44002
codinsonn wants to merge 3 commits into
react:mainfrom
codinsonn:patch-1

Conversation

@codinsonn

@codinsonncodinsonn commented Apr 9, 2024

Copy link
Copy Markdown

Summary

React native shipping Flow types breaks universal apps

In essence:

Next.js does not transpile Flow, yet combining Expo with Next.js is becoming a more common combo

Related issues and Github comments:

It might be a better idea to rewrite the entire @react-native/assets-registry in Typescript instead of Flow. I'm willing to do this myself if you're open for that. But really, as long as Flow goes, it will no longer break universal app setups with Next.js

Changelog:

[GENERAL] [REMOVED] - Fixed @react-native/assets-registry breaking in Next.js due to Flow types

Test Plan

Reproducible by starting a new expo + next.js and adding + using e.g. @bacons/mdx or @expo/vector-icons on the web with Next.js 13+

Fix testable by applying the following patch-package diff:

expo/expo#21623 (comment)

@react-native+assets+1.0.0.patch

diff --git a/node_modules/@react-native/assets/registry.js b/node_modules/@react-native/assets/registry.js
index 088187f..0a384d1 100644
--- a/node_modules/@react-native/assets/registry.js+++ b/node_modules/@react-native/assets/registry.js@@ -10,28 +10,16 @@
'use strict';
-export type PackagerAsset = {- +__packager_asset: boolean,- +fileSystemLocation: string,- +httpServerLocation: string,- +width: ?number,- +height: ?number,- +scales: Array<number>,- +hash: string,- +name: string,- +type: string,- ...-};-const assets: Array<PackagerAsset> = [];+const assets = [];-function registerAsset(asset: PackagerAsset): number {+function registerAsset(asset) {
// `push` returns new array length, so the first asset will
// get id 1 (not 0) to make the value truthy
return assets.push(asset);
}
-function getAssetByID(assetId: number): PackagerAsset {+function getAssetByID(assetId) {
return assets[assetId - 1];
}

@facebook-github-bot

Copy link
Copy Markdown
Contributor

Hi @codinsonn!

Thank you for your pull request and welcome to our community.

Action Required

In order to merge any pull request (code, docs, etc.), we require contributors to sign our Contributor License Agreement, and we don't seem to have one on file for you.

Process

In order for us to review and merge your suggested changes, please sign at https://code.facebook.com/cla. If you are contributing on behalf of someone else (eg your employer), the individual CLA may not be sufficient and your employer may need to sign the corporate CLA.

Once the CLA is signed, our tooling will perform checks and validations. Afterwards, the pull request will be tagged with CLA signed. The tagging process may take up to 1 hour after signing. Please give it that time before contacting us about it.

If you have received this in error or have any questions, please contact us at cla@meta.com. Thanks!

Add `@flow` comment to run automatic tests accurately
@codinsonn

codinsonn commented Apr 9, 2024

Copy link
Copy Markdown
Author

To be fair, if anyone from the Facebook team or React-Native community is willing to spearhead a move away from Flow to Typescript (for at least @react-native/assets-registry), that might be a better solution than merging this PR.

(In which case, feel free to close this one)

@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. Shared with Meta Applied via automation to indicate that an Issue or Pull Request has been shared with the team. labels Apr 9, 2024
@karpolan

Copy link
Copy Markdown

Will somebody fix it? When?!

@headfire94

Copy link
Copy Markdown

@codinsonn this PR can't be merged, see tests failing because other packages depend on flow types from this one. seems like bigger refactoring needed

@necolasnecolas added Flow Needs: React Native Team Attention Tech: Monorepo For PRs that are related to the monorepo infra labels Oct 15, 2024
@necolas

necolas commented Oct 15, 2024

Copy link
Copy Markdown

I don't think we want to remove the flow types from the source code, but when this package is published to npm it should not have type annotations. It looks normalize-colors simply puts the flow types in an accompanying file, so the entry is valid JS https://github.com/facebook/react-native/tree/HEAD/packages/normalize-color

@karpolan

Copy link
Copy Markdown

Does somebody have patch for "react-native": "0.76.1" ?

@karpolan

karpolan commented Nov 13, 2024

Copy link
Copy Markdown

Does somebody have patch for "react-native": "0.76.1" ?

Ok, I did it myself:

/patches/@react-native+assets-registry+0.76.1.patch

diff --git a/node_modules/@react-native/assets-registry/registry.js b/node_modules/@react-native/assets-registry/registry.js
index 64b2735..d31da85 100644
--- a/node_modules/@react-native/assets-registry/registry.js
+++ b/node_modules/@react-native/assets-registry/registry.js
@@ -4,38 +4,39 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
- * @flow strict
- * @format
*/
'use strict';
-export type AssetDestPathResolver = 'android' | 'generic';
+// export type AssetDestPathResolver = 'android' | 'generic';
-export type PackagerAsset = {
- +__packager_asset: boolean,
- +fileSystemLocation: string,
- +httpServerLocation: string,
- +width: ?number,
- +height: ?number,
- +scales: Array<number>,
- +hash: string,
- +name: string,
- +type: string,
- +resolver?: AssetDestPathResolver,
- ...
-};
+// export type PackagerAsset = {
+// +__packager_asset: boolean,
+// +fileSystemLocation: string,
+// +httpServerLocation: string,
+// +width: ?number,
+// +height: ?number,
+// +scales: Array<number>,
+// +hash: string,
+// +name: string,
+// +type: string,
+// +resolver?: AssetDestPathResolver,
+// ...
+// };
-const assets: Array<PackagerAsset> = [];
+// const assets: Array<PackagerAsset> = [];
+const assets = [];
-function registerAsset(asset: PackagerAsset): number {
+// function registerAsset(asset: PackagerAsset): number {
+function registerAsset(asset) {
// `push` returns new array length, so the first asset will
// get id 1 (not 0) to make the value truthy
return assets.push(asset);
}
-function getAssetByID(assetId: number): PackagerAsset {
+// function getAssetByID(assetId: number): PackagerAsset {
+function getAssetByID(assetId) {
return assets[assetId - 1];
}
-module.exports = {registerAsset, getAssetByID};
+module.exports = { registerAsset, getAssetByID };

@codinsonn

Copy link
Copy Markdown
Author

I don't think we want to remove the flow types from the source code, but when this package is published to npm it should not have type annotations. It looks normalize-colors simply puts the flow types in an accompanying file, so the entry is valid JS https://github.com/facebook/react-native/tree/HEAD/packages/normalize-color

That does sound like a better solution than removing flow types or doing a bigger refactor.

I'm all for it.

Until then, I think I'll patch it out in my own projects. (thx @karpolan)

Maybe this PR should be converted into an issue instead?

@exzos28

Copy link
Copy Markdown

looks like it was merged here - #48458

@codinsonn

Copy link
Copy Markdown
Author

Closing this as it seems to have been fixed by #48458 in 697e946 like @exzos28 mentioned

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.FlowNeeds: React Native Team AttentionShared with MetaApplied via automation to indicate that an Issue or Pull Request has been shared with the team.Tech: MonorepoFor PRs that are related to the monorepo infra

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@codinsonn@facebook-github-bot@karpolan@headfire94@necolas@exzos28
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n 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;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

fix: Remove Flow from @react-native/assets-registry - registry.js - #44002

Closed
codinsonn wants to merge 3 commits into
react:mainfrom
codinsonn:patch-1
Closed

fix: Remove Flow from @react-native/assets-registry - registry.js#44002
codinsonn wants to merge 3 commits into
react:mainfrom
codinsonn:patch-1

Conversation

@codinsonn

@codinsonncodinsonn commented Apr 9, 2024

Copy link
Copy Markdown

Summary

React native shipping Flow types breaks universal apps

In essence:

Next.js does not transpile Flow, yet combining Expo with Next.js is becoming a more common combo

Related issues and Github comments:

It might be a better idea to rewrite the entire @react-native/assets-registry in Typescript instead of Flow. I'm willing to do this myself if you're open for that. But really, as long as Flow goes, it will no longer break universal app setups with Next.js

Changelog:

[GENERAL] [REMOVED] - Fixed @react-native/assets-registry breaking in Next.js due to Flow types

Test Plan

Reproducible by starting a new expo + next.js and adding + using e.g. @bacons/mdx or @expo/vector-icons on the web with Next.js 13+

Fix testable by applying the following patch-package diff:

expo/expo#21623 (comment)

@react-native+assets+1.0.0.patch

diff --git a/node_modules/@react-native/assets/registry.js b/node_modules/@react-native/assets/registry.js
index 088187f..0a384d1 100644
--- a/node_modules/@react-native/assets/registry.js+++ b/node_modules/@react-native/assets/registry.js@@ -10,28 +10,16 @@
'use strict';
-export type PackagerAsset = {- +__packager_asset: boolean,- +fileSystemLocation: string,- +httpServerLocation: string,- +width: ?number,- +height: ?number,- +scales: Array<number>,- +hash: string,- +name: string,- +type: string,- ...-};-const assets: Array<PackagerAsset> = [];+const assets = [];-function registerAsset(asset: PackagerAsset): number {+function registerAsset(asset) {
// `push` returns new array length, so the first asset will
// get id 1 (not 0) to make the value truthy
return assets.push(asset);
}
-function getAssetByID(assetId: number): PackagerAsset {+function getAssetByID(assetId) {
return assets[assetId - 1];
}

@facebook-github-bot

Copy link
Copy Markdown
Contributor

Hi @codinsonn!

Thank you for your pull request and welcome to our community.

Action Required

In order to merge any pull request (code, docs, etc.), we require contributors to sign our Contributor License Agreement, and we don't seem to have one on file for you.

Process

In order for us to review and merge your suggested changes, please sign at https://code.facebook.com/cla. If you are contributing on behalf of someone else (eg your employer), the individual CLA may not be sufficient and your employer may need to sign the corporate CLA.

Once the CLA is signed, our tooling will perform checks and validations. Afterwards, the pull request will be tagged with CLA signed. The tagging process may take up to 1 hour after signing. Please give it that time before contacting us about it.

If you have received this in error or have any questions, please contact us at cla@meta.com. Thanks!

Add `@flow` comment to run automatic tests accurately
@codinsonn

codinsonn commented Apr 9, 2024

Copy link
Copy Markdown
Author

To be fair, if anyone from the Facebook team or React-Native community is willing to spearhead a move away from Flow to Typescript (for at least @react-native/assets-registry), that might be a better solution than merging this PR.

(In which case, feel free to close this one)

@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. Shared with Meta Applied via automation to indicate that an Issue or Pull Request has been shared with the team. labels Apr 9, 2024
@karpolan

Copy link
Copy Markdown

Will somebody fix it? When?!

@headfire94

Copy link
Copy Markdown

@codinsonn this PR can't be merged, see tests failing because other packages depend on flow types from this one. seems like bigger refactoring needed

@necolasnecolas added Flow Needs: React Native Team Attention Tech: Monorepo For PRs that are related to the monorepo infra labels Oct 15, 2024
@necolas

necolas commented Oct 15, 2024

Copy link
Copy Markdown

I don't think we want to remove the flow types from the source code, but when this package is published to npm it should not have type annotations. It looks normalize-colors simply puts the flow types in an accompanying file, so the entry is valid JS https://github.com/facebook/react-native/tree/HEAD/packages/normalize-color

@karpolan

Copy link
Copy Markdown

Does somebody have patch for "react-native": "0.76.1" ?

@karpolan

karpolan commented Nov 13, 2024

Copy link
Copy Markdown

Does somebody have patch for "react-native": "0.76.1" ?

Ok, I did it myself:

/patches/@react-native+assets-registry+0.76.1.patch

diff --git a/node_modules/@react-native/assets-registry/registry.js b/node_modules/@react-native/assets-registry/registry.js
index 64b2735..d31da85 100644
--- a/node_modules/@react-native/assets-registry/registry.js
+++ b/node_modules/@react-native/assets-registry/registry.js
@@ -4,38 +4,39 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
- * @flow strict
- * @format
*/
'use strict';
-export type AssetDestPathResolver = 'android' | 'generic';
+// export type AssetDestPathResolver = 'android' | 'generic';
-export type PackagerAsset = {
- +__packager_asset: boolean,
- +fileSystemLocation: string,
- +httpServerLocation: string,
- +width: ?number,
- +height: ?number,
- +scales: Array<number>,
- +hash: string,
- +name: string,
- +type: string,
- +resolver?: AssetDestPathResolver,
- ...
-};
+// export type PackagerAsset = {
+// +__packager_asset: boolean,
+// +fileSystemLocation: string,
+// +httpServerLocation: string,
+// +width: ?number,
+// +height: ?number,
+// +scales: Array<number>,
+// +hash: string,
+// +name: string,
+// +type: string,
+// +resolver?: AssetDestPathResolver,
+// ...
+// };
-const assets: Array<PackagerAsset> = [];
+// const assets: Array<PackagerAsset> = [];
+const assets = [];
-function registerAsset(asset: PackagerAsset): number {
+// function registerAsset(asset: PackagerAsset): number {
+function registerAsset(asset) {
// `push` returns new array length, so the first asset will
// get id 1 (not 0) to make the value truthy
return assets.push(asset);
}
-function getAssetByID(assetId: number): PackagerAsset {
+// function getAssetByID(assetId: number): PackagerAsset {
+function getAssetByID(assetId) {
return assets[assetId - 1];
}
-module.exports = {registerAsset, getAssetByID};
+module.exports = { registerAsset, getAssetByID };

@codinsonn

Copy link
Copy Markdown
Author

I don't think we want to remove the flow types from the source code, but when this package is published to npm it should not have type annotations. It looks normalize-colors simply puts the flow types in an accompanying file, so the entry is valid JS https://github.com/facebook/react-native/tree/HEAD/packages/normalize-color

That does sound like a better solution than removing flow types or doing a bigger refactor.

I'm all for it.

Until then, I think I'll patch it out in my own projects. (thx @karpolan)

Maybe this PR should be converted into an issue instead?

@exzos28

Copy link
Copy Markdown

looks like it was merged here - #48458

@codinsonn

Copy link
Copy Markdown
Author

Closing this as it seems to have been fixed by #48458 in 697e946 like @exzos28 mentioned

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.FlowNeeds: React Native Team AttentionShared with MetaApplied via automation to indicate that an Issue or Pull Request has been shared with the team.Tech: MonorepoFor PRs that are related to the monorepo infra

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@codinsonn@facebook-github-bot@karpolan@headfire94@necolas@exzos28
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix: Remove Flow from @react-native/assets-registry - registry.js - #44002

Closed
codinsonn wants to merge 3 commits into
react:mainfrom
codinsonn:patch-1
Closed

fix: Remove Flow from @react-native/assets-registry - registry.js#44002
codinsonn wants to merge 3 commits into
react:mainfrom
codinsonn:patch-1

Conversation

@codinsonn

@codinsonncodinsonn commented Apr 9, 2024

Copy link
Copy Markdown

Summary

React native shipping Flow types breaks universal apps

In essence:

Next.js does not transpile Flow, yet combining Expo with Next.js is becoming a more common combo

Related issues and Github comments:

It might be a better idea to rewrite the entire @react-native/assets-registry in Typescript instead of Flow. I'm willing to do this myself if you're open for that. But really, as long as Flow goes, it will no longer break universal app setups with Next.js

Changelog:

[GENERAL] [REMOVED] - Fixed @react-native/assets-registry breaking in Next.js due to Flow types

Test Plan

Reproducible by starting a new expo + next.js and adding + using e.g. @bacons/mdx or @expo/vector-icons on the web with Next.js 13+

Fix testable by applying the following patch-package diff:

expo/expo#21623 (comment)

@react-native+assets+1.0.0.patch

diff --git a/node_modules/@react-native/assets/registry.js b/node_modules/@react-native/assets/registry.js
index 088187f..0a384d1 100644
--- a/node_modules/@react-native/assets/registry.js+++ b/node_modules/@react-native/assets/registry.js@@ -10,28 +10,16 @@
'use strict';
-export type PackagerAsset = {- +__packager_asset: boolean,- +fileSystemLocation: string,- +httpServerLocation: string,- +width: ?number,- +height: ?number,- +scales: Array<number>,- +hash: string,- +name: string,- +type: string,- ...-};-const assets: Array<PackagerAsset> = [];+const assets = [];-function registerAsset(asset: PackagerAsset): number {+function registerAsset(asset) {
// `push` returns new array length, so the first asset will
// get id 1 (not 0) to make the value truthy
return assets.push(asset);
}
-function getAssetByID(assetId: number): PackagerAsset {+function getAssetByID(assetId) {
return assets[assetId - 1];
}

@facebook-github-bot

Copy link
Copy Markdown
Contributor

Hi @codinsonn!

Thank you for your pull request and welcome to our community.

Action Required

In order to merge any pull request (code, docs, etc.), we require contributors to sign our Contributor License Agreement, and we don't seem to have one on file for you.

Process

In order for us to review and merge your suggested changes, please sign at https://code.facebook.com/cla. If you are contributing on behalf of someone else (eg your employer), the individual CLA may not be sufficient and your employer may need to sign the corporate CLA.

Once the CLA is signed, our tooling will perform checks and validations. Afterwards, the pull request will be tagged with CLA signed. The tagging process may take up to 1 hour after signing. Please give it that time before contacting us about it.

If you have received this in error or have any questions, please contact us at cla@meta.com. Thanks!

Add `@flow` comment to run automatic tests accurately
@codinsonn

codinsonn commented Apr 9, 2024

Copy link
Copy Markdown
Author

To be fair, if anyone from the Facebook team or React-Native community is willing to spearhead a move away from Flow to Typescript (for at least @react-native/assets-registry), that might be a better solution than merging this PR.

(In which case, feel free to close this one)

@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. Shared with Meta Applied via automation to indicate that an Issue or Pull Request has been shared with the team. labels Apr 9, 2024
@karpolan

Copy link
Copy Markdown

Will somebody fix it? When?!

@headfire94

Copy link
Copy Markdown

@codinsonn this PR can't be merged, see tests failing because other packages depend on flow types from this one. seems like bigger refactoring needed

@necolasnecolas added Flow Needs: React Native Team Attention Tech: Monorepo For PRs that are related to the monorepo infra labels Oct 15, 2024
@necolas

necolas commented Oct 15, 2024

Copy link
Copy Markdown

I don't think we want to remove the flow types from the source code, but when this package is published to npm it should not have type annotations. It looks normalize-colors simply puts the flow types in an accompanying file, so the entry is valid JS https://github.com/facebook/react-native/tree/HEAD/packages/normalize-color

@karpolan

Copy link
Copy Markdown

Does somebody have patch for "react-native": "0.76.1" ?

@karpolan

karpolan commented Nov 13, 2024

Copy link
Copy Markdown

Does somebody have patch for "react-native": "0.76.1" ?

Ok, I did it myself:

/patches/@react-native+assets-registry+0.76.1.patch

diff --git a/node_modules/@react-native/assets-registry/registry.js b/node_modules/@react-native/assets-registry/registry.js
index 64b2735..d31da85 100644
--- a/node_modules/@react-native/assets-registry/registry.js
+++ b/node_modules/@react-native/assets-registry/registry.js
@@ -4,38 +4,39 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
- * @flow strict
- * @format
*/
'use strict';
-export type AssetDestPathResolver = 'android' | 'generic';
+// export type AssetDestPathResolver = 'android' | 'generic';
-export type PackagerAsset = {
- +__packager_asset: boolean,
- +fileSystemLocation: string,
- +httpServerLocation: string,
- +width: ?number,
- +height: ?number,
- +scales: Array<number>,
- +hash: string,
- +name: string,
- +type: string,
- +resolver?: AssetDestPathResolver,
- ...
-};
+// export type PackagerAsset = {
+// +__packager_asset: boolean,
+// +fileSystemLocation: string,
+// +httpServerLocation: string,
+// +width: ?number,
+// +height: ?number,
+// +scales: Array<number>,
+// +hash: string,
+// +name: string,
+// +type: string,
+// +resolver?: AssetDestPathResolver,
+// ...
+// };
-const assets: Array<PackagerAsset> = [];
+// const assets: Array<PackagerAsset> = [];
+const assets = [];
-function registerAsset(asset: PackagerAsset): number {
+// function registerAsset(asset: PackagerAsset): number {
+function registerAsset(asset) {
// `push` returns new array length, so the first asset will
// get id 1 (not 0) to make the value truthy
return assets.push(asset);
}
-function getAssetByID(assetId: number): PackagerAsset {
+// function getAssetByID(assetId: number): PackagerAsset {
+function getAssetByID(assetId) {
return assets[assetId - 1];
}
-module.exports = {registerAsset, getAssetByID};
+module.exports = { registerAsset, getAssetByID };

@codinsonn

Copy link
Copy Markdown
Author

I don't think we want to remove the flow types from the source code, but when this package is published to npm it should not have type annotations. It looks normalize-colors simply puts the flow types in an accompanying file, so the entry is valid JS https://github.com/facebook/react-native/tree/HEAD/packages/normalize-color

That does sound like a better solution than removing flow types or doing a bigger refactor.

I'm all for it.

Until then, I think I'll patch it out in my own projects. (thx @karpolan)

Maybe this PR should be converted into an issue instead?

@exzos28

Copy link
Copy Markdown

looks like it was merged here - #48458

@codinsonn

Copy link
Copy Markdown
Author

Closing this as it seems to have been fixed by #48458 in 697e946 like @exzos28 mentioned

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.FlowNeeds: React Native Team AttentionShared with MetaApplied via automation to indicate that an Issue or Pull Request has been shared with the team.Tech: MonorepoFor PRs that are related to the monorepo infra

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

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

fix: Remove Flow from @react-native/assets-registry - registry.js - #44002

Closed
codinsonn wants to merge 3 commits into
react:mainfrom
codinsonn:patch-1
Closed

fix: Remove Flow from @react-native/assets-registry - registry.js#44002
codinsonn wants to merge 3 commits into
react:mainfrom
codinsonn:patch-1

Conversation

@codinsonn

@codinsonncodinsonn commented Apr 9, 2024

Copy link
Copy Markdown

Summary

React native shipping Flow types breaks universal apps

In essence:

Next.js does not transpile Flow, yet combining Expo with Next.js is becoming a more common combo

Related issues and Github comments:

It might be a better idea to rewrite the entire @react-native/assets-registry in Typescript instead of Flow. I'm willing to do this myself if you're open for that. But really, as long as Flow goes, it will no longer break universal app setups with Next.js

Changelog:

[GENERAL] [REMOVED] - Fixed @react-native/assets-registry breaking in Next.js due to Flow types

Test Plan

Reproducible by starting a new expo + next.js and adding + using e.g. @bacons/mdx or @expo/vector-icons on the web with Next.js 13+

Fix testable by applying the following patch-package diff:

expo/expo#21623 (comment)

@react-native+assets+1.0.0.patch

diff --git a/node_modules/@react-native/assets/registry.js b/node_modules/@react-native/assets/registry.js
index 088187f..0a384d1 100644
--- a/node_modules/@react-native/assets/registry.js+++ b/node_modules/@react-native/assets/registry.js@@ -10,28 +10,16 @@
'use strict';
-export type PackagerAsset = {- +__packager_asset: boolean,- +fileSystemLocation: string,- +httpServerLocation: string,- +width: ?number,- +height: ?number,- +scales: Array<number>,- +hash: string,- +name: string,- +type: string,- ...-};-const assets: Array<PackagerAsset> = [];+const assets = [];-function registerAsset(asset: PackagerAsset): number {+function registerAsset(asset) {
// `push` returns new array length, so the first asset will
// get id 1 (not 0) to make the value truthy
return assets.push(asset);
}
-function getAssetByID(assetId: number): PackagerAsset {+function getAssetByID(assetId) {
return assets[assetId - 1];
}

@facebook-github-bot

Copy link
Copy Markdown
Contributor

Hi @codinsonn!

Thank you for your pull request and welcome to our community.

Action Required

In order to merge any pull request (code, docs, etc.), we require contributors to sign our Contributor License Agreement, and we don't seem to have one on file for you.

Process

In order for us to review and merge your suggested changes, please sign at https://code.facebook.com/cla. If you are contributing on behalf of someone else (eg your employer), the individual CLA may not be sufficient and your employer may need to sign the corporate CLA.

Once the CLA is signed, our tooling will perform checks and validations. Afterwards, the pull request will be tagged with CLA signed. The tagging process may take up to 1 hour after signing. Please give it that time before contacting us about it.

If you have received this in error or have any questions, please contact us at cla@meta.com. Thanks!

Add `@flow` comment to run automatic tests accurately
@codinsonn

codinsonn commented Apr 9, 2024

Copy link
Copy Markdown
Author

To be fair, if anyone from the Facebook team or React-Native community is willing to spearhead a move away from Flow to Typescript (for at least @react-native/assets-registry), that might be a better solution than merging this PR.

(In which case, feel free to close this one)

@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. Shared with Meta Applied via automation to indicate that an Issue or Pull Request has been shared with the team. labels Apr 9, 2024
@karpolan

Copy link
Copy Markdown

Will somebody fix it? When?!

@headfire94

Copy link
Copy Markdown

@codinsonn this PR can't be merged, see tests failing because other packages depend on flow types from this one. seems like bigger refactoring needed

@necolasnecolas added Flow Needs: React Native Team Attention Tech: Monorepo For PRs that are related to the monorepo infra labels Oct 15, 2024
@necolas

necolas commented Oct 15, 2024

Copy link
Copy Markdown

I don't think we want to remove the flow types from the source code, but when this package is published to npm it should not have type annotations. It looks normalize-colors simply puts the flow types in an accompanying file, so the entry is valid JS https://github.com/facebook/react-native/tree/HEAD/packages/normalize-color

@karpolan

Copy link
Copy Markdown

Does somebody have patch for "react-native": "0.76.1" ?

@karpolan

karpolan commented Nov 13, 2024

Copy link
Copy Markdown

Does somebody have patch for "react-native": "0.76.1" ?

Ok, I did it myself:

/patches/@react-native+assets-registry+0.76.1.patch

diff --git a/node_modules/@react-native/assets-registry/registry.js b/node_modules/@react-native/assets-registry/registry.js
index 64b2735..d31da85 100644
--- a/node_modules/@react-native/assets-registry/registry.js
+++ b/node_modules/@react-native/assets-registry/registry.js
@@ -4,38 +4,39 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
- * @flow strict
- * @format
*/
'use strict';
-export type AssetDestPathResolver = 'android' | 'generic';
+// export type AssetDestPathResolver = 'android' | 'generic';
-export type PackagerAsset = {
- +__packager_asset: boolean,
- +fileSystemLocation: string,
- +httpServerLocation: string,
- +width: ?number,
- +height: ?number,
- +scales: Array<number>,
- +hash: string,
- +name: string,
- +type: string,
- +resolver?: AssetDestPathResolver,
- ...
-};
+// export type PackagerAsset = {
+// +__packager_asset: boolean,
+// +fileSystemLocation: string,
+// +httpServerLocation: string,
+// +width: ?number,
+// +height: ?number,
+// +scales: Array<number>,
+// +hash: string,
+// +name: string,
+// +type: string,
+// +resolver?: AssetDestPathResolver,
+// ...
+// };
-const assets: Array<PackagerAsset> = [];
+// const assets: Array<PackagerAsset> = [];
+const assets = [];
-function registerAsset(asset: PackagerAsset): number {
+// function registerAsset(asset: PackagerAsset): number {
+function registerAsset(asset) {
// `push` returns new array length, so the first asset will
// get id 1 (not 0) to make the value truthy
return assets.push(asset);
}
-function getAssetByID(assetId: number): PackagerAsset {
+// function getAssetByID(assetId: number): PackagerAsset {
+function getAssetByID(assetId) {
return assets[assetId - 1];
}
-module.exports = {registerAsset, getAssetByID};
+module.exports = { registerAsset, getAssetByID };

@codinsonn

Copy link
Copy Markdown
Author

I don't think we want to remove the flow types from the source code, but when this package is published to npm it should not have type annotations. It looks normalize-colors simply puts the flow types in an accompanying file, so the entry is valid JS https://github.com/facebook/react-native/tree/HEAD/packages/normalize-color

That does sound like a better solution than removing flow types or doing a bigger refactor.

I'm all for it.

Until then, I think I'll patch it out in my own projects. (thx @karpolan)

Maybe this PR should be converted into an issue instead?

@exzos28

Copy link
Copy Markdown

looks like it was merged here - #48458

@codinsonn

Copy link
Copy Markdown
Author

Closing this as it seems to have been fixed by #48458 in 697e946 like @exzos28 mentioned

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.FlowNeeds: React Native Team AttentionShared with MetaApplied via automation to indicate that an Issue or Pull Request has been shared with the team.Tech: MonorepoFor PRs that are related to the monorepo infra

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@codinsonn@facebook-github-bot@karpolan@headfire94@necolas@exzos28
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

fix: Remove Flow from @react-native/assets-registry - registry.js - #44002

Closed
codinsonn wants to merge 3 commits into
react:mainfrom
codinsonn:patch-1
Closed

fix: Remove Flow from @react-native/assets-registry - registry.js#44002
codinsonn wants to merge 3 commits into
react:mainfrom
codinsonn:patch-1

Conversation

@codinsonn

@codinsonncodinsonn commented Apr 9, 2024

Copy link
Copy Markdown

Summary

React native shipping Flow types breaks universal apps

In essence:

Next.js does not transpile Flow, yet combining Expo with Next.js is becoming a more common combo

Related issues and Github comments:

It might be a better idea to rewrite the entire @react-native/assets-registry in Typescript instead of Flow. I'm willing to do this myself if you're open for that. But really, as long as Flow goes, it will no longer break universal app setups with Next.js

Changelog:

[GENERAL] [REMOVED] - Fixed @react-native/assets-registry breaking in Next.js due to Flow types

Test Plan

Reproducible by starting a new expo + next.js and adding + using e.g. @bacons/mdx or @expo/vector-icons on the web with Next.js 13+

Fix testable by applying the following patch-package diff:

expo/expo#21623 (comment)

@react-native+assets+1.0.0.patch

diff --git a/node_modules/@react-native/assets/registry.js b/node_modules/@react-native/assets/registry.js
index 088187f..0a384d1 100644
--- a/node_modules/@react-native/assets/registry.js+++ b/node_modules/@react-native/assets/registry.js@@ -10,28 +10,16 @@
'use strict';
-export type PackagerAsset = {- +__packager_asset: boolean,- +fileSystemLocation: string,- +httpServerLocation: string,- +width: ?number,- +height: ?number,- +scales: Array<number>,- +hash: string,- +name: string,- +type: string,- ...-};-const assets: Array<PackagerAsset> = [];+const assets = [];-function registerAsset(asset: PackagerAsset): number {+function registerAsset(asset) {
// `push` returns new array length, so the first asset will
// get id 1 (not 0) to make the value truthy
return assets.push(asset);
}
-function getAssetByID(assetId: number): PackagerAsset {+function getAssetByID(assetId) {
return assets[assetId - 1];
}

@facebook-github-bot

Copy link
Copy Markdown
Contributor

Hi @codinsonn!

Thank you for your pull request and welcome to our community.

Action Required

In order to merge any pull request (code, docs, etc.), we require contributors to sign our Contributor License Agreement, and we don't seem to have one on file for you.

Process

In order for us to review and merge your suggested changes, please sign at https://code.facebook.com/cla. If you are contributing on behalf of someone else (eg your employer), the individual CLA may not be sufficient and your employer may need to sign the corporate CLA.

Once the CLA is signed, our tooling will perform checks and validations. Afterwards, the pull request will be tagged with CLA signed. The tagging process may take up to 1 hour after signing. Please give it that time before contacting us about it.

If you have received this in error or have any questions, please contact us at cla@meta.com. Thanks!

Add `@flow` comment to run automatic tests accurately
@codinsonn

codinsonn commented Apr 9, 2024

Copy link
Copy Markdown
Author

To be fair, if anyone from the Facebook team or React-Native community is willing to spearhead a move away from Flow to Typescript (for at least @react-native/assets-registry), that might be a better solution than merging this PR.

(In which case, feel free to close this one)

@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. Shared with Meta Applied via automation to indicate that an Issue or Pull Request has been shared with the team. labels Apr 9, 2024
@karpolan

Copy link
Copy Markdown

Will somebody fix it? When?!

@headfire94

Copy link
Copy Markdown

@codinsonn this PR can't be merged, see tests failing because other packages depend on flow types from this one. seems like bigger refactoring needed

@necolasnecolas added Flow Needs: React Native Team Attention Tech: Monorepo For PRs that are related to the monorepo infra labels Oct 15, 2024
@necolas

necolas commented Oct 15, 2024

Copy link
Copy Markdown

I don't think we want to remove the flow types from the source code, but when this package is published to npm it should not have type annotations. It looks normalize-colors simply puts the flow types in an accompanying file, so the entry is valid JS https://github.com/facebook/react-native/tree/HEAD/packages/normalize-color

@karpolan

Copy link
Copy Markdown

Does somebody have patch for "react-native": "0.76.1" ?

@karpolan

karpolan commented Nov 13, 2024

Copy link
Copy Markdown

Does somebody have patch for "react-native": "0.76.1" ?

Ok, I did it myself:

/patches/@react-native+assets-registry+0.76.1.patch

diff --git a/node_modules/@react-native/assets-registry/registry.js b/node_modules/@react-native/assets-registry/registry.js
index 64b2735..d31da85 100644
--- a/node_modules/@react-native/assets-registry/registry.js
+++ b/node_modules/@react-native/assets-registry/registry.js
@@ -4,38 +4,39 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
- * @flow strict
- * @format
*/
'use strict';
-export type AssetDestPathResolver = 'android' | 'generic';
+// export type AssetDestPathResolver = 'android' | 'generic';
-export type PackagerAsset = {
- +__packager_asset: boolean,
- +fileSystemLocation: string,
- +httpServerLocation: string,
- +width: ?number,
- +height: ?number,
- +scales: Array<number>,
- +hash: string,
- +name: string,
- +type: string,
- +resolver?: AssetDestPathResolver,
- ...
-};
+// export type PackagerAsset = {
+// +__packager_asset: boolean,
+// +fileSystemLocation: string,
+// +httpServerLocation: string,
+// +width: ?number,
+// +height: ?number,
+// +scales: Array<number>,
+// +hash: string,
+// +name: string,
+// +type: string,
+// +resolver?: AssetDestPathResolver,
+// ...
+// };
-const assets: Array<PackagerAsset> = [];
+// const assets: Array<PackagerAsset> = [];
+const assets = [];
-function registerAsset(asset: PackagerAsset): number {
+// function registerAsset(asset: PackagerAsset): number {
+function registerAsset(asset) {
// `push` returns new array length, so the first asset will
// get id 1 (not 0) to make the value truthy
return assets.push(asset);
}
-function getAssetByID(assetId: number): PackagerAsset {
+// function getAssetByID(assetId: number): PackagerAsset {
+function getAssetByID(assetId) {
return assets[assetId - 1];
}
-module.exports = {registerAsset, getAssetByID};
+module.exports = { registerAsset, getAssetByID };

@codinsonn

Copy link
Copy Markdown
Author

I don't think we want to remove the flow types from the source code, but when this package is published to npm it should not have type annotations. It looks normalize-colors simply puts the flow types in an accompanying file, so the entry is valid JS https://github.com/facebook/react-native/tree/HEAD/packages/normalize-color

That does sound like a better solution than removing flow types or doing a bigger refactor.

I'm all for it.

Until then, I think I'll patch it out in my own projects. (thx @karpolan)

Maybe this PR should be converted into an issue instead?

@exzos28

Copy link
Copy Markdown

looks like it was merged here - #48458

@codinsonn

Copy link
Copy Markdown
Author

Closing this as it seems to have been fixed by #48458 in 697e946 like @exzos28 mentioned

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.FlowNeeds: React Native Team AttentionShared with MetaApplied via automation to indicate that an Issue or Pull Request has been shared with the team.Tech: MonorepoFor PRs that are related to the monorepo infra

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@codinsonn@facebook-github-bot@karpolan@headfire94@necolas@exzos28
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix: Remove Flow from @react-native/assets-registry - registry.js - #44002

Closed
codinsonn wants to merge 3 commits into
react:mainfrom
codinsonn:patch-1
Closed

fix: Remove Flow from @react-native/assets-registry - registry.js#44002
codinsonn wants to merge 3 commits into
react:mainfrom
codinsonn:patch-1

Conversation

@codinsonn

@codinsonncodinsonn commented Apr 9, 2024

Copy link
Copy Markdown

Summary

React native shipping Flow types breaks universal apps

In essence:

Next.js does not transpile Flow, yet combining Expo with Next.js is becoming a more common combo

Related issues and Github comments:

It might be a better idea to rewrite the entire @react-native/assets-registry in Typescript instead of Flow. I'm willing to do this myself if you're open for that. But really, as long as Flow goes, it will no longer break universal app setups with Next.js

Changelog:

[GENERAL] [REMOVED] - Fixed @react-native/assets-registry breaking in Next.js due to Flow types

Test Plan

Reproducible by starting a new expo + next.js and adding + using e.g. @bacons/mdx or @expo/vector-icons on the web with Next.js 13+

Fix testable by applying the following patch-package diff:

expo/expo#21623 (comment)

@react-native+assets+1.0.0.patch

diff --git a/node_modules/@react-native/assets/registry.js b/node_modules/@react-native/assets/registry.js
index 088187f..0a384d1 100644
--- a/node_modules/@react-native/assets/registry.js+++ b/node_modules/@react-native/assets/registry.js@@ -10,28 +10,16 @@
'use strict';
-export type PackagerAsset = {- +__packager_asset: boolean,- +fileSystemLocation: string,- +httpServerLocation: string,- +width: ?number,- +height: ?number,- +scales: Array<number>,- +hash: string,- +name: string,- +type: string,- ...-};-const assets: Array<PackagerAsset> = [];+const assets = [];-function registerAsset(asset: PackagerAsset): number {+function registerAsset(asset) {
// `push` returns new array length, so the first asset will
// get id 1 (not 0) to make the value truthy
return assets.push(asset);
}
-function getAssetByID(assetId: number): PackagerAsset {+function getAssetByID(assetId) {
return assets[assetId - 1];
}

@facebook-github-bot

Copy link
Copy Markdown
Contributor

Hi @codinsonn!

Thank you for your pull request and welcome to our community.

Action Required

In order to merge any pull request (code, docs, etc.), we require contributors to sign our Contributor License Agreement, and we don't seem to have one on file for you.

Process

In order for us to review and merge your suggested changes, please sign at https://code.facebook.com/cla. If you are contributing on behalf of someone else (eg your employer), the individual CLA may not be sufficient and your employer may need to sign the corporate CLA.

Once the CLA is signed, our tooling will perform checks and validations. Afterwards, the pull request will be tagged with CLA signed. The tagging process may take up to 1 hour after signing. Please give it that time before contacting us about it.

If you have received this in error or have any questions, please contact us at cla@meta.com. Thanks!

Add `@flow` comment to run automatic tests accurately
@codinsonn

codinsonn commented Apr 9, 2024

Copy link
Copy Markdown
Author

To be fair, if anyone from the Facebook team or React-Native community is willing to spearhead a move away from Flow to Typescript (for at least @react-native/assets-registry), that might be a better solution than merging this PR.

(In which case, feel free to close this one)

@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. Shared with Meta Applied via automation to indicate that an Issue or Pull Request has been shared with the team. labels Apr 9, 2024
@karpolan

Copy link
Copy Markdown

Will somebody fix it? When?!

@headfire94

Copy link
Copy Markdown

@codinsonn this PR can't be merged, see tests failing because other packages depend on flow types from this one. seems like bigger refactoring needed

@necolasnecolas added Flow Needs: React Native Team Attention Tech: Monorepo For PRs that are related to the monorepo infra labels Oct 15, 2024
@necolas

necolas commented Oct 15, 2024

Copy link
Copy Markdown

I don't think we want to remove the flow types from the source code, but when this package is published to npm it should not have type annotations. It looks normalize-colors simply puts the flow types in an accompanying file, so the entry is valid JS https://github.com/facebook/react-native/tree/HEAD/packages/normalize-color

@karpolan

Copy link
Copy Markdown

Does somebody have patch for "react-native": "0.76.1" ?

@karpolan

karpolan commented Nov 13, 2024

Copy link
Copy Markdown

Does somebody have patch for "react-native": "0.76.1" ?

Ok, I did it myself:

/patches/@react-native+assets-registry+0.76.1.patch

diff --git a/node_modules/@react-native/assets-registry/registry.js b/node_modules/@react-native/assets-registry/registry.js
index 64b2735..d31da85 100644
--- a/node_modules/@react-native/assets-registry/registry.js
+++ b/node_modules/@react-native/assets-registry/registry.js
@@ -4,38 +4,39 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
- * @flow strict
- * @format
*/
'use strict';
-export type AssetDestPathResolver = 'android' | 'generic';
+// export type AssetDestPathResolver = 'android' | 'generic';
-export type PackagerAsset = {
- +__packager_asset: boolean,
- +fileSystemLocation: string,
- +httpServerLocation: string,
- +width: ?number,
- +height: ?number,
- +scales: Array<number>,
- +hash: string,
- +name: string,
- +type: string,
- +resolver?: AssetDestPathResolver,
- ...
-};
+// export type PackagerAsset = {
+// +__packager_asset: boolean,
+// +fileSystemLocation: string,
+// +httpServerLocation: string,
+// +width: ?number,
+// +height: ?number,
+// +scales: Array<number>,
+// +hash: string,
+// +name: string,
+// +type: string,
+// +resolver?: AssetDestPathResolver,
+// ...
+// };
-const assets: Array<PackagerAsset> = [];
+// const assets: Array<PackagerAsset> = [];
+const assets = [];
-function registerAsset(asset: PackagerAsset): number {
+// function registerAsset(asset: PackagerAsset): number {
+function registerAsset(asset) {
// `push` returns new array length, so the first asset will
// get id 1 (not 0) to make the value truthy
return assets.push(asset);
}
-function getAssetByID(assetId: number): PackagerAsset {
+// function getAssetByID(assetId: number): PackagerAsset {
+function getAssetByID(assetId) {
return assets[assetId - 1];
}
-module.exports = {registerAsset, getAssetByID};
+module.exports = { registerAsset, getAssetByID };

@codinsonn

Copy link
Copy Markdown
Author

I don't think we want to remove the flow types from the source code, but when this package is published to npm it should not have type annotations. It looks normalize-colors simply puts the flow types in an accompanying file, so the entry is valid JS https://github.com/facebook/react-native/tree/HEAD/packages/normalize-color

That does sound like a better solution than removing flow types or doing a bigger refactor.

I'm all for it.

Until then, I think I'll patch it out in my own projects. (thx @karpolan)

Maybe this PR should be converted into an issue instead?

@exzos28

Copy link
Copy Markdown

looks like it was merged here - #48458

@codinsonn

Copy link
Copy Markdown
Author

Closing this as it seems to have been fixed by #48458 in 697e946 like @exzos28 mentioned

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.FlowNeeds: React Native Team AttentionShared with MetaApplied via automation to indicate that an Issue or Pull Request has been shared with the team.Tech: MonorepoFor PRs that are related to the monorepo infra

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@codinsonn@facebook-github-bot@karpolan@headfire94@necolas@exzos28
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix: Remove Flow from @react-native/assets-registry - registry.js - #44002

Closed
codinsonn wants to merge 3 commits into
react:mainfrom
codinsonn:patch-1
Closed

fix: Remove Flow from @react-native/assets-registry - registry.js#44002
codinsonn wants to merge 3 commits into
react:mainfrom
codinsonn:patch-1

Conversation

@codinsonn

@codinsonncodinsonn commented Apr 9, 2024

Copy link
Copy Markdown

Summary

React native shipping Flow types breaks universal apps

In essence:

Next.js does not transpile Flow, yet combining Expo with Next.js is becoming a more common combo

Related issues and Github comments:

It might be a better idea to rewrite the entire @react-native/assets-registry in Typescript instead of Flow. I'm willing to do this myself if you're open for that. But really, as long as Flow goes, it will no longer break universal app setups with Next.js

Changelog:

[GENERAL] [REMOVED] - Fixed @react-native/assets-registry breaking in Next.js due to Flow types

Test Plan

Reproducible by starting a new expo + next.js and adding + using e.g. @bacons/mdx or @expo/vector-icons on the web with Next.js 13+

Fix testable by applying the following patch-package diff:

expo/expo#21623 (comment)

@react-native+assets+1.0.0.patch

diff --git a/node_modules/@react-native/assets/registry.js b/node_modules/@react-native/assets/registry.js
index 088187f..0a384d1 100644
--- a/node_modules/@react-native/assets/registry.js+++ b/node_modules/@react-native/assets/registry.js@@ -10,28 +10,16 @@
'use strict';
-export type PackagerAsset = {- +__packager_asset: boolean,- +fileSystemLocation: string,- +httpServerLocation: string,- +width: ?number,- +height: ?number,- +scales: Array<number>,- +hash: string,- +name: string,- +type: string,- ...-};-const assets: Array<PackagerAsset> = [];+const assets = [];-function registerAsset(asset: PackagerAsset): number {+function registerAsset(asset) {
// `push` returns new array length, so the first asset will
// get id 1 (not 0) to make the value truthy
return assets.push(asset);
}
-function getAssetByID(assetId: number): PackagerAsset {+function getAssetByID(assetId) {
return assets[assetId - 1];
}

@facebook-github-bot

Copy link
Copy Markdown
Contributor

Hi @codinsonn!

Thank you for your pull request and welcome to our community.

Action Required

In order to merge any pull request (code, docs, etc.), we require contributors to sign our Contributor License Agreement, and we don't seem to have one on file for you.

Process

In order for us to review and merge your suggested changes, please sign at https://code.facebook.com/cla. If you are contributing on behalf of someone else (eg your employer), the individual CLA may not be sufficient and your employer may need to sign the corporate CLA.

Once the CLA is signed, our tooling will perform checks and validations. Afterwards, the pull request will be tagged with CLA signed. The tagging process may take up to 1 hour after signing. Please give it that time before contacting us about it.

If you have received this in error or have any questions, please contact us at cla@meta.com. Thanks!

Add `@flow` comment to run automatic tests accurately
@codinsonn

codinsonn commented Apr 9, 2024

Copy link
Copy Markdown
Author

To be fair, if anyone from the Facebook team or React-Native community is willing to spearhead a move away from Flow to Typescript (for at least @react-native/assets-registry), that might be a better solution than merging this PR.

(In which case, feel free to close this one)

@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. Shared with Meta Applied via automation to indicate that an Issue or Pull Request has been shared with the team. labels Apr 9, 2024
@karpolan

Copy link
Copy Markdown

Will somebody fix it? When?!

@headfire94

Copy link
Copy Markdown

@codinsonn this PR can't be merged, see tests failing because other packages depend on flow types from this one. seems like bigger refactoring needed

@necolasnecolas added Flow Needs: React Native Team Attention Tech: Monorepo For PRs that are related to the monorepo infra labels Oct 15, 2024
@necolas

necolas commented Oct 15, 2024

Copy link
Copy Markdown

I don't think we want to remove the flow types from the source code, but when this package is published to npm it should not have type annotations. It looks normalize-colors simply puts the flow types in an accompanying file, so the entry is valid JS https://github.com/facebook/react-native/tree/HEAD/packages/normalize-color

@karpolan

Copy link
Copy Markdown

Does somebody have patch for "react-native": "0.76.1" ?

@karpolan

karpolan commented Nov 13, 2024

Copy link
Copy Markdown

Does somebody have patch for "react-native": "0.76.1" ?

Ok, I did it myself:

/patches/@react-native+assets-registry+0.76.1.patch

diff --git a/node_modules/@react-native/assets-registry/registry.js b/node_modules/@react-native/assets-registry/registry.js
index 64b2735..d31da85 100644
--- a/node_modules/@react-native/assets-registry/registry.js
+++ b/node_modules/@react-native/assets-registry/registry.js
@@ -4,38 +4,39 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
- * @flow strict
- * @format
*/
'use strict';
-export type AssetDestPathResolver = 'android' | 'generic';
+// export type AssetDestPathResolver = 'android' | 'generic';
-export type PackagerAsset = {
- +__packager_asset: boolean,
- +fileSystemLocation: string,
- +httpServerLocation: string,
- +width: ?number,
- +height: ?number,
- +scales: Array<number>,
- +hash: string,
- +name: string,
- +type: string,
- +resolver?: AssetDestPathResolver,
- ...
-};
+// export type PackagerAsset = {
+// +__packager_asset: boolean,
+// +fileSystemLocation: string,
+// +httpServerLocation: string,
+// +width: ?number,
+// +height: ?number,
+// +scales: Array<number>,
+// +hash: string,
+// +name: string,
+// +type: string,
+// +resolver?: AssetDestPathResolver,
+// ...
+// };
-const assets: Array<PackagerAsset> = [];
+// const assets: Array<PackagerAsset> = [];
+const assets = [];
-function registerAsset(asset: PackagerAsset): number {
+// function registerAsset(asset: PackagerAsset): number {
+function registerAsset(asset) {
// `push` returns new array length, so the first asset will
// get id 1 (not 0) to make the value truthy
return assets.push(asset);
}
-function getAssetByID(assetId: number): PackagerAsset {
+// function getAssetByID(assetId: number): PackagerAsset {
+function getAssetByID(assetId) {
return assets[assetId - 1];
}
-module.exports = {registerAsset, getAssetByID};
+module.exports = { registerAsset, getAssetByID };

@codinsonn

Copy link
Copy Markdown
Author

I don't think we want to remove the flow types from the source code, but when this package is published to npm it should not have type annotations. It looks normalize-colors simply puts the flow types in an accompanying file, so the entry is valid JS https://github.com/facebook/react-native/tree/HEAD/packages/normalize-color

That does sound like a better solution than removing flow types or doing a bigger refactor.

I'm all for it.

Until then, I think I'll patch it out in my own projects. (thx @karpolan)

Maybe this PR should be converted into an issue instead?

@exzos28

Copy link
Copy Markdown

looks like it was merged here - #48458

@codinsonn

Copy link
Copy Markdown
Author

Closing this as it seems to have been fixed by #48458 in 697e946 like @exzos28 mentioned

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.FlowNeeds: React Native Team AttentionShared with MetaApplied via automation to indicate that an Issue or Pull Request has been shared with the team.Tech: MonorepoFor PRs that are related to the monorepo infra

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

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

fix: Remove Flow from @react-native/assets-registry - registry.js - #44002

Closed
codinsonn wants to merge 3 commits into
react:mainfrom
codinsonn:patch-1
Closed

fix: Remove Flow from @react-native/assets-registry - registry.js#44002
codinsonn wants to merge 3 commits into
react:mainfrom
codinsonn:patch-1

Conversation

@codinsonn

@codinsonncodinsonn commented Apr 9, 2024

Copy link
Copy Markdown

Summary

React native shipping Flow types breaks universal apps

In essence:

Next.js does not transpile Flow, yet combining Expo with Next.js is becoming a more common combo

Related issues and Github comments:

It might be a better idea to rewrite the entire @react-native/assets-registry in Typescript instead of Flow. I'm willing to do this myself if you're open for that. But really, as long as Flow goes, it will no longer break universal app setups with Next.js

Changelog:

[GENERAL] [REMOVED] - Fixed @react-native/assets-registry breaking in Next.js due to Flow types

Test Plan

Reproducible by starting a new expo + next.js and adding + using e.g. @bacons/mdx or @expo/vector-icons on the web with Next.js 13+

Fix testable by applying the following patch-package diff:

expo/expo#21623 (comment)

@react-native+assets+1.0.0.patch

diff --git a/node_modules/@react-native/assets/registry.js b/node_modules/@react-native/assets/registry.js
index 088187f..0a384d1 100644
--- a/node_modules/@react-native/assets/registry.js+++ b/node_modules/@react-native/assets/registry.js@@ -10,28 +10,16 @@
'use strict';
-export type PackagerAsset = {- +__packager_asset: boolean,- +fileSystemLocation: string,- +httpServerLocation: string,- +width: ?number,- +height: ?number,- +scales: Array<number>,- +hash: string,- +name: string,- +type: string,- ...-};-const assets: Array<PackagerAsset> = [];+const assets = [];-function registerAsset(asset: PackagerAsset): number {+function registerAsset(asset) {
// `push` returns new array length, so the first asset will
// get id 1 (not 0) to make the value truthy
return assets.push(asset);
}
-function getAssetByID(assetId: number): PackagerAsset {+function getAssetByID(assetId) {
return assets[assetId - 1];
}

@facebook-github-bot

Copy link
Copy Markdown
Contributor

Hi @codinsonn!

Thank you for your pull request and welcome to our community.

Action Required

In order to merge any pull request (code, docs, etc.), we require contributors to sign our Contributor License Agreement, and we don't seem to have one on file for you.

Process

In order for us to review and merge your suggested changes, please sign at https://code.facebook.com/cla. If you are contributing on behalf of someone else (eg your employer), the individual CLA may not be sufficient and your employer may need to sign the corporate CLA.

Once the CLA is signed, our tooling will perform checks and validations. Afterwards, the pull request will be tagged with CLA signed. The tagging process may take up to 1 hour after signing. Please give it that time before contacting us about it.

If you have received this in error or have any questions, please contact us at cla@meta.com. Thanks!

Add `@flow` comment to run automatic tests accurately
@codinsonn

codinsonn commented Apr 9, 2024

Copy link
Copy Markdown
Author

To be fair, if anyone from the Facebook team or React-Native community is willing to spearhead a move away from Flow to Typescript (for at least @react-native/assets-registry), that might be a better solution than merging this PR.

(In which case, feel free to close this one)

@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. Shared with Meta Applied via automation to indicate that an Issue or Pull Request has been shared with the team. labels Apr 9, 2024
@karpolan

Copy link
Copy Markdown

Will somebody fix it? When?!

@headfire94

Copy link
Copy Markdown

@codinsonn this PR can't be merged, see tests failing because other packages depend on flow types from this one. seems like bigger refactoring needed

@necolasnecolas added Flow Needs: React Native Team Attention Tech: Monorepo For PRs that are related to the monorepo infra labels Oct 15, 2024
@necolas

necolas commented Oct 15, 2024

Copy link
Copy Markdown

I don't think we want to remove the flow types from the source code, but when this package is published to npm it should not have type annotations. It looks normalize-colors simply puts the flow types in an accompanying file, so the entry is valid JS https://github.com/facebook/react-native/tree/HEAD/packages/normalize-color

@karpolan

Copy link
Copy Markdown

Does somebody have patch for "react-native": "0.76.1" ?

@karpolan

karpolan commented Nov 13, 2024

Copy link
Copy Markdown

Does somebody have patch for "react-native": "0.76.1" ?

Ok, I did it myself:

/patches/@react-native+assets-registry+0.76.1.patch

diff --git a/node_modules/@react-native/assets-registry/registry.js b/node_modules/@react-native/assets-registry/registry.js
index 64b2735..d31da85 100644
--- a/node_modules/@react-native/assets-registry/registry.js
+++ b/node_modules/@react-native/assets-registry/registry.js
@@ -4,38 +4,39 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
- * @flow strict
- * @format
*/
'use strict';
-export type AssetDestPathResolver = 'android' | 'generic';
+// export type AssetDestPathResolver = 'android' | 'generic';
-export type PackagerAsset = {
- +__packager_asset: boolean,
- +fileSystemLocation: string,
- +httpServerLocation: string,
- +width: ?number,
- +height: ?number,
- +scales: Array<number>,
- +hash: string,
- +name: string,
- +type: string,
- +resolver?: AssetDestPathResolver,
- ...
-};
+// export type PackagerAsset = {
+// +__packager_asset: boolean,
+// +fileSystemLocation: string,
+// +httpServerLocation: string,
+// +width: ?number,
+// +height: ?number,
+// +scales: Array<number>,
+// +hash: string,
+// +name: string,
+// +type: string,
+// +resolver?: AssetDestPathResolver,
+// ...
+// };
-const assets: Array<PackagerAsset> = [];
+// const assets: Array<PackagerAsset> = [];
+const assets = [];
-function registerAsset(asset: PackagerAsset): number {
+// function registerAsset(asset: PackagerAsset): number {
+function registerAsset(asset) {
// `push` returns new array length, so the first asset will
// get id 1 (not 0) to make the value truthy
return assets.push(asset);
}
-function getAssetByID(assetId: number): PackagerAsset {
+// function getAssetByID(assetId: number): PackagerAsset {
+function getAssetByID(assetId) {
return assets[assetId - 1];
}
-module.exports = {registerAsset, getAssetByID};
+module.exports = { registerAsset, getAssetByID };

@codinsonn

Copy link
Copy Markdown
Author

I don't think we want to remove the flow types from the source code, but when this package is published to npm it should not have type annotations. It looks normalize-colors simply puts the flow types in an accompanying file, so the entry is valid JS https://github.com/facebook/react-native/tree/HEAD/packages/normalize-color

That does sound like a better solution than removing flow types or doing a bigger refactor.

I'm all for it.

Until then, I think I'll patch it out in my own projects. (thx @karpolan)

Maybe this PR should be converted into an issue instead?

@exzos28

Copy link
Copy Markdown

looks like it was merged here - #48458

@codinsonn

Copy link
Copy Markdown
Author

Closing this as it seems to have been fixed by #48458 in 697e946 like @exzos28 mentioned

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.FlowNeeds: React Native Team AttentionShared with MetaApplied via automation to indicate that an Issue or Pull Request has been shared with the team.Tech: MonorepoFor PRs that are related to the monorepo infra

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@codinsonn@facebook-github-bot@karpolan@headfire94@necolas@exzos28