@expo/cli 55.0.4 → 55.0.5

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.
Files changed (73) hide show
  1. package/build/bin/cli +1 -1
  2. package/build/src/api/graphql/client.js +133 -68
  3. package/build/src/api/graphql/client.js.map +1 -1
  4. package/build/src/api/graphql/queries/AppQuery.js +21 -25
  5. package/build/src/api/graphql/queries/AppQuery.js.map +1 -1
  6. package/build/src/api/graphql/queries/UserQuery.js +45 -38
  7. package/build/src/api/graphql/queries/UserQuery.js.map +1 -1
  8. package/build/src/api/rest/cache/FileSystemResponseCache.js.map +1 -1
  9. package/build/src/api/rest/cache/ResponseCache.js.map +1 -1
  10. package/build/src/api/rest/cache/wrapFetchWithCache.js +7 -7
  11. package/build/src/api/rest/cache/wrapFetchWithCache.js.map +1 -1
  12. package/build/src/api/rest/client.js +3 -7
  13. package/build/src/api/rest/client.js.map +1 -1
  14. package/build/src/api/rest/wrapFetchWithProgress.js +1 -8
  15. package/build/src/api/rest/wrapFetchWithProgress.js.map +1 -1
  16. package/build/src/api/user/user.js +6 -36
  17. package/build/src/api/user/user.js.map +1 -1
  18. package/build/src/prebuild/renameTemplateAppName.js +2 -6
  19. package/build/src/prebuild/renameTemplateAppName.js.map +1 -1
  20. package/build/src/prebuild/resolveLocalTemplate.js +2 -4
  21. package/build/src/prebuild/resolveLocalTemplate.js.map +1 -1
  22. package/build/src/prebuild/resolveTemplate.js +13 -17
  23. package/build/src/prebuild/resolveTemplate.js.map +1 -1
  24. package/build/src/prebuild/updateFromTemplate.js +4 -6
  25. package/build/src/prebuild/updateFromTemplate.js.map +1 -1
  26. package/build/src/start/doctor/ngrok/ExternalModule.js +2 -8
  27. package/build/src/start/doctor/ngrok/ExternalModule.js.map +1 -1
  28. package/build/src/start/server/metro/DevToolsPluginWebsocketEndpoint.js +1 -9
  29. package/build/src/start/server/metro/DevToolsPluginWebsocketEndpoint.js.map +1 -1
  30. package/build/src/start/server/metro/MetroBundlerDevServer.js +9 -4
  31. package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
  32. package/build/src/start/server/metro/createServerComponentsMiddleware.js +2 -12
  33. package/build/src/start/server/metro/createServerComponentsMiddleware.js.map +1 -1
  34. package/build/src/start/server/metro/createServerRouteMiddleware.js +17 -0
  35. package/build/src/start/server/metro/createServerRouteMiddleware.js.map +1 -1
  36. package/build/src/start/server/metro/instantiateMetro.js +1 -3
  37. package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
  38. package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js +47 -34
  39. package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js.map +1 -1
  40. package/build/src/start/server/middleware/ManifestMiddleware.js +27 -4
  41. package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
  42. package/build/src/start/server/type-generation/routes.js +2 -59
  43. package/build/src/start/server/type-generation/routes.js.map +1 -1
  44. package/build/src/utils/codesigning.js +3 -17
  45. package/build/src/utils/codesigning.js.map +1 -1
  46. package/build/src/utils/createFileTransform.js +3 -38
  47. package/build/src/utils/createFileTransform.js.map +1 -1
  48. package/build/src/utils/downloadAppAsync.js +1 -12
  49. package/build/src/utils/downloadAppAsync.js.map +1 -1
  50. package/build/src/utils/fetch.js +23 -4
  51. package/build/src/utils/fetch.js.map +1 -1
  52. package/build/src/utils/getOrPromptApplicationId.js +2 -15
  53. package/build/src/utils/getOrPromptApplicationId.js.map +1 -1
  54. package/build/src/utils/npm.js +60 -65
  55. package/build/src/utils/npm.js.map +1 -1
  56. package/build/src/utils/resolveGlobal.js +195 -0
  57. package/build/src/utils/resolveGlobal.js.map +1 -0
  58. package/build/src/utils/tar.js +138 -69
  59. package/build/src/utils/tar.js.map +1 -1
  60. package/build/src/utils/telemetry/clients/FetchClient.js +12 -24
  61. package/build/src/utils/telemetry/clients/FetchClient.js.map +1 -1
  62. package/build/src/utils/telemetry/utils/context.js +1 -1
  63. package/package.json +18 -28
  64. package/build/src/api/graphql/types/App.js +0 -29
  65. package/build/src/api/graphql/types/App.js.map +0 -1
  66. package/build/src/api/rest/wrapFetchWithProxy.js +0 -31
  67. package/build/src/api/rest/wrapFetchWithProxy.js.map +0 -1
  68. package/build/src/graphql/generated.js +0 -1196
  69. package/build/src/graphql/generated.js.map +0 -1
  70. package/build/src/start/server/middleware/createBuiltinAPIRequestHandler.js +0 -85
  71. package/build/src/start/server/middleware/createBuiltinAPIRequestHandler.js.map +0 -1
  72. package/build/src/utils/multipartMixed.js +0 -56
  73. package/build/src/utils/multipartMixed.js.map +0 -1
@@ -2,98 +2,167 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
- Object.defineProperty(exports, "extractAsync", {
6
- enumerable: true,
7
- get: function() {
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: all[name]
9
+ });
10
+ }
11
+ _export(exports, {
12
+ extractAsync: function() {
8
13
  return extractAsync;
14
+ },
15
+ extractStream: function() {
16
+ return extractStream;
9
17
  }
10
18
  });
