@expo/cli 0.7.3 → 0.9.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.
Files changed (200) hide show
  1. package/README.md +1 -1
  2. package/build/bin/cli +17 -3
  3. package/build/bin/cli.map +1 -1
  4. package/build/src/api/getExpoGoIntermediateCertificate.js +0 -2
  5. package/build/src/api/getExpoGoIntermediateCertificate.js.map +1 -1
  6. package/build/src/api/getProjectDevelopmentCertificate.js +0 -2
  7. package/build/src/api/getProjectDevelopmentCertificate.js.map +1 -1
  8. package/build/src/api/graphql/queries/AppQuery.js +39 -0
  9. package/build/src/api/graphql/queries/AppQuery.js.map +1 -0
  10. package/build/src/api/graphql/queries/UserQuery.js +10 -3
  11. package/build/src/api/graphql/queries/UserQuery.js.map +1 -1
  12. package/build/src/api/graphql/types/App.js +23 -0
  13. package/build/src/api/graphql/types/App.js.map +1 -0
  14. package/build/src/api/signManifest.js +0 -12
  15. package/build/src/api/signManifest.js.map +1 -1
  16. package/build/src/api/user/UserSettings.js.map +1 -1
  17. package/build/src/api/user/user.js.map +1 -1
  18. package/build/src/config/configAsync.js +3 -0
  19. package/build/src/config/configAsync.js.map +1 -1
  20. package/build/src/customize/customizeAsync.js +3 -0
  21. package/build/src/customize/customizeAsync.js.map +1 -1
  22. package/build/src/export/createBundles.js +8 -3
  23. package/build/src/export/createBundles.js.map +1 -1
  24. package/build/src/export/embed/exportEmbedAsync.js +23 -0
  25. package/build/src/export/embed/exportEmbedAsync.js.map +1 -0
  26. package/build/src/export/embed/index.js +117 -0
  27. package/build/src/export/embed/index.js.map +1 -0
  28. package/build/src/export/embed/resolveOptions.js +63 -0
  29. package/build/src/export/embed/resolveOptions.js.map +1 -0
  30. package/build/src/export/exportApp.js +58 -31
  31. package/build/src/export/exportApp.js.map +1 -1
  32. package/build/src/export/exportAssets.js +17 -0
  33. package/build/src/export/exportAssets.js.map +1 -1
  34. package/build/src/export/exportAsync.js +3 -0
  35. package/build/src/export/exportAsync.js.map +1 -1
  36. package/build/src/export/exportStaticAsync.js +179 -0
  37. package/build/src/export/exportStaticAsync.js.map +1 -0
  38. package/build/src/export/fork-bundleAsync.js +15 -43
  39. package/build/src/export/fork-bundleAsync.js.map +1 -1
  40. package/build/src/export/html.js +21 -0
  41. package/build/src/export/html.js.map +1 -0
  42. package/build/src/export/index.js +5 -1
  43. package/build/src/export/index.js.map +1 -1
  44. package/build/src/export/printBundleSizes.js +2 -2
  45. package/build/src/export/printBundleSizes.js.map +1 -1
  46. package/build/src/export/resolveOptions.js +1 -0
  47. package/build/src/export/resolveOptions.js.map +1 -1
  48. package/build/src/export/web/exportWebAsync.js +3 -0
  49. package/build/src/export/web/exportWebAsync.js.map +1 -1
  50. package/build/src/export/writeContents.js +5 -2
  51. package/build/src/export/writeContents.js.map +1 -1
  52. package/build/src/graphql/generated.js +462 -0
  53. package/build/src/graphql/generated.js.map +1 -0
  54. package/build/src/install/checkPackages.js +6 -0
  55. package/build/src/install/checkPackages.js.map +1 -1
  56. package/build/src/install/installAsync.js +18 -1
  57. package/build/src/install/installAsync.js.map +1 -1
  58. package/build/src/prebuild/clearNativeFolder.js +6 -1
  59. package/build/src/prebuild/clearNativeFolder.js.map +1 -1
  60. package/build/src/prebuild/copyTemplateFiles.js +3 -33
  61. package/build/src/prebuild/copyTemplateFiles.js.map +1 -1
  62. package/build/src/prebuild/ensureConfigAsync.js +1 -12
  63. package/build/src/prebuild/ensureConfigAsync.js.map +1 -1
  64. package/build/src/prebuild/prebuildAsync.js +7 -2
  65. package/build/src/prebuild/prebuildAsync.js.map +1 -1
  66. package/build/src/prebuild/resolveOptions.js +7 -8
  67. package/build/src/prebuild/resolveOptions.js.map +1 -1
  68. package/build/src/prebuild/resolveTemplate.js +5 -0
  69. package/build/src/prebuild/resolveTemplate.js.map +1 -1
  70. package/build/src/prebuild/updateFromTemplate.js +6 -8
  71. package/build/src/prebuild/updateFromTemplate.js.map +1 -1
  72. package/build/src/prebuild/updatePackageJson.js +33 -47
  73. package/build/src/prebuild/updatePackageJson.js.map +1 -1
  74. package/build/src/prebuild/validateTemplatePlatforms.js +48 -0
  75. package/build/src/prebuild/validateTemplatePlatforms.js.map +1 -0
  76. package/build/src/run/android/runAndroidAsync.js +4 -0
  77. package/build/src/run/android/runAndroidAsync.js.map +1 -1
  78. package/build/src/run/ios/appleDevice/AppleDevice.js +25 -19
  79. package/build/src/run/ios/appleDevice/AppleDevice.js.map +1 -1
  80. package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js.map +1 -1
  81. package/build/src/run/ios/options/resolveNativeScheme.js +13 -4
  82. package/build/src/run/ios/options/resolveNativeScheme.js.map +1 -1
  83. package/build/src/run/ios/runIosAsync.js +3 -0
  84. package/build/src/run/ios/runIosAsync.js.map +1 -1
  85. package/build/src/run/startBundler.js +4 -0
  86. package/build/src/run/startBundler.js.map +1 -1
  87. package/build/src/start/doctor/Prerequisite.js.map +1 -1
  88. package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js +12 -6
  89. package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js.map +1 -1
  90. package/build/src/start/doctor/dependencies/getVersionedPackages.js +13 -2
  91. package/build/src/start/doctor/dependencies/getVersionedPackages.js.map +1 -1
  92. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js +12 -4
  93. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js.map +1 -1
  94. package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js +31 -5
  95. package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js.map +1 -1
  96. package/build/src/start/doctor/typescript/updateTSConfig.js +6 -0
  97. package/build/src/start/doctor/typescript/updateTSConfig.js.map +1 -1
  98. package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js +1 -0
  99. package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js.map +1 -1
  100. package/build/src/start/index.js +3 -1
  101. package/build/src/start/index.js.map +1 -1
  102. package/build/src/start/platforms/android/adb.js +1 -1
  103. package/build/src/start/platforms/android/adb.js.map +1 -1
  104. package/build/src/start/platforms/ios/AppleDeviceManager.js +1 -1
  105. package/build/src/start/platforms/ios/AppleDeviceManager.js.map +1 -1
  106. package/build/src/start/server/BundlerDevServer.js +16 -2
  107. package/build/src/start/server/BundlerDevServer.js.map +1 -1
  108. package/build/src/start/server/DevServerManager.js +33 -2
  109. package/build/src/start/server/DevServerManager.js.map +1 -1
  110. package/build/src/start/server/getStaticRenderFunctions.js +167 -0
  111. package/build/src/start/server/getStaticRenderFunctions.js.map +1 -0
  112. package/build/src/start/server/metro/MetroBundlerDevServer.js +262 -3
  113. package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
  114. package/build/src/start/server/metro/MetroTerminalReporter.js +2 -34
  115. package/build/src/start/server/metro/MetroTerminalReporter.js.map +1 -1
  116. package/build/src/start/server/metro/externals.js +72 -0
  117. package/build/src/start/server/metro/externals.js.map +1 -0
  118. package/build/src/start/server/metro/getCssModulesFromBundler.js +77 -0
  119. package/build/src/start/server/metro/getCssModulesFromBundler.js.map +1 -0
  120. package/build/src/start/server/metro/inspector-proxy/index.js +2 -2
  121. package/build/src/start/server/metro/inspector-proxy/index.js.map +1 -1
  122. package/build/src/start/server/metro/inspector-proxy/proxy.js +1 -3
  123. package/build/src/start/server/metro/inspector-proxy/proxy.js.map +1 -1
  124. package/build/src/start/server/metro/instantiateMetro.js +47 -48
  125. package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
  126. package/build/src/start/server/metro/metroErrorInterface.js +137 -0
  127. package/build/src/start/server/metro/metroErrorInterface.js.map +1 -0
  128. package/build/src/start/server/metro/metroWatchTypeScriptFiles.js +51 -0
  129. package/build/src/start/server/metro/metroWatchTypeScriptFiles.js.map +1 -0
  130. package/build/src/start/server/metro/resolveFromProject.js +26 -3
  131. package/build/src/start/server/metro/resolveFromProject.js.map +1 -1
  132. package/build/src/start/server/metro/router.js +15 -2
  133. package/build/src/start/server/metro/router.js.map +1 -1
  134. package/build/src/start/server/metro/runServer-fork.js +107 -0
  135. package/build/src/start/server/metro/runServer-fork.js.map +1 -0
  136. package/build/src/start/server/metro/symbolicate.js +6 -0
  137. package/build/src/start/server/metro/symbolicate.js.map +1 -0
  138. package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js +70 -0
  139. package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js.map +1 -0
  140. package/build/src/start/server/metro/withMetroMultiPlatform.js +188 -45
  141. package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
  142. package/build/src/start/server/middleware/ClassicManifestMiddleware.js +8 -1
  143. package/build/src/start/server/middleware/ClassicManifestMiddleware.js.map +1 -1
  144. package/build/src/start/server/middleware/CreateFileMiddleware.js +6 -3
  145. package/build/src/start/server/middleware/CreateFileMiddleware.js.map +1 -1
  146. package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js +113 -47
  147. package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js.map +1 -1
  148. package/build/src/start/server/middleware/ManifestMiddleware.js +59 -20
  149. package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
  150. package/build/src/start/server/type-generation/expo-env.js +27 -0
  151. package/build/src/start/server/type-generation/expo-env.js.map +1 -0
  152. package/build/src/start/server/type-generation/index.js +57 -0
  153. package/build/src/start/server/type-generation/index.js.map +1 -0
  154. package/build/src/start/server/type-generation/routes.js +291 -0
  155. package/build/src/start/server/type-generation/routes.js.map +1 -0
  156. package/build/src/start/server/type-generation/tsconfig.js +89 -0
  157. package/build/src/start/server/type-generation/tsconfig.js.map +1 -0
  158. package/build/src/start/server/webTemplate.js +20 -4
  159. package/build/src/start/server/webTemplate.js.map +1 -1
  160. package/build/src/start/server/webpack/WebpackBundlerDevServer.js +4 -6
  161. package/build/src/start/server/webpack/WebpackBundlerDevServer.js.map +1 -1
  162. package/build/src/start/startAsync.js +30 -8
  163. package/build/src/start/startAsync.js.map +1 -1
  164. package/build/src/utils/FileNotifier.js +11 -4
  165. package/build/src/utils/FileNotifier.js.map +1 -1
  166. package/build/src/utils/analytics/getMetroProperties.js +1 -1
  167. package/build/src/utils/analytics/getMetroProperties.js.map +1 -1
  168. package/build/src/utils/analytics/rudderstackClient.js +2 -2
  169. package/build/src/utils/codesigning.js +31 -7
  170. package/build/src/utils/codesigning.js.map +1 -1
  171. package/build/src/utils/dir.js +16 -6
  172. package/build/src/utils/dir.js.map +1 -1
  173. package/build/src/utils/env.js +6 -0
  174. package/build/src/utils/env.js.map +1 -1
  175. package/build/src/utils/mergeGitIgnorePaths.js +42 -0
  176. package/build/src/utils/mergeGitIgnorePaths.js.map +1 -1
  177. package/build/src/utils/nodeEnv.js +11 -0
  178. package/build/src/utils/nodeEnv.js.map +1 -0
  179. package/build/src/utils/resolveArgs.js +43 -0
  180. package/build/src/utils/resolveArgs.js.map +1 -1
  181. package/build/src/utils/strings.js +24 -0
  182. package/build/src/utils/strings.js.map +1 -0
  183. package/build/src/utils/template.js +21 -0
  184. package/build/src/utils/template.js.map +1 -0
  185. package/build/src/utils/tsconfig/evaluateTsConfig.js +61 -0
  186. package/build/src/utils/tsconfig/evaluateTsConfig.js.map +1 -0
  187. package/build/src/utils/tsconfig/loadTsConfigPaths.js +69 -0
  188. package/build/src/utils/tsconfig/loadTsConfigPaths.js.map +1 -0
  189. package/build/src/utils/tsconfig/matchTsConfigPathAlias.js +88 -0
  190. package/build/src/utils/tsconfig/matchTsConfigPathAlias.js.map +1 -0
  191. package/build/src/utils/tsconfig/resolveWithTsConfigPaths.js +41 -0
  192. package/build/src/utils/tsconfig/resolveWithTsConfigPaths.js.map +1 -0
  193. package/package.json +16 -10
  194. package/static/template/metro.config.js +4 -1
  195. package/build/src/api/getProject.js +0 -19
  196. package/build/src/api/getProject.js.map +0 -1
  197. package/build/src/api/graphql/generated.js +0 -113
  198. package/build/src/api/graphql/generated.js.map +0 -1
  199. package/build/src/prebuild/writeMetroConfig.js +0 -89
  200. package/build/src/prebuild/writeMetroConfig.js.map +0 -1
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ exports.evaluateTsConfig = evaluateTsConfig;
6
+ exports.importTypeScriptFromProjectOptionally = importTypeScriptFromProjectOptionally;
7
+ var _path = _interopRequireDefault(require("path"));
8
+ var _resolveFrom = _interopRequireDefault(require("resolve-from"));
9
+ function _interopRequireDefault(obj) {
10
+ return obj && obj.__esModule ? obj : {
11
+ default: obj
12
+ };
13
+ }
14
+ function evaluateTsConfig(ts, tsConfigPath) {
15
+ const formatDiagnosticsHost = {
16
+ getNewLine: ()=>require("os").EOL
17
+ ,
18
+ getCurrentDirectory: ts.sys.getCurrentDirectory,
19
+ getCanonicalFileName: (fileName)=>fileName
20
+ };
21
+ try {
22
+ var ref;
23
+ const { config , error } = ts.readConfigFile(tsConfigPath, ts.sys.readFile);
24
+ if (error) {
25
+ throw new Error(ts.formatDiagnostic(error, formatDiagnosticsHost));
26
+ }
27
+ const jsonFileContents = ts.parseJsonConfigFileContent(config, {
28
+ ...ts.sys,
29
+ readDirectory: (_, ext)=>[
30
+ ext ? `file${ext[0]}` : `file.ts`
31
+ ]
32
+ }, _path.default.dirname(tsConfigPath));
33
+ if (jsonFileContents.errors) {
34
+ // filter out "no inputs were found in config file" error
35
+ jsonFileContents.errors = jsonFileContents.errors.filter(({ code })=>code !== 18003
36
+ );
37
+ }
38
+ if ((ref = jsonFileContents.errors) == null ? void 0 : ref.length) {
39
+ throw new Error(ts.formatDiagnostic(jsonFileContents.errors[0], formatDiagnosticsHost));
40
+ }
41
+ return {
42
+ compilerOptions: jsonFileContents.options,
43
+ raw: config.raw
44
+ };
45
+ } catch (error) {
46
+ if ((error == null ? void 0 : error.name) === "SyntaxError") {
47
+ var _message;
48
+ throw new Error("tsconfig.json is invalid:\n" + ((_message = error.message) != null ? _message : ""));
49
+ }
50
+ throw error;
51
+ }
52
+ }
53
+ function importTypeScriptFromProjectOptionally(projectRoot) {
54
+ const resolvedPath = _resolveFrom.default.silent(projectRoot, "typescript");
55
+ if (!resolvedPath) {
56
+ return null;
57
+ }
58
+ return require(resolvedPath);
59
+ }
60
+
61
+ //# sourceMappingURL=evaluateTsConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/utils/tsconfig/evaluateTsConfig.ts"],"sourcesContent":["import path from 'path';\nimport resolveFrom from 'resolve-from';\n\nexport function evaluateTsConfig(ts: typeof import('typescript'), tsConfigPath: string) {\n const formatDiagnosticsHost: import('typescript').FormatDiagnosticsHost = {\n getNewLine: () => require('os').EOL,\n getCurrentDirectory: ts.sys.getCurrentDirectory,\n getCanonicalFileName: (fileName: string) => fileName,\n };\n\n try {\n const { config, error } = ts.readConfigFile(tsConfigPath, ts.sys.readFile);\n\n if (error) {\n throw new Error(ts.formatDiagnostic(error, formatDiagnosticsHost));\n }\n\n const jsonFileContents = ts.parseJsonConfigFileContent(\n config,\n {\n ...ts.sys,\n readDirectory: (_, ext) => [ext ? `file${ext[0]}` : `file.ts`],\n },\n path.dirname(tsConfigPath)\n );\n\n if (jsonFileContents.errors) {\n // filter out \"no inputs were found in config file\" error\n jsonFileContents.errors = jsonFileContents.errors.filter(({ code }) => code !== 18003);\n }\n\n if (jsonFileContents.errors?.length) {\n throw new Error(ts.formatDiagnostic(jsonFileContents.errors[0], formatDiagnosticsHost));\n }\n\n return { compilerOptions: jsonFileContents.options, raw: config.raw };\n } catch (error: any) {\n if (error?.name === 'SyntaxError') {\n throw new Error('tsconfig.json is invalid:\\n' + (error.message ?? ''));\n }\n throw error;\n }\n}\n\nexport function importTypeScriptFromProjectOptionally(\n projectRoot: string\n): typeof import('typescript') | null {\n const resolvedPath = resolveFrom.silent(projectRoot, 'typescript');\n if (!resolvedPath) {\n return null;\n }\n return require(resolvedPath);\n}\n"],"names":["evaluateTsConfig","importTypeScriptFromProjectOptionally","ts","tsConfigPath","formatDiagnosticsHost","getNewLine","require","EOL","getCurrentDirectory","sys","getCanonicalFileName","fileName","jsonFileContents","config","error","readConfigFile","readFile","Error","formatDiagnostic","parseJsonConfigFileContent","readDirectory","_","ext","path","dirname","errors","filter","code","length","compilerOptions","options","raw","name","message","projectRoot","resolvedPath","resolveFrom","silent"],"mappings":"AAAA;;;;QAGgBA,gBAAgB,GAAhBA,gBAAgB;QAyChBC,qCAAqC,GAArCA,qCAAqC;AA5CpC,IAAA,KAAM,kCAAN,MAAM,EAAA;AACC,IAAA,YAAc,kCAAd,cAAc,EAAA;;;;;;AAE/B,SAASD,gBAAgB,CAACE,EAA+B,EAAEC,YAAoB,EAAE;IACtF,MAAMC,qBAAqB,GAA+C;QACxEC,UAAU,EAAE,IAAMC,OAAO,CAAC,IAAI,CAAC,CAACC,GAAG;QAAA;QACnCC,mBAAmB,EAAEN,EAAE,CAACO,GAAG,CAACD,mBAAmB;QAC/CE,oBAAoB,EAAE,CAACC,QAAgB,GAAKA,QAAQ;KACrD,AAAC;IAEF,IAAI;YAqBEC,GAAuB;QApB3B,MAAM,EAAEC,MAAM,CAAA,EAAEC,KAAK,CAAA,EAAE,GAAGZ,EAAE,CAACa,cAAc,CAACZ,YAAY,EAAED,EAAE,CAACO,GAAG,CAACO,QAAQ,CAAC,AAAC;QAE3E,IAAIF,KAAK,EAAE;YACT,MAAM,IAAIG,KAAK,CAACf,EAAE,CAACgB,gBAAgB,CAACJ,KAAK,EAAEV,qBAAqB,CAAC,CAAC,CAAC;SACpE;QAED,MAAMQ,gBAAgB,GAAGV,EAAE,CAACiB,0BAA0B,CACpDN,MAAM,EACN;YACE,GAAGX,EAAE,CAACO,GAAG;YACTW,aAAa,EAAE,CAACC,CAAC,EAAEC,GAAG,GAAK;oBAACA,GAAG,GAAG,CAAC,IAAI,EAAEA,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC;iBAAC;SAC/D,EACDC,KAAI,QAAA,CAACC,OAAO,CAACrB,YAAY,CAAC,CAC3B,AAAC;QAEF,IAAIS,gBAAgB,CAACa,MAAM,EAAE;YAC3B,yDAAyD;YACzDb,gBAAgB,CAACa,MAAM,GAAGb,gBAAgB,CAACa,MAAM,CAACC,MAAM,CAAC,CAAC,EAAEC,IAAI,CAAA,EAAE,GAAKA,IAAI,KAAK,KAAK;YAAA,CAAC,CAAC;SACxF;QAED,IAAIf,CAAAA,GAAuB,GAAvBA,gBAAgB,CAACa,MAAM,SAAQ,GAA/Bb,KAAAA,CAA+B,GAA/BA,GAAuB,CAAEgB,MAAM,EAAE;YACnC,MAAM,IAAIX,KAAK,CAACf,EAAE,CAACgB,gBAAgB,CAACN,gBAAgB,CAACa,MAAM,CAAC,CAAC,CAAC,EAAErB,qBAAqB,CAAC,CAAC,CAAC;SACzF;QAED,OAAO;YAAEyB,eAAe,EAAEjB,gBAAgB,CAACkB,OAAO;YAAEC,GAAG,EAAElB,MAAM,CAACkB,GAAG;SAAE,CAAC;KACvE,CAAC,OAAOjB,KAAK,EAAO;QACnB,IAAIA,CAAAA,KAAK,QAAM,GAAXA,KAAAA,CAAW,GAAXA,KAAK,CAAEkB,IAAI,CAAA,KAAK,aAAa,EAAE;gBACgBlB,QAAa;YAA9D,MAAM,IAAIG,KAAK,CAAC,6BAA6B,GAAG,CAACH,CAAAA,QAAa,GAAbA,KAAK,CAACmB,OAAO,YAAbnB,QAAa,GAAI,EAAE,CAAC,CAAC,CAAC;SACxE;QACD,MAAMA,KAAK,CAAC;KACb;CACF;AAEM,SAASb,qCAAqC,CACnDiC,WAAmB,EACiB;IACpC,MAAMC,YAAY,GAAGC,YAAW,QAAA,CAACC,MAAM,CAACH,WAAW,EAAE,YAAY,CAAC,AAAC;IACnE,IAAI,CAACC,YAAY,EAAE;QACjB,OAAO,IAAI,CAAC;KACb;IACD,OAAO7B,OAAO,CAAC6B,YAAY,CAAC,CAAC;CAC9B"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ exports.loadTsConfigPathsAsync = loadTsConfigPathsAsync;
6
+ exports.readTsconfigAsync = readTsconfigAsync;
7
+ var _jsonFile = _interopRequireDefault(require("@expo/json-file"));
8
+ var _path = _interopRequireDefault(require("path"));
9
+ var _dir = require("../dir");
10
+ var _evaluateTsConfig = require("./evaluateTsConfig");
11
+ function _interopRequireDefault(obj) {
12
+ return obj && obj.__esModule ? obj : {
13
+ default: obj
14
+ };
15
+ }
16
+ const debug = require("debug")("expo:utils:tsconfig:load");
17
+ async function loadTsConfigPathsAsync(dir) {
18
+ var ref;
19
+ const options = (ref = await readTsconfigAsync(dir)) != null ? ref : await readJsconfigAsync(dir);
20
+ if (options) {
21
+ var ref1, ref2;
22
+ const [filepath, config] = options;
23
+ if ((ref1 = config.compilerOptions) == null ? void 0 : ref1.baseUrl) {
24
+ var ref3;
25
+ return {
26
+ paths: (ref3 = config.compilerOptions) == null ? void 0 : ref3.paths,
27
+ baseUrl: _path.default.resolve(dir, config.compilerOptions.baseUrl)
28
+ };
29
+ }
30
+ debug(`No baseUrl found in ${filepath}`);
31
+ return {
32
+ paths: (ref2 = config.compilerOptions) == null ? void 0 : ref2.paths,
33
+ baseUrl: dir
34
+ };
35
+ }
36
+ return null;
37
+ }
38
+ async function readJsconfigAsync(projectRoot) {
39
+ const configPath = _path.default.join(projectRoot, "jsconfig.json");
40
+ if (await (0, _dir).fileExistsAsync(configPath)) {
41
+ const config = await _jsonFile.default.readAsync(configPath, {
42
+ json5: true
43
+ });
44
+ if (config) {
45
+ return [
46
+ configPath,
47
+ config
48
+ ];
49
+ }
50
+ }
51
+ return null;
52
+ }
53
+ async function readTsconfigAsync(projectRoot) {
54
+ const configPath = _path.default.join(projectRoot, "tsconfig.json");
55
+ if (await (0, _dir).fileExistsAsync(configPath)) {
56
+ // We need to fully evaluate the tsconfig to get the baseUrl and paths in case they were applied in `extends`.
57
+ const ts = (0, _evaluateTsConfig).importTypeScriptFromProjectOptionally(projectRoot);
58
+ if (ts) {
59
+ return [
60
+ configPath,
61
+ (0, _evaluateTsConfig).evaluateTsConfig(ts, configPath)
62
+ ];
63
+ }
64
+ debug(`typescript module not found in: ${projectRoot}`);
65
+ }
66
+ return null;
67
+ }
68
+
69
+ //# sourceMappingURL=loadTsConfigPaths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/utils/tsconfig/loadTsConfigPaths.ts"],"sourcesContent":["import JsonFile from '@expo/json-file';\nimport path from 'path';\n\nimport { fileExistsAsync } from '../dir';\nimport { evaluateTsConfig, importTypeScriptFromProjectOptionally } from './evaluateTsConfig';\n\nexport type TsConfigPaths = {\n paths?: Record<string, string[]>;\n baseUrl: string;\n};\n\ntype ConfigReadResults = [\n string,\n {\n compilerOptions?: {\n baseUrl?: string;\n paths?: Record<string, string[]>;\n };\n }\n];\n\nconst debug = require('debug')('expo:utils:tsconfig:load') as typeof console.log;\n\nexport async function loadTsConfigPathsAsync(dir: string): Promise<TsConfigPaths | null> {\n const options = (await readTsconfigAsync(dir)) ?? (await readJsconfigAsync(dir));\n if (options) {\n const [filepath, config] = options;\n if (config.compilerOptions?.baseUrl) {\n return {\n paths: config.compilerOptions?.paths,\n baseUrl: path.resolve(dir, config.compilerOptions.baseUrl),\n };\n }\n debug(`No baseUrl found in ${filepath}`);\n return {\n paths: config.compilerOptions?.paths,\n baseUrl: dir,\n };\n }\n return null;\n}\n\nasync function readJsconfigAsync(projectRoot: string): Promise<null | ConfigReadResults> {\n const configPath = path.join(projectRoot, 'jsconfig.json');\n if (await fileExistsAsync(configPath)) {\n const config = await JsonFile.readAsync(configPath, { json5: true });\n if (config) {\n return [configPath, config];\n }\n }\n return null;\n}\n\n// TODO: Refactor for speed\nexport async function readTsconfigAsync(projectRoot: string): Promise<null | ConfigReadResults> {\n const configPath = path.join(projectRoot, 'tsconfig.json');\n if (await fileExistsAsync(configPath)) {\n // We need to fully evaluate the tsconfig to get the baseUrl and paths in case they were applied in `extends`.\n const ts = importTypeScriptFromProjectOptionally(projectRoot);\n if (ts) {\n return [configPath, evaluateTsConfig(ts, configPath)];\n }\n debug(`typescript module not found in: ${projectRoot}`);\n }\n return null;\n}\n"],"names":["loadTsConfigPathsAsync","readTsconfigAsync","debug","require","dir","options","readJsconfigAsync","config","filepath","compilerOptions","baseUrl","paths","path","resolve","projectRoot","configPath","join","fileExistsAsync","JsonFile","readAsync","json5","ts","importTypeScriptFromProjectOptionally","evaluateTsConfig"],"mappings":"AAAA;;;;QAuBsBA,sBAAsB,GAAtBA,sBAAsB;QA+BtBC,iBAAiB,GAAjBA,iBAAiB;AAtDlB,IAAA,SAAiB,kCAAjB,iBAAiB,EAAA;AACrB,IAAA,KAAM,kCAAN,MAAM,EAAA;AAES,IAAA,IAAQ,WAAR,QAAQ,CAAA;AACgC,IAAA,iBAAoB,WAApB,oBAAoB,CAAA;;;;;;AAiB5F,MAAMC,KAAK,GAAGC,OAAO,CAAC,OAAO,CAAC,CAAC,0BAA0B,CAAC,AAAsB,AAAC;AAE1E,eAAeH,sBAAsB,CAACI,GAAW,EAAiC;QACvE,GAA8B;IAA9C,MAAMC,OAAO,GAAG,CAAA,GAA8B,GAA7B,MAAMJ,iBAAiB,CAACG,GAAG,CAAC,YAA7B,GAA8B,GAAK,MAAME,iBAAiB,CAACF,GAAG,CAAC,AAAC,AAAC;IACjF,IAAIC,OAAO,EAAE;YAEPE,IAAsB,EAQjBA,IAAsB;QAT/B,MAAM,CAACC,QAAQ,EAAED,MAAM,CAAC,GAAGF,OAAO,AAAC;QACnC,IAAIE,CAAAA,IAAsB,GAAtBA,MAAM,CAACE,eAAe,SAAS,GAA/BF,KAAAA,CAA+B,GAA/BA,IAAsB,CAAEG,OAAO,EAAE;gBAE1BH,IAAsB;YAD/B,OAAO;gBACLI,KAAK,EAAEJ,CAAAA,IAAsB,GAAtBA,MAAM,CAACE,eAAe,SAAO,GAA7BF,KAAAA,CAA6B,GAA7BA,IAAsB,CAAEI,KAAK;gBACpCD,OAAO,EAAEE,KAAI,QAAA,CAACC,OAAO,CAACT,GAAG,EAAEG,MAAM,CAACE,eAAe,CAACC,OAAO,CAAC;aAC3D,CAAC;SACH;QACDR,KAAK,CAAC,CAAC,oBAAoB,EAAEM,QAAQ,CAAC,CAAC,CAAC,CAAC;QACzC,OAAO;YACLG,KAAK,EAAEJ,CAAAA,IAAsB,GAAtBA,MAAM,CAACE,eAAe,SAAO,GAA7BF,KAAAA,CAA6B,GAA7BA,IAAsB,CAAEI,KAAK;YACpCD,OAAO,EAAEN,GAAG;SACb,CAAC;KACH;IACD,OAAO,IAAI,CAAC;CACb;AAED,eAAeE,iBAAiB,CAACQ,WAAmB,EAAqC;IACvF,MAAMC,UAAU,GAAGH,KAAI,QAAA,CAACI,IAAI,CAACF,WAAW,EAAE,eAAe,CAAC,AAAC;IAC3D,IAAI,MAAMG,CAAAA,GAAAA,IAAe,AAAY,CAAA,gBAAZ,CAACF,UAAU,CAAC,EAAE;QACrC,MAAMR,MAAM,GAAG,MAAMW,SAAQ,QAAA,CAACC,SAAS,CAACJ,UAAU,EAAE;YAAEK,KAAK,EAAE,IAAI;SAAE,CAAC,AAAC;QACrE,IAAIb,MAAM,EAAE;YACV,OAAO;gBAACQ,UAAU;gBAAER,MAAM;aAAC,CAAC;SAC7B;KACF;IACD,OAAO,IAAI,CAAC;CACb;AAGM,eAAeN,iBAAiB,CAACa,WAAmB,EAAqC;IAC9F,MAAMC,UAAU,GAAGH,KAAI,QAAA,CAACI,IAAI,CAACF,WAAW,EAAE,eAAe,CAAC,AAAC;IAC3D,IAAI,MAAMG,CAAAA,GAAAA,IAAe,AAAY,CAAA,gBAAZ,CAACF,UAAU,CAAC,EAAE;QACrC,8GAA8G;QAC9G,MAAMM,EAAE,GAAGC,CAAAA,GAAAA,iBAAqC,AAAa,CAAA,sCAAb,CAACR,WAAW,CAAC,AAAC;QAC9D,IAAIO,EAAE,EAAE;YACN,OAAO;gBAACN,UAAU;gBAAEQ,CAAAA,GAAAA,iBAAgB,AAAgB,CAAA,iBAAhB,CAACF,EAAE,EAAEN,UAAU,CAAC;aAAC,CAAC;SACvD;QACDb,KAAK,CAAC,CAAC,gCAAgC,EAAEY,WAAW,CAAC,CAAC,CAAC,CAAC;KACzD;IACD,OAAO,IAAI,CAAC;CACb"}
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ exports.matchTsConfigPathAlias = matchTsConfigPathAlias;
6
+ const asterisk = 42;
7
+ function hasZeroOrOneAsteriskCharacter(str) {
8
+ let seenAsterisk = false;
9
+ for(let i = 0; i < str.length; i++){
10
+ if (str.charCodeAt(i) === asterisk) {
11
+ if (!seenAsterisk) {
12
+ seenAsterisk = true;
13
+ } else {
14
+ return false;
15
+ }
16
+ }
17
+ }
18
+ return true;
19
+ }
20
+ function tryParsePattern(pattern) {
21
+ // This should be verified outside of here and a proper error thrown.
22
+ const indexOfStar = pattern.indexOf("*");
23
+ return indexOfStar === -1 ? undefined : {
24
+ prefix: pattern.slice(0, indexOfStar),
25
+ suffix: pattern.slice(indexOfStar + 1)
26
+ };
27
+ }
28
+ function isPatternMatch({ prefix , suffix }, candidate) {
29
+ return candidate.length >= prefix.length + suffix.length && candidate.startsWith(prefix) && candidate.endsWith(suffix);
30
+ }
31
+ /**
32
+ * Return the object corresponding to the best pattern to match `candidate`.
33
+ *
34
+ * @internal
35
+ */ function findBestPatternMatch(values, getPattern, candidate) {
36
+ let matchedValue;
37
+ // use length of prefix as betterness criteria
38
+ let longestMatchPrefixLength = -1;
39
+ for (const v of values){
40
+ const pattern = getPattern(v);
41
+ if (isPatternMatch(pattern, candidate) && pattern.prefix.length > longestMatchPrefixLength) {
42
+ longestMatchPrefixLength = pattern.prefix.length;
43
+ matchedValue = v;
44
+ }
45
+ }
46
+ return matchedValue;
47
+ }
48
+ /**
49
+ * patternStrings contains both pattern strings (containing "*") and regular strings.
50
+ * Return an exact match if possible, or a pattern match, or undefined.
51
+ * (These are verified by verifyCompilerOptions to have 0 or 1 "*" characters.)
52
+ */ function matchPatternOrExact(patternStrings, candidate) {
53
+ const patterns = [];
54
+ for (const patternString of patternStrings){
55
+ if (!hasZeroOrOneAsteriskCharacter(patternString)) continue;
56
+ const pattern = tryParsePattern(patternString);
57
+ if (pattern) {
58
+ patterns.push(pattern);
59
+ } else if (patternString === candidate) {
60
+ // pattern was matched as is - no need to search further
61
+ return patternString;
62
+ }
63
+ }
64
+ return findBestPatternMatch(patterns, (_)=>_
65
+ , candidate);
66
+ }
67
+ /**
68
+ * Given that candidate matches pattern, returns the text matching the '*'.
69
+ * E.g.: matchedText(tryParsePattern("foo*baz"), "foobarbaz") === "bar"
70
+ */ function matchedText(pattern, candidate) {
71
+ return candidate.substring(pattern.prefix.length, candidate.length - pattern.suffix.length);
72
+ }
73
+ function getStar(matchedPattern, moduleName) {
74
+ return typeof matchedPattern === "string" ? undefined : matchedText(matchedPattern, moduleName);
75
+ }
76
+ function matchTsConfigPathAlias(pathsKeys, moduleName) {
77
+ // If the module name does not match any of the patterns in `paths` we hand off resolving to webpack
78
+ const matchedPattern = matchPatternOrExact(pathsKeys, moduleName);
79
+ if (!matchedPattern) {
80
+ return null;
81
+ }
82
+ return {
83
+ star: getStar(matchedPattern, moduleName),
84
+ text: typeof matchedPattern === "string" ? matchedPattern : `${matchedPattern.prefix}*${matchedPattern.suffix}`
85
+ };
86
+ }
87
+
88
+ //# sourceMappingURL=matchTsConfigPathAlias.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/utils/tsconfig/matchTsConfigPathAlias.ts"],"sourcesContent":["// From TypeScript: https://github.com/microsoft/TypeScript/blob/5b1897969769449217237aecbe364f823096c63e/src/compiler/core.ts\n// License: https://github.com/microsoft/TypeScript/blob/214df64/LICENSE.txt\n\nexport interface Pattern {\n prefix: string;\n suffix: string;\n}\n\nconst asterisk = 0x2a;\n\nfunction hasZeroOrOneAsteriskCharacter(str: string): boolean {\n let seenAsterisk = false;\n for (let i = 0; i < str.length; i++) {\n if (str.charCodeAt(i) === asterisk) {\n if (!seenAsterisk) {\n seenAsterisk = true;\n } else {\n return false;\n }\n }\n }\n return true;\n}\n\nfunction tryParsePattern(pattern: string): Pattern | undefined {\n // This should be verified outside of here and a proper error thrown.\n const indexOfStar = pattern.indexOf('*');\n return indexOfStar === -1\n ? undefined\n : {\n prefix: pattern.slice(0, indexOfStar),\n suffix: pattern.slice(indexOfStar + 1),\n };\n}\n\nfunction isPatternMatch({ prefix, suffix }: Pattern, candidate: string) {\n return (\n candidate.length >= prefix.length + suffix.length &&\n candidate.startsWith(prefix) &&\n candidate.endsWith(suffix)\n );\n}\n\n/**\n * Return the object corresponding to the best pattern to match `candidate`.\n *\n * @internal\n */\nfunction findBestPatternMatch<T>(\n values: readonly T[],\n getPattern: (value: T) => Pattern,\n candidate: string\n): T | undefined {\n let matchedValue: T | undefined;\n // use length of prefix as betterness criteria\n let longestMatchPrefixLength = -1;\n\n for (const v of values) {\n const pattern = getPattern(v);\n if (isPatternMatch(pattern, candidate) && pattern.prefix.length > longestMatchPrefixLength) {\n longestMatchPrefixLength = pattern.prefix.length;\n matchedValue = v;\n }\n }\n\n return matchedValue;\n}\n\n/**\n * patternStrings contains both pattern strings (containing \"*\") and regular strings.\n * Return an exact match if possible, or a pattern match, or undefined.\n * (These are verified by verifyCompilerOptions to have 0 or 1 \"*\" characters.)\n */\nfunction matchPatternOrExact(\n patternStrings: readonly string[],\n candidate: string\n): string | Pattern | undefined {\n const patterns: Pattern[] = [];\n for (const patternString of patternStrings) {\n if (!hasZeroOrOneAsteriskCharacter(patternString)) continue;\n const pattern = tryParsePattern(patternString);\n if (pattern) {\n patterns.push(pattern);\n } else if (patternString === candidate) {\n // pattern was matched as is - no need to search further\n return patternString;\n }\n }\n\n return findBestPatternMatch(patterns, (_) => _, candidate);\n}\n\n/**\n * Given that candidate matches pattern, returns the text matching the '*'.\n * E.g.: matchedText(tryParsePattern(\"foo*baz\"), \"foobarbaz\") === \"bar\"\n */\nfunction matchedText(pattern: Pattern, candidate: string): string {\n return candidate.substring(pattern.prefix.length, candidate.length - pattern.suffix.length);\n}\n\nfunction getStar(matchedPattern: string | Pattern, moduleName: string) {\n return typeof matchedPattern === 'string' ? undefined : matchedText(matchedPattern, moduleName);\n}\n\nexport function matchTsConfigPathAlias(pathsKeys: string[], moduleName: string) {\n // If the module name does not match any of the patterns in `paths` we hand off resolving to webpack\n const matchedPattern = matchPatternOrExact(pathsKeys, moduleName);\n if (!matchedPattern) {\n return null;\n }\n\n return {\n star: getStar(matchedPattern, moduleName),\n text:\n typeof matchedPattern === 'string'\n ? matchedPattern\n : `${matchedPattern.prefix}*${matchedPattern.suffix}`,\n };\n}\n"],"names":["matchTsConfigPathAlias","asterisk","hasZeroOrOneAsteriskCharacter","str","seenAsterisk","i","length","charCodeAt","tryParsePattern","pattern","indexOfStar","indexOf","undefined","prefix","slice","suffix","isPatternMatch","candidate","startsWith","endsWith","findBestPatternMatch","values","getPattern","matchedValue","longestMatchPrefixLength","v","matchPatternOrExact","patternStrings","patterns","patternString","push","_","matchedText","substring","getStar","matchedPattern","moduleName","pathsKeys","star","text"],"mappings":"AAGA;;;;QAqGgBA,sBAAsB,GAAtBA,sBAAsB;AAhGtC,MAAMC,QAAQ,GAAG,EAAI,AAAC;AAEtB,SAASC,6BAA6B,CAACC,GAAW,EAAW;IAC3D,IAAIC,YAAY,GAAG,KAAK,AAAC;IACzB,IAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,GAAG,CAACG,MAAM,EAAED,CAAC,EAAE,CAAE;QACnC,IAAIF,GAAG,CAACI,UAAU,CAACF,CAAC,CAAC,KAAKJ,QAAQ,EAAE;YAClC,IAAI,CAACG,YAAY,EAAE;gBACjBA,YAAY,GAAG,IAAI,CAAC;aACrB,MAAM;gBACL,OAAO,KAAK,CAAC;aACd;SACF;KACF;IACD,OAAO,IAAI,CAAC;CACb;AAED,SAASI,eAAe,CAACC,OAAe,EAAuB;IAC7D,qEAAqE;IACrE,MAAMC,WAAW,GAAGD,OAAO,CAACE,OAAO,CAAC,GAAG,CAAC,AAAC;IACzC,OAAOD,WAAW,KAAK,CAAC,CAAC,GACrBE,SAAS,GACT;QACEC,MAAM,EAAEJ,OAAO,CAACK,KAAK,CAAC,CAAC,EAAEJ,WAAW,CAAC;QACrCK,MAAM,EAAEN,OAAO,CAACK,KAAK,CAACJ,WAAW,GAAG,CAAC,CAAC;KACvC,CAAC;CACP;AAED,SAASM,cAAc,CAAC,EAAEH,MAAM,CAAA,EAAEE,MAAM,CAAA,EAAW,EAAEE,SAAiB,EAAE;IACtE,OACEA,SAAS,CAACX,MAAM,IAAIO,MAAM,CAACP,MAAM,GAAGS,MAAM,CAACT,MAAM,IACjDW,SAAS,CAACC,UAAU,CAACL,MAAM,CAAC,IAC5BI,SAAS,CAACE,QAAQ,CAACJ,MAAM,CAAC,CAC1B;CACH;AAED;;;;GAIG,CACH,SAASK,oBAAoB,CAC3BC,MAAoB,EACpBC,UAAiC,EACjCL,SAAiB,EACF;IACf,IAAIM,YAAY,AAAe,AAAC;IAChC,8CAA8C;IAC9C,IAAIC,wBAAwB,GAAG,CAAC,CAAC,AAAC;IAElC,KAAK,MAAMC,CAAC,IAAIJ,MAAM,CAAE;QACtB,MAAMZ,OAAO,GAAGa,UAAU,CAACG,CAAC,CAAC,AAAC;QAC9B,IAAIT,cAAc,CAACP,OAAO,EAAEQ,SAAS,CAAC,IAAIR,OAAO,CAACI,MAAM,CAACP,MAAM,GAAGkB,wBAAwB,EAAE;YAC1FA,wBAAwB,GAAGf,OAAO,CAACI,MAAM,CAACP,MAAM,CAAC;YACjDiB,YAAY,GAAGE,CAAC,CAAC;SAClB;KACF;IAED,OAAOF,YAAY,CAAC;CACrB;AAED;;;;GAIG,CACH,SAASG,mBAAmB,CAC1BC,cAAiC,EACjCV,SAAiB,EACa;IAC9B,MAAMW,QAAQ,GAAc,EAAE,AAAC;IAC/B,KAAK,MAAMC,aAAa,IAAIF,cAAc,CAAE;QAC1C,IAAI,CAACzB,6BAA6B,CAAC2B,aAAa,CAAC,EAAE,SAAS;QAC5D,MAAMpB,OAAO,GAAGD,eAAe,CAACqB,aAAa,CAAC,AAAC;QAC/C,IAAIpB,OAAO,EAAE;YACXmB,QAAQ,CAACE,IAAI,CAACrB,OAAO,CAAC,CAAC;SACxB,MAAM,IAAIoB,aAAa,KAAKZ,SAAS,EAAE;YACtC,wDAAwD;YACxD,OAAOY,aAAa,CAAC;SACtB;KACF;IAED,OAAOT,oBAAoB,CAACQ,QAAQ,EAAE,CAACG,CAAC,GAAKA,CAAC;IAAA,EAAEd,SAAS,CAAC,CAAC;CAC5D;AAED;;;GAGG,CACH,SAASe,WAAW,CAACvB,OAAgB,EAAEQ,SAAiB,EAAU;IAChE,OAAOA,SAAS,CAACgB,SAAS,CAACxB,OAAO,CAACI,MAAM,CAACP,MAAM,EAAEW,SAAS,CAACX,MAAM,GAAGG,OAAO,CAACM,MAAM,CAACT,MAAM,CAAC,CAAC;CAC7F;AAED,SAAS4B,OAAO,CAACC,cAAgC,EAAEC,UAAkB,EAAE;IACrE,OAAO,OAAOD,cAAc,KAAK,QAAQ,GAAGvB,SAAS,GAAGoB,WAAW,CAACG,cAAc,EAAEC,UAAU,CAAC,CAAC;CACjG;AAEM,SAASpC,sBAAsB,CAACqC,SAAmB,EAAED,UAAkB,EAAE;IAC9E,oGAAoG;IACpG,MAAMD,cAAc,GAAGT,mBAAmB,CAACW,SAAS,EAAED,UAAU,CAAC,AAAC;IAClE,IAAI,CAACD,cAAc,EAAE;QACnB,OAAO,IAAI,CAAC;KACb;IAED,OAAO;QACLG,IAAI,EAAEJ,OAAO,CAACC,cAAc,EAAEC,UAAU,CAAC;QACzCG,IAAI,EACF,OAAOJ,cAAc,KAAK,QAAQ,GAC9BA,cAAc,GACd,CAAC,EAAEA,cAAc,CAACtB,MAAM,CAAC,CAAC,EAAEsB,cAAc,CAACpB,MAAM,CAAC,CAAC;KAC1D,CAAC;CACH"}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ exports.resolveWithTsConfigPaths = resolveWithTsConfigPaths;
6
+ var _path = _interopRequireDefault(require("path"));
7
+ var _matchTsConfigPathAlias = require("./matchTsConfigPathAlias");
8
+ function _interopRequireDefault(obj) {
9
+ return obj && obj.__esModule ? obj : {
10
+ default: obj
11
+ };
12
+ }
13
+ const debug = require("debug")("expo:metro:tsconfig-paths");
14
+ const isAbsolute = process.platform === "win32" ? _path.default.win32.isAbsolute : _path.default.posix.isAbsolute;
15
+ function resolveWithTsConfigPaths(config, request, resolve) {
16
+ const aliases = Object.keys(config.paths);
17
+ if (// If no aliases are added bail out
18
+ !aliases.length || // Library authors cannot utilize this feature in userspace.
19
+ /node_modules/.test(request.originModulePath) || // Absolute paths are not supported
20
+ isAbsolute(request.moduleName) || // Relative paths are not supported
21
+ /^\.\.?($|[\\/])/.test(request.moduleName)) {
22
+ return null;
23
+ }
24
+ const matched = (0, _matchTsConfigPathAlias).matchTsConfigPathAlias(aliases, request.moduleName);
25
+ if (!matched) {
26
+ return null;
27
+ }
28
+ for (const alias of config.paths[matched.text]){
29
+ const nextModuleName = matched.star ? alias.replace("*", matched.star) : alias;
30
+ if (/\.d\.ts$/.test(nextModuleName)) continue;
31
+ const possibleResult = _path.default.join(config.baseUrl, nextModuleName);
32
+ const result = resolve(possibleResult);
33
+ if (result) {
34
+ debug(`${request.moduleName} -> ${possibleResult}`);
35
+ return result;
36
+ }
37
+ }
38
+ return null;
39
+ }
40
+
41
+ //# sourceMappingURL=resolveWithTsConfigPaths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/utils/tsconfig/resolveWithTsConfigPaths.ts"],"sourcesContent":["import { Resolution } from 'metro-resolver';\nimport path from 'path';\n\nimport { matchTsConfigPathAlias } from './matchTsConfigPathAlias';\n\ntype Paths = { [match: string]: string[] };\n\nconst debug = require('debug')('expo:metro:tsconfig-paths') as typeof console.log;\n\nconst isAbsolute = process.platform === 'win32' ? path.win32.isAbsolute : path.posix.isAbsolute;\n\nexport function resolveWithTsConfigPaths(\n config: { paths: Paths; baseUrl: string },\n request: {\n /** Import request */\n moduleName: string;\n /** Originating file path */\n originModulePath: string;\n },\n resolve: (moduleName: string) => Resolution | null\n): Resolution | null {\n const aliases = Object.keys(config.paths);\n\n if (\n // If no aliases are added bail out\n !aliases.length ||\n // Library authors cannot utilize this feature in userspace.\n /node_modules/.test(request.originModulePath) ||\n // Absolute paths are not supported\n isAbsolute(request.moduleName) ||\n // Relative paths are not supported\n /^\\.\\.?($|[\\\\/])/.test(request.moduleName)\n ) {\n return null;\n }\n\n const matched = matchTsConfigPathAlias(aliases, request.moduleName);\n if (!matched) {\n return null;\n }\n\n for (const alias of config.paths[matched.text]) {\n const nextModuleName = matched.star ? alias.replace('*', matched.star) : alias;\n\n if (/\\.d\\.ts$/.test(nextModuleName)) continue;\n\n const possibleResult = path.join(config.baseUrl, nextModuleName);\n\n const result = resolve(possibleResult);\n if (result) {\n debug(`${request.moduleName} -> ${possibleResult}`);\n return result;\n }\n }\n return null;\n}\n"],"names":["resolveWithTsConfigPaths","debug","require","isAbsolute","process","platform","path","win32","posix","config","request","resolve","aliases","Object","keys","paths","length","test","originModulePath","moduleName","matched","matchTsConfigPathAlias","alias","text","nextModuleName","star","replace","possibleResult","join","baseUrl","result"],"mappings":"AAAA;;;;QAWgBA,wBAAwB,GAAxBA,wBAAwB;AAVvB,IAAA,KAAM,kCAAN,MAAM,EAAA;AAEgB,IAAA,uBAA0B,WAA1B,0BAA0B,CAAA;;;;;;AAIjE,MAAMC,KAAK,GAAGC,OAAO,CAAC,OAAO,CAAC,CAAC,2BAA2B,CAAC,AAAsB,AAAC;AAElF,MAAMC,UAAU,GAAGC,OAAO,CAACC,QAAQ,KAAK,OAAO,GAAGC,KAAI,QAAA,CAACC,KAAK,CAACJ,UAAU,GAAGG,KAAI,QAAA,CAACE,KAAK,CAACL,UAAU,AAAC;AAEzF,SAASH,wBAAwB,CACtCS,MAAyC,EACzCC,OAKC,EACDC,OAAkD,EAC/B;IACnB,MAAMC,OAAO,GAAGC,MAAM,CAACC,IAAI,CAACL,MAAM,CAACM,KAAK,CAAC,AAAC;IAE1C,IACE,mCAAmC;IACnC,CAACH,OAAO,CAACI,MAAM,IACf,4DAA4D;IAC5D,eAAeC,IAAI,CAACP,OAAO,CAACQ,gBAAgB,CAAC,IAC7C,mCAAmC;IACnCf,UAAU,CAACO,OAAO,CAACS,UAAU,CAAC,IAC9B,mCAAmC;IACnC,kBAAkBF,IAAI,CAACP,OAAO,CAACS,UAAU,CAAC,EAC1C;QACA,OAAO,IAAI,CAAC;KACb;IAED,MAAMC,OAAO,GAAGC,CAAAA,GAAAA,uBAAsB,AAA6B,CAAA,uBAA7B,CAACT,OAAO,EAAEF,OAAO,CAACS,UAAU,CAAC,AAAC;IACpE,IAAI,CAACC,OAAO,EAAE;QACZ,OAAO,IAAI,CAAC;KACb;IAED,KAAK,MAAME,KAAK,IAAIb,MAAM,CAACM,KAAK,CAACK,OAAO,CAACG,IAAI,CAAC,CAAE;QAC9C,MAAMC,cAAc,GAAGJ,OAAO,CAACK,IAAI,GAAGH,KAAK,CAACI,OAAO,CAAC,GAAG,EAAEN,OAAO,CAACK,IAAI,CAAC,GAAGH,KAAK,AAAC;QAE/E,IAAI,WAAWL,IAAI,CAACO,cAAc,CAAC,EAAE,SAAS;QAE9C,MAAMG,cAAc,GAAGrB,KAAI,QAAA,CAACsB,IAAI,CAACnB,MAAM,CAACoB,OAAO,EAAEL,cAAc,CAAC,AAAC;QAEjE,MAAMM,MAAM,GAAGnB,OAAO,CAACgB,cAAc,CAAC,AAAC;QACvC,IAAIG,MAAM,EAAE;YACV7B,KAAK,CAAC,CAAC,EAAES,OAAO,CAACS,UAAU,CAAC,IAAI,EAAEQ,cAAc,CAAC,CAAC,CAAC,CAAC;YACpD,OAAOG,MAAM,CAAC;SACf;KACF;IACD,OAAO,IAAI,CAAC;CACb"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expo/cli",
3
- "version": "0.7.3",
3
+ "version": "0.9.0",
4
4
  "description": "The Expo CLI",
