@expo/cli 1.0.0-canary-20250305-0af9ad2 → 1.0.0-canary-20250306-d9d3e02
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 +1 -1
- package/build/src/export/exportAssets.js +2 -2
- package/build/src/export/exportAssets.js.map +1 -1
- package/build/src/start/server/metro/getCssModulesFromBundler.js +4 -4
- package/build/src/start/server/metro/getCssModulesFromBundler.js.map +1 -1
- package/build/src/utils/npm.js +2 -2
- package/build/src/utils/npm.js.map +1 -1
- package/build/src/utils/tar.js +2 -2
- package/build/src/utils/tar.js.map +1 -1
- package/build/src/utils/telemetry/clients/FetchClient.js +1 -1
- package/build/src/utils/telemetry/utils/context.js +1 -1
- package/package.json +16 -18
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("1.0.0-canary-
|
|
124
|
+
console.log("1.0.0-canary-20250306-d9d3e02");
|
|
125
125
|
process.exit(0);
|
|
126
126
|
}
|
|
127
127
|
if (args["--non-interactive"]) {
|
|
@@ -21,7 +21,7 @@ function _fs() {
|
|
|
21
21
|
return data;
|
|
22
22
|
}
|
|
23
23
|
function _minimatch() {
|
|
24
|
-
const data =
|
|
24
|
+
const data = require("minimatch");
|
|
25
25
|
_minimatch = function() {
|
|
26
26
|
return data;
|
|
27
27
|
};
|
|
@@ -153,7 +153,7 @@ function logPatterns(patterns) {
|
|
|
153
153
|
function shouldBundleAsset(asset, patterns) {
|
|
154
154
|
var ref;
|
|
155
155
|
const file = (ref = asset.files) == null ? void 0 : ref[0];
|
|
156
|
-
return !!("__packager_asset" in asset && asset.__packager_asset && file && patterns.some((pattern)=>(0, _minimatch().
|
|
156
|
+
return !!("__packager_asset" in asset && asset.__packager_asset && file && patterns.some((pattern)=>(0, _minimatch().minimatch)(file, pattern)));
|
|
157
157
|
}
|
|
158
158
|
async function exportAssetsAsync(projectRoot, { exp , outputDir , bundles: { web , ...bundles } , baseUrl , files =new Map() }) {
|
|
159
159
|
var ref;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/export/exportAssets.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config';\nimport fs from 'fs';\nimport minimatch from 'minimatch';\nimport path from 'path';\n\nimport { getAssetIdForLogGrouping, persistMetroAssetsAsync } from './persistMetroAssets';\nimport type { Asset, BundleAssetWithFileHashes, BundleOutput, ExportAssetMap } from './saveAssets';\nimport * as Log from '../log';\nimport { resolveGoogleServicesFile } from '../start/server/middleware/resolveAssets';\nimport { uniqBy } from '../utils/array';\n\nconst debug = require('debug')('expo:export:exportAssets') as typeof console.log;\n\nfunction mapAssetHashToAssetString(asset: Asset, hash: string) {\n return 'asset_' + hash + ('type' in asset && asset.type ? '.' + asset.type : '');\n}\n\nexport function assetPatternsToBeBundled(\n exp: ExpoConfig & { extra?: { updates?: { assetPatternsToBeBundled?: string[] } } }\n): string[] | undefined {\n // new location for this key\n if (exp.updates?.assetPatternsToBeBundled?.length) {\n return exp.updates.assetPatternsToBeBundled;\n }\n\n // old, untyped location for this key. we may want to change this to throw in a few SDK versions (deprecated as of SDK 52).\n if (exp.extra?.updates?.assetPatternsToBeBundled?.length) {\n return exp.extra.updates.assetPatternsToBeBundled;\n }\n\n return undefined;\n}\n\n/**\n * Given an asset and a set of strings representing the assets to be bundled, returns true if\n * the asset is part of the set to be bundled.\n * @param asset Asset object\n * @param bundledAssetsSet Set of strings\n * @returns true if the asset should be bundled\n */\nfunction assetShouldBeIncludedInExport(asset: Asset, bundledAssetsSet: Set<string> | undefined) {\n if (!bundledAssetsSet) {\n return true;\n }\n return (\n asset.fileHashes.filter((hash) => bundledAssetsSet.has(mapAssetHashToAssetString(asset, hash)))\n .length > 0\n );\n}\n\n/**\n * Computes a set of strings representing the assets to be bundled with an export, given an array of assets,\n * and a set of patterns to match\n * @param assets The asset array\n * @param assetPatternsToBeBundled An array of strings with glob patterns to match\n * @param projectRoot The project root\n * @returns A set of asset strings\n */\nfunction setOfAssetsToBeBundled(\n assets: Asset[],\n assetPatternsToBeBundled: string[],\n projectRoot: string\n): Set<string> | undefined {\n // Convert asset patterns to a list of asset strings that match them.\n // Assets strings are formatted as `asset_<hash>.<type>` and represent\n // the name that the file will have in the app bundle. The `asset_` prefix is\n // needed because android doesn't support assets that start with numbers.\n\n const fullPatterns: string[] = assetPatternsToBeBundled.map((p: string) =>\n path.join(projectRoot, p)\n );\n\n logPatterns(fullPatterns);\n\n const allBundledAssets = assets\n .map((asset) => {\n const shouldBundle = shouldBundleAsset(asset, fullPatterns);\n if (shouldBundle) {\n debug(`${shouldBundle ? 'Include' : 'Exclude'} asset ${asset.files?.[0]}`);\n return asset.fileHashes.map((hash) => mapAssetHashToAssetString(asset, hash));\n }\n return [];\n })\n .flat();\n\n // The assets returned by the RN packager has duplicates so make sure we\n // only bundle each once.\n return new Set(allBundledAssets);\n}\n\n/**\n * Resolves the assetBundlePatterns from the manifest and returns the set of assets to bundle.\n *\n * @modifies {exp}\n */\nexport function resolveAssetPatternsToBeBundled<T extends ExpoConfig>(\n projectRoot: string,\n exp: T,\n assets: Asset[]\n): Set<string> | undefined {\n const assetPatternsToBeBundledForConfig = assetPatternsToBeBundled(exp);\n if (!assetPatternsToBeBundledForConfig) {\n return undefined;\n }\n const bundledAssets = setOfAssetsToBeBundled(\n assets,\n assetPatternsToBeBundledForConfig,\n projectRoot\n );\n return bundledAssets;\n}\n\nfunction logPatterns(patterns: string[]) {\n // Only log the patterns in debug mode, if they aren't already defined in the app.json, then all files will be targeted.\n Log.log('\\nProcessing asset bundle patterns:');\n patterns.forEach((p) => Log.log('- ' + p));\n}\n\nfunction shouldBundleAsset(asset: Asset, patterns: string[]) {\n const file = asset.files?.[0];\n return !!(\n '__packager_asset' in asset &&\n asset.__packager_asset &&\n file &&\n patterns.some((pattern) => minimatch(file, pattern))\n );\n}\n\nexport async function exportAssetsAsync(\n projectRoot: string,\n {\n exp,\n outputDir,\n bundles: { web, ...bundles },\n baseUrl,\n files = new Map(),\n }: {\n exp: ExpoConfig;\n bundles: Partial<Record<string, BundleOutput>>;\n outputDir: string;\n baseUrl: string;\n files?: ExportAssetMap;\n }\n) {\n // NOTE: We use a different system for static web\n if (web) {\n // Save assets like a typical bundler, preserving the file paths on web.\n // TODO: Update React Native Web to support loading files from asset hashes.\n await persistMetroAssetsAsync(projectRoot, web.assets, {\n files,\n platform: 'web',\n outputDirectory: outputDir,\n baseUrl,\n });\n }\n\n const assets: BundleAssetWithFileHashes[] = uniqBy(\n Object.values(bundles).flatMap((bundle) => bundle!.assets),\n (asset) => asset.hash\n );\n\n let bundledAssetsSet: Set<string> | undefined = undefined;\n let filteredAssets = assets;\n const embeddedHashSet: Set<string> = new Set();\n\n if (assets[0]?.fileHashes) {\n debug(`Assets = ${JSON.stringify(assets, null, 2)}`);\n // Updates the manifest to reflect additional asset bundling + configs\n // Get only asset strings for assets we will save\n bundledAssetsSet = resolveAssetPatternsToBeBundled(projectRoot, exp, assets);\n if (bundledAssetsSet) {\n debug(`Bundled assets = ${JSON.stringify([...bundledAssetsSet], null, 2)}`);\n // Filter asset objects to only ones that include assetPatternsToBeBundled matches\n filteredAssets = assets.filter((asset) => {\n const shouldInclude = assetShouldBeIncludedInExport(asset, bundledAssetsSet);\n if (!shouldInclude) {\n embeddedHashSet.add(asset.hash);\n }\n return shouldInclude;\n });\n debug(`Filtered assets count = ${filteredAssets.length}`);\n }\n\n const hashes = new Set<string>();\n\n // Add assets to copy.\n filteredAssets.forEach((asset) => {\n const assetId = getAssetIdForLogGrouping(projectRoot, asset);\n\n asset.files.forEach((fp: string, index: number) => {\n const hash = asset.fileHashes[index];\n if (hashes.has(hash)) return;\n hashes.add(hash);\n files.set(path.join('assets', hash), {\n originFilename: path.relative(projectRoot, fp),\n contents: fs.readFileSync(fp),\n assetId,\n });\n });\n });\n }\n\n // Add google services file if it exists\n await resolveGoogleServicesFile(projectRoot, exp);\n\n return { exp, assets, embeddedHashSet, files };\n}\n"],"names":["assetPatternsToBeBundled","resolveAssetPatternsToBeBundled","exportAssetsAsync","debug","require","mapAssetHashToAssetString","asset","hash","type","exp","updates","length","extra","undefined","assetShouldBeIncludedInExport","bundledAssetsSet","fileHashes","filter","has","setOfAssetsToBeBundled","assets","projectRoot","fullPatterns","map","p","path","join","logPatterns","allBundledAssets","shouldBundle","shouldBundleAsset","files","flat","Set","assetPatternsToBeBundledForConfig","bundledAssets","patterns","Log","log","forEach","file","__packager_asset","some","pattern","minimatch","outputDir","bundles","web","baseUrl","Map","persistMetroAssetsAsync","platform","outputDirectory","uniqBy","Object","values","flatMap","bundle","filteredAssets","embeddedHashSet","JSON","stringify","shouldInclude","add","hashes","assetId","getAssetIdForLogGrouping","fp","index","set","originFilename","relative","contents","fs","readFileSync","resolveGoogleServicesFile"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/export/exportAssets.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config';\nimport fs from 'fs';\nimport { minimatch } from 'minimatch';\nimport path from 'path';\n\nimport { getAssetIdForLogGrouping, persistMetroAssetsAsync } from './persistMetroAssets';\nimport type { Asset, BundleAssetWithFileHashes, BundleOutput, ExportAssetMap } from './saveAssets';\nimport * as Log from '../log';\nimport { resolveGoogleServicesFile } from '../start/server/middleware/resolveAssets';\nimport { uniqBy } from '../utils/array';\n\nconst debug = require('debug')('expo:export:exportAssets') as typeof console.log;\n\nfunction mapAssetHashToAssetString(asset: Asset, hash: string) {\n return 'asset_' + hash + ('type' in asset && asset.type ? '.' + asset.type : '');\n}\n\nexport function assetPatternsToBeBundled(\n exp: ExpoConfig & { extra?: { updates?: { assetPatternsToBeBundled?: string[] } } }\n): string[] | undefined {\n // new location for this key\n if (exp.updates?.assetPatternsToBeBundled?.length) {\n return exp.updates.assetPatternsToBeBundled;\n }\n\n // old, untyped location for this key. we may want to change this to throw in a few SDK versions (deprecated as of SDK 52).\n if (exp.extra?.updates?.assetPatternsToBeBundled?.length) {\n return exp.extra.updates.assetPatternsToBeBundled;\n }\n\n return undefined;\n}\n\n/**\n * Given an asset and a set of strings representing the assets to be bundled, returns true if\n * the asset is part of the set to be bundled.\n * @param asset Asset object\n * @param bundledAssetsSet Set of strings\n * @returns true if the asset should be bundled\n */\nfunction assetShouldBeIncludedInExport(asset: Asset, bundledAssetsSet: Set<string> | undefined) {\n if (!bundledAssetsSet) {\n return true;\n }\n return (\n asset.fileHashes.filter((hash) => bundledAssetsSet.has(mapAssetHashToAssetString(asset, hash)))\n .length > 0\n );\n}\n\n/**\n * Computes a set of strings representing the assets to be bundled with an export, given an array of assets,\n * and a set of patterns to match\n * @param assets The asset array\n * @param assetPatternsToBeBundled An array of strings with glob patterns to match\n * @param projectRoot The project root\n * @returns A set of asset strings\n */\nfunction setOfAssetsToBeBundled(\n assets: Asset[],\n assetPatternsToBeBundled: string[],\n projectRoot: string\n): Set<string> | undefined {\n // Convert asset patterns to a list of asset strings that match them.\n // Assets strings are formatted as `asset_<hash>.<type>` and represent\n // the name that the file will have in the app bundle. The `asset_` prefix is\n // needed because android doesn't support assets that start with numbers.\n\n const fullPatterns: string[] = assetPatternsToBeBundled.map((p: string) =>\n path.join(projectRoot, p)\n );\n\n logPatterns(fullPatterns);\n\n const allBundledAssets = assets\n .map((asset) => {\n const shouldBundle = shouldBundleAsset(asset, fullPatterns);\n if (shouldBundle) {\n debug(`${shouldBundle ? 'Include' : 'Exclude'} asset ${asset.files?.[0]}`);\n return asset.fileHashes.map((hash) => mapAssetHashToAssetString(asset, hash));\n }\n return [];\n })\n .flat();\n\n // The assets returned by the RN packager has duplicates so make sure we\n // only bundle each once.\n return new Set(allBundledAssets);\n}\n\n/**\n * Resolves the assetBundlePatterns from the manifest and returns the set of assets to bundle.\n *\n * @modifies {exp}\n */\nexport function resolveAssetPatternsToBeBundled<T extends ExpoConfig>(\n projectRoot: string,\n exp: T,\n assets: Asset[]\n): Set<string> | undefined {\n const assetPatternsToBeBundledForConfig = assetPatternsToBeBundled(exp);\n if (!assetPatternsToBeBundledForConfig) {\n return undefined;\n }\n const bundledAssets = setOfAssetsToBeBundled(\n assets,\n assetPatternsToBeBundledForConfig,\n projectRoot\n );\n return bundledAssets;\n}\n\nfunction logPatterns(patterns: string[]) {\n // Only log the patterns in debug mode, if they aren't already defined in the app.json, then all files will be targeted.\n Log.log('\\nProcessing asset bundle patterns:');\n patterns.forEach((p) => Log.log('- ' + p));\n}\n\nfunction shouldBundleAsset(asset: Asset, patterns: string[]) {\n const file = asset.files?.[0];\n return !!(\n '__packager_asset' in asset &&\n asset.__packager_asset &&\n file &&\n patterns.some((pattern) => minimatch(file, pattern))\n );\n}\n\nexport async function exportAssetsAsync(\n projectRoot: string,\n {\n exp,\n outputDir,\n bundles: { web, ...bundles },\n baseUrl,\n files = new Map(),\n }: {\n exp: ExpoConfig;\n bundles: Partial<Record<string, BundleOutput>>;\n outputDir: string;\n baseUrl: string;\n files?: ExportAssetMap;\n }\n) {\n // NOTE: We use a different system for static web\n if (web) {\n // Save assets like a typical bundler, preserving the file paths on web.\n // TODO: Update React Native Web to support loading files from asset hashes.\n await persistMetroAssetsAsync(projectRoot, web.assets, {\n files,\n platform: 'web',\n outputDirectory: outputDir,\n baseUrl,\n });\n }\n\n const assets: BundleAssetWithFileHashes[] = uniqBy(\n Object.values(bundles).flatMap((bundle) => bundle!.assets),\n (asset) => asset.hash\n );\n\n let bundledAssetsSet: Set<string> | undefined = undefined;\n let filteredAssets = assets;\n const embeddedHashSet: Set<string> = new Set();\n\n if (assets[0]?.fileHashes) {\n debug(`Assets = ${JSON.stringify(assets, null, 2)}`);\n // Updates the manifest to reflect additional asset bundling + configs\n // Get only asset strings for assets we will save\n bundledAssetsSet = resolveAssetPatternsToBeBundled(projectRoot, exp, assets);\n if (bundledAssetsSet) {\n debug(`Bundled assets = ${JSON.stringify([...bundledAssetsSet], null, 2)}`);\n // Filter asset objects to only ones that include assetPatternsToBeBundled matches\n filteredAssets = assets.filter((asset) => {\n const shouldInclude = assetShouldBeIncludedInExport(asset, bundledAssetsSet);\n if (!shouldInclude) {\n embeddedHashSet.add(asset.hash);\n }\n return shouldInclude;\n });\n debug(`Filtered assets count = ${filteredAssets.length}`);\n }\n\n const hashes = new Set<string>();\n\n // Add assets to copy.\n filteredAssets.forEach((asset) => {\n const assetId = getAssetIdForLogGrouping(projectRoot, asset);\n\n asset.files.forEach((fp: string, index: number) => {\n const hash = asset.fileHashes[index];\n if (hashes.has(hash)) return;\n hashes.add(hash);\n files.set(path.join('assets', hash), {\n originFilename: path.relative(projectRoot, fp),\n contents: fs.readFileSync(fp),\n assetId,\n });\n });\n });\n }\n\n // Add google services file if it exists\n await resolveGoogleServicesFile(projectRoot, exp);\n\n return { exp, assets, embeddedHashSet, files };\n}\n"],"names":["assetPatternsToBeBundled","resolveAssetPatternsToBeBundled","exportAssetsAsync","debug","require","mapAssetHashToAssetString","asset","hash","type","exp","updates","length","extra","undefined","assetShouldBeIncludedInExport","bundledAssetsSet","fileHashes","filter","has","setOfAssetsToBeBundled","assets","projectRoot","fullPatterns","map","p","path","join","logPatterns","allBundledAssets","shouldBundle","shouldBundleAsset","files","flat","Set","assetPatternsToBeBundledForConfig","bundledAssets","patterns","Log","log","forEach","file","__packager_asset","some","pattern","minimatch","outputDir","bundles","web","baseUrl","Map","persistMetroAssetsAsync","platform","outputDirectory","uniqBy","Object","values","flatMap","bundle","filteredAssets","embeddedHashSet","JSON","stringify","shouldInclude","add","hashes","assetId","getAssetIdForLogGrouping","fp","index","set","originFilename","relative","contents","fs","readFileSync","resolveGoogleServicesFile"],"mappings":"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"}
|
|
@@ -19,9 +19,9 @@ function _crypto() {
|
|
|
19
19
|
};
|
|
20
20
|
return data;
|
|
21
21
|
}
|
|
22
|
-
function
|
|
23
|
-
const data = require("metro/src/DeltaBundler/Serializers/helpers/js");
|
|
24
|
-
|
|
22
|
+
function _jsJs() {
|
|
23
|
+
const data = require("metro/src/DeltaBundler/Serializers/helpers/js.js");
|
|
24
|
+
_jsJs = function() {
|
|
25
25
|
return data;
|
|
26
26
|
};
|
|
27
27
|
return data;
|
|
@@ -74,7 +74,7 @@ function hashString(str) {
|
|
|
74
74
|
function getCssModules(dependencies, { processModuleFilter , projectRoot }) {
|
|
75
75
|
const promises = [];
|
|
76
76
|
for (const module of dependencies.values()){
|
|
77
|
-
if ((0,
|
|
77
|
+
if ((0, _jsJs().isJsModule)(module) && processModuleFilter(module) && (0, _jsJs().getJsOutput)(module).type === "js/module" && _path().default.relative(projectRoot, module.path) !== "package.json") {
|
|
78
78
|
const cssMetadata = getCssMetadata(module);
|
|
79
79
|
if (cssMetadata) {
|
|
80
80
|
const contents = cssMetadata.code;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/start/server/metro/getCssModulesFromBundler.ts"],"sourcesContent":["import { MetroConfig } from '@expo/metro-config';\nimport crypto from 'crypto';\nimport type { Module } from 'metro';\nimport { getJsOutput, isJsModule } from 'metro/src/DeltaBundler/Serializers/helpers/js';\nimport type { ReadOnlyDependencies } from 'metro/src/DeltaBundler/types';\nimport type IncrementalBundler from 'metro/src/IncrementalBundler';\nimport splitBundleOptions from 'metro/src/lib/splitBundleOptions';\nimport path from 'path';\n\ntype Options = {\n processModuleFilter: (modules: Module) => boolean;\n assetPlugins: readonly string[];\n platform?: string | null;\n projectRoot: string;\n publicPath: string;\n};\n\ntype MetroModuleCSSMetadata = {\n code: string;\n lineCount: number;\n map: any[];\n};\n\nexport type CSSAsset = {\n // 'styles.css'\n originFilename: string;\n // '_expo/static/css/bc6aa0a69dcebf8e8cac1faa76705756.css'\n filename: string;\n // '\\ndiv {\\n background: cyan;\\n}\\n\\n'\n source: string;\n};\n\n// s = static\nconst STATIC_EXPORT_DIRECTORY = '_expo/static/css';\n\n/** @returns the static CSS assets used in a given bundle. CSS assets are only enabled if the `@expo/metro-config` `transformerPath` is used. */\nexport async function getCssModulesFromBundler(\n config: MetroConfig,\n incrementalBundler: IncrementalBundler,\n options: any\n): Promise<CSSAsset[]> {\n // Static CSS is a web-only feature.\n if (options.platform !== 'web') {\n return [];\n }\n\n const { entryFile, onProgress, resolverOptions, transformOptions } = splitBundleOptions(options);\n\n const dependencies = await incrementalBundler.getDependencies(\n [entryFile],\n transformOptions,\n resolverOptions,\n { onProgress, shallow: false, lazy: false }\n );\n\n return getCssModules(dependencies, {\n processModuleFilter: config.serializer.processModuleFilter,\n assetPlugins: config.transformer.assetPlugins,\n platform: transformOptions.platform,\n projectRoot: config.server.unstable_serverRoot ?? config.projectRoot,\n publicPath: config.transformer.publicPath,\n });\n}\n\nfunction hashString(str: string) {\n return crypto.createHash('md5').update(str).digest('hex');\n}\n\nfunction getCssModules(\n dependencies: ReadOnlyDependencies,\n { processModuleFilter, projectRoot }: Options\n) {\n const promises = [];\n\n for (const module of dependencies.values()) {\n if (\n isJsModule(module) &&\n processModuleFilter(module) &&\n getJsOutput(module).type === 'js/module' &&\n path.relative(projectRoot, module.path) !== 'package.json'\n ) {\n const cssMetadata = getCssMetadata(module);\n if (cssMetadata) {\n const contents = cssMetadata.code;\n const filename = path.join(\n // Consistent location\n STATIC_EXPORT_DIRECTORY,\n // Hashed file contents + name for caching\n getFileName(module.path) + '-' + hashString(module.path + contents) + '.css'\n );\n promises.push({\n originFilename: path.relative(projectRoot, module.path),\n filename,\n source: contents,\n });\n }\n }\n }\n\n return promises;\n}\n\nfunction getCssMetadata(module: Module): MetroModuleCSSMetadata | null {\n const data = module.output[0]?.data;\n if (data && typeof data === 'object' && 'css' in data) {\n if (typeof data.css !== 'object' || !('code' in (data as any).css)) {\n throw new Error(\n `Unexpected CSS metadata in Metro module (${module.path}): ${JSON.stringify(data.css)}`\n );\n }\n return data.css as MetroModuleCSSMetadata;\n }\n return null;\n}\n\nexport function getFileName(module: string) {\n return path.basename(module).replace(/\\.[^.]+$/, '');\n}\n"],"names":["getCssModulesFromBundler","getFileName","STATIC_EXPORT_DIRECTORY","config","incrementalBundler","options","platform","entryFile","onProgress","resolverOptions","transformOptions","splitBundleOptions","dependencies","getDependencies","shallow","lazy","getCssModules","processModuleFilter","serializer","assetPlugins","transformer","projectRoot","server","unstable_serverRoot","publicPath","hashString","str","crypto","createHash","update","digest","promises","module","values","isJsModule","getJsOutput","type","path","relative","cssMetadata","getCssMetadata","contents","code","filename","join","push","originFilename","source","data","output","css","Error","JSON","stringify","basename","replace"],"mappings":"AAAA;;;;;;;;;;;IAoCsBA,wBAAwB,MAAxBA,wBAAwB;IA+E9BC,WAAW,MAAXA,WAAW;;;8DAlHR,QAAQ;;;;;;;yBAEa
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/server/metro/getCssModulesFromBundler.ts"],"sourcesContent":["import { MetroConfig } from '@expo/metro-config';\nimport crypto from 'crypto';\nimport type { Module } from 'metro';\nimport { getJsOutput, isJsModule } from 'metro/src/DeltaBundler/Serializers/helpers/js.js';\nimport type { ReadOnlyDependencies } from 'metro/src/DeltaBundler/types';\nimport type IncrementalBundler from 'metro/src/IncrementalBundler';\nimport splitBundleOptions from 'metro/src/lib/splitBundleOptions';\nimport path from 'path';\n\ntype Options = {\n processModuleFilter: (modules: Module) => boolean;\n assetPlugins: readonly string[];\n platform?: string | null;\n projectRoot: string;\n publicPath: string;\n};\n\ntype MetroModuleCSSMetadata = {\n code: string;\n lineCount: number;\n map: any[];\n};\n\nexport type CSSAsset = {\n // 'styles.css'\n originFilename: string;\n // '_expo/static/css/bc6aa0a69dcebf8e8cac1faa76705756.css'\n filename: string;\n // '\\ndiv {\\n background: cyan;\\n}\\n\\n'\n source: string;\n};\n\n// s = static\nconst STATIC_EXPORT_DIRECTORY = '_expo/static/css';\n\n/** @returns the static CSS assets used in a given bundle. CSS assets are only enabled if the `@expo/metro-config` `transformerPath` is used. */\nexport async function getCssModulesFromBundler(\n config: MetroConfig,\n incrementalBundler: IncrementalBundler,\n options: any\n): Promise<CSSAsset[]> {\n // Static CSS is a web-only feature.\n if (options.platform !== 'web') {\n return [];\n }\n\n const { entryFile, onProgress, resolverOptions, transformOptions } = splitBundleOptions(options);\n\n const dependencies = await incrementalBundler.getDependencies(\n [entryFile],\n transformOptions,\n resolverOptions,\n { onProgress, shallow: false, lazy: false }\n );\n\n return getCssModules(dependencies, {\n processModuleFilter: config.serializer.processModuleFilter,\n assetPlugins: config.transformer.assetPlugins,\n platform: transformOptions.platform,\n projectRoot: config.server.unstable_serverRoot ?? config.projectRoot,\n publicPath: config.transformer.publicPath,\n });\n}\n\nfunction hashString(str: string) {\n return crypto.createHash('md5').update(str).digest('hex');\n}\n\nfunction getCssModules(\n dependencies: ReadOnlyDependencies,\n { processModuleFilter, projectRoot }: Options\n) {\n const promises = [];\n\n for (const module of dependencies.values()) {\n if (\n isJsModule(module) &&\n processModuleFilter(module) &&\n getJsOutput(module).type === 'js/module' &&\n path.relative(projectRoot, module.path) !== 'package.json'\n ) {\n const cssMetadata = getCssMetadata(module);\n if (cssMetadata) {\n const contents = cssMetadata.code;\n const filename = path.join(\n // Consistent location\n STATIC_EXPORT_DIRECTORY,\n // Hashed file contents + name for caching\n getFileName(module.path) + '-' + hashString(module.path + contents) + '.css'\n );\n promises.push({\n originFilename: path.relative(projectRoot, module.path),\n filename,\n source: contents,\n });\n }\n }\n }\n\n return promises;\n}\n\nfunction getCssMetadata(module: Module): MetroModuleCSSMetadata | null {\n const data = module.output[0]?.data;\n if (data && typeof data === 'object' && 'css' in data) {\n if (typeof data.css !== 'object' || !('code' in (data as any).css)) {\n throw new Error(\n `Unexpected CSS metadata in Metro module (${module.path}): ${JSON.stringify(data.css)}`\n );\n }\n return data.css as MetroModuleCSSMetadata;\n }\n return null;\n}\n\nexport function getFileName(module: string) {\n return path.basename(module).replace(/\\.[^.]+$/, '');\n}\n"],"names":["getCssModulesFromBundler","getFileName","STATIC_EXPORT_DIRECTORY","config","incrementalBundler","options","platform","entryFile","onProgress","resolverOptions","transformOptions","splitBundleOptions","dependencies","getDependencies","shallow","lazy","getCssModules","processModuleFilter","serializer","assetPlugins","transformer","projectRoot","server","unstable_serverRoot","publicPath","hashString","str","crypto","createHash","update","digest","promises","module","values","isJsModule","getJsOutput","type","path","relative","cssMetadata","getCssMetadata","contents","code","filename","join","push","originFilename","source","data","output","css","Error","JSON","stringify","basename","replace"],"mappings":"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"}
|
package/build/src/utils/npm.js
CHANGED
|
@@ -60,7 +60,7 @@ function _stream() {
|
|
|
60
60
|
return data;
|
|
61
61
|
}
|
|
62
62
|
function _tar() {
|
|
63
|
-
const data =
|
|
63
|
+
const data = require("tar");
|
|
64
64
|
_tar = function() {
|
|
65
65
|
return data;
|
|
66
66
|
};
|
|
@@ -170,7 +170,7 @@ async function extractNpmTarballAsync(stream, props) {
|
|
|
170
170
|
transformStream.on("data", (chunk)=>{
|
|
171
171
|
hash.update(chunk);
|
|
172
172
|
});
|
|
173
|
-
await pipeline(stream, transformStream, _tar().
|
|
173
|
+
await pipeline(stream, transformStream, (0, _tar().extract)({
|
|
174
174
|
cwd,
|
|
175
175
|
filter,
|
|
176
176
|
onentry: (0, _createFileTransform.createEntryResolver)(name),
|
|
@@ -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, Readable, Stream } from 'stream';\nimport tar from 'tar';\nimport { promisify } from 'util';\n\nimport { createEntryResolver } 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');\n\n assert(results, `Could not get npm url for package \"${packageName}\"`);\n\n // Fully qualified url returns an object.\n // Example:\n // 𝝠 npm view expo-template-bare-minimum@sdk-33 dist --json\n if (typeof results === 'object' && !Array.isArray(results)) {\n return results.tarball as string;\n }\n\n // When the tag is arbitrary, the tarball is an array, return the last value as it's the most recent.\n // Example:\n // 𝝠 npm view expo-template-bare-minimum@33 dist --json\n if (Array.isArray(results)) {\n const lastResult = results[results.length - 1];\n\n if (lastResult && typeof lastResult === 'object' && !Array.isArray(lastResult)) {\n return lastResult.tarball as string;\n }\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 || !response.body) {\n throw new Error(`Unexpected response: ${response.statusText}. From url: ${url}`);\n }\n\n return Readable.fromWeb(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 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","tarball","lastResult","length","CommandError","pipeline","promisify","Stream","npmName","url","tarFilePath","readStream","fs","createReadStream","createUrlStreamAsync","response","ok","body","statusText","Readable","fromWeb","stream","cwd","strip","fileList","filter","ensureDirectoryAsync","hash","crypto","createHash","checksumAlgorithm","transformStream","PassThrough","on","chunk","update","tar","extract","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, Readable, Stream } from 'stream';\nimport { extract as tarExtract, TarOptionsWithAliases } from 'tar';\nimport { promisify } from 'util';\n\nimport { createEntryResolver } 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');\n\n assert(results, `Could not get npm url for package \"${packageName}\"`);\n\n // Fully qualified url returns an object.\n // Example:\n // 𝝠 npm view expo-template-bare-minimum@sdk-33 dist --json\n if (typeof results === 'object' && !Array.isArray(results)) {\n return results.tarball as string;\n }\n\n // When the tag is arbitrary, the tarball is an array, return the last value as it's the most recent.\n // Example:\n // 𝝠 npm view expo-template-bare-minimum@33 dist --json\n if (Array.isArray(results)) {\n const lastResult = results[results.length - 1];\n\n if (lastResult && typeof lastResult === 'object' && !Array.isArray(lastResult)) {\n return lastResult.tarball as string;\n }\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?: TarOptionsWithAliases['filter'];\n};\n\nasync function createUrlStreamAsync(url: string) {\n const response = await cachedFetch(url);\n if (!response.ok || !response.body) {\n throw new Error(`Unexpected response: ${response.statusText}. From url: ${url}`);\n }\n\n return Readable.fromWeb(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 tarExtract(\n {\n cwd,\n filter,\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","tarball","lastResult","length","CommandError","pipeline","promisify","Stream","npmName","url","tarFilePath","readStream","fs","createReadStream","createUrlStreamAsync","response","ok","body","statusText","Readable","fromWeb","stream","cwd","strip","fileList","filter","ensureDirectoryAsync","hash","crypto","createHash","checksumAlgorithm","transformStream","PassThrough","on","chunk","update","tarExtract","onentry","createEntryResolver","digest"],"mappings":"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"}
|
package/build/src/utils/tar.js
CHANGED
|
@@ -14,7 +14,7 @@ function _spawnAsync() {
|
|
|
14
14
|
return data;
|
|
15
15
|
}
|
|
16
16
|
function _tar() {
|
|
17
|
-
const data =
|
|
17
|
+
const data = require("tar");
|
|
18
18
|
_tar = function() {
|
|
19
19
|
return data;
|
|
20
20
|
};
|
|
@@ -86,7 +86,7 @@ async function extractAsync(input, output) {
|
|
|
86
86
|
debug(`Extracting ${input} to ${output} using JS tar module`);
|
|
87
87
|
// tar node module has previously had problems with big files, and seems to
|
|
88
88
|
// be slower, so only use it as a backup.
|
|
89
|
-
await _tar().
|
|
89
|
+
await (0, _tar().extract)({
|
|
90
90
|
file: input,
|
|
91
91
|
cwd: output
|
|
92
92
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/utils/tar.ts"],"sourcesContent":["import spawnAsync from '@expo/spawn-async';\nimport
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/tar.ts"],"sourcesContent":["import spawnAsync from '@expo/spawn-async';\nimport { extract as tarExtract } from 'tar';\n\nimport * as Log from '../log';\n\nconst debug = require('debug')('expo:utils:tar') as typeof console.log;\n\n/** Extract a tar using built-in tools if available and falling back on Node.js. */\nexport async function extractAsync(input: string, output: string): Promise<void> {\n try {\n if (process.platform !== 'win32') {\n debug(`Extracting ${input} to ${output}`);\n await spawnAsync('tar', ['-xf', input, '-C', output], {\n stdio: 'inherit',\n });\n return;\n }\n } catch (error: any) {\n Log.warn(\n `Failed to extract tar using native tools, falling back on JS tar module. ${error.message}`\n );\n }\n debug(`Extracting ${input} to ${output} using JS tar module`);\n // tar node module has previously had problems with big files, and seems to\n // be slower, so only use it as a backup.\n await tarExtract({ file: input, cwd: output });\n}\n"],"names":["extractAsync","debug","require","input","output","process","platform","spawnAsync","stdio","error","Log","warn","message","tarExtract","file","cwd"],"mappings":"AAAA;;;;+BAQsBA,cAAY;;aAAZA,YAAY;;;8DARX,mBAAmB;;;;;;;yBACJ,KAAK;;;;;;2DAEtB,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAE7B,MAAMC,KAAK,GAAGC,OAAO,CAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC,AAAsB,AAAC;AAGhE,eAAeF,YAAY,CAACG,KAAa,EAAEC,MAAc,EAAiB;IAC/E,IAAI;QACF,IAAIC,OAAO,CAACC,QAAQ,KAAK,OAAO,EAAE;YAChCL,KAAK,CAAC,CAAC,WAAW,EAAEE,KAAK,CAAC,IAAI,EAAEC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC1C,MAAMG,IAAAA,WAAU,EAAA,QAAA,EAAC,KAAK,EAAE;gBAAC,KAAK;gBAAEJ,KAAK;gBAAE,IAAI;gBAAEC,MAAM;aAAC,EAAE;gBACpDI,KAAK,EAAE,SAAS;aACjB,CAAC,CAAC;YACH,OAAO;QACT,CAAC;IACH,EAAE,OAAOC,KAAK,EAAO;QACnBC,IAAG,CAACC,IAAI,CACN,CAAC,yEAAyE,EAAEF,KAAK,CAACG,OAAO,CAAC,CAAC,CAC5F,CAAC;IACJ,CAAC;IACDX,KAAK,CAAC,CAAC,WAAW,EAAEE,KAAK,CAAC,IAAI,EAAEC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAC9D,2EAA2E;IAC3E,yCAAyC;IACzC,MAAMS,IAAAA,IAAU,EAAA,QAAA,EAAC;QAAEC,IAAI,EAAEX,KAAK;QAAEY,GAAG,EAAEX,MAAM;KAAE,CAAC,CAAC;AACjD,CAAC"}
|
|
@@ -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/${"1.0.0-canary-
|
|
34
|
+
"user-agent": `expo-cli/${"1.0.0-canary-20250306-d9d3e02"}`,
|
|
35
35
|
authorization: "Basic " + _nodeBuffer().Buffer.from(`${target}:`).toString("base64")
|
|
36
36
|
};
|
|
37
37
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@expo/cli",
|
|
3
|
-
"version": "1.0.0-canary-
|
|
3
|
+
"version": "1.0.0-canary-20250306-d9d3e02",
|
|
4
4
|
"description": "The Expo CLI",
|
|
5
5
|
"main": "build/bin/cli",
|
|
6
6
|
"bin": {
|
|
@@ -42,17 +42,17 @@
|
|
|
42
42
|
"@0no-co/graphql.web": "^1.0.8",
|
|
43
43
|
"@babel/runtime": "^7.20.0",
|
|
44
44
|
"@expo/code-signing-certificates": "^0.0.5",
|
|
45
|
-
"@expo/config": "11.0.0-canary-
|
|
46
|
-
"@expo/config-plugins": "9.1.0-canary-
|
|
45
|
+
"@expo/config": "11.0.0-canary-20250306-d9d3e02",
|
|
46
|
+
"@expo/config-plugins": "9.1.0-canary-20250306-d9d3e02",
|
|
47
47
|
"@expo/devcert": "^1.1.2",
|
|
48
|
-
"@expo/env": "1.0.1-canary-
|
|
49
|
-
"@expo/image-utils": "0.6.6-canary-
|
|
50
|
-
"@expo/json-file": "9.0.3-canary-
|
|
51
|
-
"@expo/metro-config": "0.20.0-canary-
|
|
52
|
-
"@expo/osascript": "2.1.7-canary-
|
|
53
|
-
"@expo/package-manager": "1.6.2-canary-
|
|
54
|
-
"@expo/plist": "0.2.3-canary-
|
|
55
|
-
"@expo/prebuild-config": "9.0.0-canary-
|
|
48
|
+
"@expo/env": "1.0.1-canary-20250306-d9d3e02",
|
|
49
|
+
"@expo/image-utils": "0.6.6-canary-20250306-d9d3e02",
|
|
50
|
+
"@expo/json-file": "9.0.3-canary-20250306-d9d3e02",
|
|
51
|
+
"@expo/metro-config": "0.20.0-canary-20250306-d9d3e02",
|
|
52
|
+
"@expo/osascript": "2.1.7-canary-20250306-d9d3e02",
|
|
53
|
+
"@expo/package-manager": "1.6.2-canary-20250306-d9d3e02",
|
|
54
|
+
"@expo/plist": "0.2.3-canary-20250306-d9d3e02",
|
|
55
|
+
"@expo/prebuild-config": "9.0.0-canary-20250306-d9d3e02",
|
|
56
56
|
"@expo/spawn-async": "^1.7.2",
|
|
57
57
|
"@expo/ws-tunnel": "^1.0.1",
|
|
58
58
|
"@expo/xcpretty": "^4.3.0",
|
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
"getenv": "^1.0.0",
|
|
75
75
|
"glob": "^10.4.2",
|
|
76
76
|
"internal-ip": "6.1.0",
|
|
77
|
-
"minimatch": "^
|
|
77
|
+
"minimatch": "^9.0.0",
|
|
78
78
|
"node-forge": "^1.3.1",
|
|
79
79
|
"npm-package-arg": "^11.0.0",
|
|
80
80
|
"ora": "^3.4.0",
|
|
@@ -95,7 +95,7 @@
|
|
|
95
95
|
"source-map-support": "~0.5.21",
|
|
96
96
|
"stacktrace-parser": "^0.1.10",
|
|
97
97
|
"structured-headers": "^0.4.1",
|
|
98
|
-
"tar": "^
|
|
98
|
+
"tar": "^7.4.3",
|
|
99
99
|
"terminal-link": "^2.1.1",
|
|
100
100
|
"undici": "^6.18.2",
|
|
101
101
|
"wrap-ansi": "^7.0.0",
|
|
@@ -109,7 +109,7 @@
|
|
|
109
109
|
"devDependencies": {
|
|
110
110
|
"@expo/multipart-body-parser": "^1.0.0",
|
|
111
111
|
"@expo/ngrok": "4.1.3",
|
|
112
|
-
"@expo/server": "0.5.2-canary-
|
|
112
|
+
"@expo/server": "0.5.2-canary-20250306-d9d3e02",
|
|
113
113
|
"@graphql-codegen/cli": "^2.16.3",
|
|
114
114
|
"@graphql-codegen/typescript": "^2.8.7",
|
|
115
115
|
"@graphql-codegen/typescript-operations": "^2.5.12",
|
|
@@ -125,7 +125,6 @@
|
|
|
125
125
|
"@types/execa": "^0.9.0",
|
|
126
126
|
"@types/getenv": "^1.0.0",
|
|
127
127
|
"@types/klaw-sync": "^6.0.0",
|
|
128
|
-
"@types/minimatch": "^3.0.5",
|
|
129
128
|
"@types/node": "^18.19.34",
|
|
130
129
|
"@types/npm-package-arg": "^6.1.0",
|
|
131
130
|
"@types/picomatch": "^2.3.3",
|
|
@@ -134,14 +133,13 @@
|
|
|
134
133
|
"@types/resolve": "^1.20.2",
|
|
135
134
|
"@types/semver": "^7.5.8",
|
|
136
135
|
"@types/send": "^0.17.1",
|
|
137
|
-
"@types/tar": "^6.1.1",
|
|
138
136
|
"@types/webpack": "~4.41.32",
|
|
139
137
|
"@types/webpack-dev-server": "^3.11.0",
|
|
140
138
|
"@types/wrap-ansi": "^8.0.1",
|
|
141
139
|
"@types/ws": "^8.5.4",
|
|
142
140
|
"devtools-protocol": "^0.0.1113120",
|
|
143
141
|
"expo-atlas": "^0.4.0",
|
|
144
|
-
"expo-module-scripts": "4.0.5-canary-
|
|
142
|
+
"expo-module-scripts": "4.0.5-canary-20250306-d9d3e02",
|
|
145
143
|
"find-process": "^1.4.7",
|
|
146
144
|
"jest-runner-tsd": "^6.0.0",
|
|
147
145
|
"klaw-sync": "^6.0.0",
|
|
@@ -154,5 +152,5 @@
|
|
|
154
152
|
"tree-kill": "^1.2.2",
|
|
155
153
|
"tsd": "^0.28.1"
|
|
156
154
|
},
|
|
157
|
-
"gitHead": "
|
|
155
|
+
"gitHead": "d9d3e024d8742099c307754673f17117a20c1dea"
|
|
158
156
|
}
|