11
- function _spawnasync() {
12
- const data = /*#__PURE__*/ _interop_require_default(require("@expo/spawn-async"));
13
- _spawnasync = function() {
19
+ function _multitars() {
20
+ const data = require("multitars");
21
+ _multitars = function() {
22
+ return data;
23
+ };
24
+ return data;
25
+ }
26
+ function _nodecrypto() {
27
+ const data = /*#__PURE__*/ _interop_require_default(require("node:crypto"));
28
+ _nodecrypto = function() {
14
29
  return data;
15
30
  };
16
31
  return data;
17
32
  }
18
- function _tar() {
19
- const data = require("tar");
20
- _tar = function() {
33
+ function _nodefs() {
34
+ const data = /*#__PURE__*/ _interop_require_default(require("node:fs"));
35
+ _nodefs = function() {
21
36
  return data;
22
37
  };
23
38
  return data;
24
39
  }
25
- const _log = /*#__PURE__*/ _interop_require_wildcard(require("../log"));
40
+ function _nodepath() {
41
+ const data = /*#__PURE__*/ _interop_require_default(require("node:path"));
42
+ _nodepath = function() {
43
+ return data;
44
+ };
45
+ return data;
46
+ }
47
+ function _nodestream() {
48
+ const data = require("node:stream");
49
+ _nodestream = function() {
50
+ return data;
51
+ };
52
+ return data;
53
+ }
54
+ const _dir = require("./dir");
26
55
  function _interop_require_default(obj) {
27
56
  return obj && obj.__esModule ? obj : {
28
57
  default: obj
29
58
  };
30
59
  }
31
- function _getRequireWildcardCache(nodeInterop) {
32
- if (typeof WeakMap !== "function") return null;
33
- var cacheBabelInterop = new WeakMap();
34
- var cacheNodeInterop = new WeakMap();
35
- return (_getRequireWildcardCache = function(nodeInterop) {
36
- return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
37
- })(nodeInterop);
38
- }
39
- function _interop_require_wildcard(obj, nodeInterop) {
40
- if (!nodeInterop && obj && obj.__esModule) {
41
- return obj;
42
- }
43
- if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
44
- return {
45
- default: obj
46
- };
60
+ const debug = require('debug')('expo:utils:tar');
61
+ class ChecksumStream extends TransformStream {
62
+ constructor(algorithm){
63
+ super({
64
+ transform: (chunk, controller)=>{
65
+ this.hash.update(chunk);
66
+ controller.enqueue(chunk);
67
+ }
68
+ });
69
+ this.hash = _nodecrypto().default.createHash(algorithm);
47
70
  }
48
- var cache = _getRequireWildcardCache(nodeInterop);
49
- if (cache && cache.has(obj)) {
50
- return cache.get(obj);
71
+ digest(encoding) {
72
+ return this.hash.digest(encoding);
51
73
  }
52
- var newObj = {
53
- __proto__: null
54
- };
55
- var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
56
- for(var key in obj){
57
- if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
58
- var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
59
- if (desc && (desc.get || desc.set)) {
60
- Object.defineProperty(newObj, key, desc);
74
+ }
75
+ async function extractStream(input, output, options = {}) {
76
+ output = _nodepath().default.resolve(output);
77
+ await (0, _dir.ensureDirectoryAsync)(output);
78
+ const { checksumAlgorithm, strip = 0, rename, filter } = options;
79
+ const checksumStream = new ChecksumStream(checksumAlgorithm || 'md5');
80
+ const decompressionStream = new DecompressionStream('gzip');
81
+ const body = input.pipeThrough(checksumStream).pipeThrough(decompressionStream);
82
+ for await (const file of (0, _multitars().untar)(body)){
83
+ let name = _nodepath().default.normalize(file.name);
84
+ if (filter && !filter(name, file.typeflag)) {
85
+ debug(`filtered: ${_nodepath().default.resolve(output, name)}`);
86
+ continue;
87
+ } else if (rename) {
88
+ name = rename(name, file.typeflag) ?? name;
89
+ }
90
+ for(let idx = 0; idx < strip; idx++){
91
+ const sepIdx = name.indexOf(_nodepath().default.sep);
92
+ if (sepIdx > -1) {
93
+ name = name.slice(sepIdx + 1);
61
94
  } else {
62
- newObj[key] = obj[key];
95
+ break;
63
96
  }
64
97
  }
65
- }
66
- newObj.default = obj;
67
- if (cache) {
68
- cache.set(obj, newObj);
69
- }
70
- return newObj;
71
- }
72
- const debug = require('debug')('expo:utils:tar');
73
- async function extractAsync(input, output) {
74
- try {
75
- if (process.platform !== 'win32') {
76
- debug(`Extracting ${input} to ${output}`);
77
- await (0, _spawnasync().default)('tar', [
78
- '-xf',
79
- input,
80
- '-C',
81
- output
82
- ], {
83
- stdio: 'inherit'
84
- });
85
- return;
98
+ const resolved = _nodepath().default.resolve(output, name);
99
+ if (!resolved.startsWith(output)) {
100
+ debug(`skip: ${resolved}`);
101
+ continue;
102
+ }
103
+ const parent = _nodepath().default.dirname(resolved);
104
+ if (parent !== output) {
105
+ let exists = false;
106
+ try {
107
+ const stat = await _nodefs().default.promises.lstat(parent);
108
+ if (stat.isSymbolicLink() || !stat.isDirectory() && !stat.isFile()) {
109
+ debug(`skip: ${resolved}`);
110
+ continue;
111
+ } else if (stat.isDirectory()) {
112
+ exists = true;
113
+ }
114
+ } catch {}
115
+ if (!exists) {
116
+ debug(`mkdir(p): ${parent}`);
117
+ await _nodefs().default.promises.mkdir(parent, {
118
+ recursive: true
119
+ });
120
+ }
121
+ }
122
+ switch(file.typeflag){
123
+ case _multitars().TarTypeFlag.FILE:
124
+ debug(`write(${file.mode.toString(8)}): ${resolved}`);
125
+ await _nodefs().default.promises.writeFile(resolved, (0, _multitars().streamToAsyncIterable)(file.stream()), {
126
+ mode: file.mode
127
+ });
128
+ break;
129
+ case _multitars().TarTypeFlag.DIRECTORY:
130
+ debug(`mkdir(${file.mode.toString(8)}): ${resolved}`);
131
+ try {
132
+ await _nodefs().default.promises.mkdir(resolved, {
133
+ mode: file.mode
134
+ });
135
+ } catch (error) {
136
+ if (error.code !== 'EEXIST') {
137
+ throw error;
138
+ }
139
+ }
140
+ break;
141
+ case _multitars().TarTypeFlag.SYMLINK:
142
+ case _multitars().TarTypeFlag.LINK:
143
+ {
144
+ const target = _nodepath().default.resolve(parent, file.linkname ?? '');
145
+ if (!target.startsWith(output) || target === parent) {
146
+ debug(`skip: ${resolved} -> ${target}`);
147
+ continue;
148
+ }
149
+ if (file.typeflag === _multitars().TarTypeFlag.LINK) {
150
+ debug(`link: ${resolved} -> ${target}`);
151
+ await _nodefs().default.promises.link(target, resolved);
152
+ } else {
153
+ const stat = await _nodefs().default.promises.lstat(target).catch(()=>null);
154
+ const type = (stat == null ? void 0 : stat.isDirectory()) ? 'dir' : 'file';
155
+ debug(`symlink(${type}): ${resolved} -> ${target}`);
156
+ await _nodefs().default.promises.symlink(target, resolved, type);
157
+ }
158
+ break;
159
+ }
86
160
  }
87
- } catch (error) {
88
- _log.warn(`Failed to extract tar using native tools, falling back on JS tar module. ${error.message}`);
89
161
  }
90
- debug(`Extracting ${input} to ${output} using JS tar module`);
91
- // tar node module has previously had problems with big files, and seems to
92
- // be slower, so only use it as a backup.
93
- await (0, _tar().extract)({
94
- file: input,
95
- cwd: output
96
- });
162
+ return checksumStream.digest('hex');
163
+ }
164
+ async function extractAsync(input, output, options) {
165
+ await extractStream(_nodestream().Readable.toWeb(_nodefs().default.createReadStream(input)), output, options);
97
166
  }
98
167
 
99
168
  //# sourceMappingURL=tar.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/tar.ts"],"sourcesContent":["import spawnAsync from '@expo/spawn-async';\nimport { extract as tarExtract } from 'tar';\n\nimport * as Log from '../log';\n\nconst debug = require('debug')('expo:utils:tar') as typeof console.log;\n\n/** Extract a tar using built-in tools if available and falling back on Node.js. */\nexport async function extractAsync(input: string, output: string): Promise<void> {\n try {\n if (process.platform !== 'win32') {\n debug(`Extracting ${input} to ${output}`);\n await spawnAsync('tar', ['-xf', input, '-C', output], {\n stdio: 'inherit',\n });\n return;\n }\n } catch (error: any) {\n Log.warn(\n `Failed to extract tar using native tools, falling back on JS tar module. ${error.message}`\n );\n }\n debug(`Extracting ${input} to ${output} using JS tar module`);\n // tar node module has previously had problems with big files, and seems to\n // be slower, so only use it as a backup.\n await tarExtract({ file: input, cwd: output });\n}\n"],"names":["extractAsync","debug","require","input","output","process","platform","spawnAsync","stdio","error","Log","warn","message","tarExtract","file","cwd"],"mappings":";;;;+BAQsBA;;;eAAAA;;;;gEARC;;;;;;;yBACe;;;;;;6DAEjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAErB,MAAMC,QAAQC,QAAQ,SAAS;AAGxB,eAAeF,aAAaG,KAAa,EAAEC,MAAc;IAC9D,IAAI;QACF,IAAIC,QAAQC,QAAQ,KAAK,SAAS;YAChCL,MAAM,CAAC,WAAW,EAAEE,MAAM,IAAI,EAAEC,QAAQ;YACxC,MAAMG,IAAAA,qBAAU,EAAC,OAAO;gBAAC;gBAAOJ;gBAAO;gBAAMC;aAAO,EAAE;gBACpDI,OAAO;YACT;YACA;QACF;IACF,EAAE,OAAOC,OAAY;QACnBC,KAAIC,IAAI,CACN,CAAC,yEAAyE,EAAEF,MAAMG,OAAO,EAAE;IAE/F;IACAX,MAAM,CAAC,WAAW,EAAEE,MAAM,IAAI,EAAEC,OAAO,oBAAoB,CAAC;IAC5D,2EAA2E;IAC3E,yCAAyC;IACzC,MAAMS,IAAAA,cAAU,EAAC;QAAEC,MAAMX;QAAOY,KAAKX;IAAO;AAC9C"}
1
+ {"version":3,"sources":["../../../src/utils/tar.ts"],"sourcesContent":["import { streamToAsyncIterable, TarTypeFlag, untar } from 'multitars';\nimport crypto from 'node:crypto';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { Readable } from 'node:stream';\n\nimport { ensureDirectoryAsync } from './dir';\n\nconst debug = require('debug')('expo:utils:tar') as typeof console.log;\n\nclass ChecksumStream extends TransformStream {\n hash: crypto.Hash;\n constructor(algorithm: string) {\n super({\n transform: (chunk, controller) => {\n this.hash.update(chunk);\n controller.enqueue(chunk);\n },\n });\n this.hash = crypto.createHash(algorithm);\n }\n\n digest(): Buffer;\n digest(encoding: crypto.BinaryToTextEncoding): string;\n digest(encoding?: crypto.BinaryToTextEncoding): string | Buffer {\n return this.hash.digest(encoding!);\n }\n}\n\nexport interface ExtractOptions {\n strip?: number;\n filter?(name: string, type: TarTypeFlag): boolean | null | undefined;\n rename?(name: string, type: TarTypeFlag): string | null | undefined;\n checksumAlgorithm?: string;\n}\n\nexport async function extractStream(\n input: ReadableStream,\n output: string,\n options: ExtractOptions = {}\n): Promise<string> {\n output = path.resolve(output);\n await ensureDirectoryAsync(output);\n\n const { checksumAlgorithm, strip = 0, rename, filter } = options;\n\n const checksumStream = new ChecksumStream(checksumAlgorithm || 'md5');\n const decompressionStream = new DecompressionStream('gzip');\n\n const body = input.pipeThrough(checksumStream).pipeThrough(decompressionStream);\n\n for await (const file of untar(body)) {\n let name = path.normalize(file.name);\n if (filter && !filter(name, file.typeflag)) {\n debug(`filtered: ${path.resolve(output, name)}`);\n continue;\n } else if (rename) {\n name = rename(name, file.typeflag) ?? name;\n }\n\n for (let idx = 0; idx < strip; idx++) {\n const sepIdx = name.indexOf(path.sep);\n if (sepIdx > -1) {\n name = name.slice(sepIdx + 1);\n } else {\n break;\n }\n }\n\n const resolved = path.resolve(output, name);\n if (!resolved.startsWith(output)) {\n debug(`skip: ${resolved}`);\n continue;\n }\n\n const parent = path.dirname(resolved);\n if (parent !== output) {\n let exists = false;\n try {\n const stat = await fs.promises.lstat(parent);\n if (stat.isSymbolicLink() || (!stat.isDirectory() && !stat.isFile())) {\n debug(`skip: ${resolved}`);\n continue;\n } else if (stat.isDirectory()) {\n exists = true;\n }\n } catch {}\n\n if (!exists) {\n debug(`mkdir(p): ${parent}`);\n await fs.promises.mkdir(parent, { recursive: true });\n }\n }\n\n switch (file.typeflag) {\n case TarTypeFlag.FILE:\n debug(`write(${file.mode.toString(8)}): ${resolved}`);\n await fs.promises.writeFile(resolved, streamToAsyncIterable(file.stream()), {\n mode: file.mode,\n });\n break;\n case TarTypeFlag.DIRECTORY:\n debug(`mkdir(${file.mode.toString(8)}): ${resolved}`);\n try {\n await fs.promises.mkdir(resolved, { mode: file.mode });\n } catch (error: any) {\n if (error.code !== 'EEXIST') {\n throw error;\n }\n }\n break;\n case TarTypeFlag.SYMLINK:\n case TarTypeFlag.LINK: {\n const target = path.resolve(parent, file.linkname ?? '');\n if (!target.startsWith(output) || target === parent) {\n debug(`skip: ${resolved} -> ${target}`);\n continue;\n }\n\n if (file.typeflag === TarTypeFlag.LINK) {\n debug(`link: ${resolved} -> ${target}`);\n await fs.promises.link(target, resolved);\n } else {\n const stat = await fs.promises.lstat(target).catch(() => null);\n const type = stat?.isDirectory() ? 'dir' : 'file';\n debug(`symlink(${type}): ${resolved} -> ${target}`);\n await fs.promises.symlink(target, resolved, type);\n }\n break;\n }\n }\n }\n\n return checksumStream.digest('hex');\n}\n\n/** Extract a tar using built-in tools if available and falling back on Node.js. */\nexport async function extractAsync(\n input: string,\n output: string,\n options?: ExtractOptions\n): Promise<void> {\n await extractStream(\n Readable.toWeb(fs.createReadStream(input)) as ReadableStream,\n output,\n options\n );\n}\n"],"names":["extractAsync","extractStream","debug","require","ChecksumStream","TransformStream","constructor","algorithm","transform","chunk","controller","hash","update","enqueue","crypto","createHash","digest","encoding","input","output","options","path","resolve","ensureDirectoryAsync","checksumAlgorithm","strip","rename","filter","checksumStream","decompressionStream","DecompressionStream","body","pipeThrough","file","untar","name","normalize","typeflag","idx","sepIdx","indexOf","sep","slice","resolved","startsWith","parent","dirname","exists","stat","fs","promises","lstat","isSymbolicLink","isDirectory","isFile","mkdir","recursive","TarTypeFlag","FILE","mode","toString","writeFile","streamToAsyncIterable","stream","DIRECTORY","error","code","SYMLINK","LINK","target","linkname","link","catch","type","symlink","Readable","toWeb","createReadStream"],"mappings":"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"}
@@ -15,13 +15,6 @@ function _nodebuffer() {
15
15
  };
16
16
  return data;
17
17
  }
18
- function _undici() {
19
- const data = require("undici");
20
- _undici = function() {
21
- return data;
22
- };
23
- return data;
24
- }
25
18
  const _fetch = require("../../fetch");
26
19
  const _constants = require("../utils/constants");
27
20
  class FetchClient {
@@ -33,7 +26,7 @@ class FetchClient {
33
26
  this.headers = {
34
27
  accept: 'application/json',
35
28
  'content-type': 'application/json',
36
- 'user-agent': `expo-cli/${"55.0.4"}`,
29
+ 'user-agent': `expo-cli/${"55.0.5"}`,
37
30
  authorization: 'Basic ' + _nodebuffer().Buffer.from(`${target}:`).toString('base64')
38
31
  };
39
32
  }
@@ -79,22 +72,17 @@ class FetchClient {
79
72
  }
80
73
  }
81
74
  function createTelemetryFetch() {
82
- const agent = new (_undici()).RetryAgent(new (_undici()).Agent(), {
83
- maxRetries: 3,
84
- retryAfter: true,
85
- minTimeout: 500,
86
- maxTimeout: 2000,
87
- timeoutFactor: 2
88
- });
89
- return (info, init = {})=>(0, _fetch.fetch)(extractUrl(info), {
90
- ...init,
91
- dispatcher: agent
92
- });
93
- }
94
- /** Extract the URL string from either `RequestInfo` or `URL` */ function extractUrl(info) {
95
- if (typeof info === 'string') return info;
96
- if ('url' in info) return info.url;
97
- return info.toString();
75
+ return async function telemetryFetch(info, init) {
76
+ let error;
77
+ for(let attemptCount = 0; attemptCount < 3; attemptCount++){
78
+ try {
79
+ return await (0, _fetch.fetch)(info, init);
80
+ } catch (_error) {
81
+ error = _error;
82
+ }
83
+ }
84
+ throw error;
85
+ };
98
86
  }
99
87
  /** Mute a promise by removing the original return type and hide errors */ function mutePromise(promise) {
100
88
  return promise.then(()=>{}, ()=>{});
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/utils/telemetry/clients/FetchClient.ts"],"sourcesContent":["import { Buffer } from 'node:buffer';\nimport { URL } from 'node:url';\nimport { Agent, RetryAgent, type RequestInfo, type RequestInit } from 'undici';\n\nimport { fetch } from '../../fetch';\nimport { TelemetryClient, TelemetryClientStrategy, TelemetryRecordInternal } from '../types';\nimport { TELEMETRY_ENDPOINT, TELEMETRY_TARGET } from '../utils/constants';\n\ntype Fetch = typeof fetch;\n\ntype FetchClientOptions = {\n /** The fetch method for sending events, should handle retries and timeouts */\n fetch?: Fetch;\n /** The endpoint for recorded events */\n url?: string;\n /** The telemetry target for all events */\n target?: string;\n};\n\ntype FetchClientEntry = Promise<void> & {\n records: TelemetryRecordInternal[];\n controller: AbortController;\n};\n\nexport class FetchClient implements TelemetryClient {\n /** This client should be used for long-running commands */\n readonly strategy: TelemetryClientStrategy = 'instant';\n /** The fetch instance used to transport telemetry to the backend */\n private fetch: Fetch;\n /** The endpoint to send events to */\n private url: string;\n /** Additional headers to send with every event */\n private headers: RequestInit['headers'];\n /** All records that are queued and being sent */\n private entries: Set<FetchClientEntry> = new Set();\n\n constructor({\n fetch = createTelemetryFetch(),\n url = TELEMETRY_ENDPOINT,\n target = TELEMETRY_TARGET,\n }: FetchClientOptions = {}) {\n this.fetch = fetch;\n this.url = url;\n this.headers = {\n accept: 'application/json',\n 'content-type': 'application/json',\n 'user-agent': `expo-cli/${process.env.__EXPO_VERSION}`,\n authorization: 'Basic ' + Buffer.from(`${target}:`).toString('base64'),\n };\n }\n\n private queue(\n records: TelemetryRecordInternal[],\n controller: AbortController,\n request: ReturnType<typeof fetch>\n ) {\n const entry: FetchClientEntry = mutePromise(request) as any;\n entry.finally(() => this.entries.delete(entry));\n entry.controller = controller;\n entry.records = records;\n\n this.entries.add(entry);\n\n return entry;\n }\n\n record(record: TelemetryRecordInternal[]) {\n const records = Array.isArray(record) ? record : [record];\n\n if (!records.length) return;\n\n const controller = new AbortController();\n const body = JSON.stringify({\n sentAt: new Date(),\n batch: records,\n });\n\n return this.queue(\n records,\n controller,\n this.fetch(this.url, {\n body,\n method: 'POST',\n signal: controller.signal,\n headers: this.headers,\n })\n );\n }\n\n flush() {\n return mutePromise(Promise.all(this.entries));\n }\n\n abort() {\n const records: TelemetryRecordInternal[] = [];\n\n this.entries.forEach((entry) => {\n try {\n entry.controller.abort();\n records.push(...entry.records);\n } catch {\n // Ignore abort errors\n }\n });\n\n return records;\n }\n}\n\nfunction createTelemetryFetch(): typeof fetch {\n const agent = new RetryAgent(new Agent(), {\n maxRetries: 3,\n retryAfter: true,\n minTimeout: 500,\n maxTimeout: 2000,\n timeoutFactor: 2,\n });\n\n return (info: RequestInfo | URL, init: RequestInit = {}) =>\n fetch(extractUrl(info), { ...init, dispatcher: agent });\n}\n\n/** Extract the URL string from either `RequestInfo` or `URL` */\nfunction extractUrl(info: RequestInfo | URL) {\n if (typeof info === 'string') return info;\n if ('url' in info) return info.url;\n return info.toString();\n}\n\n/** Mute a promise by removing the original return type and hide errors */\nfunction mutePromise(promise: Promise<any>) {\n return promise.then(\n () => {},\n () => {}\n );\n}\n"],"names":["FetchClient","constructor","fetch","createTelemetryFetch","url","TELEMETRY_ENDPOINT","target","TELEMETRY_TARGET","strategy","entries","Set","headers","accept","process","env","__EXPO_VERSION","authorization","Buffer","from","toString","queue","records","controller","request","entry","mutePromise","finally","delete","add","record","Array","isArray","length","AbortController","body","JSON","stringify","sentAt","Date","batch","method","signal","flush","Promise","all","abort","forEach","push","agent","RetryAgent","Agent","maxRetries","retryAfter","minTimeout","maxTimeout","timeoutFactor","info","init","extractUrl","dispatcher","promise","then"],"mappings":";;;;+BAwBaA;;;eAAAA;;;;yBAxBU;;;;;;;yBAE+C;;;;;;uBAEhD;2BAE+B;AAkB9C,MAAMA;IAYXC,YAAY,EACVC,QAAQC,sBAAsB,EAC9BC,MAAMC,6BAAkB,EACxBC,SAASC,2BAAgB,EACN,GAAG,CAAC,CAAC,CAAE;QAf5B,yDAAyD,QAChDC,WAAoC;QAO7C,+CAA+C,QACvCC,UAAiC,IAAIC;QAO3C,IAAI,CAACR,KAAK,GAAGA;QACb,IAAI,CAACE,GAAG,GAAGA;QACX,IAAI,CAACO,OAAO,GAAG;YACbC,QAAQ;YACR,gBAAgB;YAChB,cAAc,CAAC,SAAS,EAAEC,QAAQC,GAAG,CAACC,cAAc,EAAE;YACtDC,eAAe,WAAWC,oBAAM,CAACC,IAAI,CAAC,GAAGZ,OAAO,CAAC,CAAC,EAAEa,QAAQ,CAAC;QAC/D;IACF;IAEQC,MACNC,OAAkC,EAClCC,UAA2B,EAC3BC,OAAiC,EACjC;QACA,MAAMC,QAA0BC,YAAYF;QAC5CC,MAAME,OAAO,CAAC,IAAM,IAAI,CAACjB,OAAO,CAACkB,MAAM,CAACH;QACxCA,MAAMF,UAAU,GAAGA;QACnBE,MAAMH,OAAO,GAAGA;QAEhB,IAAI,CAACZ,OAAO,CAACmB,GAAG,CAACJ;QAEjB,OAAOA;IACT;IAEAK,OAAOA,MAAiC,EAAE;QACxC,MAAMR,UAAUS,MAAMC,OAAO,CAACF,UAAUA,SAAS;YAACA;SAAO;QAEzD,IAAI,CAACR,QAAQW,MAAM,EAAE;QAErB,MAAMV,aAAa,IAAIW;QACvB,MAAMC,OAAOC,KAAKC,SAAS,CAAC;YAC1BC,QAAQ,IAAIC;YACZC,OAAOlB;QACT;QAEA,OAAO,IAAI,CAACD,KAAK,CACfC,SACAC,YACA,IAAI,CAACpB,KAAK,CAAC,IAAI,CAACE,GAAG,EAAE;YACnB8B;YACAM,QAAQ;YACRC,QAAQnB,WAAWmB,MAAM;YACzB9B,SAAS,IAAI,CAACA,OAAO;QACvB;IAEJ;IAEA+B,QAAQ;QACN,OAAOjB,YAAYkB,QAAQC,GAAG,CAAC,IAAI,CAACnC,OAAO;IAC7C;IAEAoC,QAAQ;QACN,MAAMxB,UAAqC,EAAE;QAE7C,IAAI,CAACZ,OAAO,CAACqC,OAAO,CAAC,CAACtB;YACpB,IAAI;gBACFA,MAAMF,UAAU,CAACuB,KAAK;gBACtBxB,QAAQ0B,IAAI,IAAIvB,MAAMH,OAAO;YAC/B,EAAE,OAAM;YACN,sBAAsB;YACxB;QACF;QAEA,OAAOA;IACT;AACF;AAEA,SAASlB;IACP,MAAM6C,QAAQ,IAAIC,CAAAA,SAAS,YAAC,CAAC,IAAIC,CAAAA,SAAI,OAAC,IAAI;QACxCC,YAAY;QACZC,YAAY;QACZC,YAAY;QACZC,YAAY;QACZC,eAAe;IACjB;IAEA,OAAO,CAACC,MAAyBC,OAAoB,CAAC,CAAC,GACrDvD,IAAAA,YAAK,EAACwD,WAAWF,OAAO;YAAE,GAAGC,IAAI;YAAEE,YAAYX;QAAM;AACzD;AAEA,8DAA8D,GAC9D,SAASU,WAAWF,IAAuB;IACzC,IAAI,OAAOA,SAAS,UAAU,OAAOA;IACrC,IAAI,SAASA,MAAM,OAAOA,KAAKpD,GAAG;IAClC,OAAOoD,KAAKrC,QAAQ;AACtB;AAEA,wEAAwE,GACxE,SAASM,YAAYmC,OAAqB;IACxC,OAAOA,QAAQC,IAAI,CACjB,KAAO,GACP,KAAO;AAEX"}
1
+ {"version":3,"sources":["../../../../../src/utils/telemetry/clients/FetchClient.ts"],"sourcesContent":["import type { RequestInit } from 'fetch-nodeshim';\nimport { Buffer } from 'node:buffer';\n\nimport { fetch } from '../../fetch';\nimport { TelemetryClient, TelemetryClientStrategy, TelemetryRecordInternal } from '../types';\nimport { TELEMETRY_ENDPOINT, TELEMETRY_TARGET } from '../utils/constants';\n\ntype Fetch = typeof fetch;\n\ntype FetchClientOptions = {\n /** The fetch method for sending events, should handle retries and timeouts */\n fetch?: Fetch;\n /** The endpoint for recorded events */\n url?: string;\n /** The telemetry target for all events */\n target?: string;\n};\n\ntype FetchClientEntry = Promise<void> & {\n records: TelemetryRecordInternal[];\n controller: AbortController;\n};\n\nexport class FetchClient implements TelemetryClient {\n /** This client should be used for long-running commands */\n readonly strategy: TelemetryClientStrategy = 'instant';\n /** The fetch instance used to transport telemetry to the backend */\n private fetch: Fetch;\n /** The endpoint to send events to */\n private url: string;\n /** Additional headers to send with every event */\n private headers: RequestInit['headers'];\n /** All records that are queued and being sent */\n private entries: Set<FetchClientEntry> = new Set();\n\n constructor({\n fetch = createTelemetryFetch(),\n url = TELEMETRY_ENDPOINT,\n target = TELEMETRY_TARGET,\n }: FetchClientOptions = {}) {\n this.fetch = fetch;\n this.url = url;\n this.headers = {\n accept: 'application/json',\n 'content-type': 'application/json',\n 'user-agent': `expo-cli/${process.env.__EXPO_VERSION}`,\n authorization: 'Basic ' + Buffer.from(`${target}:`).toString('base64'),\n };\n }\n\n private queue(\n records: TelemetryRecordInternal[],\n controller: AbortController,\n request: ReturnType<typeof fetch>\n ) {\n const entry: FetchClientEntry = mutePromise(request) as any;\n entry.finally(() => this.entries.delete(entry));\n entry.controller = controller;\n entry.records = records;\n\n this.entries.add(entry);\n\n return entry;\n }\n\n record(record: TelemetryRecordInternal[]) {\n const records = Array.isArray(record) ? record : [record];\n\n if (!records.length) return;\n\n const controller = new AbortController();\n const body = JSON.stringify({\n sentAt: new Date(),\n batch: records,\n });\n\n return this.queue(\n records,\n controller,\n this.fetch(this.url, {\n body,\n method: 'POST',\n signal: controller.signal,\n headers: this.headers,\n })\n );\n }\n\n flush() {\n return mutePromise(Promise.all(this.entries));\n }\n\n abort() {\n const records: TelemetryRecordInternal[] = [];\n\n this.entries.forEach((entry) => {\n try {\n entry.controller.abort();\n records.push(...entry.records);\n } catch {\n // Ignore abort errors\n }\n });\n\n return records;\n }\n}\n\nfunction createTelemetryFetch(): typeof fetch {\n return async function telemetryFetch(info, init) {\n let error: any;\n for (let attemptCount = 0; attemptCount < 3; attemptCount++) {\n try {\n return await fetch(info, init);\n } catch (_error: any) {\n error = _error;\n }\n }\n throw error;\n };\n}\n\n/** Mute a promise by removing the original return type and hide errors */\nfunction mutePromise(promise: Promise<any>) {\n return promise.then(\n () => {},\n () => {}\n );\n}\n"],"names":["FetchClient","constructor","fetch","createTelemetryFetch","url","TELEMETRY_ENDPOINT","target","TELEMETRY_TARGET","strategy","entries","Set","headers","accept","process","env","__EXPO_VERSION","authorization","Buffer","from","toString","queue","records","controller","request","entry","mutePromise","finally","delete","add","record","Array","isArray","length","AbortController","body","JSON","stringify","sentAt","Date","batch","method","signal","flush","Promise","all","abort","forEach","push","telemetryFetch","info","init","error","attemptCount","_error","promise","then"],"mappings":";;;;+BAuBaA;;;eAAAA;;;;yBAtBU;;;;;;uBAED;2BAE+B;AAkB9C,MAAMA;IAYXC,YAAY,EACVC,QAAQC,sBAAsB,EAC9BC,MAAMC,6BAAkB,EACxBC,SAASC,2BAAgB,EACN,GAAG,CAAC,CAAC,CAAE;QAf5B,yDAAyD,QAChDC,WAAoC;QAO7C,+CAA+C,QACvCC,UAAiC,IAAIC;QAO3C,IAAI,CAACR,KAAK,GAAGA;QACb,IAAI,CAACE,GAAG,GAAGA;QACX,IAAI,CAACO,OAAO,GAAG;YACbC,QAAQ;YACR,gBAAgB;YAChB,cAAc,CAAC,SAAS,EAAEC,QAAQC,GAAG,CAACC,cAAc,EAAE;YACtDC,eAAe,WAAWC,oBAAM,CAACC,IAAI,CAAC,GAAGZ,OAAO,CAAC,CAAC,EAAEa,QAAQ,CAAC;QAC/D;IACF;IAEQC,MACNC,OAAkC,EAClCC,UAA2B,EAC3BC,OAAiC,EACjC;QACA,MAAMC,QAA0BC,YAAYF;QAC5CC,MAAME,OAAO,CAAC,IAAM,IAAI,CAACjB,OAAO,CAACkB,MAAM,CAACH;QACxCA,MAAMF,UAAU,GAAGA;QACnBE,MAAMH,OAAO,GAAGA;QAEhB,IAAI,CAACZ,OAAO,CAACmB,GAAG,CAACJ;QAEjB,OAAOA;IACT;IAEAK,OAAOA,MAAiC,EAAE;QACxC,MAAMR,UAAUS,MAAMC,OAAO,CAACF,UAAUA,SAAS;YAACA;SAAO;QAEzD,IAAI,CAACR,QAAQW,MAAM,EAAE;QAErB,MAAMV,aAAa,IAAIW;QACvB,MAAMC,OAAOC,KAAKC,SAAS,CAAC;YAC1BC,QAAQ,IAAIC;YACZC,OAAOlB;QACT;QAEA,OAAO,IAAI,CAACD,KAAK,CACfC,SACAC,YACA,IAAI,CAACpB,KAAK,CAAC,IAAI,CAACE,GAAG,EAAE;YACnB8B;YACAM,QAAQ;YACRC,QAAQnB,WAAWmB,MAAM;YACzB9B,SAAS,IAAI,CAACA,OAAO;QACvB;IAEJ;IAEA+B,QAAQ;QACN,OAAOjB,YAAYkB,QAAQC,GAAG,CAAC,IAAI,CAACnC,OAAO;IAC7C;IAEAoC,QAAQ;QACN,MAAMxB,UAAqC,EAAE;QAE7C,IAAI,CAACZ,OAAO,CAACqC,OAAO,CAAC,CAACtB;YACpB,IAAI;gBACFA,MAAMF,UAAU,CAACuB,KAAK;gBACtBxB,QAAQ0B,IAAI,IAAIvB,MAAMH,OAAO;YAC/B,EAAE,OAAM;YACN,sBAAsB;YACxB;QACF;QAEA,OAAOA;IACT;AACF;AAEA,SAASlB;IACP,OAAO,eAAe6C,eAAeC,IAAI,EAAEC,IAAI;QAC7C,IAAIC;QACJ,IAAK,IAAIC,eAAe,GAAGA,eAAe,GAAGA,eAAgB;YAC3D,IAAI;gBACF,OAAO,MAAMlD,IAAAA,YAAK,EAAC+C,MAAMC;YAC3B,EAAE,OAAOG,QAAa;gBACpBF,QAAQE;YACV;QACF;QACA,MAAMF;IACR;AACF;AAEA,wEAAwE,GACxE,SAAS1B,YAAY6B,OAAqB;IACxC,OAAOA,QAAQC,IAAI,CACjB,KAAO,GACP,KAAO;AAEX"}
@@ -83,7 +83,7 @@ function createContext() {
83
83
  cpu: summarizeCpuInfo(),
84
84
  app: {
85
85
  name: 'expo/cli',
86
- version: "55.0.4"
86
+ version: "55.0.5"
87
87
  },
88
88
  ci: _ciinfo().isCI ? {
89
89
  name: _ciinfo().name,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expo/cli",
3
- "version": "55.0.4",
3
+ "version": "55.0.5",
4
4
  "description": "The Expo CLI",
5
5
  "main": "build/bin/cli",
6
6
  "bin": {
@@ -22,8 +22,7 @@
22
22
  "test:e2e": "jest --config e2e/jest.config.js",
23
23
  "test:playwright": "playwright test --config e2e/playwright.config.ts",
24
24
  "prepublishOnly": "expo-module prepublishOnly",
25
- "expo-module": "expo-module",
26
- "generate-graphql-code": "graphql-codegen --config graphql-codegen.yml"
25
+ "expo-module": "expo-module"
27
26
  },
28
27
  "repository": {
29
28
  "type": "git",
@@ -41,29 +40,26 @@
41
40
  },
42
41
  "homepage": "https://github.com/expo/expo/tree/main/packages/@expo/cli",
43
42
  "dependencies": {
44
- "@0no-co/graphql.web": "^1.0.8",
45
43
  "@expo/code-signing-certificates": "^0.0.6",
46
- "@expo/config": "~55.0.3",
47
- "@expo/config-plugins": "~55.0.3",
44
+ "@expo/config": "~55.0.4",
45
+ "@expo/config-plugins": "~55.0.4",
48
46
  "@expo/devcert": "^1.2.1",
49
47
  "@expo/env": "~2.0.11",
50
- "@expo/image-utils": "^0.8.11",
51
- "@expo/json-file": "^10.0.11",
48
+ "@expo/image-utils": "^0.8.12",
49
+ "@expo/json-file": "^10.0.12",
50
+ "@expo/log-box": "55.0.4",
52
51
  "@expo/metro": "~54.2.0",
53
- "@expo/metro-config": "~55.0.3",
52
+ "@expo/metro-config": "~55.0.4",
54
53
  "@expo/osascript": "^2.4.2",
55
- "@expo/package-manager": "^1.10.2",
54
+ "@expo/package-manager": "^1.10.3",
56
55
  "@expo/plist": "^0.5.2",
57
- "@expo/prebuild-config": "^55.0.3",
58
- "@expo/router-server": "^55.0.3",
59
- "@expo/log-box": "55.0.3",
56
+ "@expo/prebuild-config": "^55.0.4",
57
+ "@expo/router-server": "^55.0.4",
60
58
  "@expo/schema-utils": "^55.0.2",
61
59
  "@expo/spawn-async": "^1.7.2",
62
60
  "@expo/ws-tunnel": "^1.0.1",
63
- "@expo/xcpretty": "^4.3.0",
61
+ "@expo/xcpretty": "^4.4.0",
64
62
  "@react-native/dev-middleware": "0.83.1",
65
- "@urql/core": "^5.0.6",
66
- "@urql/exchange-retry": "^1.3.0",
67
63
  "accepts": "^1.3.8",
68
64
  "arg": "^5.0.2",
69
65
  "better-opn": "~3.0.2",
@@ -76,11 +72,13 @@
76
72
  "debug": "^4.3.4",
77
73
  "dnssd-advertise": "^1.1.1",
78
74
  "env-editor": "^0.4.1",
79
- "expo-server": "^55.0.2",
75
+ "expo-server": "^55.0.3",
76
+ "fetch-nodeshim": "^0.4.3",
80
77
  "getenv": "^2.0.0",
81
78
  "glob": "^13.0.0",
82
79
  "lan-network": "^0.1.6",
83
80
  "minimatch": "^9.0.0",
81
+ "multitars": "^0.2.3",
84
82
  "node-forge": "^1.3.3",
85
83
  "npm-package-arg": "^11.0.0",
86
84
  "ora": "^3.4.0",
@@ -90,7 +88,6 @@
90
88
  "prompts": "^2.3.2",
91
89
  "qrcode-terminal": "0.11.0",
92
90
  "require-from-string": "^2.0.2",
93
- "requireg": "^0.2.2",
94
91
  "resolve-from": "^5.0.0",
95
92
  "semver": "^7.6.0",
96
93
  "send": "^0.19.0",
@@ -98,9 +95,7 @@
98
95
  "source-map-support": "~0.5.21",
99
96
  "stacktrace-parser": "^0.1.10",
100
97
  "structured-headers": "^0.4.1",
101
- "tar": "^7.5.2",
102
98
  "terminal-link": "^2.1.1",
103
- "undici": "^6.18.2",
104
99
  "wrap-ansi": "^7.0.0",
105
100
  "ws": "^8.12.1",
106
101
  "zod": "^3.25.76"
@@ -125,12 +120,8 @@
125
120
  },
126
121
  "devDependencies": {
127
122
  "@expo/mcp-tunnel": "~0.2.3",
128
- "@expo/multipart-body-parser": "^1.0.0",
129
123
  "@expo/ngrok": "4.1.3",
130
- "@graphql-codegen/cli": "^2.16.3",
131
- "@graphql-codegen/typescript": "^2.8.7",
132
- "@graphql-codegen/typescript-operations": "^2.5.12",
133
- "@playwright/test": "^1.53.1",
124
+ "@playwright/test": "^1.58.1",
134
125
  "@swc/core": "^1.11.11",
135
126
  "@taskr/clear": "^1.1.0",
136
127
  "@taskr/esnext": "^1.1.0",
@@ -164,11 +155,10 @@
164
155
  "memfs": "^3.2.0",
165
156
  "nock": "^14.0.10",
166
157
  "node-html-parser": "^6.1.5",
167
- "nullthrows": "^1.1.1",
168
- "playwright": "^1.53.1",
158
+ "playwright": "^1.58.1",
169
159
  "taskr": "^1.1.0",
170
160
  "tree-kill": "^1.2.2",
171
161
  "tsd": "^0.28.1"
172
162
  },
173
- "gitHead": "220594d473a3100248087151004ae4acb7282d5f"
163
+ "gitHead": "436ffb4355d5207f4a03fbc3568cd33424a40f3e"
174
164
  }
@@ -1,29 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "AppFragmentNode", {
6
- enumerable: true,
7
- get: function() {
8
- return AppFragmentNode;
9
- }
10
- });
11
- function _core() {
12
- const data = require("@urql/core");
13
- _core = function() {
14
- return data;
15
- };
16
- return data;
17
- }
18
- const AppFragmentNode = (0, _core().gql)`
19
- fragment AppFragment on App {
20
- id
21
- scopeKey
22
- ownerAccount {
23
- id
24
- name
25
- }
26
- }
27
- `;
28
-
29
- //# sourceMappingURL=App.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../src/api/graphql/types/App.ts"],"sourcesContent":["import { TypedDocumentNode, gql } from '@urql/core';\n\nexport const AppFragmentNode: TypedDocumentNode = gql`\n fragment AppFragment on App {\n id\n scopeKey\n ownerAccount {\n id\n name\n }\n }\n`;\n"],"names":["AppFragmentNode","gql"],"mappings":";;;;+BAEaA;;;eAAAA;;;;yBAF0B;;;;;;AAEhC,MAAMA,kBAAqCC,IAAAA,WAAG,CAAA,CAAC;;;;;;;;;AAStD,CAAC"}
@@ -1,31 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "wrapFetchWithProxy", {
6
- enumerable: true,
7
- get: function() {
8
- return wrapFetchWithProxy;
9
- }
10
- });
11
- function _undici() {
12
- const data = require("undici");
13
- _undici = function() {
14
- return data;
15
- };
16
- return data;
17
- }
18
- const _env = require("../../utils/env");
19
- const debug = require('debug')('expo:api:fetch:proxy');
20
- function wrapFetchWithProxy(fetchFunction) {
21
- // NOTE(EvanBacon): DO NOT RETURN AN ASYNC WRAPPER. THIS BREAKS LOADING INDICATORS.
22
- return function fetchWithProxy(url, options = {}) {
23
- if (!options.dispatcher && _env.env.HTTP_PROXY) {
24
- debug('Using proxy:', _env.env.HTTP_PROXY);
25
- options.dispatcher = new (_undici()).EnvHttpProxyAgent();
26
- }
27
- return fetchFunction(url, options);
28
- };
29
- }
30
-
31
- //# sourceMappingURL=wrapFetchWithProxy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/api/rest/wrapFetchWithProxy.ts"],"sourcesContent":["import { EnvHttpProxyAgent } from 'undici';\n\nimport { FetchLike } from './client.types';\nimport { env } from '../../utils/env';\n\nconst debug = require('debug')('expo:api:fetch:proxy') as typeof console.log;\n\n/** Wrap fetch with support for proxies. */\nexport function wrapFetchWithProxy(fetchFunction: FetchLike): FetchLike {\n // NOTE(EvanBacon): DO NOT RETURN AN ASYNC WRAPPER. THIS BREAKS LOADING INDICATORS.\n return function fetchWithProxy(url, options = {}) {\n if (!options.dispatcher && env.HTTP_PROXY) {\n debug('Using proxy:', env.HTTP_PROXY);\n options.dispatcher = new EnvHttpProxyAgent();\n }\n\n return fetchFunction(url, options);\n };\n}\n"],"names":["wrapFetchWithProxy","debug","require","fetchFunction","fetchWithProxy","url","options","dispatcher","env","HTTP_PROXY","EnvHttpProxyAgent"],"mappings":";;;;+BAQgBA;;;eAAAA;;;;yBARkB;;;;;;qBAGd;AAEpB,MAAMC,QAAQC,QAAQ,SAAS;AAGxB,SAASF,mBAAmBG,aAAwB;IACzD,mFAAmF;IACnF,OAAO,SAASC,eAAeC,GAAG,EAAEC,UAAU,CAAC,CAAC;QAC9C,IAAI,CAACA,QAAQC,UAAU,IAAIC,QAAG,CAACC,UAAU,EAAE;YACzCR,MAAM,gBAAgBO,QAAG,CAACC,UAAU;YACpCH,QAAQC,UAAU,GAAG,IAAIG,CAAAA,SAAgB,mBAAC;QAC5C;QAEA,OAAOP,cAAcE,KAAKC;IAC5B;AACF"}