@expo/cli 0.10.13 → 0.10.15

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 (29) hide show
  1. package/build/bin/cli +2 -2
  2. package/build/src/customize/generate.js +28 -1
  3. package/build/src/customize/generate.js.map +1 -1
  4. package/build/src/customize/templates.js +8 -0
  5. package/build/src/customize/templates.js.map +1 -1
  6. package/build/src/customize/typescript.js +54 -0
  7. package/build/src/customize/typescript.js.map +1 -0
  8. package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js +6 -6
  9. package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js.map +1 -1
  10. package/build/src/start/doctor/typescript/updateTSConfig.js +11 -10
  11. package/build/src/start/doctor/typescript/updateTSConfig.js.map +1 -1
  12. package/build/src/start/server/DevServerManager.js +2 -1
  13. package/build/src/start/server/DevServerManager.js.map +1 -1
  14. package/build/src/start/server/metro/MetroBundlerDevServer.js +3 -2
  15. package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
  16. package/build/src/start/server/metro/inspector-proxy/device.js +3 -1
  17. package/build/src/start/server/metro/inspector-proxy/device.js.map +1 -1
  18. package/build/src/start/server/metro/inspector-proxy/handlers/VscodeDebuggerGetPossibleBreakpoints.js +3 -4
  19. package/build/src/start/server/metro/inspector-proxy/handlers/VscodeDebuggerGetPossibleBreakpoints.js.map +1 -1
  20. package/build/src/start/server/metro/inspector-proxy/handlers/VscodeRuntimeCallFunctionOn.js +24 -0
  21. package/build/src/start/server/metro/inspector-proxy/handlers/VscodeRuntimeCallFunctionOn.js.map +1 -0
  22. package/build/src/start/server/metro/inspector-proxy/handlers/utils.js +11 -0
  23. package/build/src/start/server/metro/inspector-proxy/handlers/utils.js.map +1 -0
  24. package/build/src/start/server/middleware/ClassicManifestMiddleware.js +1 -1
  25. package/build/src/start/server/type-generation/routes.js +1 -1
  26. package/build/src/start/server/type-generation/routes.js.map +1 -1
  27. package/build/src/start/server/type-generation/startTypescriptTypeGeneration.js.map +1 -1
  28. package/build/src/utils/analytics/rudderstackClient.js +2 -2
  29. package/package.json +2 -2
package/build/bin/cli CHANGED
@@ -132,7 +132,7 @@ const args = (0, _arg).default({
132
132
  });
133
133
  if (args["--version"]) {
134
134
  // Version is added in the build script.
135
- console.log("0.10.13");
135
+ console.log("0.10.15");
136
136
  process.exit(0);
137
137
  }
138
138
  if (args["--non-interactive"]) {
@@ -262,7 +262,7 @@ commands[command]().then((exec)=>{
262
262
  logEventAsync("action", {
263
263
  action: `expo ${command}`,
264
264
  source: "expo/cli",
265
- source_version: "0.10.13"
265
+ source_version: "0.10.15"
266
266
  });
267
267
  });
268
268
 
@@ -16,6 +16,27 @@ function _interopRequireDefault(obj) {
16
16
  default: obj
17
17
  };
18
18
  }
