@office-iss/react-native-win32 0.71.12 → 0.71.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.json +31 -1
- package/CHANGELOG.md +20 -4
- package/Libraries/Image/assetPaths.js +36 -0
- package/Libraries/Image/resolveAssetSource.win32.js +18 -5
- package/Libraries/Pressability/Pressability.win32.js +28 -6
- package/metro.config.js +2 -0
- package/metroShortPathAssetDataPlugin.js +15 -0
- package/overrides.json +4 -0
- package/package.json +1 -1
- package/react-native.config.js +2 -0
- package/saveAssetPlugin.js +45 -0
package/CHANGELOG.json
CHANGED
|
@@ -2,7 +2,37 @@
|
|
|
2
2
|
"name": "@office-iss/react-native-win32",
|
|
3
3
|
"entries": [
|
|
4
4
|
{
|
|
5
|
-
"date": "
|
|
5
|
+
"date": "Fri, 11 Aug 2023 00:25:54 GMT",
|
|
6
|
+
"tag": "@office-iss/react-native-win32_v0.71.14",
|
|
7
|
+
"version": "0.71.14",
|
|
8
|
+
"comments": {
|
|
9
|
+
"patch": [
|
|
10
|
+
{
|
|
11
|
+
"author": "30809111+acoates-ms@users.noreply.github.com",
|
|
12
|
+
"package": "@office-iss/react-native-win32",
|
|
13
|
+
"commit": "819530506ec8814c704ca77907c632b75fc9d451",
|
|
14
|
+
"comment": "Add saveAssetPlugin to fix long path assets"
|
|
15
|
+
}
|
|
16
|
+
]
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"date": "Fri, 04 Aug 2023 23:49:15 GMT",
|
|
21
|
+
"tag": "@office-iss/react-native-win32_v0.71.13",
|
|
22
|
+
"version": "0.71.13",
|
|
23
|
+
"comments": {
|
|
24
|
+
"patch": [
|
|
25
|
+
{
|
|
26
|
+
"author": "email not defined",
|
|
27
|
+
"package": "@office-iss/react-native-win32",
|
|
28
|
+
"commit": "958bd7b3a1d65a3cd4076bed410c0cb1b5675740",
|
|
29
|
+
"comment": "add isDefaultButton check to win32"
|
|
30
|
+
}
|
|
31
|
+
]
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"date": "Thu, 06 Jul 2023 20:21:35 GMT",
|
|
6
36
|
"tag": "@office-iss/react-native-win32_v0.71.12",
|
|
7
37
|
"version": "0.71.12",
|
|
8
38
|
"comments": {
|
package/CHANGELOG.md
CHANGED
|
@@ -1,17 +1,33 @@
|
|
|
1
1
|
# Change Log - @office-iss/react-native-win32
|
|
2
2
|
|
|
3
|
-
This log was last generated on
|
|
3
|
+
This log was last generated on Fri, 11 Aug 2023 00:25:54 GMT and should not be manually modified.
|
|
4
4
|
|
|
5
5
|
<!-- Start content -->
|
|
6
6
|
|
|
7
|
-
## 0.71.
|
|
7
|
+
## 0.71.14
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Fri, 11 Aug 2023 00:25:54 GMT
|
|
10
10
|
|
|
11
11
|
### Patches
|
|
12
12
|
|
|
13
|
-
-
|
|
13
|
+
- Add saveAssetPlugin to fix long path assets (30809111+acoates-ms@users.noreply.github.com)
|
|
14
14
|
|
|
15
|
+
## 0.71.13
|
|
16
|
+
|
|
17
|
+
Fri, 04 Aug 2023 23:49:15 GMT
|
|
18
|
+
|
|
19
|
+
### Patches
|
|
20
|
+
|
|
21
|
+
- add isDefaultButton check to win32 (email not defined)
|
|
22
|
+
|
|
23
|
+
## 0.71.12
|
|
24
|
+
|
|
25
|
+
Thu, 06 Jul 2023 20:21:35 GMT
|
|
26
|
+
|
|
27
|
+
### Patches
|
|
28
|
+
|
|
29
|
+
- Update core 0.71.6 -> 0.71.12 (30809111+acoates-ms@users.noreply.github.com)
|
|
30
|
+
|
|
15
31
|
## 0.71.11
|
|
16
32
|
|
|
17
33
|
Fri, 23 Jun 2023 18:19:55 GMT
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Microsoft Corporation.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*
|
|
5
|
+
* @flow strict-local
|
|
6
|
+
* @format
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
'use strict';
|
|
10
|
+
|
|
11
|
+
// Some windows machines may not have long paths enabled
|
|
12
|
+
// https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation
|
|
13
|
+
// Assets in nested node_modules (common when using pnpm) - end up creating very long paths
|
|
14
|
+
// Using this function we shorten longer paths to prevent paths from hitting the path limit
|
|
15
|
+
function ensureShortPath(str: string): string {
|
|
16
|
+
if (str.length < 40) return str;
|
|
17
|
+
|
|
18
|
+
const assetsPrefix = 'assets/';
|
|
19
|
+
|
|
20
|
+
if (!str.startsWith(assetsPrefix)) {
|
|
21
|
+
console.warn(`Unexpected asset uri - ${str} may not load correctly.`);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const postStr = str.slice(assetsPrefix.length);
|
|
25
|
+
var hash = 0,
|
|
26
|
+
i,
|
|
27
|
+
chr;
|
|
28
|
+
for (i = 0; i < postStr.length; i++) {
|
|
29
|
+
chr = postStr.charCodeAt(i);
|
|
30
|
+
hash = (hash << 5) - hash + chr;
|
|
31
|
+
hash |= 0; // Convert to 32bit integer
|
|
32
|
+
}
|
|
33
|
+
return assetsPrefix + hash.toString();
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
module.exports = ensureShortPath;
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
const resolveAssetSource = require('./resolveAssetSource.js'); // Get base impl
|
|
12
12
|
const Platform = require('../Utilities/Platform');
|
|
13
|
+
const ensureShortPath = require('./assetPaths.js');
|
|
13
14
|
|
|
14
15
|
type IPackagerAsset = {
|
|
15
16
|
__packager_asset: boolean,
|
|
@@ -56,7 +57,7 @@ class AssetResolverLateScaleResolution {
|
|
|
56
57
|
*/
|
|
57
58
|
_scaledAssetURLInBundle() {
|
|
58
59
|
const path = this._resolver.bundleUrl || 'file://';
|
|
59
|
-
return this._fromSource(path + this._getAssetPath());
|
|
60
|
+
return this._fromSource(path + this._getAssetPath(true));
|
|
60
61
|
}
|
|
61
62
|
|
|
62
63
|
/**
|
|
@@ -66,7 +67,7 @@ class AssetResolverLateScaleResolution {
|
|
|
66
67
|
_assetServerURL() {
|
|
67
68
|
return this._fromSource(
|
|
68
69
|
this._resolver.serverUrl +
|
|
69
|
-
this._getAssetPath() +
|
|
70
|
+
this._getAssetPath(false) +
|
|
70
71
|
'?platform=' +
|
|
71
72
|
Platform.OS +
|
|
72
73
|
'&hash=' +
|
|
@@ -77,8 +78,8 @@ class AssetResolverLateScaleResolution {
|
|
|
77
78
|
/**
|
|
78
79
|
* Returns a path like 'assets/AwesomeModule/icon.png'
|
|
79
80
|
*/
|
|
80
|
-
_getAssetPath(): string {
|
|
81
|
-
const assetDir = this._getBasePath();
|
|
81
|
+
_getAssetPath(local: boolean): string {
|
|
82
|
+
const assetDir = this._getBasePath(local);
|
|
82
83
|
return (
|
|
83
84
|
assetDir +
|
|
84
85
|
'/' +
|
|
@@ -88,7 +89,19 @@ class AssetResolverLateScaleResolution {
|
|
|
88
89
|
);
|
|
89
90
|
}
|
|
90
91
|
|
|
91
|
-
_getBasePath() {
|
|
92
|
+
_getBasePath(local: boolean) {
|
|
93
|
+
if (local) {
|
|
94
|
+
const safePath = this._resolver.asset.httpServerLocation
|
|
95
|
+
.substr(1)
|
|
96
|
+
.replace(/\.\.\//g, '_');
|
|
97
|
+
// If this asset was created with the newer saveAssetPlugin, then we should shorten the path
|
|
98
|
+
// This conditional is added to allow back compat of older bundles which might have been created without the saveAssetPlugin
|
|
99
|
+
if (this._resolver.asset.__useShortPath) {
|
|
100
|
+
return ensureShortPath(safePath);
|
|
101
|
+
}
|
|
102
|
+
return safePath;
|
|
103
|
+
}
|
|
104
|
+
|
|
92
105
|
let basePath = this._resolver.asset.httpServerLocation;
|
|
93
106
|
if (basePath[0] === '/') {
|
|
94
107
|
basePath = basePath.substr(1);
|
|
@@ -427,6 +427,7 @@ export default class Pressability {
|
|
|
427
427
|
|}>;
|
|
428
428
|
_touchActivateTime: ?number;
|
|
429
429
|
_touchState: TouchState = 'NOT_RESPONDER';
|
|
430
|
+
_isKeyDown: boolean = false;
|
|
430
431
|
|
|
431
432
|
constructor(config: PressabilityConfig) {
|
|
432
433
|
this.configure(config);
|
|
@@ -468,6 +469,7 @@ export default class Pressability {
|
|
|
468
469
|
if (onBlur != null) {
|
|
469
470
|
onBlur(event);
|
|
470
471
|
}
|
|
472
|
+
this._isKeyDown = false;
|
|
471
473
|
},
|
|
472
474
|
onFocus: (event: FocusEvent): void => {
|
|
473
475
|
const {onFocus} = this._config;
|
|
@@ -596,7 +598,8 @@ export default class Pressability {
|
|
|
596
598
|
(event.nativeEvent.code === 'Space' ||
|
|
597
599
|
event.nativeEvent.code === 'Enter' ||
|
|
598
600
|
event.nativeEvent.code === 'GamepadA') &&
|
|
599
|
-
event.defaultPrevented !== true
|
|
601
|
+
event.defaultPrevented !== true &&
|
|
602
|
+
this._isKeyDown
|
|
600
603
|
) {
|
|
601
604
|
const {onPressOut, onPress} = this._config;
|
|
602
605
|
// $FlowFixMe: PressEvents don't mesh with keyboarding APIs. Keep legacy behavior of passing KeyEvents instead
|
|
@@ -604,6 +607,8 @@ export default class Pressability {
|
|
|
604
607
|
// $FlowFixMe: PressEvents don't mesh with keyboarding APIs. Keep legacy behavior of passing KeyEvents instead
|
|
605
608
|
onPress && onPress(event);
|
|
606
609
|
}
|
|
610
|
+
// Native windows app clears the key pressed state when another key press interrupts the current
|
|
611
|
+
this._isKeyDown = false;
|
|
607
612
|
},
|
|
608
613
|
onKeyDown: (event: KeyEvent): void => {
|
|
609
614
|
const {onKeyDown} = this._config;
|
|
@@ -616,6 +621,7 @@ export default class Pressability {
|
|
|
616
621
|
event.defaultPrevented !== true
|
|
617
622
|
) {
|
|
618
623
|
const {onPressIn} = this._config;
|
|
624
|
+
this._isKeyDown = true;
|
|
619
625
|
// $FlowFixMe: PressEvents don't mesh with keyboarding APIs. Keep legacy behavior of passing KeyEvents instead
|
|
620
626
|
onPressIn && onPressIn(event);
|
|
621
627
|
}
|
|
@@ -780,6 +786,12 @@ export default class Pressability {
|
|
|
780
786
|
}
|
|
781
787
|
}
|
|
782
788
|
|
|
789
|
+
// [Win32]
|
|
790
|
+
// $FlowFixMe - button typing
|
|
791
|
+
_isDefaultPressButton(button): boolean {
|
|
792
|
+
return !button; // Treat 0 or undefined as default press
|
|
793
|
+
}
|
|
794
|
+
|
|
783
795
|
/**
|
|
784
796
|
* Performs a transition between touchable states and identify any activations
|
|
785
797
|
* or deactivations (and callback invocations).
|
|
@@ -808,7 +820,10 @@ export default class Pressability {
|
|
|
808
820
|
|
|
809
821
|
if (isPressInSignal(prevState) && signal === 'LONG_PRESS_DETECTED') {
|
|
810
822
|
const {onLongPress} = this._config;
|
|
811
|
-
if (
|
|
823
|
+
if (
|
|
824
|
+
onLongPress != null &&
|
|
825
|
+
this._isDefaultPressButton(getTouchFromPressEvent(event).button)
|
|
826
|
+
) {
|
|
812
827
|
onLongPress(event);
|
|
813
828
|
}
|
|
814
829
|
}
|
|
@@ -829,7 +844,11 @@ export default class Pressability {
|
|
|
829
844
|
this._deactivate(event);
|
|
830
845
|
}
|
|
831
846
|
const {onLongPress, onPress, android_disableSound} = this._config;
|
|
832
|
-
|
|
847
|
+
|
|
848
|
+
if (
|
|
849
|
+
onPress != null &&
|
|
850
|
+
this._isDefaultPressButton(getTouchFromPressEvent(event).button)
|
|
851
|
+
) {
|
|
833
852
|
const isPressCanceledByLongPress =
|
|
834
853
|
onLongPress != null &&
|
|
835
854
|
prevState === 'RESPONDER_ACTIVE_LONG_PRESS_IN' &&
|
|
@@ -848,17 +867,20 @@ export default class Pressability {
|
|
|
848
867
|
|
|
849
868
|
_activate(event: PressEvent): void {
|
|
850
869
|
const {onPressIn} = this._config;
|
|
851
|
-
const {pageX, pageY} = getTouchFromPressEvent(event);
|
|
870
|
+
const {pageX, pageY, button} = getTouchFromPressEvent(event);
|
|
852
871
|
this._touchActivatePosition = {pageX, pageY};
|
|
853
872
|
this._touchActivateTime = Date.now();
|
|
854
|
-
if (onPressIn != null) {
|
|
873
|
+
if (onPressIn != null && this._isDefaultPressButton(button)) {
|
|
855
874
|
onPressIn(event);
|
|
856
875
|
}
|
|
857
876
|
}
|
|
858
877
|
|
|
859
878
|
_deactivate(event: PressEvent): void {
|
|
860
879
|
const {onPressOut} = this._config;
|
|
861
|
-
if (
|
|
880
|
+
if (
|
|
881
|
+
onPressOut != null &&
|
|
882
|
+
this._isDefaultPressButton(getTouchFromPressEvent(event).button)
|
|
883
|
+
) {
|
|
862
884
|
const minPressDuration = normalizeDelay(
|
|
863
885
|
this._config.minPressDuration,
|
|
864
886
|
0,
|
package/metro.config.js
CHANGED
|
@@ -14,3 +14,5 @@ if (
|
|
|
14
14
|
|
|
15
15
|
const {makeMetroConfig} = require('@rnw-scripts/metro-dev-config');
|
|
16
16
|
module.exports = makeMetroConfig();
|
|
17
|
+
// Enable this when RN CLI gets support for saveAssetPlugins: https://github.com/react-native-community/cli/pull/2002
|
|
18
|
+
// module.exports.transformer.assetPlugins = [require.resolve('./metroShortPathAssetDataPlugin.js')];
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
/**
|
|
3
|
+
* @typedef {import("metro").AssetData} AssetData;
|
|
4
|
+
**/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @param {AssetData & {__useShortPath: boolean}} asset
|
|
8
|
+
* @returns {Promise<AssetData>}
|
|
9
|
+
*/
|
|
10
|
+
async function metroShortPathAssetDataPlugin(asset) {
|
|
11
|
+
asset.__useShortPath = true;
|
|
12
|
+
return Promise.resolve(asset);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
module.exports = metroShortPathAssetDataPlugin;
|
package/overrides.json
CHANGED
|
@@ -221,6 +221,10 @@
|
|
|
221
221
|
"baseHash": "37908d71eb9a61c619f700795ff2d692410c5a57",
|
|
222
222
|
"issue": 5170
|
|
223
223
|
},
|
|
224
|
+
{
|
|
225
|
+
"type": "platform",
|
|
226
|
+
"file": "src/Libraries/Image/assetPaths.js"
|
|
227
|
+
},
|
|
224
228
|
{
|
|
225
229
|
"type": "derived",
|
|
226
230
|
"file": "src/Libraries/Image/Image.win32.js",
|
package/package.json
CHANGED
package/react-native.config.js
CHANGED
|
@@ -7,6 +7,8 @@ module.exports = {
|
|
|
7
7
|
projectConfig: (projectRoot, projectParams) => null,
|
|
8
8
|
dependencyConfig: (projectRoot, dependencyParams) => null,
|
|
9
9
|
npmPackageName: '@office-iss/react-native-win32',
|
|
10
|
+
// Enable once CLI config supports it - https://github.com/react-native-community/cli/pull/2002
|
|
11
|
+
// saveAssetsPlugin: '@office-iss/react-native-win32/saveAssetPlugin'
|
|
10
12
|
},
|
|
11
13
|
},
|
|
12
14
|
};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
const path = require('path');
|
|
3
|
+
const ensureShortPath = require('./Libraries/Image/assetPaths');
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @typedef {import("metro").AssetData} AssetData;
|
|
7
|
+
**/
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @param {AssetData} asset
|
|
11
|
+
* @param {number} scale
|
|
12
|
+
* @returns {string}
|
|
13
|
+
*/
|
|
14
|
+
function getAssetDestPath(asset, scale) {
|
|
15
|
+
const suffix = scale === 1 ? '' : `@${scale}x`;
|
|
16
|
+
const fileName = `${asset.name + suffix}.${asset.type}`;
|
|
17
|
+
return path.join(
|
|
18
|
+
// Assets can have relative paths outside of the project root.
|
|
19
|
+
// Replace `../` with `_` to make sure they don't end up outside of
|
|
20
|
+
// the expected assets directory.
|
|
21
|
+
ensureShortPath(asset.httpServerLocation.substr(1).replace(/\.\.\//g, '_')),
|
|
22
|
+
fileName,
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* @param {ReadonlyArray<AssetData>} assets
|
|
28
|
+
* @param {string} _platform
|
|
29
|
+
* @param {string | undefined} _assetsDest
|
|
30
|
+
* @param {string | undefined} _assetCatalogDest
|
|
31
|
+
* @param {(asset: AssetData, allowedScales: number[] | undefined, getAssetDestPath: (asset: AssetData, scale: number) => string) => void} addAssetToCopy
|
|
32
|
+
*/
|
|
33
|
+
function saveAssetsWin32(
|
|
34
|
+
assets,
|
|
35
|
+
_platform,
|
|
36
|
+
_assetsDest,
|
|
37
|
+
_assetCatalogDest,
|
|
38
|
+
addAssetToCopy,
|
|
39
|
+
) {
|
|
40
|
+
assets.forEach((asset) =>
|
|
41
|
+
addAssetToCopy(asset, undefined, getAssetDestPath),
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
module.exports = saveAssetsWin32;
|