@expo/fingerprint 0.4.1 → 0.6.0
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/README.md +60 -6
- package/bin/cli.js +26 -5
- package/build/sourcer/Bare.js +13 -7
- package/build/sourcer/Bare.js.map +1 -1
- package/package.json +16 -9
- package/.eslintignore +0 -1
- package/CHANGELOG.md +0 -55
- package/__mocks__/@expo/spawn-async.ts +0 -30
- package/__mocks__/fs/promises.ts +0 -17
- package/__mocks__/fs.ts +0 -2
- package/__mocks__/resolve-from.ts +0 -24
- package/babel.config.js +0 -6
- package/e2e/__tests__/__snapshots__/managed-test.ts.snap +0 -242
- package/e2e/__tests__/bare-test.ts +0 -72
- package/e2e/__tests__/managed-test.ts +0 -165
- package/e2e/jest.config.js +0 -11
- package/jest.config.js +0 -10
- package/scripts/createFixture.ts +0 -81
- package/src/Dedup.ts +0 -97
- package/src/Fingerprint.ts +0 -60
- package/src/Fingerprint.types.ts +0 -110
- package/src/Options.ts +0 -81
- package/src/Sort.ts +0 -22
- package/src/__tests__/Dedup-test.ts +0 -177
- package/src/__tests__/Fingerprint-test.ts +0 -143
- package/src/__tests__/Sort-test.ts +0 -56
- package/src/hash/Hash.ts +0 -203
- package/src/hash/__tests__/Hash-test.ts +0 -238
- package/src/index.ts +0 -2
- package/src/sourcer/Bare.ts +0 -115
- package/src/sourcer/Expo.ts +0 -223
- package/src/sourcer/ExpoConfigLoader.ts +0 -84
- package/src/sourcer/PatchPackage.ts +0 -18
- package/src/sourcer/Sourcer.ts +0 -58
- package/src/sourcer/Utils.ts +0 -62
- package/src/sourcer/__tests__/Bare-test.ts +0 -88
- package/src/sourcer/__tests__/Expo-test.ts +0 -305
- package/src/sourcer/__tests__/PatchPackage-test.ts +0 -57
- package/src/sourcer/__tests__/Sourcer-test.ts +0 -21
- package/src/sourcer/__tests__/Utils-test.ts +0 -41
- package/src/sourcer/__tests__/__snapshots__/Bare-test.ts.snap +0 -21
- package/src/sourcer/__tests__/__snapshots__/Expo-test.ts.snap +0 -139
- package/src/sourcer/__tests__/fixtures/BareReactNative70Project.json +0 -47
- package/src/sourcer/__tests__/fixtures/ExpoAutolinkingAndroid.json +0 -82
- package/src/sourcer/__tests__/fixtures/ExpoAutolinkingIos.json +0 -114
- package/src/sourcer/__tests__/fixtures/ExpoManaged47Project.json +0 -6
- package/src/sourcer/__tests__/fixtures/PatchPackage.json +0 -4
- package/src/sourcer/__tests__/fixtures/RncliAutoLinking.json +0 -165
- package/src/utils/Path.ts +0 -26
- package/src/utils/Profile.ts +0 -47
- package/src/utils/__tests__/Path-test.ts +0 -36
- package/src/utils/__tests__/Profile-test.ts +0 -11
- package/tsconfig.json +0 -9
package/README.md
CHANGED
|
@@ -2,7 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
A library to generate a fingerprint from a React Native project
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Table of Contents
|
|
6
|
+
|
|
7
|
+
* [API Usage](#api-usage)
|
|
8
|
+
* [CLI Usage](#cli-usage)
|
|
9
|
+
* [Customizations](#customizations)
|
|
10
|
+
* [Limitations](#limitations)
|
|
11
|
+
|
|
12
|
+
## API Usage
|
|
6
13
|
|
|
7
14
|
```ts
|
|
8
15
|
import * as Fingerprint from '@expo/fingerprint';
|
|
@@ -10,10 +17,14 @@ import * as Fingerprint from '@expo/fingerprint';
|
|
|
10
17
|
await Fingerprint.createFingerprintAsync('/projectRoot');
|
|
11
18
|
```
|
|
12
19
|
|
|
13
|
-
###
|
|
20
|
+
### createFingerprintAsync
|
|
14
21
|
|
|
15
22
|
Create a fingerprint from project
|
|
16
23
|
|
|
24
|
+
```ts
|
|
25
|
+
function createFingerprintAsync(projectRoot: string, options?: Options): Promise<Fingerprint>;
|
|
26
|
+
```
|
|
27
|
+
|
|
17
28
|
Example:
|
|
18
29
|
|
|
19
30
|
```ts
|
|
@@ -47,10 +58,14 @@ console.log(fingerprint);
|
|
|
47
58
|
}
|
|
48
59
|
```
|
|
49
60
|
|
|
50
|
-
###
|
|
61
|
+
### createProjectHashAsync
|
|
51
62
|
|
|
52
63
|
Create a native hash value from project
|
|
53
64
|
|
|
65
|
+
```ts
|
|
66
|
+
function createProjectHashAsync(projectRoot: string, options?: Options): Promise<string>;
|
|
67
|
+
```
|
|
68
|
+
|
|
54
69
|
Example:
|
|
55
70
|
|
|
56
71
|
```ts
|
|
@@ -62,9 +77,13 @@ console.log(hash);
|
|
|
62
77
|
bf8a3b08935f056270b1688333b02f1ef5fa25bf
|
|
63
78
|
```
|
|
64
79
|
|
|
65
|
-
###
|
|
80
|
+
### diffFingerprintChangesAsync
|
|
66
81
|
|
|
67
|
-
|
|
82
|
+
Diff the given `fingerprint` with the current project fingerprint state
|
|
83
|
+
|
|
84
|
+
```ts
|
|
85
|
+
function diffFingerprintChangesAsync(fingerprint: Fingerprint, projectRoot: string, options?: Options): Promise<FingerprintSource[]>;
|
|
86
|
+
```
|
|
68
87
|
|
|
69
88
|
Example:
|
|
70
89
|
|
|
@@ -113,13 +132,48 @@ console.log(result);
|
|
|
113
132
|
]
|
|
114
133
|
```
|
|
115
134
|
|
|
135
|
+
### diffFingerprints
|
|
136
|
+
|
|
137
|
+
Find the diff between two fingerprints
|
|
138
|
+
|
|
139
|
+
```ts
|
|
140
|
+
function diffFingerprints(fingerprint1: Fingerprint, fingerprint2: Fingerprint): FingerprintSource[];
|
|
141
|
+
```
|
|
142
|
+
|
|
116
143
|
## CLI Usage
|
|
117
144
|
|
|
145
|
+
### Generate a fingerprint for a given project
|
|
146
|
+
|
|
118
147
|
`npx @expo/fingerprint /path/to/projectRoot`
|
|
119
148
|
|
|
149
|
+
### Generate a fingerprint for a given project and write it to a file
|
|
150
|
+
|
|
151
|
+
`npx @expo/fingerprint /path/to/projectRoot > fingerprint.json`
|
|
152
|
+
|
|
153
|
+
### Compare a fingerprint with the current project state
|
|
154
|
+
|
|
155
|
+
`npx @expo/fingerprint /path/to/projectRoot fingerprint.json`
|
|
156
|
+
|
|
157
|
+
## Customizations
|
|
158
|
+
|
|
159
|
+
### Include or exclude extra files in the **.fingerprintignore** file
|
|
160
|
+
|
|
161
|
+
Our default ignore paths, found here [`DEFAULT_IGNORE_PATHS`](https://github.com/expo/expo/blob/main/packages/%40expo/fingerprint/src/Options.ts#L9), make hashing fast and keep hashing results stable. If the default setup does not fit your workflow, you can add a **.fingerprintignore** file in your project root. It works like [**.gitignore**](https://git-scm.com/docs/gitignore#_pattern_format) but with some slight differences: We use `minimatch` for pattern matching with the [limitations](https://github.com/expo/expo/blob/9b9133c96f209b0616d1796aadae28913f8d012f/packages/%40expo/fingerprint/src/Fingerprint.types.ts#L46-L55).
|
|
162
|
+
|
|
163
|
+
Here's how to use **.fingerprintignore**: To skip a whole folder but keep some files, you can do this:
|
|
164
|
+
|
|
165
|
+
```
|
|
166
|
+
# Ignore the entire /app/ios folder
|
|
167
|
+
/app/ios/**/*
|
|
168
|
+
|
|
169
|
+
# But still keep /app/ios/Podfile and /app/ios/Podfile.lock
|
|
170
|
+
!/app/ios/Podfile
|
|
171
|
+
!/app/ios/Podfile.lock
|
|
172
|
+
```
|
|
173
|
+
|
|
120
174
|
## Limitations
|
|
121
175
|
|
|
122
|
-
|
|
176
|
+
### Limited support for [config-plugins raw functions](https://docs.expo.dev/config-plugins/plugins-and-mods/#raw-functions)
|
|
123
177
|
|
|
124
178
|
When using config-plugins with raw functions, it's essential to be aware of certain limitations, particularly in the context of fingerprinting. Expo makes its best effort to generate fingerprints for changes made through config-plugins; however, raw functions pose specific challenges. Raw functions are not serializable as fingerprints, which means they cannot be directly used for generating unique hashes.
|
|
125
179
|
|
package/bin/cli.js
CHANGED
|
@@ -1,24 +1,45 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
const path = require('path');
|
|
3
|
+
const fs = require('fs');
|
|
3
4
|
|
|
4
5
|
let Fingerprint;
|
|
5
6
|
try {
|
|
6
7
|
Fingerprint = require('@expo/fingerprint');
|
|
7
|
-
} catch {}
|
|
8
|
+
} catch { }
|
|
8
9
|
if (!Fingerprint) {
|
|
9
10
|
Fingerprint = require(path.join(__dirname, '..', 'build', 'index'));
|
|
10
11
|
}
|
|
11
12
|
|
|
12
13
|
(async () => {
|
|
13
|
-
if (process.argv.length !== 3) {
|
|
14
|
-
console.log(`Usage: ${path.basename(process.argv[1])} projectRoot`);
|
|
14
|
+
if (process.argv.length !== 3 && process.argv.length !== 4) {
|
|
15
|
+
console.log(`Usage: ${path.basename(process.argv[1])} projectRoot [fingerprintFileToDiff]`);
|
|
15
16
|
process.exit(1);
|
|
16
17
|
}
|
|
18
|
+
|
|
19
|
+
let comparatorFingerprint;
|
|
20
|
+
if (process.argv.length === 4) {
|
|
21
|
+
const comparator = process.argv[3];
|
|
22
|
+
try {
|
|
23
|
+
comparatorFingerprint = JSON.parse(fs.readFileSync(comparator));
|
|
24
|
+
} catch (e) {
|
|
25
|
+
console.log(`Unable to diff with fingerprint file ${comparator}: ${e.message}`);
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
17
30
|
const projectRoot = process.argv[2];
|
|
18
31
|
|
|
19
32
|
try {
|
|
20
|
-
|
|
21
|
-
|
|
33
|
+
if (comparatorFingerprint) {
|
|
34
|
+
const diff = await Fingerprint.diffFingerprintChangesAsync(
|
|
35
|
+
comparatorFingerprint,
|
|
36
|
+
projectRoot
|
|
37
|
+
);
|
|
38
|
+
console.log(JSON.stringify(diff, null, 2));
|
|
39
|
+
} else {
|
|
40
|
+
const fingerprint = await Fingerprint.createFingerprintAsync(projectRoot);
|
|
41
|
+
console.log(JSON.stringify(fingerprint, null, 2));
|
|
42
|
+
}
|
|
22
43
|
// console.log(fingerprint.hash);
|
|
23
44
|
} catch (e) {
|
|
24
45
|
console.error('Uncaught Error', e);
|
package/build/sourcer/Bare.js
CHANGED
|
@@ -74,11 +74,16 @@ async function getRncliAutolinkingSourcesAsync(projectRoot, options) {
|
|
|
74
74
|
const reasons = ['bareRncliAutolinking'];
|
|
75
75
|
const autolinkingConfig = {};
|
|
76
76
|
for (const [depName, depData] of Object.entries(config.dependencies)) {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
77
|
+
try {
|
|
78
|
+
stripRncliAutolinkingAbsolutePaths(depData, root);
|
|
79
|
+
const filePath = depData.root;
|
|
80
|
+
debug(`Adding react-native-cli autolinking dir - ${chalk_1.default.dim(filePath)}`);
|
|
81
|
+
results.push({ type: 'dir', filePath, reasons });
|
|
82
|
+
autolinkingConfig[depName] = depData;
|
|
83
|
+
}
|
|
84
|
+
catch (e) {
|
|
85
|
+
debug(chalk_1.default.red(`Error adding react-native-cli autolinking dir - ${depName}.\n${e}`));
|
|
86
|
+
}
|
|
82
87
|
}
|
|
83
88
|
results.push({
|
|
84
89
|
type: 'contents',
|
|
@@ -88,7 +93,8 @@ async function getRncliAutolinkingSourcesAsync(projectRoot, options) {
|
|
|
88
93
|
});
|
|
89
94
|
return results;
|
|
90
95
|
}
|
|
91
|
-
catch {
|
|
96
|
+
catch (e) {
|
|
97
|
+
debug(chalk_1.default.red(`Error adding react-native-cli autolinking sources.\n${e}`));
|
|
92
98
|
return [];
|
|
93
99
|
}
|
|
94
100
|
}
|
|
@@ -98,7 +104,7 @@ function stripRncliAutolinkingAbsolutePaths(dependency, root) {
|
|
|
98
104
|
const dependencyRoot = dependency.root;
|
|
99
105
|
dependency.root = path_1.default.relative(root, dependencyRoot);
|
|
100
106
|
for (const platformData of Object.values(dependency.platforms)) {
|
|
101
|
-
for (const [key, value] of Object.entries(platformData)) {
|
|
107
|
+
for (const [key, value] of Object.entries(platformData ?? {})) {
|
|
102
108
|
platformData[key] = value.startsWith?.(dependencyRoot) ? path_1.default.relative(root, value) : value;
|
|
103
109
|
}
|
|
104
110
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Bare.js","sourceRoot":"","sources":["../../src/sourcer/Bare.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Bare.js","sourceRoot":"","sources":["../../src/sourcer/Bare.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,21 +1,27 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@expo/fingerprint",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "A library to generate a fingerprint from a React Native project",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"types": "build/index.d.ts",
|
|
7
7
|
"scripts": {
|
|
8
|
-
"
|
|
9
|
-
"
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
"test": "
|
|
14
|
-
"test:e2e": "yarn prepare &&
|
|
8
|
+
"build": "expo-module tsc",
|
|
9
|
+
"clean": "expo-module clean",
|
|
10
|
+
"lint": "expo-module lint",
|
|
11
|
+
"prepare": "expo-module clean && expo-module tsc",
|
|
12
|
+
"prepublishOnly": "expo-module prepublishOnly",
|
|
13
|
+
"test": "expo-module test",
|
|
14
|
+
"test:e2e": "yarn run prepare && expo-module test --config e2e/jest.config.js",
|
|
15
|
+
"typecheck": "expo-module typecheck",
|
|
16
|
+
"watch": "expo-module tsc --watch"
|
|
15
17
|
},
|
|
16
18
|
"bin": {
|
|
17
19
|
"fingerprint": "bin/cli.js"
|
|
18
20
|
},
|
|
21
|
+
"files": [
|
|
22
|
+
"bin",
|
|
23
|
+
"build"
|
|
24
|
+
],
|
|
19
25
|
"keywords": [
|
|
20
26
|
"expo",
|
|
21
27
|
"react-native",
|
|
@@ -45,8 +51,9 @@
|
|
|
45
51
|
},
|
|
46
52
|
"devDependencies": {
|
|
47
53
|
"@types/find-up": "^4.0.0",
|
|
54
|
+
"expo-module-scripts": "^3.3.0",
|
|
48
55
|
"glob": "^7.1.7",
|
|
49
56
|
"temp-dir": "^2.0.0"
|
|
50
57
|
},
|
|
51
|
-
"gitHead": "
|
|
58
|
+
"gitHead": "2763e9cc6f2317b40da73382fe2595f8deebff46"
|
|
52
59
|
}
|
package/.eslintignore
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
build
|
package/CHANGELOG.md
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
# Changelog
|
|
2
|
-
|
|
3
|
-
## Unpublished
|
|
4
|
-
|
|
5
|
-
### 🛠 Breaking changes
|
|
6
|
-
|
|
7
|
-
### 🎉 New features
|
|
8
|
-
|
|
9
|
-
### 🐛 Bug fixes
|
|
10
|
-
|
|
11
|
-
### 💡 Others
|
|
12
|
-
|
|
13
|
-
## 0.4.1 — 2023-11-14
|
|
14
|
-
|
|
15
|
-
_This version does not introduce any user-facing changes._
|
|
16
|
-
|
|
17
|
-
## 0.4.0 — 2023-10-17
|
|
18
|
-
|
|
19
|
-
### 💡 Others
|
|
20
|
-
|
|
21
|
-
- Transpile for Node 18 (LTS). ([#24471](https://github.com/expo/expo/pull/24471) by [@EvanBacon](https://github.com/EvanBacon))
|
|
22
|
-
|
|
23
|
-
## 0.3.0 — 2023-09-20
|
|
24
|
-
|
|
25
|
-
### 🛠 Breaking changes
|
|
26
|
-
|
|
27
|
-
- This version includes fingerprint result breaking changes. ([#24520](https://github.com/expo/expo/pull/24520) by [@kudo](https://github.com/kudo))
|
|
28
|
-
|
|
29
|
-
### 🎉 New features
|
|
30
|
-
|
|
31
|
-
- Improve fingerprint sourcing scope for local config-plugins. ([#24520](https://github.com/expo/expo/pull/24520) by [@kudo](https://github.com/kudo))
|
|
32
|
-
|
|
33
|
-
## 0.2.0 — 2023-09-08
|
|
34
|
-
|
|
35
|
-
### 🛠 Breaking changes
|
|
36
|
-
|
|
37
|
-
- Normalize Expo config and remove `runtimeVersion` from fingerprint. Note that the fingerprint result will be changed from this version. ([#24290](https://github.com/expo/expo/pull/24290) by [@Kudo](https://github.com/kudo))
|
|
38
|
-
|
|
39
|
-
### 🎉 New features
|
|
40
|
-
|
|
41
|
-
- Added `options.ignorePaths` and **.fingerprintignore** to support. ([#24265](https://github.com/expo/expo/pull/24265) by [@Kudo](https://github.com/kudo))
|
|
42
|
-
|
|
43
|
-
## 0.1.0 — 2023-08-29
|
|
44
|
-
|
|
45
|
-
### 🛠 Breaking changes
|
|
46
|
-
|
|
47
|
-
- The fingerprint result is changed since this version. ([24097](https://github.com/expo/expo/pull/24097) by [@kudo](https://github.com/kudo))
|
|
48
|
-
|
|
49
|
-
### 🎉 New features
|
|
50
|
-
|
|
51
|
-
- Added `diffFingerprints()` to support diff for two fingerprints. ([24097](https://github.com/expo/expo/pull/24097) by [@kudo](https://github.com/kudo))
|
|
52
|
-
|
|
53
|
-
### 🐛 Bug fixes
|
|
54
|
-
|
|
55
|
-
- Fixed non-deterministic hash if packages hoisted from monorepo. ([24097](https://github.com/expo/expo/pull/24097) by [@kudo](https://github.com/kudo))
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import spawnAsync from '@expo/spawn-async';
|
|
2
|
-
import { getConfig } from 'expo/config';
|
|
3
|
-
import path from 'path';
|
|
4
|
-
|
|
5
|
-
type SpawnAsyncType = typeof spawnAsync;
|
|
6
|
-
|
|
7
|
-
const origSpawnAsync = jest.requireActual('@expo/spawn-async') as SpawnAsyncType;
|
|
8
|
-
const mockSpawnAsync = jest
|
|
9
|
-
.fn()
|
|
10
|
-
.mockImplementation(
|
|
11
|
-
async (
|
|
12
|
-
command: Parameters<SpawnAsyncType>[0],
|
|
13
|
-
args: Parameters<SpawnAsyncType>[1],
|
|
14
|
-
options: Parameters<SpawnAsyncType>[2]
|
|
15
|
-
) => {
|
|
16
|
-
if (args != null && args.length >= 2 && path.parse(args[0]).name === 'ExpoConfigLoader') {
|
|
17
|
-
// For unit tests, we don't really spawn a process to execute the ExpoConfigLoader because the file system is just a memfs.
|
|
18
|
-
// Rather than that, we just call `getConfig` directly.
|
|
19
|
-
const projectRoot = args[1];
|
|
20
|
-
const config = await getConfig(projectRoot, { skipSDKVersionRequirement: true });
|
|
21
|
-
const stdout = JSON.stringify({ config, loadedModules: [] });
|
|
22
|
-
return {
|
|
23
|
-
stdout,
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
return origSpawnAsync(command, args, options);
|
|
27
|
-
}
|
|
28
|
-
) as SpawnAsyncType;
|
|
29
|
-
|
|
30
|
-
module.exports = mockSpawnAsync;
|
package/__mocks__/fs/promises.ts
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { fs } from 'memfs';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Further mock `fs.promises` to ensure the parent directory exists.
|
|
6
|
-
* We used to call `fs.promises.mkdtemp(path.join(os.tmpdir(), ...))`, so that we don't have to worry about os.tmpdir() exists.
|
|
7
|
-
*/
|
|
8
|
-
const origMkdtemp = fs.promises.mkdtemp;
|
|
9
|
-
fs.promises.mkdtemp = (
|
|
10
|
-
prefix: string,
|
|
11
|
-
options?: Parameters<typeof origMkdtemp>[1]
|
|
12
|
-
): ReturnType<typeof origMkdtemp> => {
|
|
13
|
-
fs.mkdirSync(path.dirname(prefix), { recursive: true });
|
|
14
|
-
return origMkdtemp(prefix, options);
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
module.exports = fs.promises;
|
package/__mocks__/fs.ts
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
const resolveFrom = jest.requireActual('resolve-from');
|
|
2
|
-
|
|
3
|
-
function mockedResolveFrom(fromDirectory: string, moduleId: string, silent: boolean) {
|
|
4
|
-
if (fromDirectory === '/app' && moduleId === './package.json') {
|
|
5
|
-
// Mock call for resolveFrom('/app', './package.json')
|
|
6
|
-
return '/app/package.json';
|
|
7
|
-
} else {
|
|
8
|
-
// We should use the resolve from current projectRoot rather than mocked /app.
|
|
9
|
-
// E.g. resolveFrom('/app', 'expo/config') -> resolveFrom(__dirname, 'expo/config')
|
|
10
|
-
return silent ? resolveFrom.silent(__dirname, moduleId) : resolveFrom(__dirname, moduleId);
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
module.exports = jest
|
|
15
|
-
.fn()
|
|
16
|
-
.mockImplementation((fromDirectory: string, moduleId: string) =>
|
|
17
|
-
mockedResolveFrom(fromDirectory, moduleId, false)
|
|
18
|
-
);
|
|
19
|
-
|
|
20
|
-
module.exports.silent = jest
|
|
21
|
-
.fn()
|
|
22
|
-
.mockImplementation((fromDirectory: string, moduleId: string) =>
|
|
23
|
-
mockedResolveFrom(fromDirectory, moduleId, true)
|
|
24
|
-
);
|
package/babel.config.js
DELETED
|
@@ -1,242 +0,0 @@
|
|
|
1
|
-
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
2
|
-
|
|
3
|
-
exports[`getHashSourcesAsync - managed project should match snapshot 1`] = `
|
|
4
|
-
[
|
|
5
|
-
{
|
|
6
|
-
"filePath": "node_modules/expo/android",
|
|
7
|
-
"reasons": [
|
|
8
|
-
"expoAutolinkingAndroid",
|
|
9
|
-
],
|
|
10
|
-
"type": "dir",
|
|
11
|
-
},
|
|
12
|
-
{
|
|
13
|
-
"filePath": "node_modules/expo-application/android",
|
|
14
|
-
"reasons": [
|
|
15
|
-
"expoAutolinkingAndroid",
|
|
16
|
-
],
|
|
17
|
-
"type": "dir",
|
|
18
|
-
},
|
|
19
|
-
{
|
|
20
|
-
"filePath": "node_modules/expo-constants/android",
|
|
21
|
-
"reasons": [
|
|
22
|
-
"expoAutolinkingAndroid",
|
|
23
|
-
],
|
|
24
|
-
"type": "dir",
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
"filePath": "node_modules/expo-file-system/android",
|
|
28
|
-
"reasons": [
|
|
29
|
-
"expoAutolinkingAndroid",
|
|
30
|
-
],
|
|
31
|
-
"type": "dir",
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
"filePath": "node_modules/expo-font/android",
|
|
35
|
-
"reasons": [
|
|
36
|
-
"expoAutolinkingAndroid",
|
|
37
|
-
],
|
|
38
|
-
"type": "dir",
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
"filePath": "node_modules/expo-keep-awake/android",
|
|
42
|
-
"reasons": [
|
|
43
|
-
"expoAutolinkingAndroid",
|
|
44
|
-
],
|
|
45
|
-
"type": "dir",
|
|
46
|
-
},
|
|
47
|
-
{
|
|
48
|
-
"filePath": "node_modules/expo-modules-core/android",
|
|
49
|
-
"reasons": [
|
|
50
|
-
"expoAutolinkingAndroid",
|
|
51
|
-
],
|
|
52
|
-
"type": "dir",
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
"filePath": "node_modules/expo-modules-core/android-annotation",
|
|
56
|
-
"reasons": [
|
|
57
|
-
"expoAutolinkingAndroid",
|
|
58
|
-
],
|
|
59
|
-
"type": "dir",
|
|
60
|
-
},
|
|
61
|
-
{
|
|
62
|
-
"filePath": "node_modules/expo-modules-core/android-annotation-processor",
|
|
63
|
-
"reasons": [
|
|
64
|
-
"expoAutolinkingAndroid",
|
|
65
|
-
],
|
|
66
|
-
"type": "dir",
|
|
67
|
-
},
|
|
68
|
-
{
|
|
69
|
-
"contents": "{"extraDependencies":{"androidMavenRepos":[],"iosPods":{}},"modules":[{"packageName":"expo","packageVersion":"49.0.16","projects":[{"name":"expo","sourceDir":"node_modules/expo/android"}],"modules":[]},{"packageName":"expo-application","packageVersion":"5.3.1","projects":[{"name":"expo-application","sourceDir":"node_modules/expo-application/android"}],"modules":[]},{"packageName":"expo-constants","packageVersion":"14.4.2","projects":[{"name":"expo-constants","sourceDir":"node_modules/expo-constants/android"}],"modules":["expo.modules.constants.ConstantsModule"]},{"packageName":"expo-file-system","packageVersion":"15.4.4","projects":[{"name":"expo-file-system","sourceDir":"node_modules/expo-file-system/android"}],"modules":["expo.modules.filesystem.FileSystemModule"]},{"packageName":"expo-font","packageVersion":"11.4.0","projects":[{"name":"expo-font","sourceDir":"node_modules/expo-font/android"}],"modules":[]},{"packageName":"expo-keep-awake","packageVersion":"12.3.0","projects":[{"name":"expo-keep-awake","sourceDir":"node_modules/expo-keep-awake/android"}],"modules":[]},{"packageName":"expo-modules-core","packageVersion":"1.5.11","projects":[{"name":"expo-modules-core","sourceDir":"node_modules/expo-modules-core/android"},{"name":"expo-modules-core$android-annotation","sourceDir":"node_modules/expo-modules-core/android-annotation"},{"name":"expo-modules-core$android-annotation-processor","sourceDir":"node_modules/expo-modules-core/android-annotation-processor"}],"modules":[]}]}",
|
|
70
|
-
"id": "expoAutolinkingConfig:android",
|
|
71
|
-
"reasons": [
|
|
72
|
-
"expoAutolinkingAndroid",
|
|
73
|
-
],
|
|
74
|
-
"type": "contents",
|
|
75
|
-
},
|
|
76
|
-
{
|
|
77
|
-
"filePath": "node_modules/expo",
|
|
78
|
-
"reasons": [
|
|
79
|
-
"expoAutolinkingIos",
|
|
80
|
-
],
|
|
81
|
-
"type": "dir",
|
|
82
|
-
},
|
|
83
|
-
{
|
|
84
|
-
"filePath": "node_modules/expo-application/ios",
|
|
85
|
-
"reasons": [
|
|
86
|
-
"expoAutolinkingIos",
|
|
87
|
-
],
|
|
88
|
-
"type": "dir",
|
|
89
|
-
},
|
|
90
|
-
{
|
|
91
|
-
"filePath": "node_modules/expo-constants/ios",
|
|
92
|
-
"reasons": [
|
|
93
|
-
"expoAutolinkingIos",
|
|
94
|
-
],
|
|
95
|
-
"type": "dir",
|
|
96
|
-
},
|
|
97
|
-
{
|
|
98
|
-
"filePath": "node_modules/expo-file-system/ios",
|
|
99
|
-
"reasons": [
|
|
100
|
-
"expoAutolinkingIos",
|
|
101
|
-
],
|
|
102
|
-
"type": "dir",
|
|
103
|
-
},
|
|
104
|
-
{
|
|
105
|
-
"filePath": "node_modules/expo-font/ios",
|
|
106
|
-
"reasons": [
|
|
107
|
-
"expoAutolinkingIos",
|
|
108
|
-
],
|
|
109
|
-
"type": "dir",
|
|
110
|
-
},
|
|
111
|
-
{
|
|
112
|
-
"filePath": "node_modules/expo-keep-awake/ios",
|
|
113
|
-
"reasons": [
|
|
114
|
-
"expoAutolinkingIos",
|
|
115
|
-
],
|
|
116
|
-
"type": "dir",
|
|
117
|
-
},
|
|
118
|
-
{
|
|
119
|
-
"filePath": "node_modules/expo-modules-core",
|
|
120
|
-
"reasons": [
|
|
121
|
-
"expoAutolinkingIos",
|
|
122
|
-
],
|
|
123
|
-
"type": "dir",
|
|
124
|
-
},
|
|
125
|
-
{
|
|
126
|
-
"contents": "{"extraDependencies":{"androidMavenRepos":[],"iosPods":{}},"modules":[{"packageName":"expo","packageVersion":"49.0.16","pods":[{"podName":"Expo","podspecDir":"node_modules/expo"}],"swiftModuleNames":["Expo"],"modules":[],"appDelegateSubscribers":[],"reactDelegateHandlers":[],"debugOnly":false},{"packageName":"expo-application","packageVersion":"5.3.1","pods":[{"podName":"EXApplication","podspecDir":"node_modules/expo-application/ios"}],"swiftModuleNames":["EXApplication"],"modules":[],"appDelegateSubscribers":[],"reactDelegateHandlers":[],"debugOnly":false},{"packageName":"expo-constants","packageVersion":"14.4.2","pods":[{"podName":"EXConstants","podspecDir":"node_modules/expo-constants/ios"}],"swiftModuleNames":["EXConstants"],"modules":["ConstantsModule"],"appDelegateSubscribers":[],"reactDelegateHandlers":[],"debugOnly":false},{"packageName":"expo-file-system","packageVersion":"15.4.4","pods":[{"podName":"EXFileSystem","podspecDir":"node_modules/expo-file-system/ios"}],"swiftModuleNames":["EXFileSystem"],"modules":[],"appDelegateSubscribers":[],"reactDelegateHandlers":[],"debugOnly":false},{"packageName":"expo-font","packageVersion":"11.4.0","pods":[{"podName":"EXFont","podspecDir":"node_modules/expo-font/ios"}],"swiftModuleNames":["EXFont"],"modules":[],"appDelegateSubscribers":[],"reactDelegateHandlers":[],"debugOnly":false},{"packageName":"expo-keep-awake","packageVersion":"12.3.0","pods":[{"podName":"ExpoKeepAwake","podspecDir":"node_modules/expo-keep-awake/ios"}],"swiftModuleNames":["ExpoKeepAwake"],"modules":["KeepAwakeModule"],"appDelegateSubscribers":[],"reactDelegateHandlers":[],"debugOnly":false},{"packageName":"expo-modules-core","packageVersion":"1.5.11","pods":[{"podName":"ExpoModulesCore","podspecDir":"node_modules/expo-modules-core"}],"swiftModuleNames":["ExpoModulesCore"],"modules":[],"appDelegateSubscribers":[],"reactDelegateHandlers":[],"debugOnly":false}]}",
|
|
127
|
-
"id": "expoAutolinkingConfig:ios",
|
|
128
|
-
"reasons": [
|
|
129
|
-
"expoAutolinkingIos",
|
|
130
|
-
],
|
|
131
|
-
"type": "contents",
|
|
132
|
-
},
|
|
133
|
-
{
|
|
134
|
-
"contents": "{"android":{"adaptiveIcon":{"backgroundColor":"#ffffff","foregroundImage":"./assets/adaptive-icon.png"}},"assetBundlePatterns":["**/*"],"icon":"./assets/icon.png","ios":{"supportsTablet":true},"name":"fingerprint-e2e-managed","orientation":"portrait","platforms":["android","ios"],"sdkVersion":"49.0.0","slug":"fingerprint-e2e-managed","splash":{"backgroundColor":"#ffffff","image":"./assets/splash.png","resizeMode":"contain"},"userInterfaceStyle":"light","version":"1.0.0","web":{"favicon":"./assets/favicon.png"}}",
|
|
135
|
-
"id": "expoConfig",
|
|
136
|
-
"reasons": [
|
|
137
|
-
"expoConfig",
|
|
138
|
-
],
|
|
139
|
-
"type": "contents",
|
|
140
|
-
},
|
|
141
|
-
{
|
|
142
|
-
"filePath": "./assets/icon.png",
|
|
143
|
-
"reasons": [
|
|
144
|
-
"expoConfigExternalFile",
|
|
145
|
-
],
|
|
146
|
-
"type": "file",
|
|
147
|
-
},
|
|
148
|
-
{
|
|
149
|
-
"filePath": "./assets/adaptive-icon.png",
|
|
150
|
-
"reasons": [
|
|
151
|
-
"expoConfigExternalFile",
|
|
152
|
-
],
|
|
153
|
-
"type": "file",
|
|
154
|
-
},
|
|
155
|
-
{
|
|
156
|
-
"filePath": "./assets/splash.png",
|
|
157
|
-
"reasons": [
|
|
158
|
-
"expoConfigExternalFile",
|
|
159
|
-
],
|
|
160
|
-
"type": "file",
|
|
161
|
-
},
|
|
162
|
-
{
|
|
163
|
-
"filePath": "node_modules/chalk/index.js",
|
|
164
|
-
"reasons": [
|
|
165
|
-
"expoConfigPlugins",
|
|
166
|
-
],
|
|
167
|
-
"type": "file",
|
|
168
|
-
},
|
|
169
|
-
{
|
|
170
|
-
"filePath": "node_modules/chalk/node_modules/ansi-styles/index.js",
|
|
171
|
-
"reasons": [
|
|
172
|
-
"expoConfigPlugins",
|
|
173
|
-
],
|
|
174
|
-
"type": "file",
|
|
175
|
-
},
|
|
176
|
-
{
|
|
177
|
-
"filePath": "node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/index.js",
|
|
178
|
-
"reasons": [
|
|
179
|
-
"expoConfigPlugins",
|
|
180
|
-
],
|
|
181
|
-
"type": "file",
|
|
182
|
-
},
|
|
183
|
-
{
|
|
184
|
-
"filePath": "node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/conversions.js",
|
|
185
|
-
"reasons": [
|
|
186
|
-
"expoConfigPlugins",
|
|
187
|
-
],
|
|
188
|
-
"type": "file",
|
|
189
|
-
},
|
|
190
|
-
{
|
|
191
|
-
"filePath": "node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/node_modules/color-name/index.js",
|
|
192
|
-
"reasons": [
|
|
193
|
-
"expoConfigPlugins",
|
|
194
|
-
],
|
|
195
|
-
"type": "file",
|
|
196
|
-
},
|
|
197
|
-
{
|
|
198
|
-
"filePath": "node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/route.js",
|
|
199
|
-
"reasons": [
|
|
200
|
-
"expoConfigPlugins",
|
|
201
|
-
],
|
|
202
|
-
"type": "file",
|
|
203
|
-
},
|
|
204
|
-
{
|
|
205
|
-
"filePath": "node_modules/chalk/templates.js",
|
|
206
|
-
"reasons": [
|
|
207
|
-
"expoConfigPlugins",
|
|
208
|
-
],
|
|
209
|
-
"type": "file",
|
|
210
|
-
},
|
|
211
|
-
{
|
|
212
|
-
"filePath": ".gitignore",
|
|
213
|
-
"reasons": [
|
|
214
|
-
"bareGitIgnore",
|
|
215
|
-
],
|
|
216
|
-
"type": "file",
|
|
217
|
-
},
|
|
218
|
-
{
|
|
219
|
-
"contents": "{"start":"expo start","android":"expo start --android","ios":"expo start --ios","web":"expo start --web"}",
|
|
220
|
-
"id": "packageJson:scripts",
|
|
221
|
-
"reasons": [
|
|
222
|
-
"packageJson:scripts",
|
|
223
|
-
],
|
|
224
|
-
"type": "contents",
|
|
225
|
-
},
|
|
226
|
-
{
|
|
227
|
-
"filePath": "node_modules/expo",
|
|
228
|
-
"reasons": [
|
|
229
|
-
"bareRncliAutolinking",
|
|
230
|
-
],
|
|
231
|
-
"type": "dir",
|
|
232
|
-
},
|
|
233
|
-
{
|
|
234
|
-
"contents": "{"expo":{"root":"node_modules/expo","name":"expo","platforms":{"ios":{"podspecPath":"node_modules/expo/Expo.podspec","configurations":[],"scriptPhases":[]},"android":{"sourceDir":"node_modules/expo/android","packageImportPath":"import expo.modules.ExpoModulesPackage;","packageInstance":"new ExpoModulesPackage()","buildTypes":[],"componentDescriptors":[],"cmakeListsPath":"node_modules/expo/android/build/generated/source/codegen/jni/CMakeLists.txt"}}}}",
|
|
235
|
-
"id": "rncliAutolinkingConfig",
|
|
236
|
-
"reasons": [
|
|
237
|
-
"bareRncliAutolinking",
|
|
238
|
-
],
|
|
239
|
-
"type": "contents",
|
|
240
|
-
},
|
|
241
|
-
]
|
|
242
|
-
`;
|