@expo/cli 0.22.19 → 0.22.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/build/bin/cli CHANGED
@@ -121,7 +121,7 @@ const args = (0, _arg().default)({
121
121
  });
122
122
  if (args["--version"]) {
123
123
  // Version is added in the build script.
124
- console.log("0.22.19");
124
+ console.log("0.22.20");
125
125
  process.exit(0);
126
126
  }
127
127
  if (args["--non-interactive"]) {
@@ -55,6 +55,13 @@ async function persistMetroAssetsAsync(projectRoot, assets, { platform , outputD
55
55
  _log.Log.warn("Assets destination folder is not set, skipping...");
56
56
  return;
57
57
  }
58
+ // For iOS, we need to ensure that the outputDirectory exists.
59
+ // The bundle code and images build phase script always tries to access this folder
60
+ if (platform === "ios" && !_fs().default.existsSync(outputDirectory)) {
61
+ _fs().default.mkdirSync(outputDirectory, {
62
+ recursive: true
63
+ });
64
+ }
58
65
  let assetsToCopy = [];
59
66
  // TODO: Use `files` as below to defer writing files
60
67
  if (platform === "ios" && iosAssetCatalogDirectory != null) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/export/persistMetroAssets.ts"],"sourcesContent":["/**\n * Copyright © 2023 650 Industries.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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 *\n * Based on the community asset persisting for Metro but with base path and web support:\n * https://github.com/facebook/react-native/blob/d6e0bc714ad4d215ede4949d3c4f44af6dea5dd3/packages/community-cli-plugin/src/commands/bundle/saveAssets.js#L1\n */\nimport fs from 'fs';\nimport type { AssetData } from 'metro';\nimport path from 'path';\n\nimport { getAssetLocalPath } from './metroAssetLocalPath';\nimport { ExportAssetMap } from './saveAssets';\nimport { Log } from '../log';\n\nfunction cleanAssetCatalog(catalogDir: string): void {\n const files = fs.readdirSync(catalogDir).filter((file) => file.endsWith('.imageset'));\n for (const file of files) {\n fs.rmSync(path.join(catalogDir, file));\n }\n}\n\nexport async function persistMetroAssetsAsync(\n projectRoot: string,\n assets: readonly AssetData[],\n {\n platform,\n outputDirectory,\n baseUrl,\n iosAssetCatalogDirectory,\n files,\n }: {\n platform: string;\n outputDirectory: string;\n baseUrl?: string;\n iosAssetCatalogDirectory?: string;\n files?: ExportAssetMap;\n }\n) {\n if (outputDirectory == null) {\n Log.warn('Assets destination folder is not set, skipping...');\n return;\n }\n\n let assetsToCopy: AssetData[] = [];\n\n // TODO: Use `files` as below to defer writing files\n if (platform === 'ios' && iosAssetCatalogDirectory != null) {\n // Use iOS Asset Catalog for images. This will allow Apple app thinning to\n // remove unused scales from the optimized bundle.\n const catalogDir = path.join(iosAssetCatalogDirectory, 'RNAssets.xcassets');\n if (!fs.existsSync(catalogDir)) {\n Log.error(\n `Could not find asset catalog 'RNAssets.xcassets' in ${iosAssetCatalogDirectory}. Make sure to create it if it does not exist.`\n );\n return;\n }\n\n Log.log('Adding images to asset catalog', catalogDir);\n cleanAssetCatalog(catalogDir);\n for (const asset of assets) {\n if (isCatalogAsset(asset)) {\n const imageSet = getImageSet(\n catalogDir,\n asset,\n filterPlatformAssetScales(platform, asset.scales)\n );\n writeImageSet(imageSet);\n } else {\n assetsToCopy.push(asset);\n }\n }\n Log.log('Done adding images to asset catalog');\n } else {\n assetsToCopy = [...assets];\n }\n\n const batches: Record<string, string> = {};\n\n for (const asset of assetsToCopy) {\n const validScales = new Set(filterPlatformAssetScales(platform, asset.scales));\n for (let idx = 0; idx < asset.scales.length; idx++) {\n const scale = asset.scales[idx];\n if (validScales.has(scale)) {\n const src = asset.files[idx];\n const dest = getAssetLocalPath(asset, { platform, scale, baseUrl });\n if (files) {\n const data = await fs.promises.readFile(src);\n files.set(dest, {\n contents: data,\n assetId: getAssetIdForLogGrouping(projectRoot, asset),\n targetDomain: platform === 'web' ? 'client' : undefined,\n });\n } else {\n batches[src] = path.join(outputDirectory, dest);\n }\n }\n }\n }\n\n if (!files) {\n await copyInBatchesAsync(batches);\n }\n}\n\nexport function getAssetIdForLogGrouping(\n projectRoot: string,\n asset: Partial<Pick<AssetData, 'fileSystemLocation' | 'name' | 'type'>>\n): string | undefined {\n return 'fileSystemLocation' in asset && asset.fileSystemLocation != null && asset.name != null\n ? path.relative(projectRoot, path.join(asset.fileSystemLocation, asset.name)) +\n (asset.type ? '.' + asset.type : '')\n : undefined;\n}\n\nfunction writeImageSet(imageSet: ImageSet): void {\n fs.mkdirSync(imageSet.baseUrl, { recursive: true });\n\n for (const file of imageSet.files) {\n const dest = path.join(imageSet.baseUrl, file.name);\n fs.copyFileSync(file.src, dest);\n }\n\n fs.writeFileSync(\n path.join(imageSet.baseUrl, 'Contents.json'),\n JSON.stringify({\n images: imageSet.files.map((file) => ({\n filename: file.name,\n idiom: 'universal',\n scale: `${file.scale}x`,\n })),\n info: {\n author: 'expo',\n version: 1,\n },\n })\n );\n}\n\nfunction isCatalogAsset(asset: Pick<AssetData, 'type'>): boolean {\n return asset.type === 'png' || asset.type === 'jpg' || asset.type === 'jpeg';\n}\n\ntype ImageSet = {\n baseUrl: string;\n files: { name: string; src: string; scale: number }[];\n};\n\nfunction getImageSet(\n catalogDir: string,\n asset: Pick<AssetData, 'httpServerLocation' | 'name' | 'type' | 'files'>,\n scales: number[]\n): ImageSet {\n const fileName = getResourceIdentifier(asset);\n return {\n baseUrl: path.join(catalogDir, `${fileName}.imageset`),\n files: scales.map((scale, idx) => {\n const suffix = scale === 1 ? '' : `@${scale}x`;\n return {\n name: `${fileName + suffix}.${asset.type}`,\n scale,\n src: asset.files[idx],\n };\n }),\n };\n}\n\nexport function copyInBatchesAsync(filesToCopy: Record<string, string>) {\n const queue = Object.keys(filesToCopy);\n if (queue.length === 0) {\n return;\n }\n\n Log.log(`Copying ${queue.length} asset files`);\n return new Promise<void>((resolve, reject) => {\n const copyNext = (error?: NodeJS.ErrnoException) => {\n if (error) {\n return reject(error);\n }\n if (queue.length) {\n // queue.length === 0 is checked in previous branch, so this is string\n const src = queue.shift() as string;\n const dest = filesToCopy[src];\n copy(src, dest, copyNext);\n } else {\n resolve();\n }\n };\n copyNext();\n });\n}\n\nfunction copy(src: string, dest: string, callback: (error: NodeJS.ErrnoException) => void): void {\n fs.mkdir(path.dirname(dest), { recursive: true }, (err?) => {\n if (err) {\n callback(err);\n return;\n }\n fs.createReadStream(src).pipe(fs.createWriteStream(dest)).on('finish', callback);\n });\n}\n\nconst ALLOWED_SCALES: { [key: string]: number[] } = {\n ios: [1, 2, 3],\n};\n\nexport function filterPlatformAssetScales(platform: string, scales: number[]): number[] {\n const whitelist: number[] = ALLOWED_SCALES[platform];\n if (!whitelist) {\n return scales;\n }\n const result = scales.filter((scale) => whitelist.includes(scale));\n if (!result.length && scales.length) {\n // No matching scale found, but there are some available. Ideally we don't\n // want to be in this situation and should throw, but for now as a fallback\n // let's just use the closest larger image\n const maxScale = whitelist[whitelist.length - 1];\n for (const scale of scales) {\n if (scale > maxScale) {\n result.push(scale);\n break;\n }\n }\n\n // There is no larger scales available, use the largest we have\n if (!result.length) {\n result.push(scales[scales.length - 1]);\n }\n }\n return result;\n}\n\nfunction getResourceIdentifier(asset: Pick<AssetData, 'httpServerLocation' | 'name'>): string {\n const folderPath = getBaseUrl(asset);\n return `${folderPath}/${asset.name}`\n .toLowerCase()\n .replace(/\\//g, '_') // Encode folder structure in file name\n .replace(/([^a-z0-9_])/g, '') // Remove illegal chars\n .replace(/^assets_/, ''); // Remove \"assets_\" prefix\n}\n\nfunction getBaseUrl(asset: Pick<AssetData, 'httpServerLocation'>): string {\n let baseUrl = asset.httpServerLocation;\n if (baseUrl[0] === '/') {\n baseUrl = baseUrl.substring(1);\n }\n return baseUrl;\n}\n"],"names":["persistMetroAssetsAsync","getAssetIdForLogGrouping","copyInBatchesAsync","filterPlatformAssetScales","cleanAssetCatalog","catalogDir","files","fs","readdirSync","filter","file","endsWith","rmSync","path","join","projectRoot","assets","platform","outputDirectory","baseUrl","iosAssetCatalogDirectory","Log","warn","assetsToCopy","existsSync","error","log","asset","isCatalogAsset","imageSet","getImageSet","scales","writeImageSet","push","batches","validScales","Set","idx","length","scale","has","src","dest","getAssetLocalPath","data","promises","readFile","set","contents","assetId","targetDomain","undefined","fileSystemLocation","name","relative","type","mkdirSync","recursive","copyFileSync","writeFileSync","JSON","stringify","images","map","filename","idiom","info","author","version","fileName","getResourceIdentifier","suffix","filesToCopy","queue","Object","keys","Promise","resolve","reject","copyNext","shift","copy","callback","mkdir","dirname","err","createReadStream","pipe","createWriteStream","on","ALLOWED_SCALES","ios","whitelist","result","includes","maxScale","folderPath","getBaseUrl","toLowerCase","replace","httpServerLocation","substring"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/export/persistMetroAssets.ts"],"sourcesContent":["/**\n * Copyright © 2023 650 Industries.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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 *\n * Based on the community asset persisting for Metro but with base path and web support:\n * https://github.com/facebook/react-native/blob/d6e0bc714ad4d215ede4949d3c4f44af6dea5dd3/packages/community-cli-plugin/src/commands/bundle/saveAssets.js#L1\n */\nimport fs from 'fs';\nimport type { AssetData } from 'metro';\nimport path from 'path';\n\nimport { getAssetLocalPath } from './metroAssetLocalPath';\nimport { ExportAssetMap } from './saveAssets';\nimport { Log } from '../log';\n\nfunction cleanAssetCatalog(catalogDir: string): void {\n const files = fs.readdirSync(catalogDir).filter((file) => file.endsWith('.imageset'));\n for (const file of files) {\n fs.rmSync(path.join(catalogDir, file));\n }\n}\n\nexport async function persistMetroAssetsAsync(\n projectRoot: string,\n assets: readonly AssetData[],\n {\n platform,\n outputDirectory,\n baseUrl,\n iosAssetCatalogDirectory,\n files,\n }: {\n platform: string;\n outputDirectory: string;\n baseUrl?: string;\n iosAssetCatalogDirectory?: string;\n files?: ExportAssetMap;\n }\n) {\n if (outputDirectory == null) {\n Log.warn('Assets destination folder is not set, skipping...');\n return;\n }\n\n // For iOS, we need to ensure that the outputDirectory exists.\n // The bundle code and images build phase script always tries to access this folder\n if (platform === 'ios' && !fs.existsSync(outputDirectory)) {\n fs.mkdirSync(outputDirectory, { recursive: true });\n }\n\n let assetsToCopy: AssetData[] = [];\n\n // TODO: Use `files` as below to defer writing files\n if (platform === 'ios' && iosAssetCatalogDirectory != null) {\n // Use iOS Asset Catalog for images. This will allow Apple app thinning to\n // remove unused scales from the optimized bundle.\n const catalogDir = path.join(iosAssetCatalogDirectory, 'RNAssets.xcassets');\n if (!fs.existsSync(catalogDir)) {\n Log.error(\n `Could not find asset catalog 'RNAssets.xcassets' in ${iosAssetCatalogDirectory}. Make sure to create it if it does not exist.`\n );\n return;\n }\n\n Log.log('Adding images to asset catalog', catalogDir);\n cleanAssetCatalog(catalogDir);\n for (const asset of assets) {\n if (isCatalogAsset(asset)) {\n const imageSet = getImageSet(\n catalogDir,\n asset,\n filterPlatformAssetScales(platform, asset.scales)\n );\n writeImageSet(imageSet);\n } else {\n assetsToCopy.push(asset);\n }\n }\n Log.log('Done adding images to asset catalog');\n } else {\n assetsToCopy = [...assets];\n }\n\n const batches: Record<string, string> = {};\n\n for (const asset of assetsToCopy) {\n const validScales = new Set(filterPlatformAssetScales(platform, asset.scales));\n for (let idx = 0; idx < asset.scales.length; idx++) {\n const scale = asset.scales[idx];\n if (validScales.has(scale)) {\n const src = asset.files[idx];\n const dest = getAssetLocalPath(asset, { platform, scale, baseUrl });\n if (files) {\n const data = await fs.promises.readFile(src);\n files.set(dest, {\n contents: data,\n assetId: getAssetIdForLogGrouping(projectRoot, asset),\n targetDomain: platform === 'web' ? 'client' : undefined,\n });\n } else {\n batches[src] = path.join(outputDirectory, dest);\n }\n }\n }\n }\n\n if (!files) {\n await copyInBatchesAsync(batches);\n }\n}\n\nexport function getAssetIdForLogGrouping(\n projectRoot: string,\n asset: Partial<Pick<AssetData, 'fileSystemLocation' | 'name' | 'type'>>\n): string | undefined {\n return 'fileSystemLocation' in asset && asset.fileSystemLocation != null && asset.name != null\n ? path.relative(projectRoot, path.join(asset.fileSystemLocation, asset.name)) +\n (asset.type ? '.' + asset.type : '')\n : undefined;\n}\n\nfunction writeImageSet(imageSet: ImageSet): void {\n fs.mkdirSync(imageSet.baseUrl, { recursive: true });\n\n for (const file of imageSet.files) {\n const dest = path.join(imageSet.baseUrl, file.name);\n fs.copyFileSync(file.src, dest);\n }\n\n fs.writeFileSync(\n path.join(imageSet.baseUrl, 'Contents.json'),\n JSON.stringify({\n images: imageSet.files.map((file) => ({\n filename: file.name,\n idiom: 'universal',\n scale: `${file.scale}x`,\n })),\n info: {\n author: 'expo',\n version: 1,\n },\n })\n );\n}\n\nfunction isCatalogAsset(asset: Pick<AssetData, 'type'>): boolean {\n return asset.type === 'png' || asset.type === 'jpg' || asset.type === 'jpeg';\n}\n\ntype ImageSet = {\n baseUrl: string;\n files: { name: string; src: string; scale: number }[];\n};\n\nfunction getImageSet(\n catalogDir: string,\n asset: Pick<AssetData, 'httpServerLocation' | 'name' | 'type' | 'files'>,\n scales: number[]\n): ImageSet {\n const fileName = getResourceIdentifier(asset);\n return {\n baseUrl: path.join(catalogDir, `${fileName}.imageset`),\n files: scales.map((scale, idx) => {\n const suffix = scale === 1 ? '' : `@${scale}x`;\n return {\n name: `${fileName + suffix}.${asset.type}`,\n scale,\n src: asset.files[idx],\n };\n }),\n };\n}\n\nexport function copyInBatchesAsync(filesToCopy: Record<string, string>) {\n const queue = Object.keys(filesToCopy);\n if (queue.length === 0) {\n return;\n }\n\n Log.log(`Copying ${queue.length} asset files`);\n return new Promise<void>((resolve, reject) => {\n const copyNext = (error?: NodeJS.ErrnoException) => {\n if (error) {\n return reject(error);\n }\n if (queue.length) {\n // queue.length === 0 is checked in previous branch, so this is string\n const src = queue.shift() as string;\n const dest = filesToCopy[src];\n copy(src, dest, copyNext);\n } else {\n resolve();\n }\n };\n copyNext();\n });\n}\n\nfunction copy(src: string, dest: string, callback: (error: NodeJS.ErrnoException) => void): void {\n fs.mkdir(path.dirname(dest), { recursive: true }, (err?) => {\n if (err) {\n callback(err);\n return;\n }\n fs.createReadStream(src).pipe(fs.createWriteStream(dest)).on('finish', callback);\n });\n}\n\nconst ALLOWED_SCALES: { [key: string]: number[] } = {\n ios: [1, 2, 3],\n};\n\nexport function filterPlatformAssetScales(platform: string, scales: number[]): number[] {\n const whitelist: number[] = ALLOWED_SCALES[platform];\n if (!whitelist) {\n return scales;\n }\n const result = scales.filter((scale) => whitelist.includes(scale));\n if (!result.length && scales.length) {\n // No matching scale found, but there are some available. Ideally we don't\n // want to be in this situation and should throw, but for now as a fallback\n // let's just use the closest larger image\n const maxScale = whitelist[whitelist.length - 1];\n for (const scale of scales) {\n if (scale > maxScale) {\n result.push(scale);\n break;\n }\n }\n\n // There is no larger scales available, use the largest we have\n if (!result.length) {\n result.push(scales[scales.length - 1]);\n }\n }\n return result;\n}\n\nfunction getResourceIdentifier(asset: Pick<AssetData, 'httpServerLocation' | 'name'>): string {\n const folderPath = getBaseUrl(asset);\n return `${folderPath}/${asset.name}`\n .toLowerCase()\n .replace(/\\//g, '_') // Encode folder structure in file name\n .replace(/([^a-z0-9_])/g, '') // Remove illegal chars\n .replace(/^assets_/, ''); // Remove \"assets_\" prefix\n}\n\nfunction getBaseUrl(asset: Pick<AssetData, 'httpServerLocation'>): string {\n let baseUrl = asset.httpServerLocation;\n if (baseUrl[0] === '/') {\n baseUrl = baseUrl.substring(1);\n }\n return baseUrl;\n}\n"],"names":["persistMetroAssetsAsync","getAssetIdForLogGrouping","copyInBatchesAsync","filterPlatformAssetScales","cleanAssetCatalog","catalogDir","files","fs","readdirSync","filter","file","endsWith","rmSync","path","join","projectRoot","assets","platform","outputDirectory","baseUrl","iosAssetCatalogDirectory","Log","warn","existsSync","mkdirSync","recursive","assetsToCopy","error","log","asset","isCatalogAsset","imageSet","getImageSet","scales","writeImageSet","push","batches","validScales","Set","idx","length","scale","has","src","dest","getAssetLocalPath","data","promises","readFile","set","contents","assetId","targetDomain","undefined","fileSystemLocation","name","relative","type","copyFileSync","writeFileSync","JSON","stringify","images","map","filename","idiom","info","author","version","fileName","getResourceIdentifier","suffix","filesToCopy","queue","Object","keys","Promise","resolve","reject","copyNext","shift","copy","callback","mkdir","dirname","err","createReadStream","pipe","createWriteStream","on","ALLOWED_SCALES","ios","whitelist","result","includes","maxScale","folderPath","getBaseUrl","toLowerCase","replace","httpServerLocation","substring"],"mappings":"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"}
@@ -31,7 +31,7 @@ class FetchClient {
31
31
  this.headers = {
32
32
  accept: "application/json",
33
33
  "content-type": "application/json",
34
- "user-agent": `expo-cli/${"0.22.19"}`,
34
+ "user-agent": `expo-cli/${"0.22.20"}`,
35
35
  authorization: "Basic " + _nodeBuffer().Buffer.from(`${target}:`).toString("base64")
36
36
  };
37
37
  }
@@ -79,7 +79,7 @@ function createContext() {
79
79
  cpu: summarizeCpuInfo(),
80
80
  app: {
81
81
  name: "expo/cli",
82
- version: "0.22.19"
82
+ version: "0.22.20"
83
83
  },
84
84
  ci: _ciInfo().isCI ? {
85
85
  name: _ciInfo().name,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expo/cli",
3
- "version": "0.22.19",
3
+ "version": "0.22.20",
4
4
  "description": "The Expo CLI",
5
5
  "main": "build/bin/cli",
6
6
  "bin": {
@@ -120,7 +120,7 @@
120
120
  "devDependencies": {
121
121
  "@expo/multipart-body-parser": "^1.0.0",
122
122
  "@expo/ngrok": "4.1.3",
123
- "@expo/server": "^0.5.2",
123
+ "@expo/server": "^0.5.3",
124
124
  "@graphql-codegen/cli": "^2.16.3",
125
125
  "@graphql-codegen/typescript": "^2.8.7",
126
126
  "@graphql-codegen/typescript-operations": "^2.5.12",
@@ -168,5 +168,5 @@
168
168
  "tree-kill": "^1.2.2",
169
169
  "tsd": "^0.28.1"
170
170
  },
171
- "gitHead": "1992dd3ba012ec59a646e383b9895ea6b577948b"
171
+ "gitHead": "ee33df50fbe6bf9bb5d772e7f341f85a27cf9993"
172
172
  }