@expo/cli 0.17.0 → 0.17.2
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 +2 -2
- package/build/src/prebuild/resolveTemplate.js +26 -9
- package/build/src/prebuild/resolveTemplate.js.map +1 -1
- package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js +1 -1
- package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js.map +1 -1
- package/build/src/start/interface/interactiveActions.js +1 -1
- package/build/src/start/interface/interactiveActions.js.map +1 -1
- package/build/src/start/server/getStaticRenderFunctions.js +65 -15
- package/build/src/start/server/getStaticRenderFunctions.js.map +1 -1
- package/build/src/start/server/metro/MetroBundlerDevServer.js +1 -1
- package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
- package/build/src/start/server/metro/bundleApiRoutes.js.map +1 -1
- package/build/src/start/server/metro/createServerRouteMiddleware.js +3 -2
- package/build/src/start/server/metro/createServerRouteMiddleware.js.map +1 -1
- package/build/src/start/server/metro/metroErrorInterface.js +8 -2
- package/build/src/start/server/metro/metroErrorInterface.js.map +1 -1
- package/build/src/start/server/middleware/metroOptions.js +6 -3
- package/build/src/start/server/middleware/metroOptions.js.map +1 -1
- package/build/src/utils/analytics/rudderstackClient.js +2 -2
- package/build/src/utils/createFileTransform.js +12 -0
- package/build/src/utils/createFileTransform.js.map +1 -1
- package/build/src/utils/npm.js +2 -1
- package/build/src/utils/npm.js.map +1 -1
- package/package.json +6 -3
|
@@ -4,14 +4,17 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
});
|
|
5
5
|
exports.createEntryResolver = createEntryResolver;
|
|
6
6
|
exports.createFileTransform = createFileTransform;
|
|
7
|
+
exports.createGlobFilter = createGlobFilter;
|
|
7
8
|
var _configPlugins = require("@expo/config-plugins");
|
|
8
9
|
var _minipass = _interopRequireDefault(require("minipass"));
|
|
9
10
|
var _path = _interopRequireDefault(require("path"));
|
|
11
|
+
var _picomatch = _interopRequireDefault(require("picomatch"));
|
|
10
12
|
function _interopRequireDefault(obj) {
|
|
11
13
|
return obj && obj.__esModule ? obj : {
|
|
12
14
|
default: obj
|
|
13
15
|
};
|
|
14
16
|
}
|
|
17
|
+
const debug = require("debug")("expo:file-transform");
|
|
15
18
|
function escapeXMLCharacters(original) {
|
|
16
19
|
const noAmps = original.replace("&", "&");
|
|
17
20
|
const noLt = noAmps.replace("<", "<");
|
|
@@ -85,5 +88,14 @@ function createFileTransform(name) {
|
|
|
85
88
|
return undefined;
|
|
86
89
|
};
|
|
87
90
|
}
|
|
91
|
+
function createGlobFilter(globPattern, options) {
|
|
92
|
+
const matcher = (0, _picomatch).default(globPattern, options);
|
|
93
|
+
debug('filter: created for pattern(s) "%s" (%s)', Array.isArray(globPattern) ? globPattern.join('", "') : globPattern, options);
|
|
94
|
+
return (path)=>{
|
|
95
|
+
const included = matcher(path);
|
|
96
|
+
debug("filter: %s - %s", included ? "include" : "exclude", path);
|
|
97
|
+
return included;
|
|
98
|
+
};
|
|
99
|
+
}
|
|
88
100
|
|
|
89
101
|
//# sourceMappingURL=createFileTransform.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/utils/createFileTransform.ts"],"sourcesContent":["import { IOSConfig } from '@expo/config-plugins';\nimport Minipass from 'minipass';\nimport path from 'path';\nimport { ReadEntry } from 'tar';\n\nfunction escapeXMLCharacters(original: string): string {\n const noAmps = original.replace('&', '&');\n const noLt = noAmps.replace('<', '<');\n const noGt = noLt.replace('>', '>');\n const noApos = noGt.replace('\"', '\\\\\"');\n return noApos.replace(\"'\", \"\\\\'\");\n}\n\nclass Transformer extends Minipass {\n data = '';\n\n constructor(private settings: { name: string; extension: string }) {\n super();\n }\n\n write(data: string) {\n this.data += data;\n return true;\n }\n\n getNormalizedName(): string {\n if (['.xml', '.plist'].includes(this.settings.extension)) {\n return escapeXMLCharacters(this.settings.name);\n }\n return this.settings.name;\n }\n\n end() {\n const name = this.getNormalizedName();\n const replaced = this.data\n .replace(/Hello App Display Name/g, name)\n .replace(/HelloWorld/g, IOSConfig.XcodeUtils.sanitizedName(name))\n .replace(/helloworld/g, IOSConfig.XcodeUtils.sanitizedName(name.toLowerCase()));\n super.write(replaced);\n return super.end();\n }\n}\n\nexport function createEntryResolver(name: string) {\n return (entry: ReadEntry) => {\n if (name) {\n // Rewrite paths for bare workflow\n entry.path = entry.path\n .replace(\n /HelloWorld/g,\n entry.path.includes('android')\n ? IOSConfig.XcodeUtils.sanitizedName(name.toLowerCase())\n : IOSConfig.XcodeUtils.sanitizedName(name)\n )\n .replace(/helloworld/g, IOSConfig.XcodeUtils.sanitizedName(name).toLowerCase());\n }\n if (entry.type && /^file$/i.test(entry.type) && path.basename(entry.path) === 'gitignore') {\n // Rename `gitignore` because npm ignores files named `.gitignore` when publishing.\n // See: https://github.com/npm/npm/issues/1862\n entry.path = entry.path.replace(/gitignore$/, '.gitignore');\n }\n };\n}\n\nexport function createFileTransform(name: string) {\n return (entry: ReadEntry) => {\n const extension = path.extname(entry.path);\n\n // Binary files, don't process these (avoid decoding as utf8)\n if (\n ![\n '.png',\n '.jpg',\n '.jpeg',\n '.gif',\n '.webp',\n '.psd',\n '.tiff',\n '.svg',\n '.jar',\n '.keystore',\n\n // Font files\n '.otf',\n '.ttf',\n ].includes(extension) &&\n name\n ) {\n return new Transformer({ name, extension });\n }\n return undefined;\n };\n}\n"],"names":["createEntryResolver","createFileTransform","escapeXMLCharacters","original","noAmps","replace","noLt","noGt","noApos","Transformer","Minipass","constructor","settings","data","write","getNormalizedName","includes","extension","name","end","replaced","IOSConfig","XcodeUtils","sanitizedName","toLowerCase","entry","path","type","test","basename","extname","undefined"],"mappings":"AAAA;;;;
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/createFileTransform.ts"],"sourcesContent":["import { IOSConfig } from '@expo/config-plugins';\nimport Minipass from 'minipass';\nimport path from 'path';\nimport picomatch from 'picomatch';\nimport { ReadEntry } from 'tar';\n\nconst debug = require('debug')('expo:file-transform') as typeof console.log;\n\nfunction escapeXMLCharacters(original: string): string {\n const noAmps = original.replace('&', '&');\n const noLt = noAmps.replace('<', '<');\n const noGt = noLt.replace('>', '>');\n const noApos = noGt.replace('\"', '\\\\\"');\n return noApos.replace(\"'\", \"\\\\'\");\n}\n\nclass Transformer extends Minipass {\n data = '';\n\n constructor(private settings: { name: string; extension: string }) {\n super();\n }\n\n write(data: string) {\n this.data += data;\n return true;\n }\n\n getNormalizedName(): string {\n if (['.xml', '.plist'].includes(this.settings.extension)) {\n return escapeXMLCharacters(this.settings.name);\n }\n return this.settings.name;\n }\n\n end() {\n const name = this.getNormalizedName();\n const replaced = this.data\n .replace(/Hello App Display Name/g, name)\n .replace(/HelloWorld/g, IOSConfig.XcodeUtils.sanitizedName(name))\n .replace(/helloworld/g, IOSConfig.XcodeUtils.sanitizedName(name.toLowerCase()));\n super.write(replaced);\n return super.end();\n }\n}\n\nexport function createEntryResolver(name: string) {\n return (entry: ReadEntry) => {\n if (name) {\n // Rewrite paths for bare workflow\n entry.path = entry.path\n .replace(\n /HelloWorld/g,\n entry.path.includes('android')\n ? IOSConfig.XcodeUtils.sanitizedName(name.toLowerCase())\n : IOSConfig.XcodeUtils.sanitizedName(name)\n )\n .replace(/helloworld/g, IOSConfig.XcodeUtils.sanitizedName(name).toLowerCase());\n }\n if (entry.type && /^file$/i.test(entry.type) && path.basename(entry.path) === 'gitignore') {\n // Rename `gitignore` because npm ignores files named `.gitignore` when publishing.\n // See: https://github.com/npm/npm/issues/1862\n entry.path = entry.path.replace(/gitignore$/, '.gitignore');\n }\n };\n}\n\nexport function createFileTransform(name: string) {\n return (entry: ReadEntry) => {\n const extension = path.extname(entry.path);\n\n // Binary files, don't process these (avoid decoding as utf8)\n if (\n ![\n '.png',\n '.jpg',\n '.jpeg',\n '.gif',\n '.webp',\n '.psd',\n '.tiff',\n '.svg',\n '.jar',\n '.keystore',\n\n // Font files\n '.otf',\n '.ttf',\n ].includes(extension) &&\n name\n ) {\n return new Transformer({ name, extension });\n }\n return undefined;\n };\n}\n\nexport function createGlobFilter(\n globPattern: picomatch.Glob,\n options?: picomatch.PicomatchOptions\n) {\n const matcher = picomatch(globPattern, options);\n\n debug(\n 'filter: created for pattern(s) \"%s\" (%s)',\n Array.isArray(globPattern) ? globPattern.join('\", \"') : globPattern,\n options\n );\n\n return (path: string) => {\n const included = matcher(path);\n debug('filter: %s - %s', included ? 'include' : 'exclude', path);\n return included;\n };\n}\n"],"names":["createEntryResolver","createFileTransform","createGlobFilter","debug","require","escapeXMLCharacters","original","noAmps","replace","noLt","noGt","noApos","Transformer","Minipass","constructor","settings","data","write","getNormalizedName","includes","extension","name","end","replaced","IOSConfig","XcodeUtils","sanitizedName","toLowerCase","entry","path","type","test","basename","extname","undefined","globPattern","options","matcher","picomatch","Array","isArray","join","included"],"mappings":"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"}
|
package/build/src/utils/npm.js
CHANGED
|
@@ -104,7 +104,7 @@ async function extractNpmTarballFromUrlAsync(url, props) {
|
|
|
104
104
|
return await extractNpmTarballAsync(await createUrlStreamAsync(url), props);
|
|
105
105
|
}
|
|
106
106
|
async function extractNpmTarballAsync(stream, props) {
|
|
107
|
-
const { cwd , strip , name , fileList =[] } = props;
|
|
107
|
+
const { cwd , strip , name , fileList =[] , filter } = props;
|
|
108
108
|
await (0, _dir).ensureDirectoryAsync(cwd);
|
|
109
109
|
var _checksumAlgorithm;
|
|
110
110
|
const hash = _crypto.default.createHash((_checksumAlgorithm = props.checksumAlgorithm) != null ? _checksumAlgorithm : "md5");
|
|
@@ -114,6 +114,7 @@ async function extractNpmTarballAsync(stream, props) {
|
|
|
114
114
|
});
|
|
115
115
|
await pipeline(stream, transformStream, _tar.default.extract({
|
|
116
116
|
cwd,
|
|
117
|
+
filter,
|
|
117
118
|
transform: (0, _createFileTransform).createFileTransform(name),
|
|
118
119
|
onentry: (0, _createFileTransform).createEntryResolver(name),
|
|
119
120
|
strip: strip != null ? strip : 1
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/utils/npm.ts"],"sourcesContent":["import { JSONValue } from '@expo/json-file';\nimport spawnAsync from '@expo/spawn-async';\nimport assert from 'assert';\nimport crypto from 'crypto';\nimport fs from 'fs';\nimport slugify from 'slugify';\nimport { PassThrough, Stream } from 'stream';\nimport tar from 'tar';\nimport { promisify } from 'util';\n\nimport { createEntryResolver, createFileTransform } from './createFileTransform';\nimport { ensureDirectoryAsync } from './dir';\nimport { CommandError } from './errors';\nimport { createCachedFetch } from '../api/rest/client';\n\nconst debug = require('debug')('expo:utils:npm') as typeof console.log;\n\nconst cachedFetch = createCachedFetch({\n cacheDirectory: 'template-cache',\n // Time to live. How long (in ms) responses remain cached before being automatically ejected. If undefined, responses are never automatically ejected from the cache.\n // ttl: 1000,\n});\n\nexport function sanitizeNpmPackageName(name: string): string {\n // https://github.com/npm/validate-npm-package-name/#naming-rules\n return (\n applyKnownNpmPackageNameRules(name) ||\n applyKnownNpmPackageNameRules(slugify(name)) ||\n // If nothing is left use 'app' like we do in Xcode projects.\n 'app'\n );\n}\n\nfunction applyKnownNpmPackageNameRules(name: string): string | null {\n // https://github.com/npm/validate-npm-package-name/#naming-rules\n\n // package name cannot start with '.' or '_'.\n while (/^(\\.|_)/.test(name)) {\n name = name.substring(1);\n }\n\n name = name.toLowerCase().replace(/[^a-zA-Z._\\-/@]/g, '');\n\n return (\n name\n // .replace(/![a-z0-9-._~]+/g, '')\n // Remove special characters\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '') || null\n );\n}\n\nexport async function npmViewAsync(...props: string[]): Promise<JSONValue> {\n const cmd = ['view', ...props, '--json'];\n const results = (await spawnAsync('npm', cmd)).stdout?.trim();\n const cmdString = `npm ${cmd.join(' ')}`;\n debug('Run:', cmdString);\n if (!results) {\n return null;\n }\n try {\n return JSON.parse(results);\n } catch (error: any) {\n throw new Error(\n `Could not parse JSON returned from \"${cmdString}\".\\n\\n${results}\\n\\nError: ${error.message}`\n );\n }\n}\n\n/** Given a package name like `expo` or `expo@beta`, return the registry URL if it exists. */\nexport async function getNpmUrlAsync(packageName: string): Promise<string> {\n const results = await npmViewAsync(packageName, 'dist.tarball');\n\n assert(results, `Could not get npm url for package \"${packageName}\"`);\n\n // Fully qualified url returns a string.\n // Example:\n // 𝝠 npm view expo-template-bare-minimum@sdk-33 dist.tarball --json\n if (typeof results === 'string') {\n return results;\n }\n\n // When the tag is arbitrary, the tarball url is an array, return the last value as it's the most recent.\n // Example:\n // 𝝠 npm view expo-template-bare-minimum@33 dist.tarball --json\n if (Array.isArray(results)) {\n return results[results.length - 1] as string;\n }\n\n throw new CommandError(\n 'Expected results of `npm view ...` to be an array or string. Instead found: ' + results\n );\n}\n\n// @ts-ignore\nconst pipeline = promisify(Stream.pipeline);\n\nexport async function downloadAndExtractNpmModuleAsync(\n npmName: string,\n props: ExtractProps\n): Promise<string> {\n const url = await getNpmUrlAsync(npmName);\n\n debug('Fetch from URL:', url);\n return await extractNpmTarballFromUrlAsync(url, props);\n}\n\nexport async function extractLocalNpmTarballAsync(\n tarFilePath: string,\n props: ExtractProps\n): Promise<string> {\n const readStream = fs.createReadStream(tarFilePath);\n return await extractNpmTarballAsync(readStream, props);\n}\n\ntype ExtractProps = {\n name: string;\n cwd: string;\n strip?: number;\n fileList?: string[];\n /** The checksum algorithm to use when verifying the tarball. */\n checksumAlgorithm?: string;\n};\n\nasync function createUrlStreamAsync(url: string) {\n const response = await cachedFetch(url);\n if (!response.ok) {\n throw new Error(`Unexpected response: ${response.statusText}. From url: ${url}`);\n }\n\n return response.body;\n}\n\nexport async function extractNpmTarballFromUrlAsync(\n url: string,\n props: ExtractProps\n): Promise<string> {\n return await extractNpmTarballAsync(await createUrlStreamAsync(url), props);\n}\n\n/**\n * Extracts a tarball stream to a directory and returns the checksum of the tarball.\n */\nexport async function extractNpmTarballAsync(\n stream: NodeJS.ReadableStream,\n props: ExtractProps\n): Promise<string> {\n const { cwd, strip, name, fileList = [] } = props;\n\n await ensureDirectoryAsync(cwd);\n\n const hash = crypto.createHash(props.checksumAlgorithm ?? 'md5');\n const transformStream = new PassThrough();\n transformStream.on('data', (chunk) => {\n hash.update(chunk);\n });\n\n await pipeline(\n stream,\n transformStream,\n tar.extract(\n {\n cwd,\n transform: createFileTransform(name),\n onentry: createEntryResolver(name),\n strip: strip ?? 1,\n },\n fileList\n )\n );\n\n return hash.digest('hex');\n}\n"],"names":["sanitizeNpmPackageName","npmViewAsync","getNpmUrlAsync","downloadAndExtractNpmModuleAsync","extractLocalNpmTarballAsync","extractNpmTarballFromUrlAsync","extractNpmTarballAsync","debug","require","cachedFetch","createCachedFetch","cacheDirectory","name","applyKnownNpmPackageNameRules","slugify","test","substring","toLowerCase","replace","normalize","props","cmd","results","spawnAsync","stdout","trim","cmdString","join","JSON","parse","error","Error","message","packageName","assert","Array","isArray","length","CommandError","pipeline","promisify","Stream","npmName","url","tarFilePath","readStream","fs","createReadStream","createUrlStreamAsync","response","ok","statusText","body","stream","cwd","strip","fileList","ensureDirectoryAsync","hash","crypto","createHash","checksumAlgorithm","transformStream","PassThrough","on","chunk","update","tar","extract","transform","createFileTransform","onentry","createEntryResolver","digest"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/npm.ts"],"sourcesContent":["import { JSONValue } from '@expo/json-file';\nimport spawnAsync from '@expo/spawn-async';\nimport assert from 'assert';\nimport crypto from 'crypto';\nimport fs from 'fs';\nimport slugify from 'slugify';\nimport { PassThrough, Stream } from 'stream';\nimport tar from 'tar';\nimport { promisify } from 'util';\n\nimport { createEntryResolver, createFileTransform } from './createFileTransform';\nimport { ensureDirectoryAsync } from './dir';\nimport { CommandError } from './errors';\nimport { createCachedFetch } from '../api/rest/client';\n\nconst debug = require('debug')('expo:utils:npm') as typeof console.log;\n\nconst cachedFetch = createCachedFetch({\n cacheDirectory: 'template-cache',\n // Time to live. How long (in ms) responses remain cached before being automatically ejected. If undefined, responses are never automatically ejected from the cache.\n // ttl: 1000,\n});\n\nexport function sanitizeNpmPackageName(name: string): string {\n // https://github.com/npm/validate-npm-package-name/#naming-rules\n return (\n applyKnownNpmPackageNameRules(name) ||\n applyKnownNpmPackageNameRules(slugify(name)) ||\n // If nothing is left use 'app' like we do in Xcode projects.\n 'app'\n );\n}\n\nfunction applyKnownNpmPackageNameRules(name: string): string | null {\n // https://github.com/npm/validate-npm-package-name/#naming-rules\n\n // package name cannot start with '.' or '_'.\n while (/^(\\.|_)/.test(name)) {\n name = name.substring(1);\n }\n\n name = name.toLowerCase().replace(/[^a-zA-Z._\\-/@]/g, '');\n\n return (\n name\n // .replace(/![a-z0-9-._~]+/g, '')\n // Remove special characters\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '') || null\n );\n}\n\nexport async function npmViewAsync(...props: string[]): Promise<JSONValue> {\n const cmd = ['view', ...props, '--json'];\n const results = (await spawnAsync('npm', cmd)).stdout?.trim();\n const cmdString = `npm ${cmd.join(' ')}`;\n debug('Run:', cmdString);\n if (!results) {\n return null;\n }\n try {\n return JSON.parse(results);\n } catch (error: any) {\n throw new Error(\n `Could not parse JSON returned from \"${cmdString}\".\\n\\n${results}\\n\\nError: ${error.message}`\n );\n }\n}\n\n/** Given a package name like `expo` or `expo@beta`, return the registry URL if it exists. */\nexport async function getNpmUrlAsync(packageName: string): Promise<string> {\n const results = await npmViewAsync(packageName, 'dist.tarball');\n\n assert(results, `Could not get npm url for package \"${packageName}\"`);\n\n // Fully qualified url returns a string.\n // Example:\n // 𝝠 npm view expo-template-bare-minimum@sdk-33 dist.tarball --json\n if (typeof results === 'string') {\n return results;\n }\n\n // When the tag is arbitrary, the tarball url is an array, return the last value as it's the most recent.\n // Example:\n // 𝝠 npm view expo-template-bare-minimum@33 dist.tarball --json\n if (Array.isArray(results)) {\n return results[results.length - 1] as string;\n }\n\n throw new CommandError(\n 'Expected results of `npm view ...` to be an array or string. Instead found: ' + results\n );\n}\n\n// @ts-ignore\nconst pipeline = promisify(Stream.pipeline);\n\nexport async function downloadAndExtractNpmModuleAsync(\n npmName: string,\n props: ExtractProps\n): Promise<string> {\n const url = await getNpmUrlAsync(npmName);\n\n debug('Fetch from URL:', url);\n return await extractNpmTarballFromUrlAsync(url, props);\n}\n\nexport async function extractLocalNpmTarballAsync(\n tarFilePath: string,\n props: ExtractProps\n): Promise<string> {\n const readStream = fs.createReadStream(tarFilePath);\n return await extractNpmTarballAsync(readStream, props);\n}\n\nexport type ExtractProps = {\n name: string;\n cwd: string;\n strip?: number;\n fileList?: string[];\n /** The checksum algorithm to use when verifying the tarball. */\n checksumAlgorithm?: string;\n /** An optional filter to selectively extract specific paths */\n filter?: tar.ExtractOptions['filter'];\n};\n\nasync function createUrlStreamAsync(url: string) {\n const response = await cachedFetch(url);\n if (!response.ok) {\n throw new Error(`Unexpected response: ${response.statusText}. From url: ${url}`);\n }\n\n return response.body;\n}\n\nexport async function extractNpmTarballFromUrlAsync(\n url: string,\n props: ExtractProps\n): Promise<string> {\n return await extractNpmTarballAsync(await createUrlStreamAsync(url), props);\n}\n\n/**\n * Extracts a tarball stream to a directory and returns the checksum of the tarball.\n */\nexport async function extractNpmTarballAsync(\n stream: NodeJS.ReadableStream,\n props: ExtractProps\n): Promise<string> {\n const { cwd, strip, name, fileList = [], filter } = props;\n\n await ensureDirectoryAsync(cwd);\n\n const hash = crypto.createHash(props.checksumAlgorithm ?? 'md5');\n const transformStream = new PassThrough();\n transformStream.on('data', (chunk) => {\n hash.update(chunk);\n });\n\n await pipeline(\n stream,\n transformStream,\n tar.extract(\n {\n cwd,\n filter,\n transform: createFileTransform(name),\n onentry: createEntryResolver(name),\n strip: strip ?? 1,\n },\n fileList\n )\n );\n\n return hash.digest('hex');\n}\n"],"names":["sanitizeNpmPackageName","npmViewAsync","getNpmUrlAsync","downloadAndExtractNpmModuleAsync","extractLocalNpmTarballAsync","extractNpmTarballFromUrlAsync","extractNpmTarballAsync","debug","require","cachedFetch","createCachedFetch","cacheDirectory","name","applyKnownNpmPackageNameRules","slugify","test","substring","toLowerCase","replace","normalize","props","cmd","results","spawnAsync","stdout","trim","cmdString","join","JSON","parse","error","Error","message","packageName","assert","Array","isArray","length","CommandError","pipeline","promisify","Stream","npmName","url","tarFilePath","readStream","fs","createReadStream","createUrlStreamAsync","response","ok","statusText","body","stream","cwd","strip","fileList","filter","ensureDirectoryAsync","hash","crypto","createHash","checksumAlgorithm","transformStream","PassThrough","on","chunk","update","tar","extract","transform","createFileTransform","onentry","createEntryResolver","digest"],"mappings":"AAAA;;;;QAuBgBA,sBAAsB,GAAtBA,sBAAsB;QA6BhBC,YAAY,GAAZA,YAAY;QAkBZC,cAAc,GAAdA,cAAc;QA2BdC,gCAAgC,GAAhCA,gCAAgC;QAUhCC,2BAA2B,GAA3BA,2BAA2B;QA4B3BC,6BAA6B,GAA7BA,6BAA6B;QAU7BC,sBAAsB,GAAtBA,sBAAsB;AAhJrB,IAAA,WAAmB,kCAAnB,mBAAmB,EAAA;AACvB,IAAA,OAAQ,kCAAR,QAAQ,EAAA;AACR,IAAA,OAAQ,kCAAR,QAAQ,EAAA;AACZ,IAAA,GAAI,kCAAJ,IAAI,EAAA;AACC,IAAA,QAAS,kCAAT,SAAS,EAAA;AACO,IAAA,OAAQ,WAAR,QAAQ,CAAA;AAC5B,IAAA,IAAK,kCAAL,KAAK,EAAA;AACK,IAAA,KAAM,WAAN,MAAM,CAAA;AAEyB,IAAA,oBAAuB,WAAvB,uBAAuB,CAAA;AAC3C,IAAA,IAAO,WAAP,OAAO,CAAA;AACf,IAAA,OAAU,WAAV,UAAU,CAAA;AACL,IAAA,OAAoB,WAApB,oBAAoB,CAAA;;;;;;AAEtD,MAAMC,KAAK,GAAGC,OAAO,CAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC,AAAsB,AAAC;AAEvE,MAAMC,WAAW,GAAGC,CAAAA,GAAAA,OAAiB,AAInC,CAAA,kBAJmC,CAAC;IACpCC,cAAc,EAAE,gBAAgB;CAGjC,CAAC,AAAC;AAEI,SAASX,sBAAsB,CAACY,IAAY,EAAU;IAC3D,iEAAiE;IACjE,OACEC,6BAA6B,CAACD,IAAI,CAAC,IACnCC,6BAA6B,CAACC,CAAAA,GAAAA,QAAO,AAAM,CAAA,QAAN,CAACF,IAAI,CAAC,CAAC,IAC5C,6DAA6D;IAC7D,KAAK,CACL;CACH;AAED,SAASC,6BAA6B,CAACD,IAAY,EAAiB;IAClE,iEAAiE;IAEjE,6CAA6C;IAC7C,MAAO,UAAUG,IAAI,CAACH,IAAI,CAAC,CAAE;QAC3BA,IAAI,GAAGA,IAAI,CAACI,SAAS,CAAC,CAAC,CAAC,CAAC;KAC1B;IAEDJ,IAAI,GAAGA,IAAI,CAACK,WAAW,EAAE,CAACC,OAAO,qBAAqB,EAAE,CAAC,CAAC;IAE1D,OACEN,IAAI,AACF,kCAAkC;IAClC,4BAA4B;KAC3BO,SAAS,CAAC,KAAK,CAAC,CAChBD,OAAO,qBAAqB,EAAE,CAAC,IAAI,IAAI,CAC1C;CACH;AAEM,eAAejB,YAAY,CAAC,GAAGmB,KAAK,AAAU,EAAsB;QAEzD,GAAqC;IADrD,MAAMC,GAAG,GAAG;QAAC,MAAM;WAAKD,KAAK;QAAE,QAAQ;KAAC,AAAC;IACzC,MAAME,OAAO,GAAG,CAAA,GAAqC,GAArC,CAAC,MAAMC,CAAAA,GAAAA,WAAU,AAAY,CAAA,QAAZ,CAAC,KAAK,EAAEF,GAAG,CAAC,CAAC,CAACG,MAAM,SAAM,GAA3C,KAAA,CAA2C,GAA3C,GAAqC,CAAEC,IAAI,EAAE,AAAC;IAC9D,MAAMC,SAAS,GAAG,CAAC,IAAI,EAAEL,GAAG,CAACM,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,AAAC;IACzCpB,KAAK,CAAC,MAAM,EAAEmB,SAAS,CAAC,CAAC;IACzB,IAAI,CAACJ,OAAO,EAAE;QACZ,OAAO,IAAI,CAAC;KACb;IACD,IAAI;QACF,OAAOM,IAAI,CAACC,KAAK,CAACP,OAAO,CAAC,CAAC;KAC5B,CAAC,OAAOQ,KAAK,EAAO;QACnB,MAAM,IAAIC,KAAK,CACb,CAAC,oCAAoC,EAAEL,SAAS,CAAC,MAAM,EAAEJ,OAAO,CAAC,WAAW,EAAEQ,KAAK,CAACE,OAAO,CAAC,CAAC,CAC9F,CAAC;KACH;CACF;AAGM,eAAe9B,cAAc,CAAC+B,WAAmB,EAAmB;IACzE,MAAMX,OAAO,GAAG,MAAMrB,YAAY,CAACgC,WAAW,EAAE,cAAc,CAAC,AAAC;IAEhEC,CAAAA,GAAAA,OAAM,AAA+D,CAAA,QAA/D,CAACZ,OAAO,EAAE,CAAC,mCAAmC,EAAEW,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAEtE,wCAAwC;IACxC,WAAW;IACX,sEAAmE;IAChE,IAAC,OAAOX,OAAO,KAAK,QAAQ,EAAE;QAC/B,OAAOA,OAAO,CAAC;KAChB;IAED,yGAAyG;IACzG,WAAW;IACX,kEAA+D;IAC/D,IAAIa,KAAK,CAACC,OAAO,CAACd,OAAO,CAAC,EAAE;QAC1B,OAAOA,OAAO,CAACA,OAAO,CAACe,MAAM,GAAG,CAAC,CAAC,CAAW;KAC9C;IAED,MAAM,IAAIC,OAAY,aAAA,CACpB,8EAA8E,GAAGhB,OAAO,CACzF,CAAC;CACH;AAED,aAAa;AACb,MAAMiB,QAAQ,GAAGC,CAAAA,GAAAA,KAAS,AAAiB,CAAA,UAAjB,CAACC,OAAM,OAAA,CAACF,QAAQ,CAAC,AAAC;AAErC,eAAepC,gCAAgC,CACpDuC,OAAe,EACftB,KAAmB,EACF;IACjB,MAAMuB,GAAG,GAAG,MAAMzC,cAAc,CAACwC,OAAO,CAAC,AAAC;IAE1CnC,KAAK,CAAC,iBAAiB,EAAEoC,GAAG,CAAC,CAAC;IAC9B,OAAO,MAAMtC,6BAA6B,CAACsC,GAAG,EAAEvB,KAAK,CAAC,CAAC;CACxD;AAEM,eAAehB,2BAA2B,CAC/CwC,WAAmB,EACnBxB,KAAmB,EACF;IACjB,MAAMyB,UAAU,GAAGC,GAAE,QAAA,CAACC,gBAAgB,CAACH,WAAW,CAAC,AAAC;IACpD,OAAO,MAAMtC,sBAAsB,CAACuC,UAAU,EAAEzB,KAAK,CAAC,CAAC;CACxD;AAaD,eAAe4B,oBAAoB,CAACL,GAAW,EAAE;IAC/C,MAAMM,QAAQ,GAAG,MAAMxC,WAAW,CAACkC,GAAG,CAAC,AAAC;IACxC,IAAI,CAACM,QAAQ,CAACC,EAAE,EAAE;QAChB,MAAM,IAAInB,KAAK,CAAC,CAAC,qBAAqB,EAAEkB,QAAQ,CAACE,UAAU,CAAC,YAAY,EAAER,GAAG,CAAC,CAAC,CAAC,CAAC;KAClF;IAED,OAAOM,QAAQ,CAACG,IAAI,CAAC;CACtB;AAEM,eAAe/C,6BAA6B,CACjDsC,GAAW,EACXvB,KAAmB,EACF;IACjB,OAAO,MAAMd,sBAAsB,CAAC,MAAM0C,oBAAoB,CAACL,GAAG,CAAC,EAAEvB,KAAK,CAAC,CAAC;CAC7E;AAKM,eAAed,sBAAsB,CAC1C+C,MAA6B,EAC7BjC,KAAmB,EACF;IACjB,MAAM,EAAEkC,GAAG,CAAA,EAAEC,KAAK,CAAA,EAAE3C,IAAI,CAAA,EAAE4C,QAAQ,EAAG,EAAE,CAAA,EAAEC,MAAM,CAAA,EAAE,GAAGrC,KAAK,AAAC;IAE1D,MAAMsC,CAAAA,GAAAA,IAAoB,AAAK,CAAA,qBAAL,CAACJ,GAAG,CAAC,CAAC;QAEDlC,kBAAuB;IAAtD,MAAMuC,IAAI,GAAGC,OAAM,QAAA,CAACC,UAAU,CAACzC,CAAAA,kBAAuB,GAAvBA,KAAK,CAAC0C,iBAAiB,YAAvB1C,kBAAuB,GAAI,KAAK,CAAC,AAAC;IACjE,MAAM2C,eAAe,GAAG,IAAIC,OAAW,YAAA,EAAE,AAAC;IAC1CD,eAAe,CAACE,EAAE,CAAC,MAAM,EAAE,CAACC,KAAK,GAAK;QACpCP,IAAI,CAACQ,MAAM,CAACD,KAAK,CAAC,CAAC;KACpB,CAAC,CAAC;IAEH,MAAM3B,QAAQ,CACZc,MAAM,EACNU,eAAe,EACfK,IAAG,QAAA,CAACC,OAAO,CACT;QACEf,GAAG;QACHG,MAAM;QACNa,SAAS,EAAEC,CAAAA,GAAAA,oBAAmB,AAAM,CAAA,oBAAN,CAAC3D,IAAI,CAAC;QACpC4D,OAAO,EAAEC,CAAAA,GAAAA,oBAAmB,AAAM,CAAA,oBAAN,CAAC7D,IAAI,CAAC;QAClC2C,KAAK,EAAEA,KAAK,WAALA,KAAK,GAAI,CAAC;KAClB,EACDC,QAAQ,CACT,CACF,CAAC;IAEF,OAAOG,IAAI,CAACe,MAAM,CAAC,KAAK,CAAC,CAAC;CAC3B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@expo/cli",
|
|
3
|
-
"version": "0.17.
|
|
3
|
+
"version": "0.17.2",
|
|
4
4
|
"description": "The Expo CLI",
|
|
5
5
|
"main": "build/bin/cli",
|
|
6
6
|
"bin": {
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
"@expo/osascript": "^2.0.31",
|
|
50
50
|
"@expo/package-manager": "^1.1.1",
|
|
51
51
|
"@expo/plist": "^0.1.0",
|
|
52
|
-
"@expo/prebuild-config": "6.7.
|
|
52
|
+
"@expo/prebuild-config": "6.7.4",
|
|
53
53
|
"@expo/rudder-sdk-node": "1.1.1",
|
|
54
54
|
"@expo/spawn-async": "1.5.0",
|
|
55
55
|
"@expo/xcpretty": "^4.3.0",
|
|
@@ -89,6 +89,7 @@
|
|
|
89
89
|
"npm-package-arg": "^7.0.0",
|
|
90
90
|
"open": "^8.3.0",
|
|
91
91
|
"ora": "3.4.0",
|
|
92
|
+
"picomatch": "^3.0.1",
|
|
92
93
|
"pretty-bytes": "5.6.0",
|
|
93
94
|
"progress": "2.0.3",
|
|
94
95
|
"prompts": "^2.3.2",
|
|
@@ -101,6 +102,7 @@
|
|
|
101
102
|
"semver": "^7.5.3",
|
|
102
103
|
"send": "^0.18.0",
|
|
103
104
|
"slugify": "^1.3.4",
|
|
105
|
+
"source-map-support": "~0.5.21",
|
|
104
106
|
"structured-headers": "^0.4.1",
|
|
105
107
|
"tar": "^6.0.5",
|
|
106
108
|
"temp-dir": "^2.0.0",
|
|
@@ -139,6 +141,7 @@
|
|
|
139
141
|
"@types/klaw-sync": "^6.0.0",
|
|
140
142
|
"@types/lodash.debounce": "^4.0.9",
|
|
141
143
|
"@types/npm-package-arg": "^6.1.0",
|
|
144
|
+
"@types/picomatch": "^2.3.3",
|
|
142
145
|
"@types/progress": "^2.0.5",
|
|
143
146
|
"@types/prompts": "^2.0.6",
|
|
144
147
|
"@types/resolve": "^1.20.2",
|
|
@@ -164,5 +167,5 @@
|
|
|
164
167
|
"tree-kill": "^1.2.2",
|
|
165
168
|
"tsd": "^0.28.1"
|
|
166
169
|
},
|
|
167
|
-
"gitHead": "
|
|
170
|
+
"gitHead": "7fb94e3c0598d0e2d428184b16eec5ec67d80388"
|
|
168
171
|
}
|