@expo/metro-config 0.17.2 → 0.17.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/build/ExpoMetroConfig.js +239 -366
  2. package/build/ExpoMetroConfig.js.map +1 -1
  3. package/build/babel-core.js +6 -23
  4. package/build/babel-core.js.map +1 -1
  5. package/build/babel-transformer.js +117 -162
  6. package/build/babel-transformer.js.map +1 -1
  7. package/build/customizeFrame.js +84 -78
  8. package/build/customizeFrame.js.map +1 -1
  9. package/build/env.js +23 -37
  10. package/build/env.js.map +1 -1
  11. package/build/file-store.js +13 -21
  12. package/build/file-store.js.map +1 -1
  13. package/build/getModulesPaths.js +31 -48
  14. package/build/getModulesPaths.js.map +1 -1
  15. package/build/getWatchFolders.js +70 -98
  16. package/build/getWatchFolders.js.map +1 -1
  17. package/build/loadBabelConfig.js +30 -49
  18. package/build/loadBabelConfig.js.map +1 -1
  19. package/build/rewriteRequestUrl.js +82 -142
  20. package/build/rewriteRequestUrl.js.map +1 -1
  21. package/build/serializer/debugId.js +23 -22
  22. package/build/serializer/debugId.js.map +1 -1
  23. package/build/serializer/environmentVariableSerializerPlugin.js +90 -101
  24. package/build/serializer/environmentVariableSerializerPlugin.js.map +1 -1
  25. package/build/serializer/exportHermes.js +96 -133
  26. package/build/serializer/exportHermes.js.map +1 -1
  27. package/build/serializer/exportPath.js +18 -35
  28. package/build/serializer/exportPath.js.map +1 -1
  29. package/build/serializer/fork/baseJSBundle.js +124 -147
  30. package/build/serializer/fork/baseJSBundle.js.map +1 -1
  31. package/build/serializer/fork/js.js +81 -116
  32. package/build/serializer/fork/js.js.map +1 -1
  33. package/build/serializer/fork/processModules.js +22 -36
  34. package/build/serializer/fork/processModules.js.map +1 -1
  35. package/build/serializer/getCssDeps.js +64 -95
  36. package/build/serializer/getCssDeps.js.map +1 -1
  37. package/build/serializer/jsOutput.js +6 -16
  38. package/build/serializer/jsOutput.js.map +1 -1
  39. package/build/serializer/serializeChunks.js +406 -483
  40. package/build/serializer/serializeChunks.js.map +1 -1
  41. package/build/serializer/serializerAssets.js +1 -0
  42. package/build/serializer/serializerAssets.js.map +1 -1
  43. package/build/serializer/withExpoSerializers.js +165 -236
  44. package/build/serializer/withExpoSerializers.js.map +1 -1
  45. package/build/transform-worker/asset-transformer.js +21 -44
  46. package/build/transform-worker/asset-transformer.js.map +1 -1
  47. package/build/transform-worker/css-modules.js +57 -84
  48. package/build/transform-worker/css-modules.js.map +1 -1
  49. package/build/transform-worker/css.js +21 -20
  50. package/build/transform-worker/css.js.map +1 -1
  51. package/build/transform-worker/getAssets.js +38 -75
  52. package/build/transform-worker/getAssets.js.map +1 -1
  53. package/build/transform-worker/metro-transform-worker.js +384 -489
  54. package/build/transform-worker/metro-transform-worker.js.map +1 -1
  55. package/build/transform-worker/postcss.js +176 -233
  56. package/build/transform-worker/postcss.js.map +1 -1
  57. package/build/transform-worker/sass.js +30 -38
  58. package/build/transform-worker/sass.js.map +1 -1
  59. package/build/transform-worker/transform-worker.js +156 -188
  60. package/build/transform-worker/transform-worker.js.map +1 -1
  61. package/build/transform-worker/utils/require.js +30 -28
  62. package/build/transform-worker/utils/require.js.map +1 -1
  63. package/build/transformSync.js +40 -28
  64. package/build/transformSync.js.map +1 -1
  65. package/build/transformer/createExoticTransformer.js +96 -129
  66. package/build/transformer/createExoticTransformer.js.map +1 -1
  67. package/build/transformer/createMatcher.js +37 -46
  68. package/build/transformer/createMatcher.js.map +1 -1
  69. package/build/transformer/createMultiRuleTransformer.js +170 -240
  70. package/build/transformer/createMultiRuleTransformer.js.map +1 -1
  71. package/build/transformer/generateFunctionMap.js +20 -23
  72. package/build/transformer/generateFunctionMap.js.map +1 -1
  73. package/build/transformer/getBabelConfig.js +94 -127
  74. package/build/transformer/getBabelConfig.js.map +1 -1
  75. package/build/transformer/getCacheKey.js +17 -31
  76. package/build/transformer/getCacheKey.js.map +1 -1
  77. package/build/transformer/index.js +11 -62
  78. package/build/transformer/index.js.map +1 -1
  79. package/build/transformer/metro-expo-exotic-babel-transformer.js +3 -12
  80. package/build/transformer/metro-expo-exotic-babel-transformer.js.map +1 -1
  81. package/build/traveling/metro-config.js +12 -19
  82. package/build/traveling/metro-config.js.map +1 -1
  83. package/build/utils/hash.js +8 -14
  84. package/build/utils/hash.js.map +1 -1
  85. package/package.json +6 -6