5
5
  "main": "build/bin/cli",
6
6
  "bin": {
@@ -19,7 +19,8 @@
19
19
  "test": "expo-module test",
20
20
  "test:e2e": "jest --config e2e/jest.config.js",
21
21
  "prepublishOnly": "expo-module prepublishOnly",
22
- "expo-module": "expo-module"
22
+ "expo-module": "expo-module",
23
+ "generate-graphql-code": "graphql-codegen --config graphql-codegen.yml"
23
24
  },
24
25
  "repository": {
25
26
  "type": "git",
@@ -39,15 +40,16 @@
39
40
  "@babel/runtime": "^7.20.0",
40
41
  "@expo/code-signing-certificates": "0.0.5",
41
42
  "@expo/config": "~8.0.0",
42
- "@expo/config-plugins": "~6.0.0",
43
- "@expo/dev-server": "0.3.0",
43
+ "@expo/env": "~0.0.2",
44
+ "@expo/config-plugins": "~7.1.0",
45
+ "@expo/dev-server": "0.4.1",
44
46
  "@expo/devcert": "^1.0.0",
45
47
  "@expo/json-file": "^8.2.37",
46
- "@expo/metro-config": "~0.7.0",
48
+ "@expo/metro-config": "~0.9.0",
47
49
  "@expo/osascript": "^2.0.31",
48
50
  "@expo/package-manager": "~1.0.0",
49
51
  "@expo/plist": "^0.0.20",
50
- "@expo/prebuild-config": "6.0.1",
52
+ "@expo/prebuild-config": "6.1.0",
51
53
  "@expo/rudder-sdk-node": "1.1.1",
52
54
  "@expo/spawn-async": "1.5.0",
53
55
  "@expo/xcpretty": "^4.2.1",
@@ -84,6 +86,7 @@
84
86
  "progress": "2.0.3",
85
87
  "prompts": "^2.3.2",
86
88
  "qrcode-terminal": "0.11.0",
89
+ "require-from-string": "^2.0.2",
87
90
  "requireg": "^0.2.2",
88
91
  "resolve-from": "^5.0.0",
89
92
  "semver": "^6.3.0",
@@ -104,6 +107,9 @@
104
107
  ]