19
+ function _interopRequireWildcard(obj) {
20
+ if (obj && obj.__esModule) {
21
+ return obj;
22
+ } else {
23
+ var newObj = {};
24
+ if (obj != null) {
25
+ for(var key in obj){
26
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
27
+ var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
28
+ if (desc.get || desc.set) {
29
+ Object.defineProperty(newObj, key, desc);
30
+ } else {
31
+ newObj[key] = obj[key];
32
+ }
33
+ }
34
+ }
35
+ }
36
+ newObj.default = obj;
37
+ return newObj;
38
+ }
39
+ }
19
40
  async function queryAndGenerateAsync(projectRoot, { files , props , extras }) {
20
41
  const valid = files.filter((file)=>!!_templates.TEMPLATES.find((template)=>template.destination(props) === file
21
42
  )
@@ -52,8 +73,14 @@ async function selectAndGenerateAsync(projectRoot, { props , extras }) {
52
73
  }
53
74
  async function generateAsync(projectRoot, { answer , props , extras }) {
54
75
  // Copy files
55
- await Promise.all(answer.map((file)=>{
76
+ await Promise.all(answer.map(async (file)=>{
56
77
  const template = _templates.TEMPLATES[file];
78
+ if (template.id === "tsconfig.json") {
79
+ const { typescript } = await Promise.resolve().then(function() {
80
+ return _interopRequireWildcard(require("./typescript"));
81
+ });
82
+ return typescript(projectRoot);
83
+ }
57
84
  const projectFilePath = _path.default.resolve(projectRoot, template.destination(props));
58
85
  // copy the file from template
59
86
  return (0, _dir).copyAsync(template.file(projectRoot), projectFilePath, {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/customize/generate.ts"],"sourcesContent":["import path from 'path';\nimport resolveFrom from 'resolve-from';\n\nimport { installAsync } from '../install/installAsync';\nimport { Log } from '../log';\nimport { copyAsync } from '../utils/dir';\nimport { CommandError } from '../utils/errors';\nimport { DestinationResolutionProps, selectTemplatesAsync, TEMPLATES } from './templates';\n\nexport async function queryAndGenerateAsync(\n projectRoot: string,\n {\n files,\n props,\n extras,\n }: {\n files: string[];\n props: DestinationResolutionProps;\n /** Any extra props to pass to the install command. */\n extras: any[];\n }\n) {\n const valid = files.filter(\n (file) => !!TEMPLATES.find((template) => template.destination(props) === file)\n );\n\n if (valid.length !== files.length) {\n const diff = files.filter(\n (file) => !TEMPLATES.find((template) => template.destination(props) === file)\n );\n throw new CommandError(\n `Invalid files: ${diff.join(', ')}. Allowed: ${TEMPLATES.map((template) =>\n template.destination(props)\n ).join(', ')}`\n );\n }\n\n if (!valid.length) {\n return;\n }\n Log.log(`Generating: ${valid.join(', ')}`);\n return generateAsync(projectRoot, {\n answer: files.map((file) =>\n TEMPLATES.findIndex((template) => template.destination(props) === file)\n ),\n props,\n extras,\n });\n}\n\n/** Select templates to generate then generate and install. */\nexport async function selectAndGenerateAsync(\n projectRoot: string,\n {\n props,\n extras,\n }: {\n props: DestinationResolutionProps;\n /** Any extra props to pass to the install command. */\n extras: any[];\n }\n) {\n const answer = await selectTemplatesAsync(projectRoot, props);\n\n if (!answer?.length) {\n Log.exit('\\n\\u203A Exiting with no change...', 0);\n }\n\n await generateAsync(projectRoot, {\n answer,\n props,\n extras,\n });\n}\n\nasync function generateAsync(\n projectRoot: string,\n {\n answer,\n props,\n extras,\n }: {\n answer: number[];\n props: DestinationResolutionProps;\n /** Any extra props to pass to the install command. */\n extras: any[];\n }\n) {\n // Copy files\n await Promise.all(\n answer.map((file) => {\n const template = TEMPLATES[file];\n const projectFilePath = path.resolve(projectRoot, template.destination(props));\n // copy the file from template\n return copyAsync(template.file(projectRoot), projectFilePath, {\n overwrite: true,\n recursive: true,\n });\n })\n );\n\n // Install dependencies\n const packages = answer\n .map((file) => TEMPLATES[file].dependencies)\n .flat()\n .filter((pkg) => !resolveFrom.silent(projectRoot, pkg));\n if (packages.length) {\n Log.debug('Installing ' + packages.join(', '));\n await installAsync(packages, {}, ['--dev', ...extras]);\n }\n}\n"],"names":["queryAndGenerateAsync","selectAndGenerateAsync","projectRoot","files","props","extras","valid","filter","file","TEMPLATES","find","template","destination","length","diff","CommandError","join","map","Log","log","generateAsync","answer","findIndex","selectTemplatesAsync","exit","Promise","all","projectFilePath","path","resolve","copyAsync","overwrite","recursive","packages","dependencies","flat","pkg","resolveFrom","silent","debug","installAsync"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/customize/generate.ts"],"sourcesContent":["import path from 'path';\nimport resolveFrom from 'resolve-from';\n\nimport { installAsync } from '../install/installAsync';\nimport { Log } from '../log';\nimport { copyAsync } from '../utils/dir';\nimport { CommandError } from '../utils/errors';\nimport { DestinationResolutionProps, selectTemplatesAsync, TEMPLATES } from './templates';\n\nexport async function queryAndGenerateAsync(\n projectRoot: string,\n {\n files,\n props,\n extras,\n }: {\n files: string[];\n props: DestinationResolutionProps;\n /** Any extra props to pass to the install command. */\n extras: any[];\n }\n) {\n const valid = files.filter(\n (file) => !!TEMPLATES.find((template) => template.destination(props) === file)\n );\n\n if (valid.length !== files.length) {\n const diff = files.filter(\n (file) => !TEMPLATES.find((template) => template.destination(props) === file)\n );\n throw new CommandError(\n `Invalid files: ${diff.join(', ')}. Allowed: ${TEMPLATES.map((template) =>\n template.destination(props)\n ).join(', ')}`\n );\n }\n\n if (!valid.length) {\n return;\n }\n Log.log(`Generating: ${valid.join(', ')}`);\n return generateAsync(projectRoot, {\n answer: files.map((file) =>\n TEMPLATES.findIndex((template) => template.destination(props) === file)\n ),\n props,\n extras,\n });\n}\n\n/** Select templates to generate then generate and install. */\nexport async function selectAndGenerateAsync(\n projectRoot: string,\n {\n props,\n extras,\n }: {\n props: DestinationResolutionProps;\n /** Any extra props to pass to the install command. */\n extras: any[];\n }\n) {\n const answer = await selectTemplatesAsync(projectRoot, props);\n\n if (!answer?.length) {\n Log.exit('\\n\\u203A Exiting with no change...', 0);\n }\n\n await generateAsync(projectRoot, {\n answer,\n props,\n extras,\n });\n}\n\nasync function generateAsync(\n projectRoot: string,\n {\n answer,\n props,\n extras,\n }: {\n answer: number[];\n props: DestinationResolutionProps;\n /** Any extra props to pass to the install command. */\n extras: any[];\n }\n) {\n // Copy files\n await Promise.all(\n answer.map(async (file) => {\n const template = TEMPLATES[file];\n\n if (template.id === 'tsconfig.json') {\n const { typescript } = await import('./typescript');\n return typescript(projectRoot);\n }\n\n const projectFilePath = path.resolve(projectRoot, template.destination(props));\n // copy the file from template\n return copyAsync(template.file(projectRoot), projectFilePath, {\n overwrite: true,\n recursive: true,\n });\n })\n );\n\n // Install dependencies\n const packages = answer\n .map((file) => TEMPLATES[file].dependencies)\n .flat()\n .filter((pkg) => !resolveFrom.silent(projectRoot, pkg));\n if (packages.length) {\n Log.debug('Installing ' + packages.join(', '));\n await installAsync(packages, {}, ['--dev', ...extras]);\n }\n}\n"],"names":["queryAndGenerateAsync","selectAndGenerateAsync","projectRoot","files","props","extras","valid","filter","file","TEMPLATES","find","template","destination","length","diff","CommandError","join","map","Log","log","generateAsync","answer","findIndex","selectTemplatesAsync","exit","Promise","all","id","typescript","projectFilePath","path","resolve","copyAsync","overwrite","recursive","packages","dependencies","flat","pkg","resolveFrom","silent","debug","installAsync"],"mappings":"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"}
@@ -85,6 +85,14 @@ const TEMPLATES = [
85
85
  destination: ({ webStaticPath })=>webStaticPath + "/index.html"
86
86
  ,
87
87
  dependencies: []
88
+ },
89
+ {
90
+ // `tsconfig.json` is special cased and don't not follow the template
91
+ id: "tsconfig.json",
92
+ dependencies: [],
93
+ destination: ()=>"tsconfig.json"
94
+ ,
95
+ file: ()=>""
88
96
  },
89
97
  ];
90
98
  exports.TEMPLATES = TEMPLATES;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/customize/templates.ts"],"sourcesContent":["import chalk from 'chalk';\nimport fs from 'fs';\nimport path from 'path';\nimport resolveFrom from 'resolve-from';\n\nimport prompt, { ExpoChoice } from '../utils/prompts';\n\nconst debug = require('debug')('expo:customize:templates');\n\nexport type DestinationResolutionProps = {\n /** Web 'public' folder path (defaults to `/web`). This technically can be changed but shouldn't be. */\n webStaticPath: string;\n};\n\nfunction importFromExpoWebpackConfig(projectRoot: string, folder: string, moduleId: string) {\n try {\n const filePath = resolveFrom(projectRoot, `@expo/webpack-config/${folder}/${moduleId}`);\n debug(`Using @expo/webpack-config template for \"${moduleId}\": ${filePath}`);\n return filePath;\n } catch {\n debug(`@expo/webpack-config template for \"${moduleId}\" not found, falling back on @expo/cli`);\n }\n return importFromVendor(projectRoot, moduleId);\n}\n\nfunction importFromVendor(projectRoot: string, moduleId: string) {\n try {\n const filePath = resolveFrom(projectRoot, '@expo/cli/static/template/' + moduleId);\n debug(`Using @expo/cli template for \"${moduleId}\": ${filePath}`);\n return filePath;\n } catch {\n // For dev mode, testing and other cases where @expo/cli is not installed\n const filePath = require.resolve(`@expo/cli/static/template/${moduleId}`);\n debug(\n `Local @expo/cli template for \"${moduleId}\" not found, falling back on template relative to @expo/cli: ${filePath}`\n );\n\n return filePath;\n }\n}\n\nexport const TEMPLATES: {\n /** Unique ID for easily indexing. */\n id: string;\n /** Template file path to copy into the project. */\n file: (projectRoot: string) => string;\n /** Output location for the file in the user project. */\n destination: (props: DestinationResolutionProps) => string;\n /** List of dependencies to install in the project. These are used inside of the template file. */\n dependencies: string[];\n}[] = [\n {\n id: 'babel.config.js',\n file: (projectRoot) => importFromVendor(projectRoot, 'babel.config.js'),\n destination: () => 'babel.config.js',\n dependencies: [\n // Even though this is installed in `expo`, we should add it for now.\n 'babel-preset-expo',\n ],\n },\n {\n id: 'webpack.config.js',\n file: (projectRoot) =>\n importFromExpoWebpackConfig(projectRoot, 'template', 'webpack.config.js'),\n destination: () => 'webpack.config.js',\n dependencies: ['@expo/webpack-config'],\n },\n {\n id: 'metro.config.js',\n dependencies: ['@expo/metro-config'],\n destination: () => 'metro.config.js',\n file: (projectRoot) => importFromVendor(projectRoot, 'metro.config.js'),\n },\n {\n id: 'serve.json',\n file: (projectRoot) => importFromExpoWebpackConfig(projectRoot, 'web-default', 'serve.json'),\n // web/serve.json\n destination: ({ webStaticPath }) => webStaticPath + '/serve.json',\n dependencies: [],\n },\n {\n id: 'index.html',\n file: (projectRoot) => importFromExpoWebpackConfig(projectRoot, 'web-default', 'index.html'),\n // web/index.html\n destination: ({ webStaticPath }) => webStaticPath + '/index.html',\n dependencies: [],\n },\n];\n\n/** Generate the prompt choices. */\nfunction createChoices(\n projectRoot: string,\n props: DestinationResolutionProps\n): ExpoChoice<number>[] {\n return TEMPLATES.map((template, index) => {\n const destination = template.destination(props);\n const localProjectFile = path.resolve(projectRoot, destination);\n const exists = fs.existsSync(localProjectFile);\n\n return {\n title: destination,\n value: index,\n description: exists ? chalk.red('This will overwrite the existing file') : undefined,\n };\n });\n}\n\n/** Prompt to select templates to add. */\nexport async function selectTemplatesAsync(projectRoot: string, props: DestinationResolutionProps) {\n const options = createChoices(projectRoot, props);\n\n const { answer } = await prompt({\n type: 'multiselect',\n name: 'answer',\n message: 'Which files would you like to generate?',\n hint: '- Space to select. Return to submit',\n warn: 'File already exists.',\n limit: options.length,\n instructions: '',\n choices: options,\n });\n return answer;\n}\n"],"names":["selectTemplatesAsync","debug","require","importFromExpoWebpackConfig","projectRoot","folder","moduleId","filePath","resolveFrom","importFromVendor","resolve","TEMPLATES","id","file","destination","dependencies","webStaticPath","createChoices","props","map","template","index","localProjectFile","path","exists","fs","existsSync","title","value","description","chalk","red","undefined","options","answer","prompt","type","name","message","hint","warn","limit","length","instructions","choices"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/customize/templates.ts"],"sourcesContent":["import chalk from 'chalk';\nimport fs from 'fs';\nimport path from 'path';\nimport resolveFrom from 'resolve-from';\n\nimport prompt, { ExpoChoice } from '../utils/prompts';\n\nconst debug = require('debug')('expo:customize:templates');\n\nexport type DestinationResolutionProps = {\n /** Web 'public' folder path (defaults to `/web`). This technically can be changed but shouldn't be. */\n webStaticPath: string;\n};\n\nfunction importFromExpoWebpackConfig(projectRoot: string, folder: string, moduleId: string) {\n try {\n const filePath = resolveFrom(projectRoot, `@expo/webpack-config/${folder}/${moduleId}`);\n debug(`Using @expo/webpack-config template for \"${moduleId}\": ${filePath}`);\n return filePath;\n } catch {\n debug(`@expo/webpack-config template for \"${moduleId}\" not found, falling back on @expo/cli`);\n }\n return importFromVendor(projectRoot, moduleId);\n}\n\nfunction importFromVendor(projectRoot: string, moduleId: string) {\n try {\n const filePath = resolveFrom(projectRoot, '@expo/cli/static/template/' + moduleId);\n debug(`Using @expo/cli template for \"${moduleId}\": ${filePath}`);\n return filePath;\n } catch {\n // For dev mode, testing and other cases where @expo/cli is not installed\n const filePath = require.resolve(`@expo/cli/static/template/${moduleId}`);\n debug(\n `Local @expo/cli template for \"${moduleId}\" not found, falling back on template relative to @expo/cli: ${filePath}`\n );\n\n return filePath;\n }\n}\n\nexport const TEMPLATES: {\n /** Unique ID for easily indexing. */\n id: string;\n /** Template file path to copy into the project. */\n file: (projectRoot: string) => string;\n /** Output location for the file in the user project. */\n destination: (props: DestinationResolutionProps) => string;\n /** List of dependencies to install in the project. These are used inside of the template file. */\n dependencies: string[];\n}[] = [\n {\n id: 'babel.config.js',\n file: (projectRoot) => importFromVendor(projectRoot, 'babel.config.js'),\n destination: () => 'babel.config.js',\n dependencies: [\n // Even though this is installed in `expo`, we should add it for now.\n 'babel-preset-expo',\n ],\n },\n {\n id: 'webpack.config.js',\n file: (projectRoot) =>\n importFromExpoWebpackConfig(projectRoot, 'template', 'webpack.config.js'),\n destination: () => 'webpack.config.js',\n dependencies: ['@expo/webpack-config'],\n },\n {\n id: 'metro.config.js',\n dependencies: ['@expo/metro-config'],\n destination: () => 'metro.config.js',\n file: (projectRoot) => importFromVendor(projectRoot, 'metro.config.js'),\n },\n {\n id: 'serve.json',\n file: (projectRoot) => importFromExpoWebpackConfig(projectRoot, 'web-default', 'serve.json'),\n // web/serve.json\n destination: ({ webStaticPath }) => webStaticPath + '/serve.json',\n dependencies: [],\n },\n {\n id: 'index.html',\n file: (projectRoot) => importFromExpoWebpackConfig(projectRoot, 'web-default', 'index.html'),\n // web/index.html\n destination: ({ webStaticPath }) => webStaticPath + '/index.html',\n dependencies: [],\n },\n {\n // `tsconfig.json` is special cased and don't not follow the template\n id: 'tsconfig.json',\n dependencies: [],\n destination: () => 'tsconfig.json',\n file: () => '',\n },\n];\n\n/** Generate the prompt choices. */\nfunction createChoices(\n projectRoot: string,\n props: DestinationResolutionProps\n): ExpoChoice<number>[] {\n return TEMPLATES.map((template, index) => {\n const destination = template.destination(props);\n const localProjectFile = path.resolve(projectRoot, destination);\n const exists = fs.existsSync(localProjectFile);\n\n return {\n title: destination,\n value: index,\n description: exists ? chalk.red('This will overwrite the existing file') : undefined,\n };\n });\n}\n\n/** Prompt to select templates to add. */\nexport async function selectTemplatesAsync(projectRoot: string, props: DestinationResolutionProps) {\n const options = createChoices(projectRoot, props);\n\n const { answer } = await prompt({\n type: 'multiselect',\n name: 'answer',\n message: 'Which files would you like to generate?',\n hint: '- Space to select. Return to submit',\n warn: 'File already exists.',\n limit: options.length,\n instructions: '',\n choices: options,\n });\n return answer;\n}\n"],"names":["selectTemplatesAsync","debug","require","importFromExpoWebpackConfig","projectRoot","folder","moduleId","filePath","resolveFrom","importFromVendor","resolve","TEMPLATES","id","file","destination","dependencies","webStaticPath","createChoices","props","map","template","index","localProjectFile","path","exists","fs","existsSync","title","value","description","chalk","red","undefined","options","answer","prompt","type","name","message","hint","warn","limit","length","instructions","choices"],"mappings":"AAAA;;;;QAmHsBA,oBAAoB,GAApBA,oBAAoB;;AAnHxB,IAAA,MAAO,kCAAP,OAAO,EAAA;AACV,IAAA,GAAI,kCAAJ,IAAI,EAAA;AACF,IAAA,KAAM,kCAAN,MAAM,EAAA;AACC,IAAA,YAAc,kCAAd,cAAc,EAAA;AAEH,IAAA,QAAkB,kCAAlB,kBAAkB,EAAA;;;;;;AAErD,MAAMC,KAAK,GAAGC,OAAO,CAAC,OAAO,CAAC,CAAC,0BAA0B,CAAC,AAAC;AAO3D,SAASC,2BAA2B,CAACC,WAAmB,EAAEC,MAAc,EAAEC,QAAgB,EAAE;IAC1F,IAAI;QACF,MAAMC,QAAQ,GAAGC,CAAAA,GAAAA,YAAW,AAA2D,CAAA,QAA3D,CAACJ,WAAW,EAAE,CAAC,qBAAqB,EAAEC,MAAM,CAAC,CAAC,EAAEC,QAAQ,CAAC,CAAC,CAAC,AAAC;QACxFL,KAAK,CAAC,CAAC,yCAAyC,EAAEK,QAAQ,CAAC,GAAG,EAAEC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC5E,OAAOA,QAAQ,CAAC;KACjB,CAAC,OAAM;QACNN,KAAK,CAAC,CAAC,mCAAmC,EAAEK,QAAQ,CAAC,sCAAsC,CAAC,CAAC,CAAC;KAC/F;IACD,OAAOG,gBAAgB,CAACL,WAAW,EAAEE,QAAQ,CAAC,CAAC;CAChD;AAED,SAASG,gBAAgB,CAACL,WAAmB,EAAEE,QAAgB,EAAE;IAC/D,IAAI;QACF,MAAMC,QAAQ,GAAGC,CAAAA,GAAAA,YAAW,AAAsD,CAAA,QAAtD,CAACJ,WAAW,EAAE,4BAA4B,GAAGE,QAAQ,CAAC,AAAC;QACnFL,KAAK,CAAC,CAAC,8BAA8B,EAAEK,QAAQ,CAAC,GAAG,EAAEC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACjE,OAAOA,QAAQ,CAAC;KACjB,CAAC,OAAM;QACN,yEAAyE;QACzE,MAAMA,QAAQ,GAAGL,OAAO,CAACQ,OAAO,CAAC,CAAC,0BAA0B,EAAEJ,QAAQ,CAAC,CAAC,CAAC,AAAC;QAC1EL,KAAK,CACH,CAAC,8BAA8B,EAAEK,QAAQ,CAAC,6DAA6D,EAAEC,QAAQ,CAAC,CAAC,CACpH,CAAC;QAEF,OAAOA,QAAQ,CAAC;KACjB;CACF;AAEM,MAAMI,SAAS,GAShB;IACJ;QACEC,EAAE,EAAE,iBAAiB;QACrBC,IAAI,EAAE,CAACT,WAAW,GAAKK,gBAAgB,CAACL,WAAW,EAAE,iBAAiB,CAAC;QAAA;QACvEU,WAAW,EAAE,IAAM,iBAAiB;QAAA;QACpCC,YAAY,EAAE;YACZ,qEAAqE;YACrE,mBAAmB;SACpB;KACF;IACD;QACEH,EAAE,EAAE,mBAAmB;QACvBC,IAAI,EAAE,CAACT,WAAW,GAChBD,2BAA2B,CAACC,WAAW,EAAE,UAAU,EAAE,mBAAmB,CAAC;QAAA;QAC3EU,WAAW,EAAE,IAAM,mBAAmB;QAAA;QACtCC,YAAY,EAAE;YAAC,sBAAsB;SAAC;KACvC;IACD;QACEH,EAAE,EAAE,iBAAiB;QACrBG,YAAY,EAAE;YAAC,oBAAoB;SAAC;QACpCD,WAAW,EAAE,IAAM,iBAAiB;QAAA;QACpCD,IAAI,EAAE,CAACT,WAAW,GAAKK,gBAAgB,CAACL,WAAW,EAAE,iBAAiB,CAAC;KACxE;IACD;QACEQ,EAAE,EAAE,YAAY;QAChBC,IAAI,EAAE,CAACT,WAAW,GAAKD,2BAA2B,CAACC,WAAW,EAAE,aAAa,EAAE,YAAY,CAAC;QAAA;QAC5F,iBAAiB;QACjBU,WAAW,EAAE,CAAC,EAAEE,aAAa,CAAA,EAAE,GAAKA,aAAa,GAAG,aAAa;QAAA;QACjED,YAAY,EAAE,EAAE;KACjB;IACD;QACEH,EAAE,EAAE,YAAY;QAChBC,IAAI,EAAE,CAACT,WAAW,GAAKD,2BAA2B,CAACC,WAAW,EAAE,aAAa,EAAE,YAAY,CAAC;QAAA;QAC5F,iBAAiB;QACjBU,WAAW,EAAE,CAAC,EAAEE,aAAa,CAAA,EAAE,GAAKA,aAAa,GAAG,aAAa;QAAA;QACjED,YAAY,EAAE,EAAE;KACjB;IACD;QACE,qEAAqE;QACrEH,EAAE,EAAE,eAAe;QACnBG,YAAY,EAAE,EAAE;QAChBD,WAAW,EAAE,IAAM,eAAe;QAAA;QAClCD,IAAI,EAAE,IAAM,EAAE;KACf;CACF,AAAC;QArDWF,SAAS,GAATA,SAAS;AAuDtB,mCAAmC,CACnC,SAASM,aAAa,CACpBb,WAAmB,EACnBc,KAAiC,EACX;IACtB,OAAOP,SAAS,CAACQ,GAAG,CAAC,CAACC,QAAQ,EAAEC,KAAK,GAAK;QACxC,MAAMP,WAAW,GAAGM,QAAQ,CAACN,WAAW,CAACI,KAAK,CAAC,AAAC;QAChD,MAAMI,gBAAgB,GAAGC,KAAI,QAAA,CAACb,OAAO,CAACN,WAAW,EAAEU,WAAW,CAAC,AAAC;QAChE,MAAMU,MAAM,GAAGC,GAAE,QAAA,CAACC,UAAU,CAACJ,gBAAgB,CAAC,AAAC;QAE/C,OAAO;YACLK,KAAK,EAAEb,WAAW;YAClBc,KAAK,EAAEP,KAAK;YACZQ,WAAW,EAAEL,MAAM,GAAGM,MAAK,QAAA,CAACC,GAAG,CAAC,uCAAuC,CAAC,GAAGC,SAAS;SACrF,CAAC;KACH,CAAC,CAAC;CACJ;AAGM,eAAehC,oBAAoB,CAACI,WAAmB,EAAEc,KAAiC,EAAE;IACjG,MAAMe,OAAO,GAAGhB,aAAa,CAACb,WAAW,EAAEc,KAAK,CAAC,AAAC;IAElD,MAAM,EAAEgB,MAAM,CAAA,EAAE,GAAG,MAAMC,CAAAA,GAAAA,QAAM,AAS7B,CAAA,QAT6B,CAAC;QAC9BC,IAAI,EAAE,aAAa;QACnBC,IAAI,EAAE,QAAQ;QACdC,OAAO,EAAE,yCAAyC;QAClDC,IAAI,EAAE,qCAAqC;QAC3CC,IAAI,EAAE,sBAAsB;QAC5BC,KAAK,EAAER,OAAO,CAACS,MAAM;QACrBC,YAAY,EAAE,EAAE;QAChBC,OAAO,EAAEX,OAAO;KACjB,CAAC,AAAC;IACH,OAAOC,MAAM,CAAC;CACf"}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ exports.typescript = typescript;
6
+ var _config = require("@expo/config");
7
+ var _log = require("../log");
8
+ function _interopRequireWildcard(obj) {
9
+ if (obj && obj.__esModule) {
10
+ return obj;
11
+ } else {
12
+ var newObj = {};
13
+ if (obj != null) {
14
+ for(var key in obj){
15
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
16
+ var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
17
+ if (desc.get || desc.set) {
18
+ Object.defineProperty(newObj, key, desc);
19
+ } else {
20
+ newObj[key] = obj[key];
21
+ }
22
+ }
23
+ }
24
+ }
25
+ newObj.default = obj;
26
+ return newObj;
27
+ }
28
+ }
29
+ async function typescript(projectRoot) {
30
+ const { TypeScriptProjectPrerequisite } = await Promise.resolve().then(function() {
31
+ return _interopRequireWildcard(require("../start/doctor/typescript/TypeScriptProjectPrerequisite"));
32
+ });
33
+ const { MetroBundlerDevServer } = await Promise.resolve().then(function() {
34
+ return _interopRequireWildcard(require("../start/server/metro/MetroBundlerDevServer"));
35
+ });
36
+ const { getPlatformBundlers } = await Promise.resolve().then(function() {
37
+ return _interopRequireWildcard(require("../start/server/platformBundlers"));
38
+ });
39
+ try {
40
+ await new TypeScriptProjectPrerequisite(projectRoot).bootstrapAsync();
41
+ } catch (error) {
42
+ // Ensure the process doesn't fail if the TypeScript check fails.
43
+ // This could happen during the install.
44
+ _log.Log.log();
45
+ _log.Log.exception(error);
46
+ return;
47
+ }
48
+ const { exp } = (0, _config).getConfig(projectRoot, {
49
+ skipSDKVersionRequirement: true
50
+ });
51
+ await new MetroBundlerDevServer(projectRoot, getPlatformBundlers(exp), true).startTypeScriptServices();
52
+ }
53
+
54
+ //# sourceMappingURL=typescript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/customize/typescript.ts"],"sourcesContent":["import { getConfig } from '@expo/config';\n\nimport { Log } from '../log';\n\nexport async function typescript(projectRoot: string) {\n const { TypeScriptProjectPrerequisite } = await import(\n '../start/doctor/typescript/TypeScriptProjectPrerequisite'\n );\n const { MetroBundlerDevServer } = await import('../start/server/metro/MetroBundlerDevServer');\n const { getPlatformBundlers } = await import('../start/server/platformBundlers');\n\n try {\n await new TypeScriptProjectPrerequisite(projectRoot).bootstrapAsync();\n } catch (error: any) {\n // Ensure the process doesn't fail if the TypeScript check fails.\n // This could happen during the install.\n Log.log();\n Log.exception(error);\n return;\n }\n\n const { exp } = getConfig(projectRoot, { skipSDKVersionRequirement: true });\n await new MetroBundlerDevServer(\n projectRoot,\n getPlatformBundlers(exp),\n true\n ).startTypeScriptServices();\n}\n"],"names":["typescript","projectRoot","TypeScriptProjectPrerequisite","MetroBundlerDevServer","getPlatformBundlers","bootstrapAsync","error","Log","log","exception","exp","getConfig","skipSDKVersionRequirement","startTypeScriptServices"],"mappings":"AAAA;;;;QAIsBA,UAAU,GAAVA,UAAU;AAJN,IAAA,OAAc,WAAd,cAAc,CAAA;AAEpB,IAAA,IAAQ,WAAR,QAAQ,CAAA;;;;;;;;;;;;;;;;;;;;;;AAErB,eAAeA,UAAU,CAACC,WAAmB,EAAE;IACpD,MAAM,EAAEC,6BAA6B,CAAA,EAAE,GAAG,MAAM;+CAC9C,0DAA0D;MAC3D,AAAC;IACF,MAAM,EAAEC,qBAAqB,CAAA,EAAE,GAAG,MAAM;+CAAO,6CAA6C;MAAC,AAAC;IAC9F,MAAM,EAAEC,mBAAmB,CAAA,EAAE,GAAG,MAAM;+CAAO,kCAAkC;MAAC,AAAC;IAEjF,IAAI;QACF,MAAM,IAAIF,6BAA6B,CAACD,WAAW,CAAC,CAACI,cAAc,EAAE,CAAC;KACvE,CAAC,OAAOC,KAAK,EAAO;QACnB,iEAAiE;QACjE,wCAAwC;QACxCC,IAAG,IAAA,CAACC,GAAG,EAAE,CAAC;QACVD,IAAG,IAAA,CAACE,SAAS,CAACH,KAAK,CAAC,CAAC;QACrB,OAAO;KACR;IAED,MAAM,EAAEI,GAAG,CAAA,EAAE,GAAGC,CAAAA,GAAAA,OAAS,AAAkD,CAAA,UAAlD,CAACV,WAAW,EAAE;QAAEW,yBAAyB,EAAE,IAAI;KAAE,CAAC,AAAC;IAC5E,MAAM,IAAIT,qBAAqB,CAC7BF,WAAW,EACXG,mBAAmB,CAACM,GAAG,CAAC,EACxB,IAAI,CACL,CAACG,uBAAuB,EAAE,CAAC;CAC7B"}
@@ -63,8 +63,7 @@ class TypeScriptProjectPrerequisite extends _prerequisite.ProjectPrerequisite {
63
63
  await this._ensureDependenciesInstalledAsync();
64
64
  // Update the config
65
65
  await (0, _updateTSConfig).updateTSConfigAsync({
66
- tsConfigPath,
67
- isBootstrapping: intent.isBootstrapping
66
+ tsConfigPath
68
67
  });
69
68
  return true;
70
69
  }
@@ -75,13 +74,13 @@ class TypeScriptProjectPrerequisite extends _prerequisite.ProjectPrerequisite {
75
74
  }
76
75
  // Ensure TypeScript packages are installed
77
76
  await this._ensureDependenciesInstalledAsync({
78
- skipPrompt: true
77
+ skipPrompt: true,
78
+ isProjectMutable: true
79
79
  });
80
80
  const tsConfigPath = _path.default.join(this.projectRoot, "tsconfig.json");
81
81
  // Update the config
82
82
  await (0, _updateTSConfig).updateTSConfigAsync({
83
- tsConfigPath,
84
- isBootstrapping: true
83
+ tsConfigPath
85
84
  });
86
85
  }
87
86
  /** Exposed for testing. */ async _getSetupRequirements() {
@@ -109,11 +108,12 @@ class TypeScriptProjectPrerequisite extends _prerequisite.ProjectPrerequisite {
109
108
  }
110
109
  return null;
111
110
  }
112
- /** Exposed for testing. */ async _ensureDependenciesInstalledAsync({ exp , skipPrompt } = {}) {
111
+ /** Exposed for testing. */ async _ensureDependenciesInstalledAsync({ exp , skipPrompt , isProjectMutable } = {}) {
113
112
  try {
114
113
  return await (0, _ensureDependenciesAsync).ensureDependenciesAsync(this.projectRoot, {
115
114
  exp,
116
115
  skipPrompt,
116
+ isProjectMutable,
117
117
  installMessage: `It looks like you're trying to use TypeScript but don't have the required dependencies installed.`,
118
118
  warningMessage: "If you're not using TypeScript, please remove the TypeScript files from your project",
119
119
  requiredPackages: [
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/start/doctor/typescript/TypeScriptProjectPrerequisite.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config';\nimport fs from 'fs/promises';\nimport path from 'path';\n\nimport * as Log from '../../../log';\nimport { fileExistsAsync } from '../../../utils/dir';\nimport { env } from '../../../utils/env';\nimport { memoize } from '../../../utils/fn';\nimport { everyMatchAsync, wrapGlobWithTimeout } from '../../../utils/glob';\nimport { ProjectPrerequisite } from '../Prerequisite';\nimport { ensureDependenciesAsync } from '../dependencies/ensureDependenciesAsync';\nimport { updateTSConfigAsync } from './updateTSConfig';\n\nconst debug = require('debug')('expo:doctor:typescriptSupport') as typeof console.log;\n\nconst warnDisabled = memoize(() => {\n Log.warn('Skipping TypeScript setup: EXPO_NO_TYPESCRIPT_SETUP is enabled.');\n});\n\n/** Ensure the project has the required TypeScript support settings. */\nexport class TypeScriptProjectPrerequisite extends ProjectPrerequisite<boolean> {\n /**\n * Ensure a project that hasn't explicitly disabled typescript support has all the required packages for running in the browser.\n *\n * @returns `true` if the setup finished and no longer needs to be run again.\n */\n async assertImplementation(): Promise<boolean> {\n if (env.EXPO_NO_TYPESCRIPT_SETUP) {\n warnDisabled();\n return true;\n }\n debug('Ensuring TypeScript support is setup');\n\n const tsConfigPath = path.join(this.projectRoot, 'tsconfig.json');\n\n // Ensure the project is TypeScript before continuing.\n const intent = await this._getSetupRequirements();\n if (!intent) {\n return false;\n }\n\n // Ensure TypeScript packages are installed\n await this._ensureDependenciesInstalledAsync();\n\n // Update the config\n await updateTSConfigAsync({ tsConfigPath, isBootstrapping: intent.isBootstrapping });\n\n return true;\n }\n\n async bootstrapAsync(): Promise<void> {\n if (env.EXPO_NO_TYPESCRIPT_SETUP) {\n warnDisabled();\n return;\n }\n // Ensure TypeScript packages are installed\n await this._ensureDependenciesInstalledAsync({\n skipPrompt: true,\n });\n\n const tsConfigPath = path.join(this.projectRoot, 'tsconfig.json');\n\n // Update the config\n await updateTSConfigAsync({ tsConfigPath, isBootstrapping: true });\n }\n\n /** Exposed for testing. */\n async _getSetupRequirements(): Promise<{\n /** Indicates that TypeScript support is being bootstrapped. */\n isBootstrapping: boolean;\n } | null> {\n const tsConfigPath = await this._hasTSConfig();\n\n // Enable TS setup if the project has a `tsconfig.json`\n if (tsConfigPath) {\n const content = await fs.readFile(tsConfigPath, { encoding: 'utf8' }).then(\n (txt) => txt.trim(),\n // null when the file doesn't exist.\n () => null\n );\n const isBlankConfig = content === '' || content === '{}';\n return { isBootstrapping: isBlankConfig };\n }\n // This is a somewhat heavy check in larger projects.\n // Test that this is reasonably paced by running expo start in `expo/apps/native-component-list`\n const typescriptFile = await this._queryFirstTypeScriptFileAsync();\n if (typescriptFile) {\n return { isBootstrapping: true };\n }\n\n return null;\n }\n\n /** Exposed for testing. */\n async _ensureDependenciesInstalledAsync({\n exp,\n skipPrompt,\n }: { exp?: ExpoConfig; skipPrompt?: boolean } = {}): Promise<boolean> {\n try {\n return await ensureDependenciesAsync(this.projectRoot, {\n exp,\n skipPrompt,\n installMessage: `It looks like you're trying to use TypeScript but don't have the required dependencies installed.`,\n warningMessage:\n \"If you're not using TypeScript, please remove the TypeScript files from your project\",\n requiredPackages: [\n // use typescript/package.json to skip node module cache issues when the user installs\n // the package and attempts to resolve the module in the same process.\n { file: 'typescript/package.json', pkg: 'typescript' },\n { file: '@types/react/package.json', pkg: '@types/react' },\n ],\n });\n } catch (error) {\n // Reset the cached check so we can re-run the check if the user re-runs the command by pressing 'w' in the Terminal UI.\n this.resetAssertion();\n throw error;\n }\n }\n\n /** Return the first TypeScript file in the project. */\n async _queryFirstTypeScriptFileAsync(): Promise<null | string> {\n const results = await wrapGlobWithTimeout(\n () =>\n // TODO(Bacon): Use `everyMatch` since a bug causes `anyMatch` to return inaccurate results when used multiple times.\n everyMatchAsync('**/*.@(ts|tsx)', {\n cwd: this.projectRoot,\n ignore: [\n '**/@(Carthage|Pods|node_modules)/**',\n '**/*.d.ts',\n '@(ios|android|web|web-build|dist)/**',\n ],\n }),\n 5000\n );\n\n if (results === false) {\n return null;\n }\n return results[0] ?? null;\n }\n\n async _hasTSConfig(): Promise<string | null> {\n const tsConfigPath = path.join(this.projectRoot, 'tsconfig.json');\n if (await fileExistsAsync(tsConfigPath)) {\n return tsConfigPath;\n }\n return null;\n }\n}\n"],"names":["Log","debug","require","warnDisabled","memoize","warn","TypeScriptProjectPrerequisite","ProjectPrerequisite","assertImplementation","env","EXPO_NO_TYPESCRIPT_SETUP","tsConfigPath","path","join","projectRoot","intent","_getSetupRequirements","_ensureDependenciesInstalledAsync","updateTSConfigAsync","isBootstrapping","bootstrapAsync","skipPrompt","_hasTSConfig","content","fs","readFile","encoding","then","txt","trim","isBlankConfig","typescriptFile","_queryFirstTypeScriptFileAsync","exp","ensureDependenciesAsync","installMessage","warningMessage","requiredPackages","file","pkg","error","resetAssertion","results","wrapGlobWithTimeout","everyMatchAsync","cwd","ignore","fileExistsAsync"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../src/start/doctor/typescript/TypeScriptProjectPrerequisite.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config';\nimport fs from 'fs/promises';\nimport path from 'path';\n\nimport * as Log from '../../../log';\nimport { fileExistsAsync } from '../../../utils/dir';\nimport { env } from '../../../utils/env';\nimport { memoize } from '../../../utils/fn';\nimport { everyMatchAsync, wrapGlobWithTimeout } from '../../../utils/glob';\nimport { ProjectPrerequisite } from '../Prerequisite';\nimport { ensureDependenciesAsync } from '../dependencies/ensureDependenciesAsync';\nimport { updateTSConfigAsync } from './updateTSConfig';\n\nconst debug = require('debug')('expo:doctor:typescriptSupport') as typeof console.log;\n\nconst warnDisabled = memoize(() => {\n Log.warn('Skipping TypeScript setup: EXPO_NO_TYPESCRIPT_SETUP is enabled.');\n});\n\n/** Ensure the project has the required TypeScript support settings. */\nexport class TypeScriptProjectPrerequisite extends ProjectPrerequisite<boolean> {\n /**\n * Ensure a project that hasn't explicitly disabled typescript support has all the required packages for running in the browser.\n *\n * @returns `true` if the setup finished and no longer needs to be run again.\n */\n async assertImplementation(): Promise<boolean> {\n if (env.EXPO_NO_TYPESCRIPT_SETUP) {\n warnDisabled();\n return true;\n }\n debug('Ensuring TypeScript support is setup');\n\n const tsConfigPath = path.join(this.projectRoot, 'tsconfig.json');\n\n // Ensure the project is TypeScript before continuing.\n const intent = await this._getSetupRequirements();\n if (!intent) {\n return false;\n }\n\n // Ensure TypeScript packages are installed\n await this._ensureDependenciesInstalledAsync();\n\n // Update the config\n await updateTSConfigAsync({ tsConfigPath });\n\n return true;\n }\n\n async bootstrapAsync(): Promise<void> {\n if (env.EXPO_NO_TYPESCRIPT_SETUP) {\n warnDisabled();\n return;\n }\n // Ensure TypeScript packages are installed\n await this._ensureDependenciesInstalledAsync({\n skipPrompt: true,\n isProjectMutable: true,\n });\n\n const tsConfigPath = path.join(this.projectRoot, 'tsconfig.json');\n\n // Update the config\n await updateTSConfigAsync({ tsConfigPath });\n }\n\n /** Exposed for testing. */\n async _getSetupRequirements(): Promise<{\n /** Indicates that TypeScript support is being bootstrapped. */\n isBootstrapping: boolean;\n } | null> {\n const tsConfigPath = await this._hasTSConfig();\n\n // Enable TS setup if the project has a `tsconfig.json`\n if (tsConfigPath) {\n const content = await fs.readFile(tsConfigPath, { encoding: 'utf8' }).then(\n (txt) => txt.trim(),\n // null when the file doesn't exist.\n () => null\n );\n const isBlankConfig = content === '' || content === '{}';\n return { isBootstrapping: isBlankConfig };\n }\n // This is a somewhat heavy check in larger projects.\n // Test that this is reasonably paced by running expo start in `expo/apps/native-component-list`\n const typescriptFile = await this._queryFirstTypeScriptFileAsync();\n if (typescriptFile) {\n return { isBootstrapping: true };\n }\n\n return null;\n }\n\n /** Exposed for testing. */\n async _ensureDependenciesInstalledAsync({\n exp,\n skipPrompt,\n isProjectMutable,\n }: {\n exp?: ExpoConfig;\n skipPrompt?: boolean;\n isProjectMutable?: boolean;\n } = {}): Promise<boolean> {\n try {\n return await ensureDependenciesAsync(this.projectRoot, {\n exp,\n skipPrompt,\n isProjectMutable,\n installMessage: `It looks like you're trying to use TypeScript but don't have the required dependencies installed.`,\n warningMessage:\n \"If you're not using TypeScript, please remove the TypeScript files from your project\",\n requiredPackages: [\n // use typescript/package.json to skip node module cache issues when the user installs\n // the package and attempts to resolve the module in the same process.\n { file: 'typescript/package.json', pkg: 'typescript' },\n { file: '@types/react/package.json', pkg: '@types/react' },\n ],\n });\n } catch (error) {\n // Reset the cached check so we can re-run the check if the user re-runs the command by pressing 'w' in the Terminal UI.\n this.resetAssertion();\n throw error;\n }\n }\n\n /** Return the first TypeScript file in the project. */\n async _queryFirstTypeScriptFileAsync(): Promise<null | string> {\n const results = await wrapGlobWithTimeout(\n () =>\n // TODO(Bacon): Use `everyMatch` since a bug causes `anyMatch` to return inaccurate results when used multiple times.\n everyMatchAsync('**/*.@(ts|tsx)', {\n cwd: this.projectRoot,\n ignore: [\n '**/@(Carthage|Pods|node_modules)/**',\n '**/*.d.ts',\n '@(ios|android|web|web-build|dist)/**',\n ],\n }),\n 5000\n );\n\n if (results === false) {\n return null;\n }\n return results[0] ?? null;\n }\n\n async _hasTSConfig(): Promise<string | null> {\n const tsConfigPath = path.join(this.projectRoot, 'tsconfig.json');\n if (await fileExistsAsync(tsConfigPath)) {\n return tsConfigPath;\n }\n return null;\n }\n}\n"],"names":["Log","debug","require","warnDisabled","memoize","warn","TypeScriptProjectPrerequisite","ProjectPrerequisite","assertImplementation","env","EXPO_NO_TYPESCRIPT_SETUP","tsConfigPath","path","join","projectRoot","intent","_getSetupRequirements","_ensureDependenciesInstalledAsync","updateTSConfigAsync","bootstrapAsync","skipPrompt","isProjectMutable","_hasTSConfig","content","fs","readFile","encoding","then","txt","trim","isBlankConfig","isBootstrapping","typescriptFile","_queryFirstTypeScriptFileAsync","exp","ensureDependenciesAsync","installMessage","warningMessage","requiredPackages","file","pkg","error","resetAssertion","results","wrapGlobWithTimeout","everyMatchAsync","cwd","ignore","fileExistsAsync"],"mappings":"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"}
@@ -34,21 +34,22 @@ function _interopRequireWildcard(obj) {
34
34
  return newObj;
35
35
  }
36
36
  }
37
+ var _projectTSConfig;
37
38
  const baseTSConfigName = "expo/tsconfig.base";
38
39
  exports.baseTSConfigName = baseTSConfigName;
39
- async function updateTSConfigAsync({ tsConfigPath , isBootstrapping }) {
40
- const shouldGenerate = !_fs.default.existsSync(tsConfigPath);
41
- if (isBootstrapping) {
42
- await _jsonFile.default.writeAsync(tsConfigPath, {});
40
+ async function updateTSConfigAsync({ tsConfigPath }) {
41
+ const shouldGenerate = !_fs.default.existsSync(tsConfigPath) || _fs.default.statSync(tsConfigPath).size === 0;
42
+ if (shouldGenerate) {
43
+ await _jsonFile.default.writeAsync(tsConfigPath, {
44
+ compilerOptions: {}
45
+ });
43
46
  }
44
47
  const projectTSConfig = _jsonFile.default.read(tsConfigPath, {
45
48
  // Some tsconfig.json files have a generated comment in the file.
46
49
  json5: true
47
50
  });
48
- if (projectTSConfig.compilerOptions == null) {
49
- projectTSConfig.compilerOptions = {};
50
- isBootstrapping = true;
51
- }
51
+ var _compilerOptions;
52
+ (_compilerOptions = (_projectTSConfig = projectTSConfig).compilerOptions) != null ? _compilerOptions : _projectTSConfig.compilerOptions = {};
52
53
  const modifications = [];
53
54
  // If the extends field isn't defined, set it to the expo default
54
55
  if (!projectTSConfig.extends) {
@@ -66,11 +67,11 @@ async function updateTSConfigAsync({ tsConfigPath , isBootstrapping }) {
66
67
  // Write changes and log out a summary of what changed
67
68
  await _jsonFile.default.writeAsync(tsConfigPath, projectTSConfig);
68
69
  // If no changes, then quietly bail out
69
- if (isBootstrapping && !shouldGenerate) {
70
+ if (modifications.length === 0) {
70
71
  return;
71
72
  }
72
73
  Log.log();
73
- if (isBootstrapping) {
74
+ if (shouldGenerate) {
74
75
  Log.log(_chalk.default`{bold TypeScript}: A {cyan tsconfig.json} has been auto-generated`);
75
76
  } else {
76
77
  Log.log(_chalk.default`{bold TypeScript}: The {cyan tsconfig.json} has been updated {dim (Use EXPO_NO_TYPESCRIPT_SETUP to skip)}`);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/start/doctor/typescript/updateTSConfig.ts"],"sourcesContent":["import JsonFile from '@expo/json-file';\nimport chalk from 'chalk';\nimport fs from 'fs';\n\nimport * as Log from '../../../log';\n\nexport const baseTSConfigName = 'expo/tsconfig.base';\n\nexport async function updateTSConfigAsync({\n tsConfigPath,\n isBootstrapping,\n}: {\n tsConfigPath: string;\n isBootstrapping: boolean;\n}): Promise<void> {\n const shouldGenerate = !fs.existsSync(tsConfigPath);\n if (isBootstrapping) {\n await JsonFile.writeAsync(tsConfigPath, {});\n }\n\n const projectTSConfig = JsonFile.read(tsConfigPath, {\n // Some tsconfig.json files have a generated comment in the file.\n json5: true,\n });\n if (projectTSConfig.compilerOptions == null) {\n projectTSConfig.compilerOptions = {};\n isBootstrapping = true;\n }\n\n const modifications: [string, string][] = [];\n\n // If the extends field isn't defined, set it to the expo default\n if (!projectTSConfig.extends) {\n // if (projectTSConfig.extends !== baseTSConfigName) {\n projectTSConfig.extends = baseTSConfigName;\n modifications.push(['extends', baseTSConfigName]);\n }\n\n // If no changes, then quietly bail out\n if (!modifications.length) {\n return;\n }\n\n // Write changes and log out a summary of what changed\n await JsonFile.writeAsync(tsConfigPath, projectTSConfig);\n\n // If no changes, then quietly bail out\n if (isBootstrapping && !shouldGenerate) {\n return;\n }\n\n Log.log();\n\n if (isBootstrapping) {\n Log.log(chalk`{bold TypeScript}: A {cyan tsconfig.json} has been auto-generated`);\n } else {\n Log.log(\n chalk`{bold TypeScript}: The {cyan tsconfig.json} has been updated {dim (Use EXPO_NO_TYPESCRIPT_SETUP to skip)}`\n );\n logModifications(modifications);\n }\n Log.log();\n}\n\nfunction logModifications(modifications: string[][]) {\n Log.log();\n\n Log.log(chalk`\\u203A {bold Required} modifications made to the {cyan tsconfig.json}:`);\n\n Log.log();\n\n // Sort the items based on key name length\n printTable(modifications.sort((a, b) => a[0].length - b[0].length));\n\n Log.log();\n}\n\nfunction printTable(items: string[][]) {\n const tableFormat = (name: string, msg: string) =>\n ` ${chalk.bold`${name}`} is now ${chalk.cyan(msg)}`;\n for (const [key, value] of items) {\n Log.log(tableFormat(key, value));\n }\n}\n"],"names":["updateTSConfigAsync","Log","baseTSConfigName","tsConfigPath","isBootstrapping","shouldGenerate","fs","existsSync","JsonFile","writeAsync","projectTSConfig","read","json5","compilerOptions","modifications","extends","push","length","log","chalk","logModifications","printTable","sort","a","b","items","tableFormat","name","msg","bold","cyan","key","value"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../src/start/doctor/typescript/updateTSConfig.ts"],"sourcesContent":["import JsonFile from '@expo/json-file';\nimport chalk from 'chalk';\nimport fs from 'fs';\n\nimport * as Log from '../../../log';\n\nexport const baseTSConfigName = 'expo/tsconfig.base';\n\nexport async function updateTSConfigAsync({\n tsConfigPath,\n}: {\n tsConfigPath: string;\n}): Promise<void> {\n const shouldGenerate = !fs.existsSync(tsConfigPath) || fs.statSync(tsConfigPath).size === 0;\n if (shouldGenerate) {\n await JsonFile.writeAsync(tsConfigPath, { compilerOptions: {} });\n }\n\n const projectTSConfig = JsonFile.read(tsConfigPath, {\n // Some tsconfig.json files have a generated comment in the file.\n json5: true,\n });\n\n projectTSConfig.compilerOptions ??= {};\n\n const modifications: [string, string][] = [];\n\n // If the extends field isn't defined, set it to the expo default\n if (!projectTSConfig.extends) {\n // if (projectTSConfig.extends !== baseTSConfigName) {\n projectTSConfig.extends = baseTSConfigName;\n modifications.push(['extends', baseTSConfigName]);\n }\n\n // If no changes, then quietly bail out\n if (!modifications.length) {\n return;\n }\n\n // Write changes and log out a summary of what changed\n await JsonFile.writeAsync(tsConfigPath, projectTSConfig);\n\n // If no changes, then quietly bail out\n if (modifications.length === 0) {\n return;\n }\n\n Log.log();\n\n if (shouldGenerate) {\n Log.log(chalk`{bold TypeScript}: A {cyan tsconfig.json} has been auto-generated`);\n } else {\n Log.log(\n chalk`{bold TypeScript}: The {cyan tsconfig.json} has been updated {dim (Use EXPO_NO_TYPESCRIPT_SETUP to skip)}`\n );\n logModifications(modifications);\n }\n Log.log();\n}\n\nfunction logModifications(modifications: string[][]) {\n Log.log();\n\n Log.log(chalk`\\u203A {bold Required} modifications made to the {cyan tsconfig.json}:`);\n\n Log.log();\n\n // Sort the items based on key name length\n printTable(modifications.sort((a, b) => a[0].length - b[0].length));\n\n Log.log();\n}\n\nfunction printTable(items: string[][]) {\n const tableFormat = (name: string, msg: string) =>\n ` ${chalk.bold`${name}`} is now ${chalk.cyan(msg)}`;\n for (const [key, value] of items) {\n Log.log(tableFormat(key, value));\n }\n}\n"],"names":["updateTSConfigAsync","Log","projectTSConfig","baseTSConfigName","tsConfigPath","shouldGenerate","fs","existsSync","statSync","size","JsonFile","writeAsync","compilerOptions","read","json5","modifications","extends","push","length","log","chalk","logModifications","printTable","sort","a","b","items","tableFormat","name","msg","bold","cyan","key","value"],"mappings":"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"}
@@ -176,10 +176,11 @@ class DevServerManager {
176
176
  if (!server5) {
177
177
  return;
178
178
  }
179
+ // The dev server shouldn't wait for the typescript services
179
180
  if (!typescriptPrerequisite) {
180
181
  server5.waitForTypeScriptAsync().then(async (success)=>{
181
182
  if (success) {
182
- await server5.startTypeScriptServices();
183
+ server5.startTypeScriptServices();
183
184
  }
184
185
  });
185
186
  } else {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/start/server/DevServerManager.ts"],"sourcesContent":["import { ExpoConfig, getConfig } from '@expo/config';\nimport assert from 'assert';\nimport chalk from 'chalk';\n\nimport { Log } from '../../log';\nimport { FileNotifier } from '../../utils/FileNotifier';\nimport { logEventAsync } from '../../utils/analytics/rudderstackClient';\nimport { env } from '../../utils/env';\nimport { ProjectPrerequisite } from '../doctor/Prerequisite';\nimport { TypeScriptProjectPrerequisite } from '../doctor/typescript/TypeScriptProjectPrerequisite';\nimport { printItem } from '../interface/commandsTable';\nimport * as AndroidDebugBridge from '../platforms/android/adb';\nimport { resolveSchemeAsync } from '../resolveOptions';\nimport { BundlerDevServer, BundlerStartOptions } from './BundlerDevServer';\nimport { getPlatformBundlers } from './platformBundlers';\n\nconst debug = require('debug')('expo:start:server:devServerManager') as typeof console.log;\n\nexport type MultiBundlerStartOptions = {\n type: keyof typeof BUNDLERS;\n options?: BundlerStartOptions;\n}[];\n\nconst devServers: BundlerDevServer[] = [];\n\nconst BUNDLERS = {\n webpack: () =>\n require('./webpack/WebpackBundlerDevServer')\n .WebpackBundlerDevServer as typeof import('./webpack/WebpackBundlerDevServer').WebpackBundlerDevServer,\n metro: () =>\n require('./metro/MetroBundlerDevServer')\n .MetroBundlerDevServer as typeof import('./metro/MetroBundlerDevServer').MetroBundlerDevServer,\n};\n\n/** Manages interacting with multiple dev servers. */\nexport class DevServerManager {\n private projectPrerequisites: ProjectPrerequisite<any, void>[] = [];\n\n private notifier: FileNotifier | null = null;\n\n constructor(\n public projectRoot: string,\n /** Keep track of the original CLI options for bundlers that are started interactively. */\n public options: BundlerStartOptions\n ) {\n this.notifier = this.watchBabelConfig();\n }\n\n private watchBabelConfig() {\n const notifier = new FileNotifier(\n this.projectRoot,\n [\n './babel.config.js',\n './babel.config.json',\n './.babelrc.json',\n './.babelrc',\n './.babelrc.js',\n ],\n {\n additionalWarning: chalk` You may need to clear the bundler cache with the {bold --clear} flag for your changes to take effect.`,\n }\n );\n\n notifier.startObserving();\n\n return notifier;\n }\n\n /** Lazily load and assert a project-level prerequisite. */\n async ensureProjectPrerequisiteAsync(PrerequisiteClass: typeof ProjectPrerequisite<any, any>) {\n let prerequisite = this.projectPrerequisites.find(\n (prerequisite) => prerequisite instanceof PrerequisiteClass\n );\n if (!prerequisite) {\n prerequisite = new PrerequisiteClass(this.projectRoot);\n this.projectPrerequisites.push(prerequisite);\n }\n return await prerequisite.assertAsync();\n }\n\n /**\n * Sends a message over web sockets to all connected devices,\n * does nothing when the dev server is not running.\n *\n * @param method name of the command. In RN projects `reload`, and `devMenu` are available. In Expo Go, `sendDevCommand` is available.\n * @param params extra event info to send over the socket.\n */\n broadcastMessage(method: 'reload' | 'devMenu' | 'sendDevCommand', params?: Record<string, any>) {\n devServers.forEach((server) => {\n server.broadcastMessage(method, params);\n });\n }\n\n /** Get the port for the dev server (either Webpack or Metro) that is hosting code for React Native runtimes. */\n getNativeDevServerPort() {\n const server = devServers.find((server) => server.isTargetingNative());\n return server?.getInstance()?.location.port ?? null;\n }\n\n /** Get the first server that targets web. */\n getWebDevServer() {\n const server = devServers.find((server) => server.isTargetingWeb());\n return server ?? null;\n }\n\n getDefaultDevServer(): BundlerDevServer {\n // Return the first native dev server otherwise return the first dev server.\n const server = devServers.find((server) => server.isTargetingNative());\n const defaultServer = server ?? devServers[0];\n assert(defaultServer, 'No dev servers are running');\n return defaultServer;\n }\n\n async ensureWebDevServerRunningAsync() {\n const [server] = devServers.filter((server) => server.isTargetingWeb());\n if (server) {\n return;\n }\n const { exp } = getConfig(this.projectRoot, {\n skipPlugins: true,\n skipSDKVersionRequirement: true,\n });\n const bundler = getPlatformBundlers(exp).web;\n debug(`Starting ${bundler} dev server for web`);\n return this.startAsync([\n {\n type: bundler,\n options: this.options,\n },\n ]);\n }\n\n /** Switch between Expo Go and Expo Dev Clients. */\n async toggleRuntimeMode(isUsingDevClient: boolean = !this.options.devClient): Promise<boolean> {\n const nextMode = isUsingDevClient ? '--dev-client' : '--go';\n Log.log(printItem(chalk`Switching to {bold ${nextMode}}`));\n\n const nextScheme = await resolveSchemeAsync(this.projectRoot, {\n devClient: isUsingDevClient,\n // NOTE: The custom `--scheme` argument is lost from this point on.\n });\n\n this.options.location.scheme = nextScheme;\n this.options.devClient = isUsingDevClient;\n for (const devServer of devServers) {\n devServer.isDevClient = isUsingDevClient;\n const urlCreator = devServer.getUrlCreator();\n urlCreator.defaults ??= {};\n urlCreator.defaults.scheme = nextScheme;\n }\n\n debug(`New runtime options (runtime: ${nextMode}):`, this.options);\n return true;\n }\n\n /** Start all dev servers. */\n async startAsync(startOptions: MultiBundlerStartOptions): Promise<ExpoConfig> {\n const { exp } = getConfig(this.projectRoot, { skipSDKVersionRequirement: true });\n\n await logEventAsync('Start Project', {\n sdkVersion: exp.sdkVersion ?? null,\n });\n\n const platformBundlers = getPlatformBundlers(exp);\n\n // Start all dev servers...\n for (const { type, options } of startOptions) {\n const BundlerDevServerClass = await BUNDLERS[type]();\n const server = new BundlerDevServerClass(\n this.projectRoot,\n platformBundlers,\n !!options?.devClient\n );\n await server.startAsync(options ?? this.options);\n devServers.push(server);\n }\n\n return exp;\n }\n\n async bootstrapTypeScriptAsync() {\n const typescriptPrerequisite = await this.ensureProjectPrerequisiteAsync(\n TypeScriptProjectPrerequisite\n );\n\n if (env.EXPO_NO_TYPESCRIPT_SETUP) {\n return;\n }\n\n // Optionally, wait for the user to add TypeScript during the\n // development cycle.\n const server = devServers.find((server) => server.name === 'metro');\n if (!server) {\n return;\n }\n\n if (!typescriptPrerequisite) {\n server.waitForTypeScriptAsync().then(async (success) => {\n if (success) {\n await server.startTypeScriptServices();\n }\n });\n } else {\n server.startTypeScriptServices();\n }\n }\n\n async watchEnvironmentVariables() {\n await devServers.find((server) => server.name === 'metro')?.watchEnvironmentVariables();\n }\n\n /** Stop all servers including ADB. */\n async stopAsync(): Promise<void> {\n await Promise.allSettled([\n this.notifier?.stopObserving(),\n // Stop all dev servers\n ...devServers.map((server) => server.stopAsync()),\n // Stop ADB\n AndroidDebugBridge.getServer().stopAsync(),\n ]);\n }\n}\n"],"names":["AndroidDebugBridge","urlCreator","debug","require","devServers","BUNDLERS","webpack","WebpackBundlerDevServer","metro","MetroBundlerDevServer","DevServerManager","constructor","projectRoot","options","projectPrerequisites","notifier","watchBabelConfig","FileNotifier","additionalWarning","chalk","startObserving","ensureProjectPrerequisiteAsync","PrerequisiteClass","prerequisite","find","push","assertAsync","broadcastMessage","method","params","forEach","server","getNativeDevServerPort","isTargetingNative","getInstance","location","port","getWebDevServer","isTargetingWeb","getDefaultDevServer","defaultServer","assert","ensureWebDevServerRunningAsync","filter","exp","getConfig","skipPlugins","skipSDKVersionRequirement","bundler","getPlatformBundlers","web","startAsync","type","toggleRuntimeMode","isUsingDevClient","devClient","nextMode","Log","log","printItem","nextScheme","resolveSchemeAsync","scheme","devServer","isDevClient","getUrlCreator","defaults","startOptions","logEventAsync","sdkVersion","platformBundlers","BundlerDevServerClass","bootstrapTypeScriptAsync","typescriptPrerequisite","TypeScriptProjectPrerequisite","env","EXPO_NO_TYPESCRIPT_SETUP","name","waitForTypeScriptAsync","then","success","startTypeScriptServices","watchEnvironmentVariables","stopAsync","Promise","allSettled","stopObserving","map","getServer"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/start/server/DevServerManager.ts"],"sourcesContent":["import { ExpoConfig, getConfig } from '@expo/config';\nimport assert from 'assert';\nimport chalk from 'chalk';\n\nimport { Log } from '../../log';\nimport { FileNotifier } from '../../utils/FileNotifier';\nimport { logEventAsync } from '../../utils/analytics/rudderstackClient';\nimport { env } from '../../utils/env';\nimport { ProjectPrerequisite } from '../doctor/Prerequisite';\nimport { TypeScriptProjectPrerequisite } from '../doctor/typescript/TypeScriptProjectPrerequisite';\nimport { printItem } from '../interface/commandsTable';\nimport * as AndroidDebugBridge from '../platforms/android/adb';\nimport { resolveSchemeAsync } from '../resolveOptions';\nimport { BundlerDevServer, BundlerStartOptions } from './BundlerDevServer';\nimport { getPlatformBundlers } from './platformBundlers';\n\nconst debug = require('debug')('expo:start:server:devServerManager') as typeof console.log;\n\nexport type MultiBundlerStartOptions = {\n type: keyof typeof BUNDLERS;\n options?: BundlerStartOptions;\n}[];\n\nconst devServers: BundlerDevServer[] = [];\n\nconst BUNDLERS = {\n webpack: () =>\n require('./webpack/WebpackBundlerDevServer')\n .WebpackBundlerDevServer as typeof import('./webpack/WebpackBundlerDevServer').WebpackBundlerDevServer,\n metro: () =>\n require('./metro/MetroBundlerDevServer')\n .MetroBundlerDevServer as typeof import('./metro/MetroBundlerDevServer').MetroBundlerDevServer,\n};\n\n/** Manages interacting with multiple dev servers. */\nexport class DevServerManager {\n private projectPrerequisites: ProjectPrerequisite<any, void>[] = [];\n\n private notifier: FileNotifier | null = null;\n\n constructor(\n public projectRoot: string,\n /** Keep track of the original CLI options for bundlers that are started interactively. */\n public options: BundlerStartOptions\n ) {\n this.notifier = this.watchBabelConfig();\n }\n\n private watchBabelConfig() {\n const notifier = new FileNotifier(\n this.projectRoot,\n [\n './babel.config.js',\n './babel.config.json',\n './.babelrc.json',\n './.babelrc',\n './.babelrc.js',\n ],\n {\n additionalWarning: chalk` You may need to clear the bundler cache with the {bold --clear} flag for your changes to take effect.`,\n }\n );\n\n notifier.startObserving();\n\n return notifier;\n }\n\n /** Lazily load and assert a project-level prerequisite. */\n async ensureProjectPrerequisiteAsync(PrerequisiteClass: typeof ProjectPrerequisite<any, any>) {\n let prerequisite = this.projectPrerequisites.find(\n (prerequisite) => prerequisite instanceof PrerequisiteClass\n );\n if (!prerequisite) {\n prerequisite = new PrerequisiteClass(this.projectRoot);\n this.projectPrerequisites.push(prerequisite);\n }\n return await prerequisite.assertAsync();\n }\n\n /**\n * Sends a message over web sockets to all connected devices,\n * does nothing when the dev server is not running.\n *\n * @param method name of the command. In RN projects `reload`, and `devMenu` are available. In Expo Go, `sendDevCommand` is available.\n * @param params extra event info to send over the socket.\n */\n broadcastMessage(method: 'reload' | 'devMenu' | 'sendDevCommand', params?: Record<string, any>) {\n devServers.forEach((server) => {\n server.broadcastMessage(method, params);\n });\n }\n\n /** Get the port for the dev server (either Webpack or Metro) that is hosting code for React Native runtimes. */\n getNativeDevServerPort() {\n const server = devServers.find((server) => server.isTargetingNative());\n return server?.getInstance()?.location.port ?? null;\n }\n\n /** Get the first server that targets web. */\n getWebDevServer() {\n const server = devServers.find((server) => server.isTargetingWeb());\n return server ?? null;\n }\n\n getDefaultDevServer(): BundlerDevServer {\n // Return the first native dev server otherwise return the first dev server.\n const server = devServers.find((server) => server.isTargetingNative());\n const defaultServer = server ?? devServers[0];\n assert(defaultServer, 'No dev servers are running');\n return defaultServer;\n }\n\n async ensureWebDevServerRunningAsync() {\n const [server] = devServers.filter((server) => server.isTargetingWeb());\n if (server) {\n return;\n }\n const { exp } = getConfig(this.projectRoot, {\n skipPlugins: true,\n skipSDKVersionRequirement: true,\n });\n const bundler = getPlatformBundlers(exp).web;\n debug(`Starting ${bundler} dev server for web`);\n return this.startAsync([\n {\n type: bundler,\n options: this.options,\n },\n ]);\n }\n\n /** Switch between Expo Go and Expo Dev Clients. */\n async toggleRuntimeMode(isUsingDevClient: boolean = !this.options.devClient): Promise<boolean> {\n const nextMode = isUsingDevClient ? '--dev-client' : '--go';\n Log.log(printItem(chalk`Switching to {bold ${nextMode}}`));\n\n const nextScheme = await resolveSchemeAsync(this.projectRoot, {\n devClient: isUsingDevClient,\n // NOTE: The custom `--scheme` argument is lost from this point on.\n });\n\n this.options.location.scheme = nextScheme;\n this.options.devClient = isUsingDevClient;\n for (const devServer of devServers) {\n devServer.isDevClient = isUsingDevClient;\n const urlCreator = devServer.getUrlCreator();\n urlCreator.defaults ??= {};\n urlCreator.defaults.scheme = nextScheme;\n }\n\n debug(`New runtime options (runtime: ${nextMode}):`, this.options);\n return true;\n }\n\n /** Start all dev servers. */\n async startAsync(startOptions: MultiBundlerStartOptions): Promise<ExpoConfig> {\n const { exp } = getConfig(this.projectRoot, { skipSDKVersionRequirement: true });\n\n await logEventAsync('Start Project', {\n sdkVersion: exp.sdkVersion ?? null,\n });\n\n const platformBundlers = getPlatformBundlers(exp);\n\n // Start all dev servers...\n for (const { type, options } of startOptions) {\n const BundlerDevServerClass = await BUNDLERS[type]();\n const server = new BundlerDevServerClass(\n this.projectRoot,\n platformBundlers,\n !!options?.devClient\n );\n await server.startAsync(options ?? this.options);\n devServers.push(server);\n }\n\n return exp;\n }\n\n async bootstrapTypeScriptAsync() {\n const typescriptPrerequisite = await this.ensureProjectPrerequisiteAsync(\n TypeScriptProjectPrerequisite\n );\n\n if (env.EXPO_NO_TYPESCRIPT_SETUP) {\n return;\n }\n\n // Optionally, wait for the user to add TypeScript during the\n // development cycle.\n const server = devServers.find((server) => server.name === 'metro');\n if (!server) {\n return;\n }\n\n // The dev server shouldn't wait for the typescript services\n if (!typescriptPrerequisite) {\n server.waitForTypeScriptAsync().then(async (success) => {\n if (success) {\n server.startTypeScriptServices();\n }\n });\n } else {\n server.startTypeScriptServices();\n }\n }\n\n async watchEnvironmentVariables() {\n await devServers.find((server) => server.name === 'metro')?.watchEnvironmentVariables();\n }\n\n /** Stop all servers including ADB. */\n async stopAsync(): Promise<void> {\n await Promise.allSettled([\n this.notifier?.stopObserving(),\n // Stop all dev servers\n ...devServers.map((server) => server.stopAsync()),\n // Stop ADB\n AndroidDebugBridge.getServer().stopAsync(),\n ]);\n }\n}\n"],"names":["AndroidDebugBridge","urlCreator","debug","require","devServers","BUNDLERS","webpack","WebpackBundlerDevServer","metro","MetroBundlerDevServer","DevServerManager","constructor","projectRoot","options","projectPrerequisites","notifier","watchBabelConfig","FileNotifier","additionalWarning","chalk","startObserving","ensureProjectPrerequisiteAsync","PrerequisiteClass","prerequisite","find","push","assertAsync","broadcastMessage","method","params","forEach","server","getNativeDevServerPort","isTargetingNative","getInstance","location","port","getWebDevServer","isTargetingWeb","getDefaultDevServer","defaultServer","assert","ensureWebDevServerRunningAsync","filter","exp","getConfig","skipPlugins","skipSDKVersionRequirement","bundler","getPlatformBundlers","web","startAsync","type","toggleRuntimeMode","isUsingDevClient","devClient","nextMode","Log","log","printItem","nextScheme","resolveSchemeAsync","scheme","devServer","isDevClient","getUrlCreator","defaults","startOptions","logEventAsync","sdkVersion","platformBundlers","BundlerDevServerClass","bootstrapTypeScriptAsync","typescriptPrerequisite","TypeScriptProjectPrerequisite","env","EXPO_NO_TYPESCRIPT_SETUP","name","waitForTypeScriptAsync","then","success","startTypeScriptServices","watchEnvironmentVariables","stopAsync","Promise","allSettled","stopObserving","map","getServer"],"mappings":"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"}
@@ -380,8 +380,9 @@ class MetroBundlerDevServer extends _bundlerDevServer.BundlerDevServer {
380
380
  });
381
381
  }
382
382
  async startTypeScriptServices() {
383
- (0, _startTypescriptTypeGeneration).startTypescriptTypeGenerationAsync({
384
- server: this.instance.server,
383
+ var ref;
384
+ return (0, _startTypescriptTypeGeneration).startTypescriptTypeGenerationAsync({
385
+ server: (ref = this.instance) == null ? void 0 : ref.server,
385
386
  metro: this.metro,
386
387
  projectRoot: this.projectRoot
387
388
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/start/server/metro/MetroBundlerDevServer.ts"],"sourcesContent":["/**\n * Copyright © 2022 650 Industries.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { getConfig } from '@expo/config';\nimport { prependMiddleware } from '@expo/dev-server';\nimport * as runtimeEnv from '@expo/env';\nimport { SerialAsset } from '@expo/metro-config/build/serializer/serializerAssets';\nimport assert from 'assert';\nimport chalk from 'chalk';\nimport fetch from 'node-fetch';\nimport path from 'path';\n\nimport { Log } from '../../../log';\nimport getDevClientProperties from '../../../utils/analytics/getDevClientProperties';\nimport { logEventAsync } from '../../../utils/analytics/rudderstackClient';\nimport { getFreePortAsync } from '../../../utils/port';\nimport { BundlerDevServer, BundlerStartOptions, DevServerInstance } from '../BundlerDevServer';\nimport { getStaticRenderFunctions } from '../getStaticRenderFunctions';\nimport { ContextModuleSourceMapsMiddleware } from '../middleware/ContextModuleSourceMapsMiddleware';\nimport { CreateFileMiddleware } from '../middleware/CreateFileMiddleware';\nimport { FaviconMiddleware } from '../middleware/FaviconMiddleware';\nimport { HistoryFallbackMiddleware } from '../middleware/HistoryFallbackMiddleware';\nimport { InterstitialPageMiddleware } from '../middleware/InterstitialPageMiddleware';\nimport { createBundleUrlPath, resolveMainModuleName } from '../middleware/ManifestMiddleware';\nimport { ReactDevToolsPageMiddleware } from '../middleware/ReactDevToolsPageMiddleware';\nimport {\n DeepLinkHandler,\n RuntimeRedirectMiddleware,\n} from '../middleware/RuntimeRedirectMiddleware';\nimport { ServeStaticMiddleware } from '../middleware/ServeStaticMiddleware';\nimport { ServerNext, ServerRequest, ServerResponse } from '../middleware/server.types';\nimport { startTypescriptTypeGenerationAsync } from '../type-generation/startTypescriptTypeGeneration';\nimport { instantiateMetroAsync } from './instantiateMetro';\nimport { getErrorOverlayHtmlAsync } from './metroErrorInterface';\nimport { metroWatchTypeScriptFiles } from './metroWatchTypeScriptFiles';\nimport { observeFileChanges } from './waitForMetroToObserveTypeScriptFile';\n\nconst debug = require('debug')('expo:start:server:metro') as typeof console.log;\n\n/** Default port to use for apps running in Expo Go. */\nconst EXPO_GO_METRO_PORT = 8081;\n\n/** Default port to use for apps that run in standard React Native projects or Expo Dev Clients. */\nconst DEV_CLIENT_METRO_PORT = 8081;\n\nexport class MetroBundlerDevServer extends BundlerDevServer {\n private metro: import('metro').Server | null = null;\n\n get name(): string {\n return 'metro';\n }\n\n async resolvePortAsync(options: Partial<BundlerStartOptions> = {}): Promise<number> {\n const port =\n // If the manually defined port is busy then an error should be thrown...\n options.port ??\n // Otherwise use the default port based on the runtime target.\n (options.devClient\n ? // Don't check if the port is busy if we're using the dev client since most clients are hardcoded to 8081.\n Number(process.env.RCT_METRO_PORT) || DEV_CLIENT_METRO_PORT\n : // Otherwise (running in Expo Go) use a free port that falls back on the classic 8081 port.\n await getFreePortAsync(EXPO_GO_METRO_PORT));\n\n return port;\n }\n\n /** Get routes from Expo Router. */\n async getRoutesAsync() {\n const url = this.getDevServerUrl();\n assert(url, 'Dev server must be started');\n const { getManifest } = await getStaticRenderFunctions(this.projectRoot, url, {\n // Ensure the API Routes are included\n environment: 'node',\n });\n\n return getManifest({ fetchData: true });\n }\n\n async composeResourcesWithHtml({\n mode,\n resources,\n template,\n devBundleUrl,\n }: {\n mode: 'development' | 'production';\n resources: SerialAsset[];\n template: string;\n devBundleUrl?: string;\n }): Promise<string> {\n if (!resources) {\n return '';\n }\n const isDev = mode === 'development';\n return htmlFromSerialAssets(resources, {\n dev: isDev,\n template,\n bundleUrl: isDev ? devBundleUrl : undefined,\n });\n }\n\n async getStaticRenderFunctionAsync({\n mode,\n minify = mode !== 'development',\n }: {\n mode: 'development' | 'production';\n minify?: boolean;\n }) {\n const url = this.getDevServerUrl()!;\n\n const { getStaticContent } = await getStaticRenderFunctions(this.projectRoot, url, {\n minify,\n dev: mode !== 'production',\n // Ensure the API Routes are included\n environment: 'node',\n });\n return async (path: string) => {\n return await getStaticContent(new URL(path, url));\n };\n }\n\n async getStaticResourcesAsync({\n mode,\n minify = mode !== 'development',\n }: {\n mode: string;\n minify?: boolean;\n }): Promise<SerialAsset[]> {\n const devBundleUrlPathname = createBundleUrlPath({\n platform: 'web',\n mode,\n minify,\n environment: 'client',\n serializerOutput: 'static',\n mainModuleName: resolveMainModuleName(this.projectRoot, getConfig(this.projectRoot), 'web'),\n });\n\n const bundleUrl = new URL(devBundleUrlPathname, this.getDevServerUrl()!);\n\n // Fetch the generated HTML from our custom Metro serializer\n const results = await fetch(bundleUrl.toString());\n\n const txt = await results.text();\n\n let data: any;\n try {\n data = JSON.parse(txt);\n } catch (error: any) {\n Log.error(\n 'Failed to generate resources with Metro, the Metro config may not be using the correct serializer. Ensure the metro.config.js is extending the expo/metro-config and is not overriding the serializer.'\n );\n debug(txt);\n throw error;\n }\n\n // NOTE: This could potentially need more validation in the future.\n if (Array.isArray(data)) {\n return data;\n }\n\n if (data != null && (data.errors || data.type?.match(/.*Error$/))) {\n // {\n // type: 'InternalError',\n // errors: [],\n // message: 'Metro has encountered an error: While trying to resolve module `stylis` from file `/Users/evanbacon/Documents/GitHub/lab/emotion-error-test/node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js`, the package `/Users/evanbacon/Documents/GitHub/lab/emotion-error-test/node_modules/stylis/package.json` was successfully found. However, this package itself specifies a `main` module field that could not be resolved (`/Users/evanbacon/Documents/GitHub/lab/emotion-error-test/node_modules/stylis/dist/stylis.mjs`. Indeed, none of these files exist:\\n' +\n // '\\n' +\n // ' * /Users/evanbacon/Documents/GitHub/lab/emotion-error-test/node_modules/stylis/dist/stylis.mjs(.web.ts|.ts|.web.tsx|.tsx|.web.js|.js|.web.jsx|.jsx|.web.json|.json|.web.cjs|.cjs|.web.scss|.scss|.web.sass|.sass|.web.css|.css)\\n' +\n // ' * /Users/evanbacon/Documents/GitHub/lab/emotion-error-test/node_modules/stylis/dist/stylis.mjs/index(.web.ts|.ts|.web.tsx|.tsx|.web.js|.js|.web.jsx|.jsx|.web.json|.json|.web.cjs|.cjs|.web.scss|.scss|.web.sass|.sass|.web.css|.css): /Users/evanbacon/Documents/GitHub/lab/emotion-error-test/node_modules/metro/src/node-haste/DependencyGraph.js (289:17)\\n' +\n // '\\n' +\n // '\\x1B[0m \\x1B[90m 287 |\\x1B[39m }\\x1B[0m\\n' +\n // '\\x1B[0m \\x1B[90m 288 |\\x1B[39m \\x1B[36mif\\x1B[39m (error \\x1B[36minstanceof\\x1B[39m \\x1B[33mInvalidPackageError\\x1B[39m) {\\x1B[0m\\n' +\n // '\\x1B[0m\\x1B[31m\\x1B[1m>\\x1B[22m\\x1B[39m\\x1B[90m 289 |\\x1B[39m \\x1B[36mthrow\\x1B[39m \\x1B[36mnew\\x1B[39m \\x1B[33mPackageResolutionError\\x1B[39m({\\x1B[0m\\n' +\n // '\\x1B[0m \\x1B[90m |\\x1B[39m \\x1B[31m\\x1B[1m^\\x1B[22m\\x1B[39m\\x1B[0m\\n' +\n // '\\x1B[0m \\x1B[90m 290 |\\x1B[39m packageError\\x1B[33m:\\x1B[39m error\\x1B[33m,\\x1B[39m\\x1B[0m\\n' +\n // '\\x1B[0m \\x1B[90m 291 |\\x1B[39m originModulePath\\x1B[33m:\\x1B[39m \\x1B[36mfrom\\x1B[39m\\x1B[33m,\\x1B[39m\\x1B[0m\\n' +\n // '\\x1B[0m \\x1B[90m 292 |\\x1B[39m targetModuleName\\x1B[33m:\\x1B[39m to\\x1B[33m,\\x1B[39m\\x1B[0m'\n // }\n // The Metro logger already showed this error.\n throw new Error(data.message);\n }\n\n throw new Error(\n 'Invalid resources returned from the Metro serializer. Expected array, found: ' + data\n );\n }\n\n private async renderStaticErrorAsync(error: Error) {\n return getErrorOverlayHtmlAsync({\n error,\n projectRoot: this.projectRoot,\n });\n }\n\n async getStaticPageAsync(\n pathname: string,\n {\n mode,\n minify = mode !== 'development',\n }: {\n mode: 'development' | 'production';\n minify?: boolean;\n }\n ) {\n const devBundleUrlPathname = createBundleUrlPath({\n platform: 'web',\n mode,\n environment: 'client',\n mainModuleName: resolveMainModuleName(this.projectRoot, getConfig(this.projectRoot), 'web'),\n });\n\n const bundleStaticHtml = async (): Promise<string> => {\n const { getStaticContent } = await getStaticRenderFunctions(\n this.projectRoot,\n this.getDevServerUrl()!,\n {\n minify: false,\n dev: mode !== 'production',\n // Ensure the API Routes are included\n environment: 'node',\n }\n );\n\n const location = new URL(pathname, this.getDevServerUrl()!);\n return await getStaticContent(location);\n };\n\n const [resources, staticHtml] = await Promise.all([\n this.getStaticResourcesAsync({ mode, minify }),\n bundleStaticHtml(),\n ]);\n const content = await this.composeResourcesWithHtml({\n mode,\n resources,\n template: staticHtml,\n devBundleUrl: devBundleUrlPathname,\n });\n return {\n content,\n resources,\n };\n }\n\n async watchEnvironmentVariables() {\n if (!this.instance) {\n throw new Error(\n 'Cannot observe environment variable changes without a running Metro instance.'\n );\n }\n if (!this.metro) {\n // This can happen when the run command is used and the server is already running in another\n // process.\n debug('Skipping Environment Variable observation because Metro is not running (headless).');\n return;\n }\n\n const envFiles = runtimeEnv\n .getFiles(process.env.NODE_ENV)\n .map((fileName) => path.join(this.projectRoot, fileName));\n\n observeFileChanges(\n {\n metro: this.metro,\n server: this.instance.server,\n },\n envFiles,\n () => {\n debug('Reloading environment variables...');\n // Force reload the environment variables.\n runtimeEnv.load(this.projectRoot, { force: true });\n }\n );\n }\n\n protected async startImplementationAsync(\n options: BundlerStartOptions\n ): Promise<DevServerInstance> {\n options.port = await this.resolvePortAsync(options);\n this.urlCreator = this.getUrlCreator(options);\n\n const parsedOptions = {\n port: options.port,\n maxWorkers: options.maxWorkers,\n resetCache: options.resetDevServer,\n\n // Use the unversioned metro config.\n // TODO: Deprecate this property when expo-cli goes away.\n unversioned: false,\n };\n\n // Required for symbolication:\n process.env.EXPO_DEV_SERVER_ORIGIN = `http://localhost:${options.port}`;\n\n const { metro, server, middleware, messageSocket } = await instantiateMetroAsync(\n this,\n parsedOptions\n );\n\n const manifestMiddleware = await this.getManifestMiddlewareAsync(options);\n\n // Important that we noop source maps for context modules as soon as possible.\n prependMiddleware(middleware, new ContextModuleSourceMapsMiddleware().getHandler());\n\n // We need the manifest handler to be the first middleware to run so our\n // routes take precedence over static files. For example, the manifest is\n // served from '/' and if the user has an index.html file in their project\n // then the manifest handler will never run, the static middleware will run\n // and serve index.html instead of the manifest.\n // https://github.com/expo/expo/issues/13114\n prependMiddleware(middleware, manifestMiddleware.getHandler());\n\n middleware.use(\n new InterstitialPageMiddleware(this.projectRoot, {\n // TODO: Prevent this from becoming stale.\n scheme: options.location.scheme ?? null,\n }).getHandler()\n );\n middleware.use(new ReactDevToolsPageMiddleware(this.projectRoot).getHandler());\n\n const deepLinkMiddleware = new RuntimeRedirectMiddleware(this.projectRoot, {\n onDeepLink: getDeepLinkHandler(this.projectRoot),\n getLocation: ({ runtime }) => {\n if (runtime === 'custom') {\n return this.urlCreator?.constructDevClientUrl();\n } else {\n return this.urlCreator?.constructUrl({\n scheme: 'exp',\n });\n }\n },\n });\n middleware.use(deepLinkMiddleware.getHandler());\n\n middleware.use(new CreateFileMiddleware(this.projectRoot).getHandler());\n\n // Append support for redirecting unhandled requests to the index.html page on web.\n if (this.isTargetingWeb()) {\n const { exp } = getConfig(this.projectRoot, { skipSDKVersionRequirement: true });\n const useWebSSG = exp.web?.output === 'static';\n\n // This MUST be after the manifest middleware so it doesn't have a chance to serve the template `public/index.html`.\n middleware.use(new ServeStaticMiddleware(this.projectRoot).getHandler());\n\n // This should come after the static middleware so it doesn't serve the favicon from `public/favicon.ico`.\n middleware.use(new FaviconMiddleware(this.projectRoot).getHandler());\n\n if (useWebSSG) {\n middleware.use(async (req: ServerRequest, res: ServerResponse, next: ServerNext) => {\n if (!req?.url) {\n return next();\n }\n\n // TODO: Formal manifest for allowed paths\n if (req.url.endsWith('.ico')) {\n return next();\n }\n if (req.url.includes('serializer.output=static')) {\n return next();\n }\n\n try {\n const { content } = await this.getStaticPageAsync(req.url, {\n mode: options.mode ?? 'development',\n });\n\n res.setHeader('Content-Type', 'text/html');\n res.end(content);\n return;\n } catch (error: any) {\n res.setHeader('Content-Type', 'text/html');\n try {\n res.end(await this.renderStaticErrorAsync(error));\n } catch (staticError: any) {\n // Fallback error for when Expo Router is misconfigured in the project.\n res.end(\n '<span><h3>Internal Error:</h3><b>Project is not setup correctly for static rendering (check terminal for more info):</b><br/>' +\n error.message +\n '<br/><br/>' +\n staticError.message +\n '</span>'\n );\n }\n }\n });\n }\n\n // This MUST run last since it's the fallback.\n if (!useWebSSG) {\n middleware.use(\n new HistoryFallbackMiddleware(manifestMiddleware.getHandler().internal).getHandler()\n );\n }\n }\n // Extend the close method to ensure that we clean up the local info.\n const originalClose = server.close.bind(server);\n\n server.close = (callback?: (err?: Error) => void) => {\n return originalClose((err?: Error) => {\n this.instance = null;\n this.metro = null;\n callback?.(err);\n });\n };\n\n this.metro = metro;\n return {\n server,\n location: {\n // The port is the main thing we want to send back.\n port: options.port,\n // localhost isn't always correct.\n host: 'localhost',\n // http is the only supported protocol on native.\n url: `http://localhost:${options.port}`,\n protocol: 'http',\n },\n middleware,\n messageSocket,\n };\n }\n\n public async waitForTypeScriptAsync(): Promise<boolean> {\n if (!this.instance) {\n throw new Error('Cannot wait for TypeScript without a running server.');\n }\n\n return new Promise<boolean>((resolve) => {\n if (!this.metro) {\n // This can happen when the run command is used and the server is already running in another\n // process. In this case we can't wait for the TypeScript check to complete because we don't\n // have access to the Metro server.\n debug('Skipping TypeScript check because Metro is not running (headless).');\n return resolve(false);\n }\n\n const off = metroWatchTypeScriptFiles({\n projectRoot: this.projectRoot,\n server: this.instance!.server,\n metro: this.metro,\n tsconfig: true,\n throttle: true,\n eventTypes: ['change', 'add'],\n callback: async () => {\n // Run once, this prevents the TypeScript project prerequisite from running on every file change.\n off();\n const { TypeScriptProjectPrerequisite } = await import(\n '../../doctor/typescript/TypeScriptProjectPrerequisite'\n );\n\n try {\n const req = new TypeScriptProjectPrerequisite(this.projectRoot);\n await req.bootstrapAsync();\n resolve(true);\n } catch (error: any) {\n // Ensure the process doesn't fail if the TypeScript check fails.\n // This could happen during the install.\n Log.log();\n Log.error(\n chalk.red`Failed to automatically setup TypeScript for your project. Try restarting the dev server to fix.`\n );\n Log.exception(error);\n resolve(false);\n }\n },\n });\n });\n }\n\n public async startTypeScriptServices() {\n startTypescriptTypeGenerationAsync({\n server: this.instance!.server,\n metro: this.metro,\n projectRoot: this.projectRoot,\n });\n }\n\n protected getConfigModuleIds(): string[] {\n return ['./metro.config.js', './metro.config.json', './rn-cli.config.js'];\n }\n}\n\nexport function getDeepLinkHandler(projectRoot: string): DeepLinkHandler {\n return async ({ runtime }) => {\n if (runtime === 'expo') return;\n const { exp } = getConfig(projectRoot);\n await logEventAsync('dev client start command', {\n status: 'started',\n ...getDevClientProperties(projectRoot, exp),\n });\n };\n}\n\nfunction htmlFromSerialAssets(\n assets: SerialAsset[],\n { dev, template, bundleUrl }: { dev: boolean; template: string; bundleUrl?: string }\n) {\n // Combine the CSS modules into tags that have hot refresh data attributes.\n const styleString = assets\n .filter((asset) => asset.type === 'css')\n .map(({ metadata, filename, source }) => {\n if (dev) {\n return `<style data-expo-css-hmr=\"${metadata.hmrId}\">` + source + '\\n</style>';\n } else {\n return [\n `<link rel=\"preload\" href=\"/${filename}\" as=\"style\">`,\n `<link rel=\"stylesheet\" href=\"/${filename}\">`,\n ].join('');\n }\n })\n .join('');\n\n const jsAssets = assets.filter((asset) => asset.type === 'js');\n\n const scripts = bundleUrl\n ? `<script src=\"${bundleUrl}\" defer></script>`\n : jsAssets\n .map(({ filename }) => {\n return `<script src=\"/${filename}\" defer></script>`;\n })\n .join('');\n\n return template\n .replace('</head>', `${styleString}</head>`)\n .replace('</body>', `${scripts}\\n</body>`);\n}\n"],"names":["getDeepLinkHandler","runtimeEnv","debug","require","EXPO_GO_METRO_PORT","DEV_CLIENT_METRO_PORT","MetroBundlerDevServer","BundlerDevServer","metro","name","resolvePortAsync","options","port","devClient","Number","process","env","RCT_METRO_PORT","getFreePortAsync","getRoutesAsync","url","getDevServerUrl","assert","getManifest","getStaticRenderFunctions","projectRoot","environment","fetchData","composeResourcesWithHtml","mode","resources","template","devBundleUrl","isDev","htmlFromSerialAssets","dev","bundleUrl","undefined","getStaticRenderFunctionAsync","minify","getStaticContent","path","URL","getStaticResourcesAsync","data","devBundleUrlPathname","createBundleUrlPath","platform","serializerOutput","mainModuleName","resolveMainModuleName","getConfig","results","fetch","toString","txt","text","JSON","parse","error","Log","Array","isArray","errors","type","match","Error","message","renderStaticErrorAsync","getErrorOverlayHtmlAsync","getStaticPageAsync","pathname","bundleStaticHtml","location","staticHtml","Promise","all","content","watchEnvironmentVariables","instance","envFiles","getFiles","NODE_ENV","map","fileName","join","observeFileChanges","server","load","force","startImplementationAsync","urlCreator","getUrlCreator","parsedOptions","maxWorkers","resetCache","resetDevServer","unversioned","EXPO_DEV_SERVER_ORIGIN","middleware","messageSocket","instantiateMetroAsync","manifestMiddleware","getManifestMiddlewareAsync","prependMiddleware","ContextModuleSourceMapsMiddleware","getHandler","use","InterstitialPageMiddleware","scheme","ReactDevToolsPageMiddleware","deepLinkMiddleware","RuntimeRedirectMiddleware","onDeepLink","getLocation","runtime","constructDevClientUrl","constructUrl","CreateFileMiddleware","isTargetingWeb","exp","skipSDKVersionRequirement","useWebSSG","web","output","ServeStaticMiddleware","FaviconMiddleware","req","res","next","endsWith","includes","setHeader","end","staticError","HistoryFallbackMiddleware","internal","originalClose","close","bind","callback","err","host","protocol","waitForTypeScriptAsync","resolve","off","metroWatchTypeScriptFiles","tsconfig","throttle","eventTypes","TypeScriptProjectPrerequisite","bootstrapAsync","log","chalk","red","exception","startTypeScriptServices","startTypescriptTypeGenerationAsync","getConfigModuleIds","logEventAsync","status","getDevClientProperties","assets","styleString","filter","asset","metadata","filename","source","hmrId","jsAssets","scripts","replace"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../src/start/server/metro/MetroBundlerDevServer.ts"],"sourcesContent":["/**\n * Copyright © 2022 650 Industries.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { getConfig } from '@expo/config';\nimport { prependMiddleware } from '@expo/dev-server';\nimport * as runtimeEnv from '@expo/env';\nimport { SerialAsset } from '@expo/metro-config/build/serializer/serializerAssets';\nimport assert from 'assert';\nimport chalk from 'chalk';\nimport fetch from 'node-fetch';\nimport path from 'path';\n\nimport { Log } from '../../../log';\nimport getDevClientProperties from '../../../utils/analytics/getDevClientProperties';\nimport { logEventAsync } from '../../../utils/analytics/rudderstackClient';\nimport { getFreePortAsync } from '../../../utils/port';\nimport { BundlerDevServer, BundlerStartOptions, DevServerInstance } from '../BundlerDevServer';\nimport { getStaticRenderFunctions } from '../getStaticRenderFunctions';\nimport { ContextModuleSourceMapsMiddleware } from '../middleware/ContextModuleSourceMapsMiddleware';\nimport { CreateFileMiddleware } from '../middleware/CreateFileMiddleware';\nimport { FaviconMiddleware } from '../middleware/FaviconMiddleware';\nimport { HistoryFallbackMiddleware } from '../middleware/HistoryFallbackMiddleware';\nimport { InterstitialPageMiddleware } from '../middleware/InterstitialPageMiddleware';\nimport { createBundleUrlPath, resolveMainModuleName } from '../middleware/ManifestMiddleware';\nimport { ReactDevToolsPageMiddleware } from '../middleware/ReactDevToolsPageMiddleware';\nimport {\n DeepLinkHandler,\n RuntimeRedirectMiddleware,\n} from '../middleware/RuntimeRedirectMiddleware';\nimport { ServeStaticMiddleware } from '../middleware/ServeStaticMiddleware';\nimport { ServerNext, ServerRequest, ServerResponse } from '../middleware/server.types';\nimport { startTypescriptTypeGenerationAsync } from '../type-generation/startTypescriptTypeGeneration';\nimport { instantiateMetroAsync } from './instantiateMetro';\nimport { getErrorOverlayHtmlAsync } from './metroErrorInterface';\nimport { metroWatchTypeScriptFiles } from './metroWatchTypeScriptFiles';\nimport { observeFileChanges } from './waitForMetroToObserveTypeScriptFile';\n\nconst debug = require('debug')('expo:start:server:metro') as typeof console.log;\n\n/** Default port to use for apps running in Expo Go. */\nconst EXPO_GO_METRO_PORT = 8081;\n\n/** Default port to use for apps that run in standard React Native projects or Expo Dev Clients. */\nconst DEV_CLIENT_METRO_PORT = 8081;\n\nexport class MetroBundlerDevServer extends BundlerDevServer {\n private metro: import('metro').Server | null = null;\n\n get name(): string {\n return 'metro';\n }\n\n async resolvePortAsync(options: Partial<BundlerStartOptions> = {}): Promise<number> {\n const port =\n // If the manually defined port is busy then an error should be thrown...\n options.port ??\n // Otherwise use the default port based on the runtime target.\n (options.devClient\n ? // Don't check if the port is busy if we're using the dev client since most clients are hardcoded to 8081.\n Number(process.env.RCT_METRO_PORT) || DEV_CLIENT_METRO_PORT\n : // Otherwise (running in Expo Go) use a free port that falls back on the classic 8081 port.\n await getFreePortAsync(EXPO_GO_METRO_PORT));\n\n return port;\n }\n\n /** Get routes from Expo Router. */\n async getRoutesAsync() {\n const url = this.getDevServerUrl();\n assert(url, 'Dev server must be started');\n const { getManifest } = await getStaticRenderFunctions(this.projectRoot, url, {\n // Ensure the API Routes are included\n environment: 'node',\n });\n\n return getManifest({ fetchData: true });\n }\n\n async composeResourcesWithHtml({\n mode,\n resources,\n template,\n devBundleUrl,\n }: {\n mode: 'development' | 'production';\n resources: SerialAsset[];\n template: string;\n devBundleUrl?: string;\n }): Promise<string> {\n if (!resources) {\n return '';\n }\n const isDev = mode === 'development';\n return htmlFromSerialAssets(resources, {\n dev: isDev,\n template,\n bundleUrl: isDev ? devBundleUrl : undefined,\n });\n }\n\n async getStaticRenderFunctionAsync({\n mode,\n minify = mode !== 'development',\n }: {\n mode: 'development' | 'production';\n minify?: boolean;\n }) {\n const url = this.getDevServerUrl()!;\n\n const { getStaticContent } = await getStaticRenderFunctions(this.projectRoot, url, {\n minify,\n dev: mode !== 'production',\n // Ensure the API Routes are included\n environment: 'node',\n });\n return async (path: string) => {\n return await getStaticContent(new URL(path, url));\n };\n }\n\n async getStaticResourcesAsync({\n mode,\n minify = mode !== 'development',\n }: {\n mode: string;\n minify?: boolean;\n }): Promise<SerialAsset[]> {\n const devBundleUrlPathname = createBundleUrlPath({\n platform: 'web',\n mode,\n minify,\n environment: 'client',\n serializerOutput: 'static',\n mainModuleName: resolveMainModuleName(this.projectRoot, getConfig(this.projectRoot), 'web'),\n });\n\n const bundleUrl = new URL(devBundleUrlPathname, this.getDevServerUrl()!);\n\n // Fetch the generated HTML from our custom Metro serializer\n const results = await fetch(bundleUrl.toString());\n\n const txt = await results.text();\n\n let data: any;\n try {\n data = JSON.parse(txt);\n } catch (error: any) {\n Log.error(\n 'Failed to generate resources with Metro, the Metro config may not be using the correct serializer. Ensure the metro.config.js is extending the expo/metro-config and is not overriding the serializer.'\n );\n debug(txt);\n throw error;\n }\n\n // NOTE: This could potentially need more validation in the future.\n if (Array.isArray(data)) {\n return data;\n }\n\n if (data != null && (data.errors || data.type?.match(/.*Error$/))) {\n // {\n // type: 'InternalError',\n // errors: [],\n // message: 'Metro has encountered an error: While trying to resolve module `stylis` from file `/Users/evanbacon/Documents/GitHub/lab/emotion-error-test/node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js`, the package `/Users/evanbacon/Documents/GitHub/lab/emotion-error-test/node_modules/stylis/package.json` was successfully found. However, this package itself specifies a `main` module field that could not be resolved (`/Users/evanbacon/Documents/GitHub/lab/emotion-error-test/node_modules/stylis/dist/stylis.mjs`. Indeed, none of these files exist:\\n' +\n // '\\n' +\n // ' * /Users/evanbacon/Documents/GitHub/lab/emotion-error-test/node_modules/stylis/dist/stylis.mjs(.web.ts|.ts|.web.tsx|.tsx|.web.js|.js|.web.jsx|.jsx|.web.json|.json|.web.cjs|.cjs|.web.scss|.scss|.web.sass|.sass|.web.css|.css)\\n' +\n // ' * /Users/evanbacon/Documents/GitHub/lab/emotion-error-test/node_modules/stylis/dist/stylis.mjs/index(.web.ts|.ts|.web.tsx|.tsx|.web.js|.js|.web.jsx|.jsx|.web.json|.json|.web.cjs|.cjs|.web.scss|.scss|.web.sass|.sass|.web.css|.css): /Users/evanbacon/Documents/GitHub/lab/emotion-error-test/node_modules/metro/src/node-haste/DependencyGraph.js (289:17)\\n' +\n // '\\n' +\n // '\\x1B[0m \\x1B[90m 287 |\\x1B[39m }\\x1B[0m\\n' +\n // '\\x1B[0m \\x1B[90m 288 |\\x1B[39m \\x1B[36mif\\x1B[39m (error \\x1B[36minstanceof\\x1B[39m \\x1B[33mInvalidPackageError\\x1B[39m) {\\x1B[0m\\n' +\n // '\\x1B[0m\\x1B[31m\\x1B[1m>\\x1B[22m\\x1B[39m\\x1B[90m 289 |\\x1B[39m \\x1B[36mthrow\\x1B[39m \\x1B[36mnew\\x1B[39m \\x1B[33mPackageResolutionError\\x1B[39m({\\x1B[0m\\n' +\n // '\\x1B[0m \\x1B[90m |\\x1B[39m \\x1B[31m\\x1B[1m^\\x1B[22m\\x1B[39m\\x1B[0m\\n' +\n // '\\x1B[0m \\x1B[90m 290 |\\x1B[39m packageError\\x1B[33m:\\x1B[39m error\\x1B[33m,\\x1B[39m\\x1B[0m\\n' +\n // '\\x1B[0m \\x1B[90m 291 |\\x1B[39m originModulePath\\x1B[33m:\\x1B[39m \\x1B[36mfrom\\x1B[39m\\x1B[33m,\\x1B[39m\\x1B[0m\\n' +\n // '\\x1B[0m \\x1B[90m 292 |\\x1B[39m targetModuleName\\x1B[33m:\\x1B[39m to\\x1B[33m,\\x1B[39m\\x1B[0m'\n // }\n // The Metro logger already showed this error.\n throw new Error(data.message);\n }\n\n throw new Error(\n 'Invalid resources returned from the Metro serializer. Expected array, found: ' + data\n );\n }\n\n private async renderStaticErrorAsync(error: Error) {\n return getErrorOverlayHtmlAsync({\n error,\n projectRoot: this.projectRoot,\n });\n }\n\n async getStaticPageAsync(\n pathname: string,\n {\n mode,\n minify = mode !== 'development',\n }: {\n mode: 'development' | 'production';\n minify?: boolean;\n }\n ) {\n const devBundleUrlPathname = createBundleUrlPath({\n platform: 'web',\n mode,\n environment: 'client',\n mainModuleName: resolveMainModuleName(this.projectRoot, getConfig(this.projectRoot), 'web'),\n });\n\n const bundleStaticHtml = async (): Promise<string> => {\n const { getStaticContent } = await getStaticRenderFunctions(\n this.projectRoot,\n this.getDevServerUrl()!,\n {\n minify: false,\n dev: mode !== 'production',\n // Ensure the API Routes are included\n environment: 'node',\n }\n );\n\n const location = new URL(pathname, this.getDevServerUrl()!);\n return await getStaticContent(location);\n };\n\n const [resources, staticHtml] = await Promise.all([\n this.getStaticResourcesAsync({ mode, minify }),\n bundleStaticHtml(),\n ]);\n const content = await this.composeResourcesWithHtml({\n mode,\n resources,\n template: staticHtml,\n devBundleUrl: devBundleUrlPathname,\n });\n return {\n content,\n resources,\n };\n }\n\n async watchEnvironmentVariables() {\n if (!this.instance) {\n throw new Error(\n 'Cannot observe environment variable changes without a running Metro instance.'\n );\n }\n if (!this.metro) {\n // This can happen when the run command is used and the server is already running in another\n // process.\n debug('Skipping Environment Variable observation because Metro is not running (headless).');\n return;\n }\n\n const envFiles = runtimeEnv\n .getFiles(process.env.NODE_ENV)\n .map((fileName) => path.join(this.projectRoot, fileName));\n\n observeFileChanges(\n {\n metro: this.metro,\n server: this.instance.server,\n },\n envFiles,\n () => {\n debug('Reloading environment variables...');\n // Force reload the environment variables.\n runtimeEnv.load(this.projectRoot, { force: true });\n }\n );\n }\n\n protected async startImplementationAsync(\n options: BundlerStartOptions\n ): Promise<DevServerInstance> {\n options.port = await this.resolvePortAsync(options);\n this.urlCreator = this.getUrlCreator(options);\n\n const parsedOptions = {\n port: options.port,\n maxWorkers: options.maxWorkers,\n resetCache: options.resetDevServer,\n\n // Use the unversioned metro config.\n // TODO: Deprecate this property when expo-cli goes away.\n unversioned: false,\n };\n\n // Required for symbolication:\n process.env.EXPO_DEV_SERVER_ORIGIN = `http://localhost:${options.port}`;\n\n const { metro, server, middleware, messageSocket } = await instantiateMetroAsync(\n this,\n parsedOptions\n );\n\n const manifestMiddleware = await this.getManifestMiddlewareAsync(options);\n\n // Important that we noop source maps for context modules as soon as possible.\n prependMiddleware(middleware, new ContextModuleSourceMapsMiddleware().getHandler());\n\n // We need the manifest handler to be the first middleware to run so our\n // routes take precedence over static files. For example, the manifest is\n // served from '/' and if the user has an index.html file in their project\n // then the manifest handler will never run, the static middleware will run\n // and serve index.html instead of the manifest.\n // https://github.com/expo/expo/issues/13114\n prependMiddleware(middleware, manifestMiddleware.getHandler());\n\n middleware.use(\n new InterstitialPageMiddleware(this.projectRoot, {\n // TODO: Prevent this from becoming stale.\n scheme: options.location.scheme ?? null,\n }).getHandler()\n );\n middleware.use(new ReactDevToolsPageMiddleware(this.projectRoot).getHandler());\n\n const deepLinkMiddleware = new RuntimeRedirectMiddleware(this.projectRoot, {\n onDeepLink: getDeepLinkHandler(this.projectRoot),\n getLocation: ({ runtime }) => {\n if (runtime === 'custom') {\n return this.urlCreator?.constructDevClientUrl();\n } else {\n return this.urlCreator?.constructUrl({\n scheme: 'exp',\n });\n }\n },\n });\n middleware.use(deepLinkMiddleware.getHandler());\n\n middleware.use(new CreateFileMiddleware(this.projectRoot).getHandler());\n\n // Append support for redirecting unhandled requests to the index.html page on web.\n if (this.isTargetingWeb()) {\n const { exp } = getConfig(this.projectRoot, { skipSDKVersionRequirement: true });\n const useWebSSG = exp.web?.output === 'static';\n\n // This MUST be after the manifest middleware so it doesn't have a chance to serve the template `public/index.html`.\n middleware.use(new ServeStaticMiddleware(this.projectRoot).getHandler());\n\n // This should come after the static middleware so it doesn't serve the favicon from `public/favicon.ico`.\n middleware.use(new FaviconMiddleware(this.projectRoot).getHandler());\n\n if (useWebSSG) {\n middleware.use(async (req: ServerRequest, res: ServerResponse, next: ServerNext) => {\n if (!req?.url) {\n return next();\n }\n\n // TODO: Formal manifest for allowed paths\n if (req.url.endsWith('.ico')) {\n return next();\n }\n if (req.url.includes('serializer.output=static')) {\n return next();\n }\n\n try {\n const { content } = await this.getStaticPageAsync(req.url, {\n mode: options.mode ?? 'development',\n });\n\n res.setHeader('Content-Type', 'text/html');\n res.end(content);\n return;\n } catch (error: any) {\n res.setHeader('Content-Type', 'text/html');\n try {\n res.end(await this.renderStaticErrorAsync(error));\n } catch (staticError: any) {\n // Fallback error for when Expo Router is misconfigured in the project.\n res.end(\n '<span><h3>Internal Error:</h3><b>Project is not setup correctly for static rendering (check terminal for more info):</b><br/>' +\n error.message +\n '<br/><br/>' +\n staticError.message +\n '</span>'\n );\n }\n }\n });\n }\n\n // This MUST run last since it's the fallback.\n if (!useWebSSG) {\n middleware.use(\n new HistoryFallbackMiddleware(manifestMiddleware.getHandler().internal).getHandler()\n );\n }\n }\n // Extend the close method to ensure that we clean up the local info.\n const originalClose = server.close.bind(server);\n\n server.close = (callback?: (err?: Error) => void) => {\n return originalClose((err?: Error) => {\n this.instance = null;\n this.metro = null;\n callback?.(err);\n });\n };\n\n this.metro = metro;\n return {\n server,\n location: {\n // The port is the main thing we want to send back.\n port: options.port,\n // localhost isn't always correct.\n host: 'localhost',\n // http is the only supported protocol on native.\n url: `http://localhost:${options.port}`,\n protocol: 'http',\n },\n middleware,\n messageSocket,\n };\n }\n\n public async waitForTypeScriptAsync(): Promise<boolean> {\n if (!this.instance) {\n throw new Error('Cannot wait for TypeScript without a running server.');\n }\n\n return new Promise<boolean>((resolve) => {\n if (!this.metro) {\n // This can happen when the run command is used and the server is already running in another\n // process. In this case we can't wait for the TypeScript check to complete because we don't\n // have access to the Metro server.\n debug('Skipping TypeScript check because Metro is not running (headless).');\n return resolve(false);\n }\n\n const off = metroWatchTypeScriptFiles({\n projectRoot: this.projectRoot,\n server: this.instance!.server,\n metro: this.metro,\n tsconfig: true,\n throttle: true,\n eventTypes: ['change', 'add'],\n callback: async () => {\n // Run once, this prevents the TypeScript project prerequisite from running on every file change.\n off();\n const { TypeScriptProjectPrerequisite } = await import(\n '../../doctor/typescript/TypeScriptProjectPrerequisite'\n );\n\n try {\n const req = new TypeScriptProjectPrerequisite(this.projectRoot);\n await req.bootstrapAsync();\n resolve(true);\n } catch (error: any) {\n // Ensure the process doesn't fail if the TypeScript check fails.\n // This could happen during the install.\n Log.log();\n Log.error(\n chalk.red`Failed to automatically setup TypeScript for your project. Try restarting the dev server to fix.`\n );\n Log.exception(error);\n resolve(false);\n }\n },\n });\n });\n }\n\n public async startTypeScriptServices() {\n return startTypescriptTypeGenerationAsync({\n server: this.instance?.server,\n metro: this.metro,\n projectRoot: this.projectRoot,\n });\n }\n\n protected getConfigModuleIds(): string[] {\n return ['./metro.config.js', './metro.config.json', './rn-cli.config.js'];\n }\n}\n\nexport function getDeepLinkHandler(projectRoot: string): DeepLinkHandler {\n return async ({ runtime }) => {\n if (runtime === 'expo') return;\n const { exp } = getConfig(projectRoot);\n await logEventAsync('dev client start command', {\n status: 'started',\n ...getDevClientProperties(projectRoot, exp),\n });\n };\n}\n\nfunction htmlFromSerialAssets(\n assets: SerialAsset[],\n { dev, template, bundleUrl }: { dev: boolean; template: string; bundleUrl?: string }\n) {\n // Combine the CSS modules into tags that have hot refresh data attributes.\n const styleString = assets\n .filter((asset) => asset.type === 'css')\n .map(({ metadata, filename, source }) => {\n if (dev) {\n return `<style data-expo-css-hmr=\"${metadata.hmrId}\">` + source + '\\n</style>';\n } else {\n return [\n `<link rel=\"preload\" href=\"/${filename}\" as=\"style\">`,\n `<link rel=\"stylesheet\" href=\"/${filename}\">`,\n ].join('');\n }\n })\n .join('');\n\n const jsAssets = assets.filter((asset) => asset.type === 'js');\n\n const scripts = bundleUrl\n ? `<script src=\"${bundleUrl}\" defer></script>`\n : jsAssets\n .map(({ filename }) => {\n return `<script src=\"/${filename}\" defer></script>`;\n })\n .join('');\n\n return template\n .replace('</head>', `${styleString}</head>`)\n .replace('</body>', `${scripts}\\n</body>`);\n}\n"],"names":["getDeepLinkHandler","runtimeEnv","debug","require","EXPO_GO_METRO_PORT","DEV_CLIENT_METRO_PORT","MetroBundlerDevServer","BundlerDevServer","metro","name","resolvePortAsync","options","port","devClient","Number","process","env","RCT_METRO_PORT","getFreePortAsync","getRoutesAsync","url","getDevServerUrl","assert","getManifest","getStaticRenderFunctions","projectRoot","environment","fetchData","composeResourcesWithHtml","mode","resources","template","devBundleUrl","isDev","htmlFromSerialAssets","dev","bundleUrl","undefined","getStaticRenderFunctionAsync","minify","getStaticContent","path","URL","getStaticResourcesAsync","data","devBundleUrlPathname","createBundleUrlPath","platform","serializerOutput","mainModuleName","resolveMainModuleName","getConfig","results","fetch","toString","txt","text","JSON","parse","error","Log","Array","isArray","errors","type","match","Error","message","renderStaticErrorAsync","getErrorOverlayHtmlAsync","getStaticPageAsync","pathname","bundleStaticHtml","location","staticHtml","Promise","all","content","watchEnvironmentVariables","instance","envFiles","getFiles","NODE_ENV","map","fileName","join","observeFileChanges","server","load","force","startImplementationAsync","urlCreator","getUrlCreator","parsedOptions","maxWorkers","resetCache","resetDevServer","unversioned","EXPO_DEV_SERVER_ORIGIN","middleware","messageSocket","instantiateMetroAsync","manifestMiddleware","getManifestMiddlewareAsync","prependMiddleware","ContextModuleSourceMapsMiddleware","getHandler","use","InterstitialPageMiddleware","scheme","ReactDevToolsPageMiddleware","deepLinkMiddleware","RuntimeRedirectMiddleware","onDeepLink","getLocation","runtime","constructDevClientUrl","constructUrl","CreateFileMiddleware","isTargetingWeb","exp","skipSDKVersionRequirement","useWebSSG","web","output","ServeStaticMiddleware","FaviconMiddleware","req","res","next","endsWith","includes","setHeader","end","staticError","HistoryFallbackMiddleware","internal","originalClose","close","bind","callback","err","host","protocol","waitForTypeScriptAsync","resolve","off","metroWatchTypeScriptFiles","tsconfig","throttle","eventTypes","TypeScriptProjectPrerequisite","bootstrapAsync","log","chalk","red","exception","startTypeScriptServices","startTypescriptTypeGenerationAsync","getConfigModuleIds","logEventAsync","status","getDevClientProperties","assets","styleString","filter","asset","metadata","filename","source","hmrId","jsAssets","scripts","replace"],"mappings":"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"}
@@ -9,6 +9,7 @@ var _pageReload = require("./handlers/PageReload");
9
9
  var _vscodeDebuggerGetPossibleBreakpoints = require("./handlers/VscodeDebuggerGetPossibleBreakpoints");
10
10
  var _vscodeDebuggerScriptParsed = require("./handlers/VscodeDebuggerScriptParsed");
11
11
  var _vscodeDebuggerSetBreakpointByUrl = require("./handlers/VscodeDebuggerSetBreakpointByUrl");
12
+ var _vscodeRuntimeCallFunctionOn = require("./handlers/VscodeRuntimeCallFunctionOn");
12
13
  var _vscodeRuntimeGetProperties = require("./handlers/VscodeRuntimeGetProperties");
13
14
  function _interopRequireDefault(obj) {
14
15
  return obj && obj.__esModule ? obj : {
@@ -26,7 +27,8 @@ function createInspectorDeviceClass(metroBundler, MetroDeviceClass) {
26
27
  new _vscodeDebuggerGetPossibleBreakpoints.VscodeDebuggerGetPossibleBreakpointsHandler(),
27
28
  new _vscodeDebuggerScriptParsed.VscodeDebuggerScriptParsedHandler(this),
28
29
  new _vscodeDebuggerSetBreakpointByUrl.VscodeDebuggerSetBreakpointByUrlHandler(),
29
- new _vscodeRuntimeGetProperties.VscodeRuntimeGetPropertiesHandler(),
30
+ new _vscodeRuntimeGetProperties.VscodeRuntimeGetPropertiesHandler(),
31
+ new _vscodeRuntimeCallFunctionOn.VscodeRuntimeCallFunctionOnHandler(),
30
32
  ];
31
33
  onDeviceMessage(message, info) {
32
34
  var ref;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/start/server/metro/inspector-proxy/device.ts"],"sourcesContent":["import type { DebuggerInfo, Device as MetroDevice } from 'metro-inspector-proxy';\nimport fetch from 'node-fetch';\nimport type WS from 'ws';\n\nimport { MetroBundlerDevServer } from '../MetroBundlerDevServer';\nimport { NetworkResponseHandler } from './handlers/NetworkResponse';\nimport { PageReloadHandler } from './handlers/PageReload';\nimport { VscodeDebuggerGetPossibleBreakpointsHandler } from './handlers/VscodeDebuggerGetPossibleBreakpoints';\nimport { VscodeDebuggerScriptParsedHandler } from './handlers/VscodeDebuggerScriptParsed';\nimport { VscodeDebuggerSetBreakpointByUrlHandler } from './handlers/VscodeDebuggerSetBreakpointByUrl';\nimport { VscodeRuntimeGetPropertiesHandler } from './handlers/VscodeRuntimeGetProperties';\nimport { DeviceRequest, InspectorHandler, DebuggerRequest } from './handlers/types';\n\n/** Export the supported debugger types this inspector proxy can handle */\nexport type DebuggerType = 'vscode' | 'generic';\n\n/** The debugger information being tracked by this device class */\nexport type ExpoDebuggerInfo = DebuggerInfo & { debuggerType?: DebuggerType };\n\nexport function createInspectorDeviceClass(\n metroBundler: MetroBundlerDevServer,\n MetroDeviceClass: typeof MetroDevice\n) {\n return class ExpoInspectorDevice extends MetroDeviceClass implements InspectorHandler {\n /** Stores information about currently connected debugger (if any). */\n _debuggerConnection: ExpoDebuggerInfo | null = null;\n\n /** All handlers that should be used to intercept or reply to CDP events */\n public handlers: InspectorHandler[] = [\n // Generic handlers\n new NetworkResponseHandler(),\n new PageReloadHandler(metroBundler),\n // Vscode-specific handlers\n new VscodeDebuggerGetPossibleBreakpointsHandler(),\n new VscodeDebuggerScriptParsedHandler(this),\n new VscodeDebuggerSetBreakpointByUrlHandler(),\n new VscodeRuntimeGetPropertiesHandler(),\n ];\n\n onDeviceMessage(message: any, info: DebuggerInfo): boolean {\n return this.handlers.some((handler) => handler.onDeviceMessage?.(message, info) ?? false);\n }\n\n onDebuggerMessage(message: any, info: DebuggerInfo): boolean {\n return this.handlers.some((handler) => handler.onDebuggerMessage?.(message, info) ?? false);\n }\n\n /**\n * Handle a new device connection with the same device identifier.\n * When the app and device name matches, we can reuse the debugger connection.\n * Else, we have to shut the debugger connection down.\n */\n handleDuplicateDeviceConnection(newDevice: InstanceType<typeof MetroDeviceClass>) {\n if (this._app !== newDevice._app || this._name !== newDevice._name) {\n this._deviceSocket.close();\n this._debuggerConnection?.socket.close();\n return;\n }\n\n const oldDebugger = this._debuggerConnection;\n this._debuggerConnection = null;\n\n if (oldDebugger) {\n oldDebugger.socket.removeAllListeners();\n this._deviceSocket.close();\n newDevice.handleDebuggerConnection(oldDebugger.socket, oldDebugger.pageId);\n }\n }\n\n /**\n * Handle a new debugger connection to this device.\n * This adds the `debuggerType` property to the `DebuggerInfo` object.\n * With that information, we can enable or disable debugger-specific handlers.\n */\n handleDebuggerConnectionWithType(socket: WS, pageId: string, debuggerType: DebuggerType): void {\n this.handleDebuggerConnection(socket, pageId);\n\n if (this._debuggerConnection) {\n this._debuggerConnection.debuggerType = debuggerType;\n }\n }\n\n /** Hook into the message life cycle to answer more complex CDP messages */\n async _processMessageFromDevice(message: DeviceRequest<any>, info: DebuggerInfo) {\n if (!this.onDeviceMessage(message, info)) {\n await super._processMessageFromDevice(message, info);\n }\n }\n\n /** Hook into the message life cycle to answer more complex CDP messages */\n _interceptMessageFromDebugger(\n request: DebuggerRequest,\n info: DebuggerInfo,\n socket: WS\n ): boolean {\n // Note, `socket` is the exact same as `info.socket`\n if (this.onDebuggerMessage(request, info)) {\n return true;\n }\n\n return super._interceptMessageFromDebugger(request, info, socket);\n }\n\n /**\n * Overwrite the default text fetcher, to load sourcemaps from sources other than `localhost`.\n * @todo Cedric: remove the custom `DebuggerScriptSource` handler when switching over to `metro@>=0.75.1`\n * @see https://github.com/facebook/metro/blob/77f445f1bcd2264ad06174dbf8d542bc75834d29/packages/metro-inspector-proxy/src/Device.js#L573-L588\n * @since metro-inspector-proxy@0.75.1\n */\n async _fetchText(url: URL): Promise<string> {\n const LENGTH_LIMIT_BYTES = 350_000_000; // 350mb\n\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`Received status ${response.status} while fetching: ${url}`);\n }\n\n const contentLength = response.headers.get('Content-Length');\n if (contentLength && Number(contentLength) > LENGTH_LIMIT_BYTES) {\n throw new Error('Expected file size is too large (more than 350mb)');\n }\n\n const text = await response.text();\n if (Buffer.byteLength(text, 'utf8') > LENGTH_LIMIT_BYTES) {\n throw new Error('File size is too large (more than 350mb)');\n }\n\n return text;\n }\n };\n}\n"],"names":["createInspectorDeviceClass","metroBundler","MetroDeviceClass","ExpoInspectorDevice","_debuggerConnection","handlers","NetworkResponseHandler","PageReloadHandler","VscodeDebuggerGetPossibleBreakpointsHandler","VscodeDebuggerScriptParsedHandler","VscodeDebuggerSetBreakpointByUrlHandler","VscodeRuntimeGetPropertiesHandler","onDeviceMessage","message","info","handler","some","onDebuggerMessage","handleDuplicateDeviceConnection","newDevice","_app","_name","_deviceSocket","close","socket","oldDebugger","removeAllListeners","handleDebuggerConnection","pageId","handleDebuggerConnectionWithType","debuggerType","_processMessageFromDevice","_interceptMessageFromDebugger","request","_fetchText","url","LENGTH_LIMIT_BYTES","response","fetch","ok","Error","status","contentLength","headers","get","Number","text","Buffer","byteLength"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../src/start/server/metro/inspector-proxy/device.ts"],"sourcesContent":["import type { DebuggerInfo, Device as MetroDevice } from 'metro-inspector-proxy';\nimport fetch from 'node-fetch';\nimport type WS from 'ws';\n\nimport { MetroBundlerDevServer } from '../MetroBundlerDevServer';\nimport { NetworkResponseHandler } from './handlers/NetworkResponse';\nimport { PageReloadHandler } from './handlers/PageReload';\nimport { VscodeDebuggerGetPossibleBreakpointsHandler } from './handlers/VscodeDebuggerGetPossibleBreakpoints';\nimport { VscodeDebuggerScriptParsedHandler } from './handlers/VscodeDebuggerScriptParsed';\nimport { VscodeDebuggerSetBreakpointByUrlHandler } from './handlers/VscodeDebuggerSetBreakpointByUrl';\nimport { VscodeRuntimeCallFunctionOnHandler } from './handlers/VscodeRuntimeCallFunctionOn';\nimport { VscodeRuntimeGetPropertiesHandler } from './handlers/VscodeRuntimeGetProperties';\nimport { DeviceRequest, InspectorHandler, DebuggerRequest } from './handlers/types';\n\n/** Export the supported debugger types this inspector proxy can handle */\nexport type DebuggerType = 'vscode' | 'generic';\n\n/** The debugger information being tracked by this device class */\nexport type ExpoDebuggerInfo = DebuggerInfo & { debuggerType?: DebuggerType };\n\nexport function createInspectorDeviceClass(\n metroBundler: MetroBundlerDevServer,\n MetroDeviceClass: typeof MetroDevice\n) {\n return class ExpoInspectorDevice extends MetroDeviceClass implements InspectorHandler {\n /** Stores information about currently connected debugger (if any). */\n _debuggerConnection: ExpoDebuggerInfo | null = null;\n\n /** All handlers that should be used to intercept or reply to CDP events */\n public handlers: InspectorHandler[] = [\n // Generic handlers\n new NetworkResponseHandler(),\n new PageReloadHandler(metroBundler),\n // Vscode-specific handlers\n new VscodeDebuggerGetPossibleBreakpointsHandler(),\n new VscodeDebuggerScriptParsedHandler(this),\n new VscodeDebuggerSetBreakpointByUrlHandler(),\n new VscodeRuntimeGetPropertiesHandler(),\n new VscodeRuntimeCallFunctionOnHandler(),\n ];\n\n onDeviceMessage(message: any, info: DebuggerInfo): boolean {\n return this.handlers.some((handler) => handler.onDeviceMessage?.(message, info) ?? false);\n }\n\n onDebuggerMessage(message: any, info: DebuggerInfo): boolean {\n return this.handlers.some((handler) => handler.onDebuggerMessage?.(message, info) ?? false);\n }\n\n /**\n * Handle a new device connection with the same device identifier.\n * When the app and device name matches, we can reuse the debugger connection.\n * Else, we have to shut the debugger connection down.\n */\n handleDuplicateDeviceConnection(newDevice: InstanceType<typeof MetroDeviceClass>) {\n if (this._app !== newDevice._app || this._name !== newDevice._name) {\n this._deviceSocket.close();\n this._debuggerConnection?.socket.close();\n return;\n }\n\n const oldDebugger = this._debuggerConnection;\n this._debuggerConnection = null;\n\n if (oldDebugger) {\n oldDebugger.socket.removeAllListeners();\n this._deviceSocket.close();\n newDevice.handleDebuggerConnection(oldDebugger.socket, oldDebugger.pageId);\n }\n }\n\n /**\n * Handle a new debugger connection to this device.\n * This adds the `debuggerType` property to the `DebuggerInfo` object.\n * With that information, we can enable or disable debugger-specific handlers.\n */\n handleDebuggerConnectionWithType(socket: WS, pageId: string, debuggerType: DebuggerType): void {\n this.handleDebuggerConnection(socket, pageId);\n\n if (this._debuggerConnection) {\n this._debuggerConnection.debuggerType = debuggerType;\n }\n }\n\n /** Hook into the message life cycle to answer more complex CDP messages */\n async _processMessageFromDevice(message: DeviceRequest<any>, info: DebuggerInfo) {\n if (!this.onDeviceMessage(message, info)) {\n await super._processMessageFromDevice(message, info);\n }\n }\n\n /** Hook into the message life cycle to answer more complex CDP messages */\n _interceptMessageFromDebugger(\n request: DebuggerRequest,\n info: DebuggerInfo,\n socket: WS\n ): boolean {\n // Note, `socket` is the exact same as `info.socket`\n if (this.onDebuggerMessage(request, info)) {\n return true;\n }\n\n return super._interceptMessageFromDebugger(request, info, socket);\n }\n\n /**\n * Overwrite the default text fetcher, to load sourcemaps from sources other than `localhost`.\n * @todo Cedric: remove the custom `DebuggerScriptSource` handler when switching over to `metro@>=0.75.1`\n * @see https://github.com/facebook/metro/blob/77f445f1bcd2264ad06174dbf8d542bc75834d29/packages/metro-inspector-proxy/src/Device.js#L573-L588\n * @since metro-inspector-proxy@0.75.1\n */\n async _fetchText(url: URL): Promise<string> {\n const LENGTH_LIMIT_BYTES = 350_000_000; // 350mb\n\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`Received status ${response.status} while fetching: ${url}`);\n }\n\n const contentLength = response.headers.get('Content-Length');\n if (contentLength && Number(contentLength) > LENGTH_LIMIT_BYTES) {\n throw new Error('Expected file size is too large (more than 350mb)');\n }\n\n const text = await response.text();\n if (Buffer.byteLength(text, 'utf8') > LENGTH_LIMIT_BYTES) {\n throw new Error('File size is too large (more than 350mb)');\n }\n\n return text;\n }\n };\n}\n"],"names":["createInspectorDeviceClass","metroBundler","MetroDeviceClass","ExpoInspectorDevice","_debuggerConnection","handlers","NetworkResponseHandler","PageReloadHandler","VscodeDebuggerGetPossibleBreakpointsHandler","VscodeDebuggerScriptParsedHandler","VscodeDebuggerSetBreakpointByUrlHandler","VscodeRuntimeGetPropertiesHandler","VscodeRuntimeCallFunctionOnHandler","onDeviceMessage","message","info","handler","some","onDebuggerMessage","handleDuplicateDeviceConnection","newDevice","_app","_name","_deviceSocket","close","socket","oldDebugger","removeAllListeners","handleDebuggerConnection","pageId","handleDebuggerConnectionWithType","debuggerType","_processMessageFromDevice","_interceptMessageFromDebugger","request","_fetchText","url","LENGTH_LIMIT_BYTES","response","fetch","ok","Error","status","contentLength","headers","get","Number","text","Buffer","byteLength"],"mappings":"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"}
@@ -2,17 +2,16 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
+ var _utils = require("./utils");
5
6
  class VscodeDebuggerGetPossibleBreakpointsHandler {
6
7
  onDebuggerMessage(message, { socket , debuggerType }) {
7
8
  if (debuggerType === "vscode" && message.method === "Debugger.getPossibleBreakpoints") {
8
- const response = {
9
+ return (0, _utils).respond(socket, {
9
10
  id: message.id,
10
11
  result: {
11
12
  locations: []
12
13
  }
13
- };
14
- socket.send(JSON.stringify(response));
15
- return true;
14
+ });
16
15
  }
17
16
  return false;
18
17
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../src/start/server/metro/inspector-proxy/handlers/VscodeDebuggerGetPossibleBreakpoints.ts"],"sourcesContent":["import Protocol from 'devtools-protocol';\n\nimport { ExpoDebuggerInfo } from '../device';\nimport { CdpMessage, DebuggerRequest, DeviceResponse, InspectorHandler } from './types';\n\n/**\n * Hermes doesn't seem to handle this request, but `locations` have to be returned.\n * Respond with an empty location to make it \"spec compliant\" with Chrome DevTools.\n */\nexport class VscodeDebuggerGetPossibleBreakpointsHandler implements InspectorHandler {\n onDebuggerMessage(\n message: DebuggerRequest<DebuggerGetPossibleBreakpoints>,\n { socket, debuggerType }: ExpoDebuggerInfo\n ): boolean {\n if (debuggerType === 'vscode' && message.method === 'Debugger.getPossibleBreakpoints') {\n const response: DeviceResponse<DebuggerGetPossibleBreakpoints> = {\n id: message.id,\n result: { locations: [] },\n };\n socket.send(JSON.stringify(response));\n return true;\n }\n\n return false;\n }\n}\n\n/** @see https://chromedevtools.github.io/devtools-protocol/v8/Debugger/#method-getPossibleBreakpoints */\nexport type DebuggerGetPossibleBreakpoints = CdpMessage<\n 'Debugger.getPossibleBreakpoints',\n Protocol.Debugger.GetPossibleBreakpointsRequest,\n Protocol.Debugger.GetPossibleBreakpointsResponse\n>;\n"],"names":["VscodeDebuggerGetPossibleBreakpointsHandler","onDebuggerMessage","message","socket","debuggerType","method","response","id","result","locations","send","JSON","stringify"],"mappings":"AAAA;;;;AASO,MAAMA,2CAA2C;IACtDC,iBAAiB,CACfC,OAAwD,EACxD,EAAEC,MAAM,CAAA,EAAEC,YAAY,CAAA,EAAoB,EACjC;QACT,IAAIA,YAAY,KAAK,QAAQ,IAAIF,OAAO,CAACG,MAAM,KAAK,iCAAiC,EAAE;YACrF,MAAMC,QAAQ,GAAmD;gBAC/DC,EAAE,EAAEL,OAAO,CAACK,EAAE;gBACdC,MAAM,EAAE;oBAAEC,SAAS,EAAE,EAAE;iBAAE;aAC1B,AAAC;YACFN,MAAM,CAACO,IAAI,CAACC,IAAI,CAACC,SAAS,CAACN,QAAQ,CAAC,CAAC,CAAC;YACtC,OAAO,IAAI,CAAC;SACb;QAED,OAAO,KAAK,CAAC;KACd;CACF;QAhBYN,2CAA2C,GAA3CA,2CAA2C"}
1
+ {"version":3,"sources":["../../../../../../../src/start/server/metro/inspector-proxy/handlers/VscodeDebuggerGetPossibleBreakpoints.ts"],"sourcesContent":["import Protocol from 'devtools-protocol';\n\nimport { ExpoDebuggerInfo } from '../device';\nimport { CdpMessage, DebuggerRequest, DeviceResponse, InspectorHandler } from './types';\nimport { respond } from './utils';\n\n/**\n * Hermes doesn't seem to handle this request, but `locations` have to be returned.\n * Respond with an empty location to make it \"spec compliant\" with Chrome DevTools.\n */\nexport class VscodeDebuggerGetPossibleBreakpointsHandler implements InspectorHandler {\n onDebuggerMessage(\n message: DebuggerRequest<DebuggerGetPossibleBreakpoints>,\n { socket, debuggerType }: ExpoDebuggerInfo\n ): boolean {\n if (debuggerType === 'vscode' && message.method === 'Debugger.getPossibleBreakpoints') {\n return respond<DeviceResponse<DebuggerGetPossibleBreakpoints>>(socket, {\n id: message.id,\n result: { locations: [] },\n });\n }\n\n return false;\n }\n}\n\n/** @see https://chromedevtools.github.io/devtools-protocol/v8/Debugger/#method-getPossibleBreakpoints */\nexport type DebuggerGetPossibleBreakpoints = CdpMessage<\n 'Debugger.getPossibleBreakpoints',\n Protocol.Debugger.GetPossibleBreakpointsRequest,\n Protocol.Debugger.GetPossibleBreakpointsResponse\n>;\n"],"names":["VscodeDebuggerGetPossibleBreakpointsHandler","onDebuggerMessage","message","socket","debuggerType","method","respond","id","result","locations"],"mappings":"AAAA;;;;AAIwB,IAAA,MAAS,WAAT,SAAS,CAAA;AAM1B,MAAMA,2CAA2C;IACtDC,iBAAiB,CACfC,OAAwD,EACxD,EAAEC,MAAM,CAAA,EAAEC,YAAY,CAAA,EAAoB,EACjC;QACT,IAAIA,YAAY,KAAK,QAAQ,IAAIF,OAAO,CAACG,MAAM,KAAK,iCAAiC,EAAE;YACrF,OAAOC,CAAAA,GAAAA,MAAO,AAGZ,CAAA,QAHY,CAAiDH,MAAM,EAAE;gBACrEI,EAAE,EAAEL,OAAO,CAACK,EAAE;gBACdC,MAAM,EAAE;oBAAEC,SAAS,EAAE,EAAE;iBAAE;aAC1B,CAAC,CAAC;SACJ;QAED,OAAO,KAAK,CAAC;KACd;CACF;QAdYT,2CAA2C,GAA3CA,2CAA2C"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ var _utils = require("./utils");
6
+ class VscodeRuntimeCallFunctionOnHandler {
7
+ onDebuggerMessage(message, { socket , debuggerType }) {
8
+ if (debuggerType === "vscode" && message.method === "Runtime.callFunctionOn") {
9
+ return (0, _utils).respond(socket, {
10
+ id: message.id,
11
+ result: {
12
+ // We don't know the `type` and vscode allows `type: undefined`
13
+ result: {
14
+ objectId: message.params.objectId
15
+ }
16
+ }
17
+ });
18
+ }
19
+ return false;
20
+ }
21
+ }
22
+ exports.VscodeRuntimeCallFunctionOnHandler = VscodeRuntimeCallFunctionOnHandler;
23
+
24
+ //# sourceMappingURL=VscodeRuntimeCallFunctionOn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../src/start/server/metro/inspector-proxy/handlers/VscodeRuntimeCallFunctionOn.ts"],"sourcesContent":["import Protocol from 'devtools-protocol';\n\nimport { CdpMessage, DebuggerRequest, DeviceResponse, InspectorHandler } from './types';\nimport { respond } from './utils';\nimport { ExpoDebuggerInfo } from '../device';\n\n/**\n * Vscode is trying to inject a script to fetch information about \"Stringy\" variables.\n * Unfortunately, this script causes a Hermes exception and crashes the app.\n *\n * @see https://github.com/expo/vscode-expo/issues/231\n * @see https://github.com/microsoft/vscode-js-debug/blob/dcccaf3972d675cc1e5c776450bb4c3dc8c178c1/src/adapter/stackTrace.ts#L319-L324\n */\nexport class VscodeRuntimeCallFunctionOnHandler implements InspectorHandler {\n onDebuggerMessage(\n message: DebuggerRequest<RuntimeCallFunctionOn>,\n { socket, debuggerType }: ExpoDebuggerInfo\n ): boolean {\n if (debuggerType === 'vscode' && message.method === 'Runtime.callFunctionOn') {\n return respond<DeviceResponse<RuntimeCallFunctionOn>>(socket, {\n id: message.id,\n result: {\n // We don't know the `type` and vscode allows `type: undefined`\n result: { objectId: message.params.objectId } as any,\n },\n });\n }\n\n return false;\n }\n}\n\n/** @see https://chromedevtools.github.io/devtools-protocol/v8/Runtime/#method-callFunctionOn */\nexport type RuntimeCallFunctionOn = CdpMessage<\n 'Runtime.callFunctionOn',\n Protocol.Runtime.CallFunctionOnRequest,\n Protocol.Runtime.CallFunctionOnResponse\n>;\n"],"names":["VscodeRuntimeCallFunctionOnHandler","onDebuggerMessage","message","socket","debuggerType","method","respond","id","result","objectId","params"],"mappings":"AAAA;;;;AAGwB,IAAA,MAAS,WAAT,SAAS,CAAA;AAU1B,MAAMA,kCAAkC;IAC7CC,iBAAiB,CACfC,OAA+C,EAC/C,EAAEC,MAAM,CAAA,EAAEC,YAAY,CAAA,EAAoB,EACjC;QACT,IAAIA,YAAY,KAAK,QAAQ,IAAIF,OAAO,CAACG,MAAM,KAAK,wBAAwB,EAAE;YAC5E,OAAOC,CAAAA,GAAAA,MAAO,AAMZ,CAAA,QANY,CAAwCH,MAAM,EAAE;gBAC5DI,EAAE,EAAEL,OAAO,CAACK,EAAE;gBACdC,MAAM,EAAE;oBACN,+DAA+D;oBAC/DA,MAAM,EAAE;wBAAEC,QAAQ,EAAEP,OAAO,CAACQ,MAAM,CAACD,QAAQ;qBAAE;iBAC9C;aACF,CAAC,CAAC;SACJ;QAED,OAAO,KAAK,CAAC;KACd;CACF;QAjBYT,kCAAkC,GAAlCA,kCAAkC"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ exports.respond = respond;
6
+ function respond(socket, message) {
7
+ socket.send(JSON.stringify(message));
8
+ return true;
9
+ }
10
+
11
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../src/start/server/metro/inspector-proxy/handlers/utils.ts"],"sourcesContent":["import type WS from 'ws';\n\nimport { DebuggerResponse, DeviceResponse } from './types';\n\n/**\n * Helper function to respond to a message from the debugger or device.\n * The return value is used to stop the message propagation, \"canceling\" further handling.\n *\n * @example ```\n * return respond<DeviceResponse<CDP>>(socket, { id: message.id, result: {} });\n * ```\n */\nexport function respond<T = DeviceResponse | DebuggerResponse>(socket: WS, message: T) {\n socket.send(JSON.stringify(message));\n return true;\n}\n"],"names":["respond","socket","message","send","JSON","stringify"],"mappings":"AAAA;;;;QAYgBA,OAAO,GAAPA,OAAO;AAAhB,SAASA,OAAO,CAAwCC,MAAU,EAAEC,OAAU,EAAE;IACrFD,MAAM,CAACE,IAAI,CAACC,IAAI,CAACC,SAAS,CAACH,OAAO,CAAC,CAAC,CAAC;IACrC,OAAO,IAAI,CAAC;CACb"}
@@ -138,7 +138,7 @@ async function createHostInfoAsync() {
138
138
  host: await _userSettings.default.getAnonymousIdentifierAsync(),
139
139
  server: "expo",
140
140
  // Defined in the build step
141
- serverVersion: "0.10.13",
141
+ serverVersion: "0.10.15",
142
142
  serverDriver: _manifestMiddleware.DEVELOPER_TOOL,
143
143
  serverOS: _os.default.platform(),
144
144
  serverOSVersion: _os.default.release()
@@ -31,7 +31,7 @@ exports.CAPTURE_GROUP_REGEX = CAPTURE_GROUP_REGEX;
31
31
  async function setupTypedRoutes({ server , metro , typesDirectory , projectRoot , routerDirectory }) {
32
32
  const absoluteRouterDirectory = _path.default.join(projectRoot, routerDirectory);
33
33
  const { filePathToRoute , staticRoutes , dynamicRoutes , addFilePath , isRouteFile } = getTypedRoutesUtils(absoluteRouterDirectory);
34
- if (metro) {
34
+ if (metro && server) {
35
35
  // Setup out watcher first
36
36
  (0, _metroWatchTypeScriptFiles).metroWatchTypeScriptFiles({
37
37
  projectRoot,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/start/server/type-generation/routes.ts"],"sourcesContent":["import fs from 'fs/promises';\nimport { debounce } from 'lodash';\nimport { Server } from 'metro';\nimport path from 'path';\n\nimport { directoryExistsAsync } from '../../../utils/dir';\nimport { unsafeTemplate } from '../../../utils/template';\nimport { ServerLike } from '../BundlerDevServer';\nimport { metroWatchTypeScriptFiles } from '../metro/metroWatchTypeScriptFiles';\n\n// /test/[...param1]/[param2]/[param3] - captures [\"param1\", \"param2\", \"param3\"]\nexport const CAPTURE_DYNAMIC_PARAMS = /\\[(?:\\.{3})?(\\w*?)[\\]$]/g;\n// /[...param1]/ - Match [...param1]\nexport const CATCH_ALL = /\\[\\.\\.\\..+?\\]/g;\n// /[param1] - Match [param1]\nexport const SLUG = /\\[.+?\\]/g;\n// /(group1,group2,group3)/test - match (group1,group2,group3)\nexport const ARRAY_GROUP_REGEX = /\\(\\s*\\w[\\w\\s]*?,.*?\\)/g;\n// /(group1,group2,group3)/test - captures [\"group1\", \"group2\", \"group3\"]\nexport const CAPTURE_GROUP_REGEX = /[\\\\(,]\\s*(\\w[\\w\\s]*?)\\s*(?=[,\\\\)])/g;\n\nexport interface SetupTypedRoutesOptions {\n server: ServerLike;\n metro?: Server | null;\n typesDirectory: string;\n projectRoot: string;\n routerDirectory: string;\n}\n\nexport async function setupTypedRoutes({\n server,\n metro,\n typesDirectory,\n projectRoot,\n routerDirectory,\n}: SetupTypedRoutesOptions) {\n const absoluteRouterDirectory = path.join(projectRoot, routerDirectory);\n\n const { filePathToRoute, staticRoutes, dynamicRoutes, addFilePath, isRouteFile } =\n getTypedRoutesUtils(absoluteRouterDirectory);\n\n if (metro) {\n // Setup out watcher first\n metroWatchTypeScriptFiles({\n projectRoot,\n server,\n metro,\n eventTypes: ['add', 'delete', 'change'],\n async callback({ filePath, type }) {\n if (!isRouteFile(filePath)) {\n return;\n }\n\n let shouldRegenerate = false;\n\n if (type === 'delete') {\n const route = filePathToRoute(filePath);\n staticRoutes.delete(route);\n dynamicRoutes.delete(route);\n shouldRegenerate = true;\n } else {\n shouldRegenerate = addFilePath(filePath);\n }\n\n if (shouldRegenerate) {\n regenerateRouterDotTS(\n typesDirectory,\n new Set([...staticRoutes.values()].flatMap((v) => Array.from(v))),\n new Set([...dynamicRoutes.values()].flatMap((v) => Array.from(v))),\n new Set(dynamicRoutes.keys())\n );\n }\n },\n });\n }\n\n if (await directoryExistsAsync(absoluteRouterDirectory)) {\n // Do we need to walk the entire tree on startup?\n // Idea: Store the list of files in the last write, then simply check Git for what files have changed\n await walk(absoluteRouterDirectory, addFilePath);\n }\n\n regenerateRouterDotTS(\n typesDirectory,\n new Set([...staticRoutes.values()].flatMap((v) => Array.from(v))),\n new Set([...dynamicRoutes.values()].flatMap((v) => Array.from(v))),\n new Set(dynamicRoutes.keys())\n );\n}\n\n/**\n * Generate a router.d.ts file that contains all of the routes in the project.\n * Should be debounced as its very common for developers to make changes to multiple files at once (eg Save All)\n */\nconst regenerateRouterDotTS = debounce(\n async (\n typesDir: string,\n staticRoutes: Set<string>,\n dynamicRoutes: Set<string>,\n dynamicRouteTemplates: Set<string>\n ) => {\n await fs.mkdir(typesDir, { recursive: true });\n await fs.writeFile(\n path.resolve(typesDir, './router.d.ts'),\n getTemplateString(staticRoutes, dynamicRoutes, dynamicRouteTemplates)\n );\n },\n 100\n);\n\n/*\n * This is exported for testing purposes\n */\nexport function getTemplateString(\n staticRoutes: Set<string>,\n dynamicRoutes: Set<string>,\n dynamicRouteTemplates: Set<string>\n) {\n return routerDotTSTemplate({\n staticRoutes: setToUnionType(staticRoutes),\n dynamicRoutes: setToUnionType(dynamicRoutes),\n dynamicRouteParams: setToUnionType(dynamicRouteTemplates),\n });\n}\n\n/**\n * Utility functions for typed routes\n *\n * These are extracted for easier testing\n */\nexport function getTypedRoutesUtils(appRoot: string, filePathSeperator = path.sep) {\n /*\n * staticRoutes are a map where the key if the route without groups and the value\n * is another set of all group versions of the route. e.g,\n * Map([\n * [\"/\", [\"/(app)/(notes)\", \"/(app)/(profile)\"]\n * ])\n */\n const staticRoutes = new Map<string, Set<string>>([['/', new Set('/')]]);\n /*\n * dynamicRoutes are the same as staticRoutes (key if the resolved route,\n * and the value is a set of possible routes). e.g:\n *\n * /[...fruits] -> /${CatchAllRoutePart<T>}\n * /color/[color] -> /color/${SingleRoutePart<T>}\n *\n * The keys of this map are also important, as they can be used as \"static\" types\n * <Link href={{ pathname: \"/[...fruits]\",params: { fruits: [\"apple\"] } }} />\n */\n const dynamicRoutes = new Map<string, Set<string>>();\n\n function normalizedFilePath(filePath: string) {\n return filePath.replaceAll(filePathSeperator, '/');\n }\n\n const normalizedAppRoot = normalizedFilePath(appRoot);\n\n const filePathToRoute = (filePath: string) => {\n return normalizedFilePath(filePath)\n .replace(normalizedAppRoot, '')\n .replace(/index\\.[jt]sx?/, '')\n .replace(/\\.[jt]sx?$/, '');\n };\n\n const isRouteFile = (filePath: string) => {\n // Layout and filenames starting with `+` are not routes\n if (filePath.match(/_layout\\.[tj]sx?$/) || filePath.match(/\\/\\+/)) {\n return false;\n }\n\n // Route files must be nested with in the appRoot\n const relative = path.relative(appRoot, filePath);\n return relative && !relative.startsWith('..') && !path.isAbsolute(relative);\n };\n\n const addFilePath = (filePath: string): boolean => {\n const route = filePathToRoute(filePath);\n\n // We have already processed this file\n if (staticRoutes.has(route) || dynamicRoutes.has(route)) {\n return false;\n }\n\n const dynamicParams = new Set(\n [...route.matchAll(CAPTURE_DYNAMIC_PARAMS)].map((match) => match[1])\n );\n const isDynamic = dynamicParams.size > 0;\n\n const addRoute = (originalRoute: string, route: string) => {\n if (isDynamic) {\n let set = dynamicRoutes.get(originalRoute);\n\n if (!set) {\n set = new Set();\n dynamicRoutes.set(originalRoute, set);\n }\n\n set.add(\n route\n .replaceAll(CATCH_ALL, '${CatchAllRoutePart<T>}')\n .replaceAll(SLUG, '${SingleRoutePart<T>}')\n );\n } else {\n let set = staticRoutes.get(originalRoute);\n\n if (!set) {\n set = new Set();\n staticRoutes.set(originalRoute, set);\n }\n\n set.add(route);\n }\n };\n\n if (!route.match(ARRAY_GROUP_REGEX)) {\n addRoute(route, route);\n }\n\n // Does this route have a group? eg /(group)\n if (route.includes('/(')) {\n const routeWithoutGroups = route.replace(/\\/\\(.+?\\)/g, '');\n addRoute(route, routeWithoutGroups);\n\n // If there are multiple groups, we need to expand them\n // eg /(test1,test2)/page => /test1/page & /test2/page\n for (const routeWithSingleGroup of extrapolateGroupRoutes(route)) {\n addRoute(route, routeWithSingleGroup);\n }\n }\n\n return true;\n };\n\n return {\n staticRoutes,\n dynamicRoutes,\n filePathToRoute,\n addFilePath,\n isRouteFile,\n };\n}\n\nexport const setToUnionType = <T>(set: Set<T>) => {\n return set.size > 0 ? [...set].map((s) => `\\`${s}\\``).join(' | ') : 'never';\n};\n\n/**\n * Recursively walk a directory and call the callback with the file path.\n */\nasync function walk(directory: string, callback: (filePath: string) => void) {\n const files = await fs.readdir(directory);\n for (const file of files) {\n const p = path.join(directory, file);\n if ((await fs.stat(p)).isDirectory()) {\n await walk(p, callback);\n } else {\n // Normalise the paths so they are easier to convert to URLs\n const normalizedPath = p.replaceAll(path.sep, '/');\n callback(normalizedPath);\n }\n }\n}\n\n/**\n * Given a route, return all possible routes that could be generated from it.\n */\nexport function extrapolateGroupRoutes(\n route: string,\n routes: Set<string> = new Set()\n): Set<string> {\n // Create a version with no groups. We will then need to cleanup double and/or trailing slashes\n routes.add(route.replaceAll(ARRAY_GROUP_REGEX, '').replaceAll(/\\/+/g, '/').replace(/\\/$/, ''));\n\n const match = route.match(ARRAY_GROUP_REGEX);\n\n if (!match) {\n routes.add(route);\n return routes;\n }\n\n const groupsMatch = match[0];\n\n for (const group of groupsMatch.matchAll(CAPTURE_GROUP_REGEX)) {\n extrapolateGroupRoutes(route.replace(groupsMatch, `(${group[1].trim()})`), routes);\n }\n\n return routes;\n}\n\n/**\n * NOTE: This code refers to a specific version of `expo-router` and is therefore unsafe to\n * mix with arbitrary versions.\n * TODO: Version this code with `expo-router` or version expo-router with `@expo/cli`.\n */\nconst routerDotTSTemplate = unsafeTemplate`/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable import/export */\n/* eslint-disable @typescript-eslint/ban-types */\ndeclare module \"expo-router\" {\n import type { LinkProps as OriginalLinkProps } from 'expo-router/build/link/Link';\n import type { Router as OriginalRouter } from 'expo-router/src/types';\n export * from 'expo-router/build';\n\n // prettier-ignore\n type StaticRoutes = ${'staticRoutes'};\n // prettier-ignore\n type DynamicRoutes<T extends string> = ${'dynamicRoutes'};\n // prettier-ignore\n type DynamicRouteTemplate = ${'dynamicRouteParams'};\n\n type RelativePathString = \\`./\\${string}\\` | \\`../\\${string}\\` | '..';\n type AbsoluteRoute = DynamicRouteTemplate | StaticRoutes;\n type ExternalPathString = \\`http\\${string}\\`;\n type ExpoRouterRoutes = DynamicRouteTemplate | StaticRoutes | RelativePathString;\n type AllRoutes = ExpoRouterRoutes | ExternalPathString;\n\n /****************\n * Route Utils *\n ****************/\n\n type SearchOrHash = \\`?\\${string}\\` | \\`#\\${string}\\`;\n type UnknownInputParams = Record<string, string | number | (string | number)[]>;\n type UnknownOutputParams = Record<string, string | string[]>;\n\n /**\n * Return only the RoutePart of a string. If the string has multiple parts return never\n *\n * string | type\n * ---------|------\n * 123 | 123\n * /123/abc | never\n * 123?abc | never\n * ./123 | never\n * /123 | never\n * 123/../ | never\n */\n type SingleRoutePart<S extends string> = S extends \\`\\${string}/\\${string}\\`\n ? never\n : S extends \\`\\${string}\\${SearchOrHash}\\`\n ? never\n : S extends ''\n ? never\n : S extends \\`(\\${string})\\`\n ? never\n : S extends \\`[\\${string}]\\`\n ? never\n : S;\n\n /**\n * Return only the CatchAll router part. If the string has search parameters or a hash return never\n */\n type CatchAllRoutePart<S extends string> = S extends \\`\\${string}\\${SearchOrHash}\\`\n ? never\n : S extends ''\n ? never\n : S extends \\`\\${string}(\\${string})\\${string}\\`\n ? never\n : S extends \\`\\${string}[\\${string}]\\${string}\\`\n ? never\n : S;\n\n // type OptionalCatchAllRoutePart<S extends string> = S extends \\`\\${string}\\${SearchOrHash}\\` ? never : S\n\n /**\n * Return the name of a route parameter\n * '[test]' -> 'test'\n * 'test' -> never\n * '[...test]' -> '...test'\n */\n type IsParameter<Part> = Part extends \\`[\\${infer ParamName}]\\` ? ParamName : never;\n\n /**\n * Return a union of all parameter names. If there are no names return never\n *\n * /[test] -> 'test'\n * /[abc]/[...def] -> 'abc'|'...def'\n */\n type ParameterNames<Path> = Path extends \\`\\${infer PartA}/\\${infer PartB}\\`\n ? IsParameter<PartA> | ParameterNames<PartB>\n : IsParameter<Path>;\n\n /**\n * Returns all segements of a route.\n *\n * /(group)/123/abc/[id]/[...rest] -> ['(group)', '123', 'abc', '[id]', '[...rest]'\n */\n type RouteSegments<Path> = Path extends \\`\\${infer PartA}/\\${infer PartB}\\`\n ? PartA extends '' | '.'\n ? [...RouteSegments<PartB>]\n : [PartA, ...RouteSegments<PartB>]\n : Path extends ''\n ? []\n : [Path];\n\n /**\n * Returns a Record of the routes parameters as strings and CatchAll parameters\n *\n * There are two versions, input and output, as you can input 'string | number' but\n * the output will always be 'string'\n *\n * /[id]/[...rest] -> { id: string, rest: string[] }\n * /no-params -> {}\n */\n type InputRouteParams<Path> = {\n [Key in ParameterNames<Path> as Key extends \\`...\\${infer Name}\\`\n ? Name\n : Key]: Key extends \\`...\\${string}\\` ? (string | number)[] : string | number;\n } & UnknownInputParams;\n\n type OutputRouteParams<Path> = {\n [Key in ParameterNames<Path> as Key extends \\`...\\${infer Name}\\`\n ? Name\n : Key]: Key extends \\`...\\${string}\\` ? string[] : string;\n } & UnknownOutputParams;\n\n /**\n * Returns the search parameters for a route.\n */\n export type SearchParams<T extends AllRoutes> = T extends DynamicRouteTemplate\n ? OutputRouteParams<T>\n : T extends StaticRoutes\n ? never\n : UnknownOutputParams;\n\n /**\n * Route is mostly used as part of Href to ensure that a valid route is provided\n *\n * Given a dynamic route, this will return never. This is helpful for conditional logic\n *\n * /test -> /test, /test2, etc\n * /test/[abc] -> never\n * /test/resolve -> /test, /test2, etc\n *\n * Note that if we provide a value for [abc] then the route is allowed\n *\n * This is named Route to prevent confusion, as users they will often see it in tooltips\n */\n export type Route<T> = T extends string\n ? T extends DynamicRouteTemplate\n ? never\n :\n | StaticRoutes\n | RelativePathString\n | ExternalPathString\n | (T extends \\`\\${infer P}\\${SearchOrHash}\\`\n ? P extends DynamicRoutes<infer _>\n ? T\n : never\n : T extends DynamicRoutes<infer _>\n ? T\n : never)\n : never;\n\n /*********\n * Href *\n *********/\n\n export type Href<T> = T extends Record<'pathname', string> ? HrefObject<T> : Route<T>;\n\n export type HrefObject<\n R extends Record<'pathname', string>,\n P = R['pathname']\n > = P extends DynamicRouteTemplate\n ? { pathname: P; params: InputRouteParams<P> }\n : P extends Route<P>\n ? { pathname: Route<P> | DynamicRouteTemplate; params?: never | InputRouteParams<never> }\n : never;\n\n /***********************\n * Expo Router Exports *\n ***********************/\n\n export type Router = Omit<OriginalRouter, 'push' | 'replace' | 'setParams'> & {\n /** Navigate to the provided href. */\n push: <T>(href: Href<T>) => void;\n /** Navigate to route without appending to the history. */\n replace: <T>(href: Href<T>) => void;\n /** Update the current route query params. */\n setParams: <T = ''>(params?: T extends '' ? Record<string, string> : InputRouteParams<T>) => void;\n };\n\n /** The imperative router. */\n export const router: Router;\n\n /************\n * <Link /> *\n ************/\n export interface LinkProps<T> extends OriginalLinkProps {\n href: Href<T>;\n }\n\n export interface LinkComponent {\n <T>(props: React.PropsWithChildren<LinkProps<T>>): JSX.Element;\n /** Helper method to resolve an Href object into a string. */\n resolveHref: <T>(href: Href<T>) => string;\n }\n\n /**\n * Component to render link to another route using a path.\n * Uses an anchor tag on the web.\n *\n * @param props.href Absolute path to route (e.g. \\`/feeds/hot\\`).\n * @param props.replace Should replace the current route without adding to the history.\n * @param props.asChild Forward props to child component. Useful for custom buttons.\n * @param props.children Child elements to render the content.\n */\n export const Link: LinkComponent;\n \n /** Redirects to the href as soon as the component is mounted. */\n export const Redirect: <T>(\n props: React.PropsWithChildren<{ href: Href<T> }>\n ) => JSX.Element;\n\n /************\n * Hooks *\n ************/\n export function useRouter(): Router;\n\n export function useLocalSearchParams<\n T extends AllRoutes | UnknownOutputParams = UnknownOutputParams\n >(): T extends AllRoutes ? SearchParams<T> : T;\n\n /** @deprecated renamed to \\`useGlobalSearchParams\\` */\n export function useSearchParams<\n T extends AllRoutes | UnknownOutputParams = UnknownOutputParams\n >(): T extends AllRoutes ? SearchParams<T> : T;\n\n export function useGlobalSearchParams<\n T extends AllRoutes | UnknownOutputParams = UnknownOutputParams\n >(): T extends AllRoutes ? SearchParams<T> : T;\n\n export function useSegments<\n T extends AbsoluteRoute | RouteSegments<AbsoluteRoute> | RelativePathString\n >(): T extends AbsoluteRoute ? RouteSegments<T> : T extends string ? string[] : T;\n}\n`;\n"],"names":["setupTypedRoutes","getTemplateString","getTypedRoutesUtils","extrapolateGroupRoutes","CAPTURE_DYNAMIC_PARAMS","CATCH_ALL","SLUG","ARRAY_GROUP_REGEX","CAPTURE_GROUP_REGEX","server","metro","typesDirectory","projectRoot","routerDirectory","absoluteRouterDirectory","path","join","filePathToRoute","staticRoutes","dynamicRoutes","addFilePath","isRouteFile","metroWatchTypeScriptFiles","eventTypes","callback","filePath","type","shouldRegenerate","route","delete","regenerateRouterDotTS","Set","values","flatMap","v","Array","from","keys","directoryExistsAsync","walk","debounce","typesDir","dynamicRouteTemplates","fs","mkdir","recursive","writeFile","resolve","routerDotTSTemplate","setToUnionType","dynamicRouteParams","appRoot","filePathSeperator","sep","Map","normalizedFilePath","replaceAll","normalizedAppRoot","replace","match","relative","startsWith","isAbsolute","has","dynamicParams","matchAll","map","isDynamic","size","addRoute","originalRoute","set","get","add","includes","routeWithoutGroups","routeWithSingleGroup","s","directory","files","readdir","file","p","stat","isDirectory","normalizedPath","routes","groupsMatch","group","trim","unsafeTemplate"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../src/start/server/type-generation/routes.ts"],"sourcesContent":["import fs from 'fs/promises';\nimport { debounce } from 'lodash';\nimport { Server } from 'metro';\nimport path from 'path';\n\nimport { directoryExistsAsync } from '../../../utils/dir';\nimport { unsafeTemplate } from '../../../utils/template';\nimport { ServerLike } from '../BundlerDevServer';\nimport { metroWatchTypeScriptFiles } from '../metro/metroWatchTypeScriptFiles';\n\n// /test/[...param1]/[param2]/[param3] - captures [\"param1\", \"param2\", \"param3\"]\nexport const CAPTURE_DYNAMIC_PARAMS = /\\[(?:\\.{3})?(\\w*?)[\\]$]/g;\n// /[...param1]/ - Match [...param1]\nexport const CATCH_ALL = /\\[\\.\\.\\..+?\\]/g;\n// /[param1] - Match [param1]\nexport const SLUG = /\\[.+?\\]/g;\n// /(group1,group2,group3)/test - match (group1,group2,group3)\nexport const ARRAY_GROUP_REGEX = /\\(\\s*\\w[\\w\\s]*?,.*?\\)/g;\n// /(group1,group2,group3)/test - captures [\"group1\", \"group2\", \"group3\"]\nexport const CAPTURE_GROUP_REGEX = /[\\\\(,]\\s*(\\w[\\w\\s]*?)\\s*(?=[,\\\\)])/g;\n\nexport interface SetupTypedRoutesOptions {\n server?: ServerLike;\n metro?: Server | null;\n typesDirectory: string;\n projectRoot: string;\n routerDirectory: string;\n}\n\nexport async function setupTypedRoutes({\n server,\n metro,\n typesDirectory,\n projectRoot,\n routerDirectory,\n}: SetupTypedRoutesOptions) {\n const absoluteRouterDirectory = path.join(projectRoot, routerDirectory);\n\n const { filePathToRoute, staticRoutes, dynamicRoutes, addFilePath, isRouteFile } =\n getTypedRoutesUtils(absoluteRouterDirectory);\n\n if (metro && server) {\n // Setup out watcher first\n metroWatchTypeScriptFiles({\n projectRoot,\n server,\n metro,\n eventTypes: ['add', 'delete', 'change'],\n async callback({ filePath, type }) {\n if (!isRouteFile(filePath)) {\n return;\n }\n\n let shouldRegenerate = false;\n\n if (type === 'delete') {\n const route = filePathToRoute(filePath);\n staticRoutes.delete(route);\n dynamicRoutes.delete(route);\n shouldRegenerate = true;\n } else {\n shouldRegenerate = addFilePath(filePath);\n }\n\n if (shouldRegenerate) {\n regenerateRouterDotTS(\n typesDirectory,\n new Set([...staticRoutes.values()].flatMap((v) => Array.from(v))),\n new Set([...dynamicRoutes.values()].flatMap((v) => Array.from(v))),\n new Set(dynamicRoutes.keys())\n );\n }\n },\n });\n }\n\n if (await directoryExistsAsync(absoluteRouterDirectory)) {\n // Do we need to walk the entire tree on startup?\n // Idea: Store the list of files in the last write, then simply check Git for what files have changed\n await walk(absoluteRouterDirectory, addFilePath);\n }\n\n regenerateRouterDotTS(\n typesDirectory,\n new Set([...staticRoutes.values()].flatMap((v) => Array.from(v))),\n new Set([...dynamicRoutes.values()].flatMap((v) => Array.from(v))),\n new Set(dynamicRoutes.keys())\n );\n}\n\n/**\n * Generate a router.d.ts file that contains all of the routes in the project.\n * Should be debounced as its very common for developers to make changes to multiple files at once (eg Save All)\n */\nconst regenerateRouterDotTS = debounce(\n async (\n typesDir: string,\n staticRoutes: Set<string>,\n dynamicRoutes: Set<string>,\n dynamicRouteTemplates: Set<string>\n ) => {\n await fs.mkdir(typesDir, { recursive: true });\n await fs.writeFile(\n path.resolve(typesDir, './router.d.ts'),\n getTemplateString(staticRoutes, dynamicRoutes, dynamicRouteTemplates)\n );\n },\n 100\n);\n\n/*\n * This is exported for testing purposes\n */\nexport function getTemplateString(\n staticRoutes: Set<string>,\n dynamicRoutes: Set<string>,\n dynamicRouteTemplates: Set<string>\n) {\n return routerDotTSTemplate({\n staticRoutes: setToUnionType(staticRoutes),\n dynamicRoutes: setToUnionType(dynamicRoutes),\n dynamicRouteParams: setToUnionType(dynamicRouteTemplates),\n });\n}\n\n/**\n * Utility functions for typed routes\n *\n * These are extracted for easier testing\n */\nexport function getTypedRoutesUtils(appRoot: string, filePathSeperator = path.sep) {\n /*\n * staticRoutes are a map where the key if the route without groups and the value\n * is another set of all group versions of the route. e.g,\n * Map([\n * [\"/\", [\"/(app)/(notes)\", \"/(app)/(profile)\"]\n * ])\n */\n const staticRoutes = new Map<string, Set<string>>([['/', new Set('/')]]);\n /*\n * dynamicRoutes are the same as staticRoutes (key if the resolved route,\n * and the value is a set of possible routes). e.g:\n *\n * /[...fruits] -> /${CatchAllRoutePart<T>}\n * /color/[color] -> /color/${SingleRoutePart<T>}\n *\n * The keys of this map are also important, as they can be used as \"static\" types\n * <Link href={{ pathname: \"/[...fruits]\",params: { fruits: [\"apple\"] } }} />\n */\n const dynamicRoutes = new Map<string, Set<string>>();\n\n function normalizedFilePath(filePath: string) {\n return filePath.replaceAll(filePathSeperator, '/');\n }\n\n const normalizedAppRoot = normalizedFilePath(appRoot);\n\n const filePathToRoute = (filePath: string) => {\n return normalizedFilePath(filePath)\n .replace(normalizedAppRoot, '')\n .replace(/index\\.[jt]sx?/, '')\n .replace(/\\.[jt]sx?$/, '');\n };\n\n const isRouteFile = (filePath: string) => {\n // Layout and filenames starting with `+` are not routes\n if (filePath.match(/_layout\\.[tj]sx?$/) || filePath.match(/\\/\\+/)) {\n return false;\n }\n\n // Route files must be nested with in the appRoot\n const relative = path.relative(appRoot, filePath);\n return relative && !relative.startsWith('..') && !path.isAbsolute(relative);\n };\n\n const addFilePath = (filePath: string): boolean => {\n const route = filePathToRoute(filePath);\n\n // We have already processed this file\n if (staticRoutes.has(route) || dynamicRoutes.has(route)) {\n return false;\n }\n\n const dynamicParams = new Set(\n [...route.matchAll(CAPTURE_DYNAMIC_PARAMS)].map((match) => match[1])\n );\n const isDynamic = dynamicParams.size > 0;\n\n const addRoute = (originalRoute: string, route: string) => {\n if (isDynamic) {\n let set = dynamicRoutes.get(originalRoute);\n\n if (!set) {\n set = new Set();\n dynamicRoutes.set(originalRoute, set);\n }\n\n set.add(\n route\n .replaceAll(CATCH_ALL, '${CatchAllRoutePart<T>}')\n .replaceAll(SLUG, '${SingleRoutePart<T>}')\n );\n } else {\n let set = staticRoutes.get(originalRoute);\n\n if (!set) {\n set = new Set();\n staticRoutes.set(originalRoute, set);\n }\n\n set.add(route);\n }\n };\n\n if (!route.match(ARRAY_GROUP_REGEX)) {\n addRoute(route, route);\n }\n\n // Does this route have a group? eg /(group)\n if (route.includes('/(')) {\n const routeWithoutGroups = route.replace(/\\/\\(.+?\\)/g, '');\n addRoute(route, routeWithoutGroups);\n\n // If there are multiple groups, we need to expand them\n // eg /(test1,test2)/page => /test1/page & /test2/page\n for (const routeWithSingleGroup of extrapolateGroupRoutes(route)) {\n addRoute(route, routeWithSingleGroup);\n }\n }\n\n return true;\n };\n\n return {\n staticRoutes,\n dynamicRoutes,\n filePathToRoute,\n addFilePath,\n isRouteFile,\n };\n}\n\nexport const setToUnionType = <T>(set: Set<T>) => {\n return set.size > 0 ? [...set].map((s) => `\\`${s}\\``).join(' | ') : 'never';\n};\n\n/**\n * Recursively walk a directory and call the callback with the file path.\n */\nasync function walk(directory: string, callback: (filePath: string) => void) {\n const files = await fs.readdir(directory);\n for (const file of files) {\n const p = path.join(directory, file);\n if ((await fs.stat(p)).isDirectory()) {\n await walk(p, callback);\n } else {\n // Normalise the paths so they are easier to convert to URLs\n const normalizedPath = p.replaceAll(path.sep, '/');\n callback(normalizedPath);\n }\n }\n}\n\n/**\n * Given a route, return all possible routes that could be generated from it.\n */\nexport function extrapolateGroupRoutes(\n route: string,\n routes: Set<string> = new Set()\n): Set<string> {\n // Create a version with no groups. We will then need to cleanup double and/or trailing slashes\n routes.add(route.replaceAll(ARRAY_GROUP_REGEX, '').replaceAll(/\\/+/g, '/').replace(/\\/$/, ''));\n\n const match = route.match(ARRAY_GROUP_REGEX);\n\n if (!match) {\n routes.add(route);\n return routes;\n }\n\n const groupsMatch = match[0];\n\n for (const group of groupsMatch.matchAll(CAPTURE_GROUP_REGEX)) {\n extrapolateGroupRoutes(route.replace(groupsMatch, `(${group[1].trim()})`), routes);\n }\n\n return routes;\n}\n\n/**\n * NOTE: This code refers to a specific version of `expo-router` and is therefore unsafe to\n * mix with arbitrary versions.\n * TODO: Version this code with `expo-router` or version expo-router with `@expo/cli`.\n */\nconst routerDotTSTemplate = unsafeTemplate`/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable import/export */\n/* eslint-disable @typescript-eslint/ban-types */\ndeclare module \"expo-router\" {\n import type { LinkProps as OriginalLinkProps } from 'expo-router/build/link/Link';\n import type { Router as OriginalRouter } from 'expo-router/src/types';\n export * from 'expo-router/build';\n\n // prettier-ignore\n type StaticRoutes = ${'staticRoutes'};\n // prettier-ignore\n type DynamicRoutes<T extends string> = ${'dynamicRoutes'};\n // prettier-ignore\n type DynamicRouteTemplate = ${'dynamicRouteParams'};\n\n type RelativePathString = \\`./\\${string}\\` | \\`../\\${string}\\` | '..';\n type AbsoluteRoute = DynamicRouteTemplate | StaticRoutes;\n type ExternalPathString = \\`http\\${string}\\`;\n type ExpoRouterRoutes = DynamicRouteTemplate | StaticRoutes | RelativePathString;\n type AllRoutes = ExpoRouterRoutes | ExternalPathString;\n\n /****************\n * Route Utils *\n ****************/\n\n type SearchOrHash = \\`?\\${string}\\` | \\`#\\${string}\\`;\n type UnknownInputParams = Record<string, string | number | (string | number)[]>;\n type UnknownOutputParams = Record<string, string | string[]>;\n\n /**\n * Return only the RoutePart of a string. If the string has multiple parts return never\n *\n * string | type\n * ---------|------\n * 123 | 123\n * /123/abc | never\n * 123?abc | never\n * ./123 | never\n * /123 | never\n * 123/../ | never\n */\n type SingleRoutePart<S extends string> = S extends \\`\\${string}/\\${string}\\`\n ? never\n : S extends \\`\\${string}\\${SearchOrHash}\\`\n ? never\n : S extends ''\n ? never\n : S extends \\`(\\${string})\\`\n ? never\n : S extends \\`[\\${string}]\\`\n ? never\n : S;\n\n /**\n * Return only the CatchAll router part. If the string has search parameters or a hash return never\n */\n type CatchAllRoutePart<S extends string> = S extends \\`\\${string}\\${SearchOrHash}\\`\n ? never\n : S extends ''\n ? never\n : S extends \\`\\${string}(\\${string})\\${string}\\`\n ? never\n : S extends \\`\\${string}[\\${string}]\\${string}\\`\n ? never\n : S;\n\n // type OptionalCatchAllRoutePart<S extends string> = S extends \\`\\${string}\\${SearchOrHash}\\` ? never : S\n\n /**\n * Return the name of a route parameter\n * '[test]' -> 'test'\n * 'test' -> never\n * '[...test]' -> '...test'\n */\n type IsParameter<Part> = Part extends \\`[\\${infer ParamName}]\\` ? ParamName : never;\n\n /**\n * Return a union of all parameter names. If there are no names return never\n *\n * /[test] -> 'test'\n * /[abc]/[...def] -> 'abc'|'...def'\n */\n type ParameterNames<Path> = Path extends \\`\\${infer PartA}/\\${infer PartB}\\`\n ? IsParameter<PartA> | ParameterNames<PartB>\n : IsParameter<Path>;\n\n /**\n * Returns all segements of a route.\n *\n * /(group)/123/abc/[id]/[...rest] -> ['(group)', '123', 'abc', '[id]', '[...rest]'\n */\n type RouteSegments<Path> = Path extends \\`\\${infer PartA}/\\${infer PartB}\\`\n ? PartA extends '' | '.'\n ? [...RouteSegments<PartB>]\n : [PartA, ...RouteSegments<PartB>]\n : Path extends ''\n ? []\n : [Path];\n\n /**\n * Returns a Record of the routes parameters as strings and CatchAll parameters\n *\n * There are two versions, input and output, as you can input 'string | number' but\n * the output will always be 'string'\n *\n * /[id]/[...rest] -> { id: string, rest: string[] }\n * /no-params -> {}\n */\n type InputRouteParams<Path> = {\n [Key in ParameterNames<Path> as Key extends \\`...\\${infer Name}\\`\n ? Name\n : Key]: Key extends \\`...\\${string}\\` ? (string | number)[] : string | number;\n } & UnknownInputParams;\n\n type OutputRouteParams<Path> = {\n [Key in ParameterNames<Path> as Key extends \\`...\\${infer Name}\\`\n ? Name\n : Key]: Key extends \\`...\\${string}\\` ? string[] : string;\n } & UnknownOutputParams;\n\n /**\n * Returns the search parameters for a route.\n */\n export type SearchParams<T extends AllRoutes> = T extends DynamicRouteTemplate\n ? OutputRouteParams<T>\n : T extends StaticRoutes\n ? never\n : UnknownOutputParams;\n\n /**\n * Route is mostly used as part of Href to ensure that a valid route is provided\n *\n * Given a dynamic route, this will return never. This is helpful for conditional logic\n *\n * /test -> /test, /test2, etc\n * /test/[abc] -> never\n * /test/resolve -> /test, /test2, etc\n *\n * Note that if we provide a value for [abc] then the route is allowed\n *\n * This is named Route to prevent confusion, as users they will often see it in tooltips\n */\n export type Route<T> = T extends string\n ? T extends DynamicRouteTemplate\n ? never\n :\n | StaticRoutes\n | RelativePathString\n | ExternalPathString\n | (T extends \\`\\${infer P}\\${SearchOrHash}\\`\n ? P extends DynamicRoutes<infer _>\n ? T\n : never\n : T extends DynamicRoutes<infer _>\n ? T\n : never)\n : never;\n\n /*********\n * Href *\n *********/\n\n export type Href<T> = T extends Record<'pathname', string> ? HrefObject<T> : Route<T>;\n\n export type HrefObject<\n R extends Record<'pathname', string>,\n P = R['pathname']\n > = P extends DynamicRouteTemplate\n ? { pathname: P; params: InputRouteParams<P> }\n : P extends Route<P>\n ? { pathname: Route<P> | DynamicRouteTemplate; params?: never | InputRouteParams<never> }\n : never;\n\n /***********************\n * Expo Router Exports *\n ***********************/\n\n export type Router = Omit<OriginalRouter, 'push' | 'replace' | 'setParams'> & {\n /** Navigate to the provided href. */\n push: <T>(href: Href<T>) => void;\n /** Navigate to route without appending to the history. */\n replace: <T>(href: Href<T>) => void;\n /** Update the current route query params. */\n setParams: <T = ''>(params?: T extends '' ? Record<string, string> : InputRouteParams<T>) => void;\n };\n\n /** The imperative router. */\n export const router: Router;\n\n /************\n * <Link /> *\n ************/\n export interface LinkProps<T> extends OriginalLinkProps {\n href: Href<T>;\n }\n\n export interface LinkComponent {\n <T>(props: React.PropsWithChildren<LinkProps<T>>): JSX.Element;\n /** Helper method to resolve an Href object into a string. */\n resolveHref: <T>(href: Href<T>) => string;\n }\n\n /**\n * Component to render link to another route using a path.\n * Uses an anchor tag on the web.\n *\n * @param props.href Absolute path to route (e.g. \\`/feeds/hot\\`).\n * @param props.replace Should replace the current route without adding to the history.\n * @param props.asChild Forward props to child component. Useful for custom buttons.\n * @param props.children Child elements to render the content.\n */\n export const Link: LinkComponent;\n \n /** Redirects to the href as soon as the component is mounted. */\n export const Redirect: <T>(\n props: React.PropsWithChildren<{ href: Href<T> }>\n ) => JSX.Element;\n\n /************\n * Hooks *\n ************/\n export function useRouter(): Router;\n\n export function useLocalSearchParams<\n T extends AllRoutes | UnknownOutputParams = UnknownOutputParams\n >(): T extends AllRoutes ? SearchParams<T> : T;\n\n /** @deprecated renamed to \\`useGlobalSearchParams\\` */\n export function useSearchParams<\n T extends AllRoutes | UnknownOutputParams = UnknownOutputParams\n >(): T extends AllRoutes ? SearchParams<T> : T;\n\n export function useGlobalSearchParams<\n T extends AllRoutes | UnknownOutputParams = UnknownOutputParams\n >(): T extends AllRoutes ? SearchParams<T> : T;\n\n export function useSegments<\n T extends AbsoluteRoute | RouteSegments<AbsoluteRoute> | RelativePathString\n >(): T extends AbsoluteRoute ? RouteSegments<T> : T extends string ? string[] : T;\n}\n`;\n"],"names":["setupTypedRoutes","getTemplateString","getTypedRoutesUtils","extrapolateGroupRoutes","CAPTURE_DYNAMIC_PARAMS","CATCH_ALL","SLUG","ARRAY_GROUP_REGEX","CAPTURE_GROUP_REGEX","server","metro","typesDirectory","projectRoot","routerDirectory","absoluteRouterDirectory","path","join","filePathToRoute","staticRoutes","dynamicRoutes","addFilePath","isRouteFile","metroWatchTypeScriptFiles","eventTypes","callback","filePath","type","shouldRegenerate","route","delete","regenerateRouterDotTS","Set","values","flatMap","v","Array","from","keys","directoryExistsAsync","walk","debounce","typesDir","dynamicRouteTemplates","fs","mkdir","recursive","writeFile","resolve","routerDotTSTemplate","setToUnionType","dynamicRouteParams","appRoot","filePathSeperator","sep","Map","normalizedFilePath","replaceAll","normalizedAppRoot","replace","match","relative","startsWith","isAbsolute","has","dynamicParams","matchAll","map","isDynamic","size","addRoute","originalRoute","set","get","add","includes","routeWithoutGroups","routeWithSingleGroup","s","directory","files","readdir","file","p","stat","isDirectory","normalizedPath","routes","groupsMatch","group","trim","unsafeTemplate"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/start/server/type-generation/startTypescriptTypeGeneration.ts"],"sourcesContent":["import { getConfig } from '@expo/config';\nimport fs from 'fs/promises';\nimport { Server } from 'metro';\nimport path from 'path';\n\nimport { upsertGitIgnoreContents, removeFromGitIgnore } from '../../../utils/mergeGitIgnorePaths';\nimport { ensureDotExpoProjectDirectoryInitialized } from '../../project/dotExpo';\nimport { ServerLike } from '../BundlerDevServer';\nimport { getRouterDirectory } from '../metro/router';\nimport { removeExpoEnvDTS, writeExpoEnvDTS } from './expo-env';\nimport { setupTypedRoutes } from './routes';\nimport { forceRemovalTSConfig, forceUpdateTSConfig } from './tsconfig';\n\nexport interface TypeScriptTypeGenerationOptions {\n server: ServerLike;\n metro: Server | null;\n projectRoot: string;\n}\n\nconst debug = require('debug')('expo:typed-routes') as typeof console.log;\n\n/** Setup all requisite features for statically typed routes in Expo Router v2 / SDK +49. */\nexport async function startTypescriptTypeGenerationAsync({\n metro,\n projectRoot,\n server,\n}: TypeScriptTypeGenerationOptions) {\n const { exp } = getConfig(projectRoot);\n\n // If typed routes are disabled, remove any files that were added.\n if (!exp.experiments?.typedRoutes) {\n debug('Removing typed routes side-effects (experiments.typedRoutes: false)');\n const gitIgnorePath = path.join(projectRoot, '.gitignore');\n await Promise.all([\n forceRemovalTSConfig(projectRoot),\n removeExpoEnvDTS(projectRoot),\n removeFromGitIgnore(gitIgnorePath, 'expo-env.d.ts'),\n ]);\n } else {\n const dotExpoDir = ensureDotExpoProjectDirectoryInitialized(projectRoot);\n const typesDirectory = path.resolve(dotExpoDir, './types');\n debug(\n 'Ensuring typed routes side-effects are setup (experiments.typedRoutes: true, typesDirectory: %s)',\n typesDirectory\n );\n\n // Ensure the types directory exists.\n await fs.mkdir(typesDirectory, { recursive: true });\n\n await Promise.all([\n upsertGitIgnoreContents(path.join(projectRoot, '.gitignore'), 'expo-env.d.ts'),\n writeExpoEnvDTS(projectRoot),\n forceUpdateTSConfig(projectRoot),\n setupTypedRoutes({\n metro,\n server,\n typesDirectory,\n projectRoot,\n routerDirectory: exp.extra?.router?.unstable_src ?? getRouterDirectory(projectRoot),\n }),\n ]);\n }\n}\n"],"names":["startTypescriptTypeGenerationAsync","debug","require","metro","projectRoot","server","exp","getConfig","experiments","typedRoutes","gitIgnorePath","path","join","Promise","all","forceRemovalTSConfig","removeExpoEnvDTS","removeFromGitIgnore","dotExpoDir","ensureDotExpoProjectDirectoryInitialized","typesDirectory","resolve","fs","mkdir","recursive","upsertGitIgnoreContents","writeExpoEnvDTS","forceUpdateTSConfig","setupTypedRoutes","routerDirectory","extra","router","unstable_src","getRouterDirectory"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../src/start/server/type-generation/startTypescriptTypeGeneration.ts"],"sourcesContent":["import { getConfig } from '@expo/config';\nimport fs from 'fs/promises';\nimport { Server } from 'metro';\nimport path from 'path';\n\nimport { upsertGitIgnoreContents, removeFromGitIgnore } from '../../../utils/mergeGitIgnorePaths';\nimport { ensureDotExpoProjectDirectoryInitialized } from '../../project/dotExpo';\nimport { ServerLike } from '../BundlerDevServer';\nimport { getRouterDirectory } from '../metro/router';\nimport { removeExpoEnvDTS, writeExpoEnvDTS } from './expo-env';\nimport { setupTypedRoutes } from './routes';\nimport { forceRemovalTSConfig, forceUpdateTSConfig } from './tsconfig';\n\nexport interface TypeScriptTypeGenerationOptions {\n server?: ServerLike;\n metro?: Server | null;\n projectRoot: string;\n}\n\nconst debug = require('debug')('expo:typed-routes') as typeof console.log;\n\n/** Setup all requisite features for statically typed routes in Expo Router v2 / SDK +49. */\nexport async function startTypescriptTypeGenerationAsync({\n metro,\n projectRoot,\n server,\n}: TypeScriptTypeGenerationOptions) {\n const { exp } = getConfig(projectRoot);\n\n // If typed routes are disabled, remove any files that were added.\n if (!exp.experiments?.typedRoutes) {\n debug('Removing typed routes side-effects (experiments.typedRoutes: false)');\n const gitIgnorePath = path.join(projectRoot, '.gitignore');\n await Promise.all([\n forceRemovalTSConfig(projectRoot),\n removeExpoEnvDTS(projectRoot),\n removeFromGitIgnore(gitIgnorePath, 'expo-env.d.ts'),\n ]);\n } else {\n const dotExpoDir = ensureDotExpoProjectDirectoryInitialized(projectRoot);\n const typesDirectory = path.resolve(dotExpoDir, './types');\n debug(\n 'Ensuring typed routes side-effects are setup (experiments.typedRoutes: true, typesDirectory: %s)',\n typesDirectory\n );\n\n // Ensure the types directory exists.\n await fs.mkdir(typesDirectory, { recursive: true });\n\n await Promise.all([\n upsertGitIgnoreContents(path.join(projectRoot, '.gitignore'), 'expo-env.d.ts'),\n writeExpoEnvDTS(projectRoot),\n forceUpdateTSConfig(projectRoot),\n setupTypedRoutes({\n metro,\n server,\n typesDirectory,\n projectRoot,\n routerDirectory: exp.extra?.router?.unstable_src ?? getRouterDirectory(projectRoot),\n }),\n ]);\n }\n}\n"],"names":["startTypescriptTypeGenerationAsync","debug","require","metro","projectRoot","server","exp","getConfig","experiments","typedRoutes","gitIgnorePath","path","join","Promise","all","forceRemovalTSConfig","removeExpoEnvDTS","removeFromGitIgnore","dotExpoDir","ensureDotExpoProjectDirectoryInitialized","typesDirectory","resolve","fs","mkdir","recursive","upsertGitIgnoreContents","writeExpoEnvDTS","forceUpdateTSConfig","setupTypedRoutes","routerDirectory","extra","router","unstable_src","getRouterDirectory"],"mappings":"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"}
@@ -94,7 +94,7 @@ async function logEventAsync(event, properties = {}) {
94
94
  }
95
95
  const { userId , deviceId } = identifyData;
96
96
  const commonEventProperties = {
97
- source_version: "0.10.13",
97
+ source_version: "0.10.15",
98
98
  source: "expo"
99
99
  };
100
100
  const identity = {
@@ -135,7 +135,7 @@ function getContext() {
135
135
  },
136
136
  app: {
137
137
  name: "expo",
138
- version: "0.10.13"
138
+ version: "0.10.15"
139
139
  },
140
140
  ci: ciInfo.isCI ? {
141
141
  name: ciInfo.name,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expo/cli",
3
- "version": "0.10.13",
3
+ "version": "0.10.15",
4
4
  "description": "The Expo CLI",
5
5
  "main": "build/bin/cli",
6
6
  "bin": {
@@ -149,5 +149,5 @@
149
149
  "jest-runner-tsd": "^6.0.0",
150
150
  "tsd": "^0.28.1"
151
151
  },
152
- "gitHead": "ad4c3294898ce319585bad3fe6de839443863a55"
152
+ "gitHead": "c29d8416a6283a4956529e16b74b6cd0cda0e6de"
153
153
  }