@@ -1 +1 @@
1
- {"version":3,"file":"withExpoSerializers.js","names":["_jscSafeUrl","data","require","_sourceMapString","_interopRequireDefault","_bundleToString","_debugId","_environmentVariableSerializerPlugin","_baseJSBundle","_serializeChunks","_serializerAssets","_env","obj","__esModule","default","withExpoSerializers","config","options","processors","push","serverPreludeSerializerPlugin","env","EXPO_NO_CLIENT_ENV_VARS","environmentVariableSerializerPlugin","withSerializerPlugins","_config$serializer","originalSerializer","serializer","customSerializer","createSerializerFromSerialProcessors","createDefaultExportCustomSerializer","configOptions","entryPoint","preModules","graph","_config$serializer2","isPossiblyDev","transformOptions","hot","enableDebugId","inlineSourceMap","debugId","loadDebugId","bundle","baseJSBundle","undefined","outputCode","bundleToString","code","stringToUUID","premodulesToBundle","bundleCode","bundleMap","_config$serializer3","map","unstable_beforeAssetSerializationPlugins","plugin","premodules","sourceMapString","getSortedModules","dependencies","values","excludeSource","processModuleFilter","shouldAddToIgnoreList","mutateSourceMapWithDebugId","sourceMap","sourceMapObject","JSON","parse","stringify","getDefaultSerializer","fallbackSerializer","defaultSerializer","props","customSerializerOptions","serializerOptions","supportsNonSerialReturn","output","includeBytecode","outputMode","includeSourceMaps","sourceUrl","isJscSafeUrl","toNormalUrl","url","URL","searchParams","get","assets","graphToSerialAssetsAsync","finalSerializer","processor"],"sources":["../../src/serializer/withExpoSerializers.ts"],"sourcesContent":["/**\n * Copyright © 2022 650 Industries.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { isJscSafeUrl, toNormalUrl } from 'jsc-safe-url';\nimport { MetroConfig, MixedOutput, Module, ReadOnlyGraph, SerializerOptions } from 'metro';\nimport sourceMapString from 'metro/src/DeltaBundler/Serializers/sourceMapString';\nimport bundleToString from 'metro/src/lib/bundleToString';\nimport { ConfigT, InputConfigT } from 'metro-config';\n\nimport { stringToUUID } from './debugId';\nimport {\n environmentVariableSerializerPlugin,\n serverPreludeSerializerPlugin,\n} from './environmentVariableSerializerPlugin';\nimport { ExpoSerializerOptions, baseJSBundle } from './fork/baseJSBundle';\nimport { getSortedModules, graphToSerialAssetsAsync } from './serializeChunks';\nimport { SerialAsset } from './serializerAssets';\nimport { env } from '../env';\n\nexport type Serializer = NonNullable<ConfigT['serializer']['customSerializer']>;\n\nexport type SerializerParameters = [\n string,\n readonly Module[],\n ReadOnlyGraph,\n ExpoSerializerOptions,\n];\n\nexport type SerializerConfigOptions = {\n unstable_beforeAssetSerializationPlugins?: ((serializationInput: {\n graph: ReadOnlyGraph<MixedOutput>;\n premodules: Module[];\n debugId?: string;\n }) => Module[])[];\n};\n\n// A serializer that processes the input and returns a modified version.\n// Unlike a serializer, these can be chained together.\nexport type SerializerPlugin = (...props: SerializerParameters) => SerializerParameters;\n\nexport function withExpoSerializers(\n config: InputConfigT,\n options: SerializerConfigOptions = {}\n): InputConfigT {\n const processors: SerializerPlugin[] = [];\n processors.push(serverPreludeSerializerPlugin);\n if (!env.EXPO_NO_CLIENT_ENV_VARS) {\n processors.push(environmentVariableSerializerPlugin);\n }\n\n return withSerializerPlugins(config, processors, options);\n}\n\n// There can only be one custom serializer as the input doesn't match the output.\n// Here we simply run\nexport function withSerializerPlugins(\n config: InputConfigT,\n processors: SerializerPlugin[],\n options: SerializerConfigOptions = {}\n): InputConfigT {\n const originalSerializer = config.serializer?.customSerializer;\n\n return {\n ...config,\n serializer: {\n ...config.serializer,\n customSerializer: createSerializerFromSerialProcessors(\n config,\n processors,\n originalSerializer ?? null,\n options\n ),\n },\n };\n}\n\nexport function createDefaultExportCustomSerializer(\n config: Partial<MetroConfig>,\n configOptions: SerializerConfigOptions = {}\n): Serializer {\n return async (\n entryPoint: string,\n preModules: readonly Module<MixedOutput>[],\n graph: ReadOnlyGraph<MixedOutput>,\n options: SerializerOptions<MixedOutput>\n ): Promise<string | { code: string; map: string }> => {\n const isPossiblyDev = graph.transformOptions.hot;\n // TODO: This is a temporary solution until we've converged on using the new serializer everywhere.\n const enableDebugId = options.inlineSourceMap !== true && !isPossiblyDev;\n\n let debugId: string | undefined;\n const loadDebugId = () => {\n if (!enableDebugId || debugId) {\n return debugId;\n }\n\n // TODO: Perform this cheaper.\n const bundle = baseJSBundle(entryPoint, preModules, graph, {\n ...options,\n debugId: undefined,\n });\n const outputCode = bundleToString(bundle).code;\n debugId = stringToUUID(outputCode);\n return debugId;\n };\n\n let premodulesToBundle = [...preModules];\n\n let bundleCode: string | null = null;\n let bundleMap: string | null = null;\n\n if (config.serializer?.customSerializer) {\n const bundle = await config.serializer?.customSerializer(\n entryPoint,\n premodulesToBundle,\n graph,\n options\n );\n if (typeof bundle === 'string') {\n bundleCode = bundle;\n } else {\n bundleCode = bundle.code;\n bundleMap = bundle.map;\n }\n } else {\n const debugId = loadDebugId();\n if (configOptions.unstable_beforeAssetSerializationPlugins) {\n for (const plugin of configOptions.unstable_beforeAssetSerializationPlugins) {\n premodulesToBundle = plugin({ graph, premodules: [...premodulesToBundle], debugId });\n }\n }\n bundleCode = bundleToString(\n baseJSBundle(entryPoint, premodulesToBundle, graph, {\n ...options,\n debugId,\n })\n ).code;\n }\n\n if (isPossiblyDev) {\n if (bundleMap == null) {\n return bundleCode;\n }\n return {\n code: bundleCode,\n map: bundleMap,\n };\n }\n\n // Exports....\n\n if (!bundleMap) {\n bundleMap = sourceMapString(\n [...premodulesToBundle, ...getSortedModules([...graph.dependencies.values()], options)],\n {\n // TODO: Surface this somehow.\n excludeSource: false,\n // excludeSource: options.serializerOptions?.excludeSource,\n processModuleFilter: options.processModuleFilter,\n shouldAddToIgnoreList: options.shouldAddToIgnoreList,\n }\n );\n }\n\n if (enableDebugId) {\n const mutateSourceMapWithDebugId = (sourceMap: string) => {\n // NOTE: debugId isn't required for inline source maps because the source map is included in the same file, therefore\n // we don't need to disambiguate between multiple source maps.\n const sourceMapObject = JSON.parse(sourceMap);\n sourceMapObject.debugId = loadDebugId();\n // NOTE: Sentry does this, but bun does not.\n // sourceMapObject.debug_id = debugId;\n return JSON.stringify(sourceMapObject);\n };\n\n return {\n code: bundleCode,\n map: mutateSourceMapWithDebugId(bundleMap),\n };\n }\n\n return {\n code: bundleCode,\n map: bundleMap,\n };\n };\n}\n\nfunction getDefaultSerializer(\n config: MetroConfig,\n fallbackSerializer?: Serializer | null,\n configOptions: SerializerConfigOptions = {}\n): Serializer {\n const defaultSerializer =\n fallbackSerializer ?? createDefaultExportCustomSerializer(config, configOptions);\n\n return async (\n ...props: SerializerParameters\n ): Promise<string | { code: string; map: string }> => {\n const [, , , options] = props;\n\n const customSerializerOptions = options.serializerOptions;\n\n // Custom options can only be passed outside of the dev server, meaning\n // we don't need to stringify the results at the end, i.e. this is `npx expo export` or `npx expo export:embed`.\n const supportsNonSerialReturn = !!customSerializerOptions?.output;\n\n const serializerOptions = (() => {\n if (customSerializerOptions) {\n return {\n includeBytecode: customSerializerOptions.includeBytecode,\n outputMode: customSerializerOptions.output,\n includeSourceMaps: customSerializerOptions.includeSourceMaps,\n };\n }\n if (options.sourceUrl) {\n const sourceUrl = isJscSafeUrl(options.sourceUrl)\n ? toNormalUrl(options.sourceUrl)\n : options.sourceUrl;\n\n const url = new URL(sourceUrl, 'https://expo.dev');\n\n return {\n outputMode: url.searchParams.get('serializer.output'),\n includeSourceMaps: url.searchParams.get('serializer.map') === 'true',\n includeBytecode: url.searchParams.get('serializer.bytecode') === 'true',\n };\n }\n return null;\n })();\n\n if (serializerOptions?.outputMode !== 'static') {\n return defaultSerializer(...props);\n }\n\n // Mutate the serializer options with the parsed options.\n options.serializerOptions = {\n ...options.serializerOptions,\n ...serializerOptions,\n };\n\n const assets = await graphToSerialAssetsAsync(\n config,\n {\n includeSourceMaps: !!serializerOptions.includeSourceMaps,\n includeBytecode: !!serializerOptions.includeBytecode,\n ...configOptions,\n },\n ...props\n );\n\n if (supportsNonSerialReturn) {\n // @ts-expect-error: this is future proofing for adding assets to the output as well.\n return assets;\n }\n\n return JSON.stringify(assets);\n };\n}\n\nexport function createSerializerFromSerialProcessors(\n config: MetroConfig,\n processors: (SerializerPlugin | undefined)[],\n originalSerializer: Serializer | null,\n options: SerializerConfigOptions = {}\n): Serializer {\n const finalSerializer = getDefaultSerializer(config, originalSerializer, options);\n return (...props: SerializerParameters): ReturnType<Serializer> => {\n for (const processor of processors) {\n if (processor) {\n props = processor(...props);\n }\n }\n\n return finalSerializer(...props);\n };\n}\n\nexport { SerialAsset };\n"],"mappings":"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"}
1
+ {"version":3,"file":"withExpoSerializers.js","sourceRoot":"","sources":["../../src/serializer/withExpoSerializers.ts"],"names":[],"mappings":"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"}
@@ -1,31 +1,9 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.transform = transform;
7
- function _util() {
8
- const data = require("metro/src/Bundler/util");
9
- _util = function () {
10
- return data;
11
- };
12
- return data;
13
- }
14
- function _nodePath() {
15
- const data = _interopRequireDefault(require("node:path"));
16
- _nodePath = function () {
17
- return data;
18
- };
19
- return data;
20
- }
21
- function _getAssets() {
22
- const data = require("./getAssets");
23
- _getAssets = function () {
24
- return data;
25
- };
26
- return data;
27
- }
28
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.transform = void 0;
29
7
  /**
30
8
  * Copyright 2023-present 650 Industries (Expo). All rights reserved.
31
9
  * Copyright (c) Meta Platforms, Inc. and affiliates.
@@ -36,22 +14,21 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
36
14
  * Fork of the upstream transformer, but with modifications made for web production hashing.
37
15
  * https://github.com/facebook/metro/blob/412771475c540b6f85d75d9dcd5a39a6e0753582/packages/metro-transform-worker/src/utils/assetTransformer.js#L1
38
16
  */