105
108
  },
106
109
  "devDependencies": {
110
+ "@graphql-codegen/cli": "2.16.3",
111
+ "@graphql-codegen/typescript": "2.8.7",
112
+ "@graphql-codegen/typescript-operations": "2.5.12",
107
113
  "@expo/multipart-body-parser": "^1.0.0",
108
114
  "@expo/ngrok": "4.1.0",
109
115
  "@expo/webpack-config": "^0.17.4",
@@ -120,8 +126,6 @@
120
126
  "@types/getenv": "^1.0.0",
121
127
  "@types/js-yaml": "^3.12.2",
122
128
  "@types/klaw-sync": "^6.0.0",
123
- "@types/metro": "~0.66.1",
124
- "@types/metro-core": "~0.66.0",
125
129
  "@types/minipass": "^3.1.2",
126
130
  "@types/npm-package-arg": "^6.1.0",
127
131
  "@types/progress": "^2.0.5",
@@ -136,11 +140,13 @@
136
140
  "@types/ws": "^8.5.4",
137
141
  "devtools-protocol": "^0.0.1113120",
138
142
  "expo-module-scripts": "^3.0.0",
143
+ "find-process": "^1.4.7",
139
144
  "klaw-sync": "^6.0.0",
140
145
  "nock": "~13.2.2",
141
146
  "nullthrows": "^1.1.1",
142
147
  "structured-headers": "^0.4.1",
143
- "taskr": "1.1.0"
148
+ "taskr": "1.1.0",
149
+ "tree-kill": "^1.2.2"
144
150
  },