39
-
40
- async function transform({
41
- filename,
42
- options
43
- }, assetRegistryPath, assetDataPlugins) {
44
- var _options;
45
- (_options = options) !== null && _options !== void 0 ? _options : options = options || {
46
- platform: '',
47
- projectRoot: '',
48
- inlineRequires: false,
49
- minify: false
50
- };
51
- const absolutePath = _nodePath().default.resolve(options.projectRoot, filename);
52
- const data = await (0, _getAssets().getUniversalAssetData)(absolutePath, filename, assetDataPlugins, options.platform, options.publicPath);
53
- return {
54
- ast: (0, _util().generateAssetCodeFileAst)(assetRegistryPath, data)
55
- };
17
+ const util_1 = require("metro/src/Bundler/util");
18
+ const node_path_1 = __importDefault(require("node:path"));
19
+ const getAssets_1 = require("./getAssets");
20
+ async function transform({ filename, options }, assetRegistryPath, assetDataPlugins) {
21
+ options ??= options || {
22
+ platform: '',
23
+ projectRoot: '',
24
+ inlineRequires: false,
25
+ minify: false,
26
+ };
27
+ const absolutePath = node_path_1.default.resolve(options.projectRoot, filename);
28
+ const data = await (0, getAssets_1.getUniversalAssetData)(absolutePath, filename, assetDataPlugins, options.platform, options.publicPath);
29
+ return {
30
+ ast: (0, util_1.generateAssetCodeFileAst)(assetRegistryPath, data),
31
+ };
56
32
  }
33
+ exports.transform = transform;
57
34
  //# sourceMappingURL=asset-transformer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"asset-transformer.js","names":["_util","data","require","_nodePath","_interopRequireDefault","_getAssets","obj","__esModule","default","transform","filename","options","assetRegistryPath","assetDataPlugins","_options","platform","projectRoot","inlineRequires","minify","absolutePath","path","resolve","getUniversalAssetData","publicPath","ast","generateAssetCodeFileAst"],"sources":["../../src/transform-worker/asset-transformer.ts"],"sourcesContent":["/**\n * Copyright 2023-present 650 Industries (Expo). All rights reserved.\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 * Fork of the upstream transformer, but with modifications made for web production hashing.\n * https://github.com/facebook/metro/blob/412771475c540b6f85d75d9dcd5a39a6e0753582/packages/metro-transform-worker/src/utils/assetTransformer.js#L1\n */\nimport { generateAssetCodeFileAst } from 'metro/src/Bundler/util';\nimport { BabelTransformerArgs } from 'metro-babel-transformer';\nimport path from 'node:path';\n\nimport { getUniversalAssetData } from './getAssets';\n\nexport async function transform(\n { filename, options }: BabelTransformerArgs,\n assetRegistryPath: string,\n assetDataPlugins: readonly string[]\n) {\n options ??= options || {\n platform: '',\n projectRoot: '',\n inlineRequires: false,\n minify: false,\n };\n\n const absolutePath = path.resolve(options.projectRoot, filename);\n\n const data = await getUniversalAssetData(\n absolutePath,\n filename,\n assetDataPlugins,\n options.platform,\n options.publicPath\n );\n\n return {\n ast: generateAssetCodeFileAst(assetRegistryPath, data),\n };\n}\n"],"mappings":";;;;;;AAUA,SAAAA,MAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,KAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAE,UAAA;EAAA,MAAAF,IAAA,GAAAG,sBAAA,CAAAF,OAAA;EAAAC,SAAA,YAAAA,CAAA;IAAA,OAAAF,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAI,WAAA;EAAA,MAAAJ,IAAA,GAAAC,OAAA;EAAAG,UAAA,YAAAA,CAAA;IAAA,OAAAJ,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAAoD,SAAAG,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAdpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAOO,eAAeG,SAASA,CAC7B;EAAEC,QAAQ;EAAEC;AAA8B,CAAC,EAC3CC,iBAAyB,EACzBC,gBAAmC,EACnC;EAAA,IAAAC,QAAA;EACA,CAAAA,QAAA,GAAAH,OAAO,cAAAG,QAAA,cAAAA,QAAA,GAAPH,OAAO,GAAKA,OAAO,IAAI;IACrBI,QAAQ,EAAE,EAAE;IACZC,WAAW,EAAE,EAAE;IACfC,cAAc,EAAE,KAAK;IACrBC,MAAM,EAAE;EACV,CAAC;EAED,MAAMC,YAAY,GAAGC,mBAAI,CAACC,OAAO,CAACV,OAAO,CAACK,WAAW,EAAEN,QAAQ,CAAC;EAEhE,MAAMT,IAAI,GAAG,MAAM,IAAAqB,kCAAqB,EACtCH,YAAY,EACZT,QAAQ,EACRG,gBAAgB,EAChBF,OAAO,CAACI,QAAQ,EAChBJ,OAAO,CAACY,UACV,CAAC;EAED,OAAO;IACLC,GAAG,EAAE,IAAAC,gCAAwB,EAACb,iBAAiB,EAAEX,IAAI;EACvD,CAAC;AACH"}
1
+ {"version":3,"file":"asset-transformer.js","sourceRoot":"","sources":["../../src/transform-worker/asset-transformer.ts"],"names":[],"mappings":";;;;;;AAAA;;;;;;;;;GASG;AACH,iDAAkE;AAElE,0DAA6B;AAE7B,2CAAoD;AAE7C,KAAK,UAAU,SAAS,CAC7B,EAAE,QAAQ,EAAE,OAAO,EAAwB,EAC3C,iBAAyB,EACzB,gBAAmC;IAEnC,OAAO,KAAK,OAAO,IAAI;QACrB,QAAQ,EAAE,EAAE;QACZ,WAAW,EAAE,EAAE;QACf,cAAc,EAAE,KAAK;QACrB,MAAM,EAAE,KAAK;KACd,CAAC;IAEF,MAAM,YAAY,GAAG,mBAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAEjE,MAAM,IAAI,GAAG,MAAM,IAAA,iCAAqB,EACtC,YAAY,EACZ,QAAQ,EACR,gBAAgB,EAChB,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,UAAU,CACnB,CAAC;IAEF,OAAO;QACL,GAAG,EAAE,IAAA,+BAAwB,EAAC,iBAAiB,EAAE,IAAI,CAAC;KACvD,CAAC;AACJ,CAAC;AAzBD,8BAyBC"}
@@ -1,95 +1,68 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.convertLightningCssToReactNativeWebStyleSheet = convertLightningCssToReactNativeWebStyleSheet;
7
- exports.matchCssModule = matchCssModule;
8
- exports.transformCssModuleWeb = transformCssModuleWeb;
9
- function _css() {
10
- const data = require("./css");
11
- _css = function () {
12
- return data;
13
- };
14
- return data;
15
- }
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.matchCssModule = exports.convertLightningCssToReactNativeWebStyleSheet = exports.transformCssModuleWeb = void 0;
4
+ const css_1 = require("./css");
16
5
  const RNW_CSS_CLASS_ID = '_';
17
6
  async function transformCssModuleWeb(props) {
18
- const {
19
- transform
20
- } = require('lightningcss');
21
-
22
- // TODO: Add bundling to resolve imports
23
- // https://lightningcss.dev/bundling.html#bundling-order
24
-
25
- const cssResults = transform({
26
- filename: props.filename,
27
- code: Buffer.from(props.src),
28
- sourceMap: props.options.sourceMap,
29
- cssModules: {
30
- // Prevent renaming CSS variables to ensure
31
- // variables created in global files are available.
32
- dashedIdents: false
33
- },
34
- // cssModules: true,
35
- projectRoot: props.options.projectRoot,
36
- minify: props.options.minify
37
- });
38
- const codeAsString = cssResults.code.toString();
39
- const {
40
- styles,
41
- reactNativeWeb,
42
- variables
43
- } = convertLightningCssToReactNativeWebStyleSheet(cssResults.exports);
44
- let outputModule = `module.exports=Object.assign(${JSON.stringify(styles)},{unstable_styles:${JSON.stringify(reactNativeWeb)}},${JSON.stringify(variables)});`;
45
- if (props.options.dev) {
46
- const runtimeCss = (0, _css().wrapDevelopmentCSS)({
47
- ...props,
48
- src: codeAsString
7
+ const { transform } = require('lightningcss');
8
+ // TODO: Add bundling to resolve imports
9
+ // https://lightningcss.dev/bundling.html#bundling-order
10
+ const cssResults = transform({
11
+ filename: props.filename,
12
+ code: Buffer.from(props.src),
13
+ sourceMap: props.options.sourceMap,
14
+ cssModules: {
15
+ // Prevent renaming CSS variables to ensure
16
+ // variables created in global files are available.
17
+ dashedIdents: false,
18
+ },
19
+ // cssModules: true,
20
+ projectRoot: props.options.projectRoot,
21
+ minify: props.options.minify,
49
22
  });
50
- outputModule += '\n' + runtimeCss;
51
- }
52
- return {
53
- output: outputModule,
54
- css: cssResults.code,
55
- map: cssResults.map
56
- };
57
- }
58
- function convertLightningCssToReactNativeWebStyleSheet(input) {
59
- const styles = {};
60
- const reactNativeWeb = {};
61
- const variables = {};
62
- // e.g. { container: { name: 'ahs8IW_container', composes: [], isReferenced: false }, }
63
- Object.entries(input).map(([key, value]) => {
64
- // order matters here
65
- let className = value.name;
66
- if (value.composes.length) {
67
- className += ' ' + value.composes.map(value => value.name).join(' ');
68
- }
69
-
70
- // CSS Variables will be `{string: string}`
71
- if (key.startsWith('--')) {
72
- variables[key] = className;
23
+ const codeAsString = cssResults.code.toString();
24
+ const { styles, reactNativeWeb, variables } = convertLightningCssToReactNativeWebStyleSheet(cssResults.exports);
25
+ let outputModule = `module.exports=Object.assign(${JSON.stringify(styles)},{unstable_styles:${JSON.stringify(reactNativeWeb)}},${JSON.stringify(variables)});`;
26
+ if (props.options.dev) {
27
+ const runtimeCss = (0, css_1.wrapDevelopmentCSS)({
28
+ ...props,
29
+ src: codeAsString,
30
+ });
31
+ outputModule += '\n' + runtimeCss;
73
32
  }
74
- styles[key] = className;
75
- reactNativeWeb[key] = {
76
- $$css: true,
77
- [RNW_CSS_CLASS_ID]: className
78
- };
79
33
  return {
80
- [key]: {
81
- $$css: true,
82
- [RNW_CSS_CLASS_ID]: className
83
- }
34
+ output: outputModule,
35
+ css: cssResults.code,
36
+ map: cssResults.map,
84
37
  };
85
- });
86
- return {
87
- styles,
88
- reactNativeWeb,
89
- variables
90
- };
91
38
  }
39
+ exports.transformCssModuleWeb = transformCssModuleWeb;
40
+ function convertLightningCssToReactNativeWebStyleSheet(input) {
41
+ const styles = {};
42
+ const reactNativeWeb = {};
43
+ const variables = {};
44
+ // e.g. { container: { name: 'ahs8IW_container', composes: [], isReferenced: false }, }
45
+ Object.entries(input).map(([key, value]) => {
46
+ // order matters here
47
+ let className = value.name;
48
+ if (value.composes.length) {
49
+ className += ' ' + value.composes.map((value) => value.name).join(' ');
50
+ }
51
+ // CSS Variables will be `{string: string}`
52
+ if (key.startsWith('--')) {
53
+ variables[key] = className;
54
+ }
55
+ styles[key] = className;
56
+ reactNativeWeb[key] = { $$css: true, [RNW_CSS_CLASS_ID]: className };
57
+ return {
58
+ [key]: { $$css: true, [RNW_CSS_CLASS_ID]: className },
59
+ };
60
+ });
61
+ return { styles, reactNativeWeb, variables };
62
+ }
63
+ exports.convertLightningCssToReactNativeWebStyleSheet = convertLightningCssToReactNativeWebStyleSheet;
92
64
  function matchCssModule(filePath) {
93
- return !!/\.module(\.(native|ios|android|web))?\.(css|s[ac]ss)$/.test(filePath);
65
+ return !!/\.module(\.(native|ios|android|web))?\.(css|s[ac]ss)$/.test(filePath);
94
66
  }
67
+ exports.matchCssModule = matchCssModule;
95
68
  //# sourceMappingURL=css-modules.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"css-modules.js","names":["_css","data","require","RNW_CSS_CLASS_ID","transformCssModuleWeb","props","transform","cssResults","filename","code","Buffer","from","src","sourceMap","options","cssModules","dashedIdents","projectRoot","minify","codeAsString","toString","styles","reactNativeWeb","variables","convertLightningCssToReactNativeWebStyleSheet","exports","outputModule","JSON","stringify","dev","runtimeCss","wrapDevelopmentCSS","output","css","map","input","Object","entries","key","value","className","name","composes","length","join","startsWith","$$css","matchCssModule","filePath","test"],"sources":["../../src/transform-worker/css-modules.ts"],"sourcesContent":["import { wrapDevelopmentCSS } from './css';\n\nconst RNW_CSS_CLASS_ID = '_';\n\nexport async function transformCssModuleWeb(props: {\n filename: string;\n src: string;\n options: { projectRoot: string; minify: boolean; dev: boolean; sourceMap: boolean };\n}) {\n const { transform } = require('lightningcss') as typeof import('lightningcss');\n\n // TODO: Add bundling to resolve imports\n // https://lightningcss.dev/bundling.html#bundling-order\n\n const cssResults = transform({\n filename: props.filename,\n code: Buffer.from(props.src),\n sourceMap: props.options.sourceMap,\n cssModules: {\n // Prevent renaming CSS variables to ensure\n // variables created in global files are available.\n dashedIdents: false,\n },\n // cssModules: true,\n projectRoot: props.options.projectRoot,\n minify: props.options.minify,\n });\n const codeAsString = cssResults.code.toString();\n\n const { styles, reactNativeWeb, variables } = convertLightningCssToReactNativeWebStyleSheet(\n cssResults.exports!\n );\n\n let outputModule = `module.exports=Object.assign(${JSON.stringify(\n styles\n )},{unstable_styles:${JSON.stringify(reactNativeWeb)}},${JSON.stringify(variables)});`;\n\n if (props.options.dev) {\n const runtimeCss = wrapDevelopmentCSS({\n ...props,\n src: codeAsString,\n });\n\n outputModule += '\\n' + runtimeCss;\n }\n\n return {\n output: outputModule,\n css: cssResults.code,\n map: cssResults.map,\n };\n}\n\nexport function convertLightningCssToReactNativeWebStyleSheet(\n input: import('lightningcss').CSSModuleExports\n) {\n const styles: Record<string, string> = {};\n const reactNativeWeb: Record<string, any> = {};\n const variables: Record<string, string> = {};\n // e.g. { container: { name: 'ahs8IW_container', composes: [], isReferenced: false }, }\n Object.entries(input).map(([key, value]) => {\n // order matters here\n let className = value.name;\n\n if (value.composes.length) {\n className += ' ' + value.composes.map((value) => value.name).join(' ');\n }\n\n // CSS Variables will be `{string: string}`\n if (key.startsWith('--')) {\n variables[key] = className;\n }\n\n styles[key] = className;\n reactNativeWeb[key] = { $$css: true, [RNW_CSS_CLASS_ID]: className };\n return {\n [key]: { $$css: true, [RNW_CSS_CLASS_ID]: className },\n };\n });\n\n return { styles, reactNativeWeb, variables };\n}\n\nexport function matchCssModule(filePath: string): boolean {\n return !!/\\.module(\\.(native|ios|android|web))?\\.(css|s[ac]ss)$/.test(filePath);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"css-modules.js","sourceRoot":"","sources":["../../src/transform-worker/css-modules.ts"],"names":[],"mappings":"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"}
@@ -1,29 +1,25 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.escapeBackticksAndOctals = escapeBackticksAndOctals;
7
- exports.getHotReplaceTemplate = getHotReplaceTemplate;
8
- exports.pathToHtmlSafeName = pathToHtmlSafeName;
9
- exports.wrapDevelopmentCSS = wrapDevelopmentCSS;
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.escapeBackticksAndOctals = exports.wrapDevelopmentCSS = exports.getHotReplaceTemplate = exports.pathToHtmlSafeName = void 0;
10
4
  function pathToHtmlSafeName(path) {
11
- return path.replace(/[^a-zA-Z0-9_]/g, '_');
5
+ return path.replace(/[^a-zA-Z0-9_]/g, '_');
12
6
  }
7
+ exports.pathToHtmlSafeName = pathToHtmlSafeName;
13
8
  function getHotReplaceTemplate(id) {
14
- // In dev mode, we need to replace the style tag instead of appending it
15
- // use the path as the expo-css-hmr attribute to find the style tag
16
- // to replace.
17
- const attr = JSON.stringify(pathToHtmlSafeName(id));
18
- return `style.setAttribute('data-expo-css-hmr', ${attr});
9
+ // In dev mode, we need to replace the style tag instead of appending it
10
+ // use the path as the expo-css-hmr attribute to find the style tag
11
+ // to replace.
12
+ const attr = JSON.stringify(pathToHtmlSafeName(id));
13
+ return `style.setAttribute('data-expo-css-hmr', ${attr});
19
14
  const previousStyle = document.querySelector('[data-expo-css-hmr=${attr}]');
20
15
  if (previousStyle) {
21
16
  previousStyle.parentNode.removeChild(previousStyle);
22
17
  }`;
23
18
  }
19
+ exports.getHotReplaceTemplate = getHotReplaceTemplate;
24
20
  function wrapDevelopmentCSS(props) {
25
- const withBackTicksEscaped = escapeBackticksAndOctals(props.src);
26
- return `(() => {
21
+ const withBackTicksEscaped = escapeBackticksAndOctals(props.src);
22
+ return `(() => {
27
23
  if (typeof document === 'undefined') {
28
24
  return
29
25
  }
@@ -40,10 +36,15 @@ function wrapDevelopmentCSS(props) {
40
36
  }
41
37
  })();`;
42
38
  }
39
+ exports.wrapDevelopmentCSS = wrapDevelopmentCSS;
43
40
  function escapeBackticksAndOctals(str) {
44
- if (typeof str !== 'string') {
45
- return '';
46
- }
47
- return str.replace(/\\/g, '\\\\').replace(/`/g, '\\`').replace(/[\0-\7]/g, match => `\\0${match.charCodeAt(0).toString(8)}`);
41
+ if (typeof str !== 'string') {
42
+ return '';
43
+ }
44
+ return str
45
+ .replace(/\\/g, '\\\\')
46
+ .replace(/`/g, '\\`')
47
+ .replace(/[\0-\7]/g, (match) => `\\0${match.charCodeAt(0).toString(8)}`);
48
48
  }
49
+ exports.escapeBackticksAndOctals = escapeBackticksAndOctals;
49
50
  //# sourceMappingURL=css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"css.js","names":["pathToHtmlSafeName","path","replace","getHotReplaceTemplate","id","attr","JSON","stringify","wrapDevelopmentCSS","props","withBackTicksEscaped","escapeBackticksAndOctals","src","filename","str","match","charCodeAt","toString"],"sources":["../../src/transform-worker/css.ts"],"sourcesContent":["export function pathToHtmlSafeName(path: string) {\n return path.replace(/[^a-zA-Z0-9_]/g, '_');\n}\n\nexport function getHotReplaceTemplate(id: string) {\n // In dev mode, we need to replace the style tag instead of appending it\n // use the path as the expo-css-hmr attribute to find the style tag\n // to replace.\n const attr = JSON.stringify(pathToHtmlSafeName(id));\n return `style.setAttribute('data-expo-css-hmr', ${attr});\n const previousStyle = document.querySelector('[data-expo-css-hmr=${attr}]');\n if (previousStyle) {\n previousStyle.parentNode.removeChild(previousStyle);\n }`;\n}\n\nexport function wrapDevelopmentCSS(props: { src: string; filename: string }) {\n const withBackTicksEscaped = escapeBackticksAndOctals(props.src);\n return `(() => {\n if (typeof document === 'undefined') {\n return\n }\n const head = document.head || document.getElementsByTagName('head')[0];\n const style = document.createElement('style');\n ${getHotReplaceTemplate(props.filename)}\n style.setAttribute('data-expo-loader', 'css');\n head.appendChild(style);\n const css = \\`${withBackTicksEscaped}\\`;\n if (style.styleSheet){\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n})();`;\n}\n\nexport function escapeBackticksAndOctals(str: string) {\n if (typeof str !== 'string') {\n return '';\n }\n\n return str\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/`/g, '\\\\`')\n .replace(/[\\0-\\7]/g, (match) => `\\\\0${match.charCodeAt(0).toString(8)}`);\n}\n"],"mappings":";;;;;;;;;AAAO,SAASA,kBAAkBA,CAACC,IAAY,EAAE;EAC/C,OAAOA,IAAI,CAACC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC;AAC5C;AAEO,SAASC,qBAAqBA,CAACC,EAAU,EAAE;EAChD;EACA;EACA;EACA,MAAMC,IAAI,GAAGC,IAAI,CAACC,SAAS,CAACP,kBAAkB,CAACI,EAAE,CAAC,CAAC;EACnD,OAAQ,2CAA0CC,IAAK;AACzD,qEAAqEA,IAAK;AAC1E;AACA;AACA,IAAI;AACJ;AAEO,SAASG,kBAAkBA,CAACC,KAAwC,EAAE;EAC3E,MAAMC,oBAAoB,GAAGC,wBAAwB,CAACF,KAAK,CAACG,GAAG,CAAC;EAChE,OAAQ;AACV;AACA;AACA;AACA;AACA;AACA,IAAIT,qBAAqB,CAACM,KAAK,CAACI,QAAQ,CAAE;AAC1C;AACA;AACA,kBAAkBH,oBAAqB;AACvC;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AAEO,SAASC,wBAAwBA,CAACG,GAAW,EAAE;EACpD,IAAI,OAAOA,GAAG,KAAK,QAAQ,EAAE;IAC3B,OAAO,EAAE;EACX;EAEA,OAAOA,GAAG,CACPZ,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CACtBA,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CACpBA,OAAO,CAAC,UAAU,EAAGa,KAAK,IAAM,MAAKA,KAAK,CAACC,UAAU,CAAC,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC,CAAE,EAAC,CAAC;AAC5E"}
1
+ {"version":3,"file":"css.js","sourceRoot":"","sources":["../../src/transform-worker/css.ts"],"names":[],"mappings":";;;AAAA,SAAgB,kBAAkB,CAAC,IAAY;IAC7C,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;AAC7C,CAAC;AAFD,gDAEC;AAED,SAAgB,qBAAqB,CAAC,EAAU;IAC9C,wEAAwE;IACxE,mEAAmE;IACnE,cAAc;IACd,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC;IACpD,OAAO,2CAA2C,IAAI;qEACa,IAAI;;;IAGrE,CAAC;AACL,CAAC;AAVD,sDAUC;AAED,SAAgB,kBAAkB,CAAC,KAAwC;IACzE,MAAM,oBAAoB,GAAG,wBAAwB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjE,OAAO;;;;;;IAML,qBAAqB,CAAC,KAAK,CAAC,QAAQ,CAAC;;;kBAGvB,oBAAoB;;;;;;MAMhC,CAAC;AACP,CAAC;AAlBD,gDAkBC;AAED,SAAgB,wBAAwB,CAAC,GAAW;IAClD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;QAC3B,OAAO,EAAE,CAAC;KACX;IAED,OAAO,GAAG;SACP,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;SACpB,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC7E,CAAC;AATD,4DASC"}
@@ -1,86 +1,49 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = getAssets;
7
- exports.getUniversalAssetData = getUniversalAssetData;
8
- function _Assets() {
9
- const data = require("metro/src/Assets");
10
- _Assets = function () {
11
- return data;
12
- };
13
- return data;
14
- }
15
- function _js() {
16
- const data = require("metro/src/DeltaBundler/Serializers/helpers/js");
17
- _js = function () {
18
- return data;
19
- };
20
- return data;
21
- }
22
- function _nodeAssert() {
23
- const data = _interopRequireDefault(require("node:assert"));
24
- _nodeAssert = function () {
25
- return data;
26
- };
27
- return data;
28
- }
29
- function _nodeCrypto() {
30
- const data = _interopRequireDefault(require("node:crypto"));
31
- _nodeCrypto = function () {
32
- return data;
33
- };
34
- return data;
35
- }
36
- function _nodePath() {
37
- const data = _interopRequireDefault(require("node:path"));
38
- _nodePath = function () {
39
- return data;
40
- };
41
- return data;
42
- }
43
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
44
- /**
45
- * Copyright 2023-present 650 Industries (Expo). All rights reserved.
46
- * Copyright (c) Meta Platforms, Inc. and affiliates.
47
- *
48
- * This source code is licensed under the MIT license found in the
49
- * LICENSE file in the root directory of this source tree.
50
- */
51
-
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getUniversalAssetData = void 0;
7
+ const Assets_1 = require("metro/src/Assets");
8
+ const js_1 = require("metro/src/DeltaBundler/Serializers/helpers/js");
9
+ const node_assert_1 = __importDefault(require("node:assert"));
10
+ const node_crypto_1 = __importDefault(require("node:crypto"));
11
+ const node_path_1 = __importDefault(require("node:path"));
52
12
  function md5Hash(data) {
53
- if (data.length === 1) return data[0];
54
- const hash = _nodeCrypto().default.createHash('md5');
55
- hash.update(data.join(''));
56
- return hash.digest('hex');
13
+ if (data.length === 1)
14
+ return data[0];
15
+ const hash = node_crypto_1.default.createHash('md5');
16
+ hash.update(data.join(''));
17
+ return hash.digest('hex');
57
18
  }
58
19
  function assertHashedAssetData(data) {
59
- (0, _nodeAssert().default)('fileHashes' in data, 'Assets must have hashed files. Ensure the expo-asset plugin is installed.');
20
+ (0, node_assert_1.default)('fileHashes' in data, 'Assets must have hashed files. Ensure the expo-asset plugin is installed.');
60
21
  }
61
22
  async function getUniversalAssetData(assetPath, localPath, assetDataPlugins, platform, publicPath) {
62
- const data = await (0, _Assets().getAssetData)(assetPath, localPath, assetDataPlugins, platform, publicPath);
63
- assertHashedAssetData(data);
64
-
65
- // NOTE(EvanBacon): This is where we modify the asset to include a hash in the name for web cache invalidation.
66
- if (platform === 'web' && publicPath.includes('?export_path=')) {
67
- // `local-image.[contenthash]`. Using `.` but this won't work if we ever apply to Android because Android res files cannot contain `.`.
68
- // TODO: Prevent one multi-res image from updating the hash in all images.
69
- // @ts-expect-error: name is typed as readonly.
70
- data.name = `${data.name}.${md5Hash(data.fileHashes)}`;
71
- }
72
- return data;
23
+ const data = await (0, Assets_1.getAssetData)(assetPath, localPath, assetDataPlugins, platform, publicPath);
24
+ assertHashedAssetData(data);
25
+ // NOTE(EvanBacon): This is where we modify the asset to include a hash in the name for web cache invalidation.
26
+ if (platform === 'web' && publicPath.includes('?export_path=')) {
27
+ // `local-image.[contenthash]`. Using `.` but this won't work if we ever apply to Android because Android res files cannot contain `.`.
28
+ // TODO: Prevent one multi-res image from updating the hash in all images.
29
+ // @ts-expect-error: name is typed as readonly.
30
+ data.name = `${data.name}.${md5Hash(data.fileHashes)}`;
31
+ }
32
+ return data;
73
33
  }
34
+ exports.getUniversalAssetData = getUniversalAssetData;
74
35
  async function getAssets(dependencies, options) {
75
- const promises = [];
76
- const {
77
- processModuleFilter
78
- } = options;
79
- for (const module of dependencies.values()) {
80
- if ((0, _js().isJsModule)(module) && processModuleFilter(module) && (0, _js().getJsOutput)(module).type === 'js/module/asset' && _nodePath().default.relative(options.projectRoot, module.path) !== 'package.json') {
81
- promises.push(getUniversalAssetData(module.path, _nodePath().default.relative(options.projectRoot, module.path), options.assetPlugins, options.platform, options.publicPath));
36
+ const promises = [];
37
+ const { processModuleFilter } = options;
38
+ for (const module of dependencies.values()) {
39
+ if ((0, js_1.isJsModule)(module) &&
40
+ processModuleFilter(module) &&
41
+ (0, js_1.getJsOutput)(module).type === 'js/module/asset' &&
42
+ node_path_1.default.relative(options.projectRoot, module.path) !== 'package.json') {
43
+ promises.push(getUniversalAssetData(module.path, node_path_1.default.relative(options.projectRoot, module.path), options.assetPlugins, options.platform, options.publicPath));
44
+ }
82
45
  }
83
- }
84
- return await Promise.all(promises);
46
+ return await Promise.all(promises);
85
47
  }
48
+ exports.default = getAssets;
86
49
  //# sourceMappingURL=getAssets.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getAssets.js","names":["_Assets","data","require","_js","_nodeAssert","_interopRequireDefault","_nodeCrypto","_nodePath","obj","__esModule","default","md5Hash","length","hash","crypto","createHash","update","join","digest","assertHashedAssetData","assert","getUniversalAssetData","assetPath","localPath","assetDataPlugins","platform","publicPath","getAssetData","includes","name","fileHashes","getAssets","dependencies","options","promises","processModuleFilter","module","values","isJsModule","getJsOutput","type","path","relative","projectRoot","push","assetPlugins","Promise","all"],"sources":["../../src/transform-worker/getAssets.ts"],"sourcesContent":["/**\n * Copyright 2023-present 650 Industries (Expo). All rights reserved.\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 */\nimport { AssetData, Module } from 'metro';\nimport { getAssetData } from 'metro/src/Assets';\nimport { getJsOutput, isJsModule } from 'metro/src/DeltaBundler/Serializers/helpers/js';\nimport assert from 'node:assert';\nimport crypto from 'node:crypto';\nimport path from 'node:path';\n\nimport { ReadOnlyDependencies } from '../serializer/getCssDeps';\n\ntype Options = {\n processModuleFilter: (modules: Module) => boolean;\n assetPlugins: readonly string[];\n platform?: string | null;\n projectRoot: string;\n publicPath: string;\n};\n\nfunction md5Hash(data: string[]) {\n if (data.length === 1) return data[0];\n const hash = crypto.createHash('md5');\n hash.update(data.join(''));\n return hash.digest('hex');\n}\n\nfunction assertHashedAssetData(data: AssetData): asserts data is HashedAssetData {\n assert(\n 'fileHashes' in data,\n 'Assets must have hashed files. Ensure the expo-asset plugin is installed.'\n );\n}\n\nexport async function getUniversalAssetData(\n assetPath: string,\n localPath: string,\n assetDataPlugins: readonly string[],\n platform: string | null | undefined,\n publicPath: string\n): Promise<HashedAssetData> {\n const data = await getAssetData(assetPath, localPath, assetDataPlugins, platform, publicPath);\n assertHashedAssetData(data);\n\n // NOTE(EvanBacon): This is where we modify the asset to include a hash in the name for web cache invalidation.\n if (platform === 'web' && publicPath.includes('?export_path=')) {\n // `local-image.[contenthash]`. Using `.` but this won't work if we ever apply to Android because Android res files cannot contain `.`.\n // TODO: Prevent one multi-res image from updating the hash in all images.\n // @ts-expect-error: name is typed as readonly.\n data.name = `${data.name}.${md5Hash(data.fileHashes)}`;\n }\n\n return data;\n}\n\nexport type HashedAssetData = AssetData & { fileHashes: string[]; _name?: string };\n\nexport default async function getAssets(\n dependencies: ReadOnlyDependencies,\n options: Options\n): Promise<HashedAssetData[]> {\n const promises: Promise<HashedAssetData>[] = [];\n const { processModuleFilter } = options;\n\n for (const module of dependencies.values()) {\n if (\n isJsModule(module) &&\n processModuleFilter(module) &&\n getJsOutput(module).type === 'js/module/asset' &&\n path.relative(options.projectRoot, module.path) !== 'package.json'\n ) {\n promises.push(\n getUniversalAssetData(\n module.path,\n path.relative(options.projectRoot, module.path),\n options.assetPlugins,\n options.platform,\n options.publicPath\n )\n );\n }\n }\n\n return await Promise.all(promises);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"getAssets.js","sourceRoot":"","sources":["../../src/transform-worker/getAssets.ts"],"names":[],"mappings":";;;;;;AAQA,6CAAgD;AAChD,sEAAwF;AACxF,8DAAiC;AACjC,8DAAiC;AACjC,0DAA6B;AAY7B,SAAS,OAAO,CAAC,IAAc;IAC7B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,qBAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACtC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3B,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAe;IAC5C,IAAA,qBAAM,EACJ,YAAY,IAAI,IAAI,EACpB,2EAA2E,CAC5E,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,qBAAqB,CACzC,SAAiB,EACjB,SAAiB,EACjB,gBAAmC,EACnC,QAAmC,EACnC,UAAkB;IAElB,MAAM,IAAI,GAAG,MAAM,IAAA,qBAAY,EAAC,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC9F,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAE5B,+GAA+G;IAC/G,IAAI,QAAQ,KAAK,KAAK,IAAI,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE;QAC9D,uIAAuI;QACvI,0EAA0E;QAC1E,+CAA+C;QAC/C,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;KACxD;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAnBD,sDAmBC;AAIc,KAAK,UAAU,SAAS,CACrC,YAAkC,EAClC,OAAgB;IAEhB,MAAM,QAAQ,GAA+B,EAAE,CAAC;IAChD,MAAM,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC;IAExC,KAAK,MAAM,MAAM,IAAI,YAAY,CAAC,MAAM,EAAE,EAAE;QAC1C,IACE,IAAA,eAAU,EAAC,MAAM,CAAC;YAClB,mBAAmB,CAAC,MAAM,CAAC;YAC3B,IAAA,gBAAW,EAAC,MAAM,CAAC,CAAC,IAAI,KAAK,iBAAiB;YAC9C,mBAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,cAAc,EAClE;YACA,QAAQ,CAAC,IAAI,CACX,qBAAqB,CACnB,MAAM,CAAC,IAAI,EACX,mBAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,EAC/C,OAAO,CAAC,YAAY,EACpB,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,UAAU,CACnB,CACF,CAAC;SACH;KACF;IAED,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACrC,CAAC;AA3BD,4BA2BC"}