145
- "gitHead": "144b251d648be0e6a251bc7eb6000c4adf577577"
151
+ "gitHead": "66d0501185956602c144a03a891bdb34d3c03910"
146
152
  }
@@ -1,4 +1,7 @@
1
1
  // Learn more https://docs.expo.io/guides/customizing-metro
2
2
  const { getDefaultConfig } = require('expo/metro-config');
3
3
 
4
- module.exports = getDefaultConfig(__dirname);
4
+ /** @type {import('expo/metro-config').MetroConfig} */
5
+ const config = getDefaultConfig(__dirname);
6
+
7
+ module.exports = config;
@@ -1,19 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- exports.getProjectAsync = getProjectAsync;
6
- var _errors = require("../utils/errors");
7
- var _client = require("./rest/client");
8
- var _actions = require("./user/actions");
9
- async function getProjectAsync(projectId) {
10
- await (0, _actions).ensureLoggedInAsync();
11
- const response = await (0, _client).fetchAsync(`projects/${encodeURIComponent(projectId)}`);
12
- if (!response.ok) {
13
- throw new _errors.CommandError("API", `Unexpected error from Expo servers: ${response.statusText}.`);
14
- }
15
- const { data } = await response.json();
16
- return data;
17
- }
18
-
19
- //# sourceMappingURL=getProject.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/api/getProject.ts"],"sourcesContent":["import { CommandError } from '../utils/errors';\nimport { fetchAsync } from './rest/client';\nimport { ensureLoggedInAsync } from './user/actions';\n\ninterface Project {\n accountId: string;\n createdAt: string;\n fullName: string;\n id: string;\n latestPublishedTime: null | unknown;\n latestReleaseId: null | unknown;\n latestRevisionId: null | unknown;\n originalFullName: string;\n packageUsername: string;\n pageViewCount: null | unknown;\n privacy: string;\n pushSecurityEnabled: boolean;\n scopeKey: string;\n updatedAt: string;\n viewTrendScore: null | unknown;\n}\n\nexport async function getProjectAsync(projectId: string): Promise<Project> {\n await ensureLoggedInAsync();\n const response = await fetchAsync(`projects/${encodeURIComponent(projectId)}`);\n if (!response.ok) {\n throw new CommandError('API', `Unexpected error from Expo servers: ${response.statusText}.`);\n }\n const { data } = await response.json();\n return data;\n}\n"],"names":["getProjectAsync","projectId","ensureLoggedInAsync","response","fetchAsync","encodeURIComponent","ok","CommandError","statusText","data","json"],"mappings":"AAAA;;;;QAsBsBA,eAAe,GAAfA,eAAe;AAtBR,IAAA,OAAiB,WAAjB,iBAAiB,CAAA;AACnB,IAAA,OAAe,WAAf,eAAe,CAAA;AACN,IAAA,QAAgB,WAAhB,gBAAgB,CAAA;AAoB7C,eAAeA,eAAe,CAACC,SAAiB,EAAoB;IACzE,MAAMC,CAAAA,GAAAA,QAAmB,AAAE,CAAA,oBAAF,EAAE,CAAC;IAC5B,MAAMC,QAAQ,GAAG,MAAMC,CAAAA,GAAAA,OAAU,AAA6C,CAAA,WAA7C,CAAC,CAAC,SAAS,EAAEC,kBAAkB,CAACJ,SAAS,CAAC,CAAC,CAAC,CAAC,AAAC;IAC/E,IAAI,CAACE,QAAQ,CAACG,EAAE,EAAE;QAChB,MAAM,IAAIC,OAAY,aAAA,CAAC,KAAK,EAAE,CAAC,oCAAoC,EAAEJ,QAAQ,CAACK,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;KAC9F;IACD,MAAM,EAAEC,IAAI,CAAA,EAAE,GAAG,MAAMN,QAAQ,CAACO,IAAI,EAAE,AAAC;IACvC,OAAOD,IAAI,CAAC;CACb"}
@@ -1,113 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- var OfferType;
6
- (function(OfferType) {
7
- OfferType[/** Term subscription */ "Subscription"] = "SUBSCRIPTION";
8
- OfferType[/** Advanced Purchase of Paid Resource */ "Prepaid"] = "PREPAID";
9
- OfferType[/** Addon, or supplementary subscription */ "Addon"] = "ADDON";
10
- })(OfferType || (OfferType = {}));
11
- var Feature;
12
- (function(Feature) {
13
- Feature[/** Top Tier Support */ "Support"] = "SUPPORT";
14
- Feature[/** Share access to projects */ "Teams"] = "TEAMS";
15
- Feature[/** Priority Builds */ "Builds"] = "BUILDS";
16
- Feature[/** Funds support for open source development */ "OpenSource"] = "OPEN_SOURCE";
17
- })(Feature || (Feature = {}));
18
- var AppPrivacy;
19
- (function(AppPrivacy) {
20
- AppPrivacy["Public"] = "PUBLIC";
21
- AppPrivacy["Unlisted"] = "UNLISTED";
22
- AppPrivacy["Hidden"] = "HIDDEN";
23
- })(AppPrivacy || (AppPrivacy = {}));
24
- var AppPlatform;
25
- (function(AppPlatform) {
26
- AppPlatform["Ios"] = "IOS";
27
- AppPlatform["Android"] = "ANDROID";
28
- })(AppPlatform || (AppPlatform = {}));
29
- var SecondFactorMethod;
30
- (function(SecondFactorMethod) {
31
- SecondFactorMethod[/** Google Authenticator (TOTP) */ "Authenticator"] = "AUTHENTICATOR";
32
- SecondFactorMethod[/** SMS */ "Sms"] = "SMS";
33
- })(SecondFactorMethod || (SecondFactorMethod = {}));
34
- var Permission;
35
- (function(Permission) {
36
- Permission["Own"] = "OWN";
37
- Permission["Admin"] = "ADMIN";
38
- Permission["Publish"] = "PUBLISH";
39
- Permission["View"] = "VIEW";
40
- })(Permission || (Permission = {}));
41
- var Role;
42
- (function(Role) {
43
- Role["Owner"] = "OWNER";
44
- Role["Admin"] = "ADMIN";
45
- Role["Developer"] = "DEVELOPER";
46
- Role["ViewOnly"] = "VIEW_ONLY";
47
- Role["Custom"] = "CUSTOM";
48
- Role["HasAdmin"] = "HAS_ADMIN";
49
- Role["NotAdmin"] = "NOT_ADMIN";
50
- })(Role || (Role = {}));
51
- var BuildJobLogsFormat;
52
- (function(BuildJobLogsFormat) {
53
- BuildJobLogsFormat["Raw"] = "RAW";
54
- BuildJobLogsFormat["Json"] = "JSON";
55
- })(BuildJobLogsFormat || (BuildJobLogsFormat = {}));
56
- var BuildJobStatus;
57
- (function(BuildJobStatus) {
58
- BuildJobStatus["Pending"] = "PENDING";
59
- BuildJobStatus["Started"] = "STARTED";
60
- BuildJobStatus["InProgress"] = "IN_PROGRESS";
61
- BuildJobStatus["Errored"] = "ERRORED";
62
- BuildJobStatus["Finished"] = "FINISHED";
63
- BuildJobStatus["SentToQueue"] = "SENT_TO_QUEUE";
64
- })(BuildJobStatus || (BuildJobStatus = {}));
65
- var AppleDeviceClass;
66
- (function(AppleDeviceClass) {
67
- AppleDeviceClass["Ipad"] = "IPAD";
68
- AppleDeviceClass["Iphone"] = "IPHONE";
69
- })(AppleDeviceClass || (AppleDeviceClass = {}));
70
- var IosDistributionType;
71
- (function(IosDistributionType) {
72
- IosDistributionType["AppStore"] = "APP_STORE";
73
- IosDistributionType["Enterprise"] = "ENTERPRISE";
74
- IosDistributionType["AdHoc"] = "AD_HOC";
75
- IosDistributionType["Development"] = "DEVELOPMENT";
76
- })(IosDistributionType || (IosDistributionType = {}));
77
- var AppStoreConnectUserRole;
78
- (function(AppStoreConnectUserRole) {
79
- AppStoreConnectUserRole["Admin"] = "ADMIN";
80
- AppStoreConnectUserRole["Finance"] = "FINANCE";
81
- AppStoreConnectUserRole["Technical"] = "TECHNICAL";
82
- AppStoreConnectUserRole["AccountHolder"] = "ACCOUNT_HOLDER";
83
- AppStoreConnectUserRole["ReadOnly"] = "READ_ONLY";
84
- AppStoreConnectUserRole["Sales"] = "SALES";
85
- AppStoreConnectUserRole["Marketing"] = "MARKETING";
86
- AppStoreConnectUserRole["AppManager"] = "APP_MANAGER";
87
- AppStoreConnectUserRole["Developer"] = "DEVELOPER";
88
- AppStoreConnectUserRole["AccessToReports"] = "ACCESS_TO_REPORTS";
89
- AppStoreConnectUserRole["CustomerSupport"] = "CUSTOMER_SUPPORT";
90
- AppStoreConnectUserRole["CreateApps"] = "CREATE_APPS";
91
- AppStoreConnectUserRole["CloudManagedDeveloperId"] = "CLOUD_MANAGED_DEVELOPER_ID";
92
- AppStoreConnectUserRole["CloudManagedAppDistribution"] = "CLOUD_MANAGED_APP_DISTRIBUTION";
93
- AppStoreConnectUserRole["ImageManager"] = "IMAGE_MANAGER";
94
- AppStoreConnectUserRole["Unknown"] = "UNKNOWN";
95
- })(AppStoreConnectUserRole || (AppStoreConnectUserRole = {}));
96
- var AndroidFcmVersion;
97
- (function(AndroidFcmVersion) {
98
- AndroidFcmVersion["Legacy"] = "LEGACY";
99
- AndroidFcmVersion["V1"] = "V1";
100
- })(AndroidFcmVersion || (AndroidFcmVersion = {}));
101
- var AndroidKeystoreType;
102
- (function(AndroidKeystoreType) {
103
- AndroidKeystoreType["Jks"] = "JKS";
104
- AndroidKeystoreType["Pkcs12"] = "PKCS12";
105
- AndroidKeystoreType["Unknown"] = "UNKNOWN";
106
- })(AndroidKeystoreType || (AndroidKeystoreType = {}));
107
- var WebhookType;
108
- (function(WebhookType) {
109
- WebhookType["Build"] = "BUILD";
110
- WebhookType["Submit"] = "SUBMIT";
111
- })(WebhookType || (WebhookType = {}));
112
-
113
- //# sourceMappingURL=generated.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/api/graphql/generated.ts"],"sourcesContent":["/**\n * This file was generated using GraphQL Codegen\n * Command: yarn generate-graphql-code\n * Run this during development for automatic type generation when editing GraphQL documents\n * For more info and docs, visit https://graphql-code-generator.com/\n */\n\ntype Maybe<T> = T | null;\n/** All built-in and custom scalars, mapped to their actual values */\ntype Scalars = {\n ID: string;\n String: string;\n Boolean: boolean;\n Int: number;\n Float: number;\n /** Date custom scalar type */\n DateTime: any;\n /** The `JSON` scalar type represents JSON values as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf). */\n JSON: any;\n /** The `JSONObject` scalar type represents JSON objects as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf). */\n JSONObject: any;\n /** The `Upload` scalar type represents a file upload. */\n Upload: any;\n};\n\ntype Update = ActivityTimelineProjectActivity & {\n __typename?: 'Update';\n id: Scalars['ID'];\n actor?: Maybe<Actor>;\n activityTimestamp: Scalars['DateTime'];\n branchId: Scalars['ID'];\n platform: Scalars['String'];\n manifestFragment: Scalars['String'];\n runtimeVersion: Scalars['String'];\n group: Scalars['String'];\n updatedAt: Scalars['DateTime'];\n createdAt: Scalars['DateTime'];\n message?: Maybe<Scalars['String']>;\n branch: UpdateBranch;\n manifestPermalink: Scalars['String'];\n};\n\ntype ActivityTimelineProjectActivity = {\n id: Scalars['ID'];\n actor?: Maybe<Actor>;\n activityTimestamp: Scalars['DateTime'];\n};\n\n/** A user or robot that can authenticate with Expo services and be a member of accounts. */\ntype Actor = {\n id: Scalars['ID'];\n firstName?: Maybe<Scalars['String']>;\n created: Scalars['DateTime'];\n isExpoAdmin: Scalars['Boolean'];\n /**\n * Best-effort human readable name for this actor for use in user interfaces during action attribution.\n * For example, when displaying a sentence indicating that actor X created a build or published an update.\n */\n displayName: Scalars['String'];\n /** Associated accounts */\n accounts: Array<Account>;\n /** Access Tokens belonging to this actor */\n accessTokens: Array<AccessToken>;\n /**\n * Server feature gate values for this actor, optionally filtering by desired gates.\n * Only resolves for the viewer.\n */\n featureGates: Scalars['JSONObject'];\n};\n\n/**\n * An account is a container owning projects, credentials, billing and other organization\n * data and settings. Actors may own and be members of accounts.\n */\ntype Account = {\n __typename?: 'Account';\n id: Scalars['ID'];\n name: Scalars['String'];\n isCurrent: Scalars['Boolean'];\n pushSecurityEnabled: Scalars['Boolean'];\n createdAt: Scalars['DateTime'];\n updatedAt: Scalars['DateTime'];\n /** Offers set on this account */\n offers?: Maybe<Array<Offer>>;\n /** Apps associated with this account */\n apps: Array<App>;\n appCount: Scalars['Int'];\n /** Build Jobs associated with this account */\n buildJobs: Array<BuildJob>;\n /**\n * Coalesced Build (EAS) or BuildJob (Classic) for all apps belonging to this account.\n * @deprecated Use activityTimelineProjectActivities with filterTypes instead\n */\n buildOrBuildJobs: Array<BuildOrBuildJob>;\n /** Coalesced project activity for all apps belonging to this account. */\n activityTimelineProjectActivities: Array<ActivityTimelineProjectActivity>;\n /** Owning User of this account if personal account */\n owner?: Maybe<User>;\n /** Actors associated with this account and permissions they hold */\n users: Array<UserPermission>;\n /** Pending user invitations for this account */\n userInvitations: Array<UserInvitation>;\n /** iOS credentials for account */\n appleTeams: Array<AppleTeam>;\n appleAppIdentifiers: Array<AppleAppIdentifier>;\n appleDistributionCertificates: Array<AppleDistributionCertificate>;\n applePushKeys: Array<ApplePushKey>;\n appleProvisioningProfiles: Array<AppleProvisioningProfile>;\n appleDevices: Array<AppleDevice>;\n appStoreConnectApiKeys: Array<AppStoreConnectApiKey>;\n /** Android credentials for account */\n googleServiceAccountKeys: Array<GoogleServiceAccountKey>;\n /** Environment secrets for an account */\n environmentSecrets: Array<EnvironmentSecret>;\n /** @deprecated Legacy access tokens are deprecated */\n accessTokens: Array<Maybe<AccessToken>>;\n /** @deprecated Legacy access tokens are deprecated */\n requiresAccessTokenForPushSecurity: Scalars['Boolean'];\n /** @deprecated See isCurrent */\n unlimitedBuilds: Scalars['Boolean'];\n /** @deprecated Build packs are no longer supported */\n availableBuilds?: Maybe<Scalars['Int']>;\n /** @deprecated No longer needed */\n subscriptionChangesPending?: Maybe<Scalars['Boolean']>;\n /** @deprecated Build packs are no longer supported */\n willAutoRenewBuilds?: Maybe<Scalars['Boolean']>;\n};\n\ntype Offer = {\n __typename?: 'Offer';\n id: Scalars['ID'];\n stripeId: Scalars['ID'];\n price: Scalars['Int'];\n quantity?: Maybe<Scalars['Int']>;\n trialLength?: Maybe<Scalars['Int']>;\n type: OfferType;\n features?: Maybe<Array<Maybe<Feature>>>;\n prerequisite?: Maybe<OfferPrerequisite>;\n};\n\nenum OfferType {\n /** Term subscription */\n Subscription = 'SUBSCRIPTION',\n /** Advanced Purchase of Paid Resource */\n Prepaid = 'PREPAID',\n /** Addon, or supplementary subscription */\n Addon = 'ADDON',\n}\n\nenum Feature {\n /** Top Tier Support */\n Support = 'SUPPORT',\n /** Share access to projects */\n Teams = 'TEAMS',\n /** Priority Builds */\n Builds = 'BUILDS',\n /** Funds support for open source development */\n OpenSource = 'OPEN_SOURCE',\n}\n\ntype OfferPrerequisite = {\n __typename?: 'OfferPrerequisite';\n type: Scalars['String'];\n stripeIds: Array<Scalars['String']>;\n};\n\ntype Project = {\n id: Scalars['ID'];\n name: Scalars['String'];\n fullName: Scalars['String'];\n description: Scalars['String'];\n slug: Scalars['String'];\n updated: Scalars['DateTime'];\n published: Scalars['Boolean'];\n username: Scalars['String'];\n /** @deprecated Field no longer supported */\n iconUrl?: Maybe<Scalars['String']>;\n};\n\n/** Represents an Exponent App (or Experience in legacy terms) */\ntype App = Project & {\n __typename?: 'App';\n id: Scalars['ID'];\n name: Scalars['String'];\n fullName: Scalars['String'];\n description: Scalars['String'];\n slug: Scalars['String'];\n ownerAccount: Account;\n privacySetting: AppPrivacy;\n pushSecurityEnabled: Scalars['Boolean'];\n /** Whether there have been any classic update publishes */\n published: Scalars['Boolean'];\n /** Time of last classic update publish */\n updated: Scalars['DateTime'];\n /** ID of latest classic update release */\n latestReleaseId: Scalars['ID'];\n /** Whether the latest classic update publish is using a deprecated SDK version */\n isDeprecated: Scalars['Boolean'];\n /** SDK version of the latest classic update publish, 0.0.0 otherwise */\n sdkVersion: Scalars['String'];\n /** Classic update release channel names (to be removed) */\n releaseChannels: Array<Scalars['String']>;\n /** Classic update release channel names that have at least one build */\n buildsReleaseChannels: Array<Scalars['String']>;\n /** githubUrl field from most recent classic update manifest */\n githubUrl?: Maybe<Scalars['String']>;\n /** android.playStoreUrl field from most recent classic update manifest */\n playStoreUrl?: Maybe<Scalars['String']>;\n /** ios.appStoreUrl field from most recent classic update manifest */\n appStoreUrl?: Maybe<Scalars['String']>;\n /** Info about the icon specified in the most recent classic update manifest */\n icon?: Maybe<AppIcon>;\n /** iOS app credentials for the project */\n iosAppCredentials: Array<IosAppCredentials>;\n /** Android app credentials for the project */\n androidAppCredentials: Array<AndroidAppCredentials>;\n /** Coalesced project activity for an app */\n activityTimelineProjectActivities: Array<ActivityTimelineProjectActivity>;\n /** Environment secrets for an app */\n environmentSecrets: Array<EnvironmentSecret>;\n /** Webhooks for an app */\n webhooks: Array<Webhook>;\n /** @deprecated Use ownerAccount.name instead */\n username: Scalars['String'];\n /** @deprecated Field no longer supported */\n iconUrl?: Maybe<Scalars['String']>;\n /** @deprecated Use 'privacySetting' instead. */\n privacy: Scalars['String'];\n /** @deprecated Field no longer supported */\n lastPublishedTime: Scalars['DateTime'];\n /** @deprecated Field no longer supported */\n packageUsername: Scalars['String'];\n /** @deprecated Field no longer supported */\n packageName: Scalars['String'];\n /** @deprecated Legacy access tokens are deprecated */\n accessTokens: Array<Maybe<AccessToken>>;\n /** @deprecated Legacy access tokens are deprecated */\n requiresAccessTokenForPushSecurity: Scalars['Boolean'];\n /** @deprecated 'likes' have been deprecated. */\n isLikedByMe: Scalars['Boolean'];\n /** @deprecated 'likes' have been deprecated. */\n likeCount: Scalars['Int'];\n /** @deprecated 'likes' have been deprecated. */\n trendScore: Scalars['Float'];\n /** @deprecated 'likes' have been deprecated. */\n likedBy: Array<Maybe<User>>;\n /** @deprecated Field no longer supported */\n users?: Maybe<Array<Maybe<User>>>;\n /** @deprecated Field no longer supported */\n releases: Array<Maybe<AppRelease>>;\n latestReleaseForReleaseChannel?: Maybe<AppRelease>;\n};\n\nenum AppPrivacy {\n Public = 'PUBLIC',\n Unlisted = 'UNLISTED',\n Hidden = 'HIDDEN',\n}\n\ntype AppIcon = {\n __typename?: 'AppIcon';\n url: Scalars['String'];\n primaryColor?: Maybe<Scalars['String']>;\n originalUrl: Scalars['String'];\n /** Nullable color palette of the app icon. If null, color palette couldn't be retrieved from external service (imgix) */\n colorPalette?: Maybe<Scalars['JSON']>;\n};\n\nenum AppPlatform {\n Ios = 'IOS',\n Android = 'ANDROID',\n}\n\ntype BuildOrBuildJob = {\n id: Scalars['ID'];\n};\n\n/** Represents a human (not robot) actor. */\ntype User = Actor & {\n __typename?: 'User';\n id: Scalars['ID'];\n username: Scalars['String'];\n email?: Maybe<Scalars['String']>;\n firstName?: Maybe<Scalars['String']>;\n lastName?: Maybe<Scalars['String']>;\n fullName?: Maybe<Scalars['String']>;\n profilePhoto: Scalars['String'];\n created: Scalars['DateTime'];\n industry?: Maybe<Scalars['String']>;\n location?: Maybe<Scalars['String']>;\n appCount: Scalars['Int'];\n githubUsername?: Maybe<Scalars['String']>;\n twitterUsername?: Maybe<Scalars['String']>;\n appetizeCode?: Maybe<Scalars['String']>;\n emailVerified: Scalars['Boolean'];\n isExpoAdmin: Scalars['Boolean'];\n displayName: Scalars['String'];\n isSecondFactorAuthenticationEnabled: Scalars['Boolean'];\n /** Get all certified second factor authentication methods */\n secondFactorDevices: Array<UserSecondFactorDevice>;\n /** Associated accounts */\n primaryAccount: Account;\n accounts: Array<Account>;\n /** Access Tokens belonging to this actor */\n accessTokens: Array<AccessToken>;\n /** Apps this user has published */\n apps: Array<App>;\n /** Whether this user has any pending user invitations. Only resolves for the viewer. */\n hasPendingUserInvitations: Scalars['Boolean'];\n /** Pending UserInvitations for this user. Only resolves for the viewer. */\n pendingUserInvitations: Array<UserInvitation>;\n /** Coalesced project activity for all apps belonging to all accounts this user belongs to. Only resolves for the viewer. */\n activityTimelineProjectActivities: Array<ActivityTimelineProjectActivity>;\n /**\n * Server feature gate values for this actor, optionally filtering by desired gates.\n * Only resolves for the viewer.\n */\n featureGates: Scalars['JSONObject'];\n /** @deprecated Field no longer supported */\n isEmailUnsubscribed: Scalars['Boolean'];\n /** @deprecated Field no longer supported */\n lastPasswordReset?: Maybe<Scalars['DateTime']>;\n /** @deprecated Field no longer supported */\n lastLogin?: Maybe<Scalars['DateTime']>;\n /** @deprecated Field no longer supported */\n isOnboarded?: Maybe<Scalars['Boolean']>;\n /** @deprecated Field no longer supported */\n isLegacy?: Maybe<Scalars['Boolean']>;\n /** @deprecated Field no longer supported */\n wasLegacy?: Maybe<Scalars['Boolean']>;\n /** @deprecated 'likes' have been deprecated. */\n likes?: Maybe<Array<Maybe<App>>>;\n};\n\n/** A second factor device belonging to a User */\ntype UserSecondFactorDevice = {\n __typename?: 'UserSecondFactorDevice';\n id: Scalars['ID'];\n user: User;\n name: Scalars['String'];\n isCertified: Scalars['Boolean'];\n isPrimary: Scalars['Boolean'];\n smsPhoneNumber?: Maybe<Scalars['String']>;\n method: SecondFactorMethod;\n createdAt: Scalars['DateTime'];\n updatedAt: Scalars['DateTime'];\n};\n\nenum SecondFactorMethod {\n /** Google Authenticator (TOTP) */\n Authenticator = 'AUTHENTICATOR',\n /** SMS */\n Sms = 'SMS',\n}\n\n/** A method of authentication for an Actor */\ntype AccessToken = {\n __typename?: 'AccessToken';\n id: Scalars['ID'];\n visibleTokenPrefix: Scalars['String'];\n createdAt: Scalars['DateTime'];\n updatedAt: Scalars['DateTime'];\n revokedAt?: Maybe<Scalars['DateTime']>;\n lastUsedAt?: Maybe<Scalars['DateTime']>;\n owner: Actor;\n note?: Maybe<Scalars['String']>;\n};\n\n/** An pending invitation sent to an email granting membership on an Account. */\ntype UserInvitation = {\n __typename?: 'UserInvitation';\n id: Scalars['ID'];\n /** Email to which this invitation was sent */\n email: Scalars['String'];\n created: Scalars['DateTime'];\n accountName: Scalars['String'];\n /** Account permissions to be granted upon acceptance of this invitation */\n permissions: Array<Permission>;\n /** Role to be granted upon acceptance of this invitation */\n role: Role;\n};\n\nenum Permission {\n Own = 'OWN',\n Admin = 'ADMIN',\n Publish = 'PUBLISH',\n View = 'VIEW',\n}\n\nenum Role {\n Owner = 'OWNER',\n Admin = 'ADMIN',\n Developer = 'DEVELOPER',\n ViewOnly = 'VIEW_ONLY',\n Custom = 'CUSTOM',\n HasAdmin = 'HAS_ADMIN',\n NotAdmin = 'NOT_ADMIN',\n}\n\n/** Represents an Standalone App build job */\ntype BuildJob = ActivityTimelineProjectActivity &\n BuildOrBuildJob & {\n __typename?: 'BuildJob';\n id: Scalars['ID'];\n actor?: Maybe<Actor>;\n activityTimestamp: Scalars['DateTime'];\n app?: Maybe<App>;\n user?: Maybe<User>;\n release?: Maybe<AppRelease>;\n config?: Maybe<Scalars['JSON']>;\n artifacts?: Maybe<BuildArtifact>;\n logs?: Maybe<BuildLogs>;\n created?: Maybe<Scalars['DateTime']>;\n updated?: Maybe<Scalars['DateTime']>;\n fullExperienceName?: Maybe<Scalars['String']>;\n status?: Maybe<BuildJobStatus>;\n expirationDate?: Maybe<Scalars['DateTime']>;\n platform: AppPlatform;\n sdkVersion?: Maybe<Scalars['String']>;\n releaseChannel?: Maybe<Scalars['String']>;\n };\n\ntype AppRelease = {\n __typename?: 'AppRelease';\n id: Scalars['ID'];\n hash: Scalars['String'];\n publishedTime: Scalars['DateTime'];\n publishingUsername: Scalars['String'];\n sdkVersion: Scalars['String'];\n runtimeVersion?: Maybe<Scalars['String']>;\n version: Scalars['String'];\n s3Key: Scalars['String'];\n s3Url: Scalars['String'];\n manifest: Scalars['JSON'];\n};\n\ntype BuildArtifact = {\n __typename?: 'BuildArtifact';\n url: Scalars['String'];\n manifestPlistUrl?: Maybe<Scalars['String']>;\n};\n\ntype BuildLogs = {\n __typename?: 'BuildLogs';\n url?: Maybe<Scalars['String']>;\n format?: Maybe<BuildJobLogsFormat>;\n};\n\nenum BuildJobLogsFormat {\n Raw = 'RAW',\n Json = 'JSON',\n}\n\nenum BuildJobStatus {\n Pending = 'PENDING',\n Started = 'STARTED',\n InProgress = 'IN_PROGRESS',\n Errored = 'ERRORED',\n Finished = 'FINISHED',\n SentToQueue = 'SENT_TO_QUEUE',\n}\n\ntype UpdateBranch = {\n __typename?: 'UpdateBranch';\n id: Scalars['ID'];\n appId: Scalars['ID'];\n name: Scalars['String'];\n createdAt: Scalars['DateTime'];\n updatedAt: Scalars['DateTime'];\n updates: Array<Update>;\n};\n\ntype IosAppCredentials = {\n __typename?: 'IosAppCredentials';\n id: Scalars['ID'];\n app: App;\n appleTeam?: Maybe<AppleTeam>;\n appleAppIdentifier: AppleAppIdentifier;\n iosAppBuildCredentialsList: Array<IosAppBuildCredentials>;\n pushKey?: Maybe<ApplePushKey>;\n appStoreConnectApiKeyForSubmissions?: Maybe<AppStoreConnectApiKey>;\n /** @deprecated use iosAppBuildCredentialsList instead */\n iosAppBuildCredentialsArray: Array<IosAppBuildCredentials>;\n};\n\ntype AppleTeam = {\n __typename?: 'AppleTeam';\n id: Scalars['ID'];\n account: Account;\n appleTeamIdentifier: Scalars['String'];\n appleTeamName?: Maybe<Scalars['String']>;\n appleAppIdentifiers: Array<AppleAppIdentifier>;\n appleDistributionCertificates: Array<AppleDistributionCertificate>;\n applePushKeys: Array<ApplePushKey>;\n appleProvisioningProfiles: Array<AppleProvisioningProfile>;\n appleDevices: Array<AppleDevice>;\n};\n\ntype AppleAppIdentifier = {\n __typename?: 'AppleAppIdentifier';\n id: Scalars['ID'];\n account: Account;\n appleTeam?: Maybe<AppleTeam>;\n bundleIdentifier: Scalars['String'];\n parentAppleAppIdentifier?: Maybe<AppleAppIdentifier>;\n};\n\ntype AppleDistributionCertificate = {\n __typename?: 'AppleDistributionCertificate';\n id: Scalars['ID'];\n account: Account;\n appleTeam?: Maybe<AppleTeam>;\n serialNumber: Scalars['String'];\n validityNotBefore: Scalars['DateTime'];\n validityNotAfter: Scalars['DateTime'];\n developerPortalIdentifier?: Maybe<Scalars['String']>;\n certificateP12?: Maybe<Scalars['String']>;\n certificatePassword?: Maybe<Scalars['String']>;\n certificatePrivateSigningKey?: Maybe<Scalars['String']>;\n createdAt: Scalars['DateTime'];\n updatedAt: Scalars['DateTime'];\n iosAppBuildCredentialsList: Array<IosAppBuildCredentials>;\n};\n\ntype IosAppBuildCredentials = {\n __typename?: 'IosAppBuildCredentials';\n id: Scalars['ID'];\n distributionCertificate?: Maybe<AppleDistributionCertificate>;\n provisioningProfile?: Maybe<AppleProvisioningProfile>;\n iosDistributionType: IosDistributionType;\n iosAppCredentials: IosAppCredentials;\n /** @deprecated Get Apple Devices from AppleProvisioningProfile instead */\n appleDevices?: Maybe<Array<Maybe<AppleDevice>>>;\n};\n\ntype AppleProvisioningProfile = {\n __typename?: 'AppleProvisioningProfile';\n id: Scalars['ID'];\n account: Account;\n appleTeam?: Maybe<AppleTeam>;\n expiration: Scalars['DateTime'];\n appleAppIdentifier: AppleAppIdentifier;\n developerPortalIdentifier?: Maybe<Scalars['String']>;\n provisioningProfile?: Maybe<Scalars['String']>;\n appleUUID: Scalars['String'];\n status: Scalars['String'];\n appleDevices: Array<AppleDevice>;\n createdAt: Scalars['DateTime'];\n updatedAt: Scalars['DateTime'];\n};\n\ntype AppleDevice = {\n __typename?: 'AppleDevice';\n id: Scalars['ID'];\n account: Account;\n appleTeam: AppleTeam;\n identifier: Scalars['String'];\n name?: Maybe<Scalars['String']>;\n model?: Maybe<Scalars['String']>;\n deviceClass?: Maybe<AppleDeviceClass>;\n softwareVersion?: Maybe<Scalars['String']>;\n enabled?: Maybe<Scalars['Boolean']>;\n};\n\nenum AppleDeviceClass {\n Ipad = 'IPAD',\n Iphone = 'IPHONE',\n}\n\nenum IosDistributionType {\n AppStore = 'APP_STORE',\n Enterprise = 'ENTERPRISE',\n AdHoc = 'AD_HOC',\n Development = 'DEVELOPMENT',\n}\n\ntype ApplePushKey = {\n __typename?: 'ApplePushKey';\n id: Scalars['ID'];\n account: Account;\n appleTeam?: Maybe<AppleTeam>;\n keyIdentifier: Scalars['String'];\n keyP8: Scalars['String'];\n createdAt: Scalars['DateTime'];\n updatedAt: Scalars['DateTime'];\n iosAppCredentialsList: Array<IosAppCredentials>;\n};\n\ntype AppStoreConnectApiKey = {\n __typename?: 'AppStoreConnectApiKey';\n id: Scalars['ID'];\n account: Account;\n appleTeam?: Maybe<AppleTeam>;\n issuerIdentifier: Scalars['String'];\n keyIdentifier: Scalars['String'];\n name?: Maybe<Scalars['String']>;\n roles?: Maybe<Array<AppStoreConnectUserRole>>;\n createdAt: Scalars['DateTime'];\n updatedAt: Scalars['DateTime'];\n};\n\nenum AppStoreConnectUserRole {\n Admin = 'ADMIN',\n Finance = 'FINANCE',\n Technical = 'TECHNICAL',\n AccountHolder = 'ACCOUNT_HOLDER',\n ReadOnly = 'READ_ONLY',\n Sales = 'SALES',\n Marketing = 'MARKETING',\n AppManager = 'APP_MANAGER',\n Developer = 'DEVELOPER',\n AccessToReports = 'ACCESS_TO_REPORTS',\n CustomerSupport = 'CUSTOMER_SUPPORT',\n CreateApps = 'CREATE_APPS',\n CloudManagedDeveloperId = 'CLOUD_MANAGED_DEVELOPER_ID',\n CloudManagedAppDistribution = 'CLOUD_MANAGED_APP_DISTRIBUTION',\n ImageManager = 'IMAGE_MANAGER',\n Unknown = 'UNKNOWN',\n}\n\ntype AndroidAppCredentials = {\n __typename?: 'AndroidAppCredentials';\n id: Scalars['ID'];\n app: App;\n applicationIdentifier?: Maybe<Scalars['String']>;\n androidFcm?: Maybe<AndroidFcm>;\n googleServiceAccountKeyForSubmissions?: Maybe<GoogleServiceAccountKey>;\n androidAppBuildCredentialsList: Array<AndroidAppBuildCredentials>;\n isLegacy: Scalars['Boolean'];\n /** @deprecated use androidAppBuildCredentialsList instead */\n androidAppBuildCredentialsArray: Array<AndroidAppBuildCredentials>;\n};\n\ntype AndroidFcm = {\n __typename?: 'AndroidFcm';\n id: Scalars['ID'];\n account: Account;\n snippet: FcmSnippet;\n /**\n * Legacy FCM: returns the Cloud Messaging token, parses to a String\n * FCM v1: returns the Service Account Key file, parses to an Object\n */\n credential: Scalars['JSON'];\n version: AndroidFcmVersion;\n createdAt: Scalars['DateTime'];\n updatedAt: Scalars['DateTime'];\n};\n\ntype FcmSnippet = FcmSnippetLegacy | FcmSnippetV1;\n\ntype FcmSnippetLegacy = {\n __typename?: 'FcmSnippetLegacy';\n firstFourCharacters: Scalars['String'];\n lastFourCharacters: Scalars['String'];\n};\n\ntype FcmSnippetV1 = {\n __typename?: 'FcmSnippetV1';\n projectId: Scalars['String'];\n keyId: Scalars['String'];\n serviceAccountEmail: Scalars['String'];\n clientId?: Maybe<Scalars['String']>;\n};\n\nenum AndroidFcmVersion {\n Legacy = 'LEGACY',\n V1 = 'V1',\n}\n\ntype GoogleServiceAccountKey = {\n __typename?: 'GoogleServiceAccountKey';\n id: Scalars['ID'];\n account: Account;\n projectIdentifier: Scalars['String'];\n privateKeyIdentifier: Scalars['String'];\n clientEmail: Scalars['String'];\n clientIdentifier: Scalars['String'];\n createdAt: Scalars['DateTime'];\n updatedAt: Scalars['DateTime'];\n};\n\ntype AndroidAppBuildCredentials = {\n __typename?: 'AndroidAppBuildCredentials';\n id: Scalars['ID'];\n name: Scalars['String'];\n androidKeystore?: Maybe<AndroidKeystore>;\n isDefault: Scalars['Boolean'];\n isLegacy: Scalars['Boolean'];\n};\n\ntype AndroidKeystore = {\n __typename?: 'AndroidKeystore';\n id: Scalars['ID'];\n account: Account;\n type: AndroidKeystoreType;\n keystore: Scalars['String'];\n keystorePassword: Scalars['String'];\n keyAlias: Scalars['String'];\n keyPassword?: Maybe<Scalars['String']>;\n md5CertificateFingerprint?: Maybe<Scalars['String']>;\n sha1CertificateFingerprint?: Maybe<Scalars['String']>;\n sha256CertificateFingerprint?: Maybe<Scalars['String']>;\n createdAt: Scalars['DateTime'];\n updatedAt: Scalars['DateTime'];\n};\n\nenum AndroidKeystoreType {\n Jks = 'JKS',\n Pkcs12 = 'PKCS12',\n Unknown = 'UNKNOWN',\n}\n\ntype EnvironmentSecret = {\n __typename?: 'EnvironmentSecret';\n id: Scalars['ID'];\n name: Scalars['String'];\n createdAt: Scalars['DateTime'];\n updatedAt: Scalars['DateTime'];\n};\n\nenum WebhookType {\n Build = 'BUILD',\n Submit = 'SUBMIT',\n}\n\ntype Webhook = {\n __typename?: 'Webhook';\n id: Scalars['ID'];\n appId: Scalars['ID'];\n event: WebhookType;\n url: Scalars['String'];\n createdAt: Scalars['DateTime'];\n updatedAt: Scalars['DateTime'];\n};\n\ntype UserPermission = {\n __typename?: 'UserPermission';\n permissions: Array<Permission>;\n role?: Maybe<Role>;\n /** @deprecated User type is deprecated */\n user?: Maybe<User>;\n actor: Actor;\n};\n\n/** Represents a robot (not human) actor. */\ntype Robot = Actor & {\n __typename?: 'Robot';\n id: Scalars['ID'];\n firstName?: Maybe<Scalars['String']>;\n created: Scalars['DateTime'];\n isExpoAdmin: Scalars['Boolean'];\n displayName: Scalars['String'];\n /** Associated accounts */\n accounts: Array<Account>;\n /** Access Tokens belonging to this actor */\n accessTokens: Array<AccessToken>;\n /**\n * Server feature gate values for this actor, optionally filtering by desired gates.\n * Only resolves for the viewer.\n */\n featureGates: Scalars['JSONObject'];\n};\n\nexport type CurrentUserQuery = { __typename?: 'RootQuery' } & {\n meActor?: Maybe<\n | ({ __typename: 'User' } & Pick<User, 'username' | 'id' | 'isExpoAdmin'> & {\n accounts: Array<{ __typename?: 'Account' } & Pick<Account, 'id' | 'name'>>;\n })\n | ({ __typename: 'Robot' } & Pick<Robot, 'firstName' | 'id' | 'isExpoAdmin'> & {\n accounts: Array<{ __typename?: 'Account' } & Pick<Account, 'id' | 'name'>>;\n })\n >;\n};\n"],"names":["OfferType","Subscription","Prepaid","Addon","Feature","Support","Teams","Builds","OpenSource","AppPrivacy","Public","Unlisted","Hidden","AppPlatform","Ios","Android","SecondFactorMethod","Authenticator","Sms","Permission","Own","Admin","Publish","View","Role","Owner","Developer","ViewOnly","Custom","HasAdmin","NotAdmin","BuildJobLogsFormat","Raw","Json","BuildJobStatus","Pending","Started","InProgress","Errored","Finished","SentToQueue","AppleDeviceClass","Ipad","Iphone","IosDistributionType","AppStore","Enterprise","AdHoc","Development","AppStoreConnectUserRole","Finance","Technical","AccountHolder","ReadOnly","Sales","Marketing","AppManager","AccessToReports","CustomerSupport","CreateApps","CloudManagedDeveloperId","CloudManagedAppDistribution","ImageManager","Unknown","AndroidFcmVersion","Legacy","V1","AndroidKeystoreType","Jks","Pkcs12","WebhookType","Build","Submit"],"mappings":"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"}