@nx/expo 20.0.8 → 20.1.0-beta.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nx/expo",
3
- "version": "20.0.8",
3
+ "version": "20.1.0-beta.0",
4
4
  "private": false,
5
5
  "description": "The Expo Plugin for Nx contains executors and generators for managing and developing an expo application within your workspace. For example, you can directly build for different target platforms as well as generate projects and publish your code.",
6
6
  "keywords": [
@@ -28,13 +28,13 @@
28
28
  "main": "./index",
29
29
  "types": "index.d.ts",
30
30
  "dependencies": {
31
- "@nx/devkit": "20.0.8",
32
- "@nx/eslint": "20.0.8",
33
- "@nx/jest": "20.0.8",
34
- "@nx/js": "20.0.8",
35
- "@nx/react": "20.0.8",
36
- "@nx/web": "20.0.8",
37
- "@nx/webpack": "20.0.8",
31
+ "@nx/devkit": "20.1.0-beta.0",
32
+ "@nx/eslint": "20.1.0-beta.0",
33
+ "@nx/jest": "20.1.0-beta.0",
34
+ "@nx/js": "20.1.0-beta.0",
35
+ "@nx/react": "20.1.0-beta.0",
36
+ "@nx/web": "20.1.0-beta.0",
37
+ "@nx/webpack": "20.1.0-beta.0",
38
38
  "enhanced-resolve": "^5.8.3",
39
39
  "metro-config": "~0.80.4",
40
40
  "metro-resolver": "~0.80.4",
package/plugin.d.ts CHANGED
@@ -1 +1 @@
1
- export { createNodes, createDependencies, ExpoPluginOptions, } from './plugins/plugin';
1
+ export { createNodes, createNodesV2, ExpoPluginOptions, } from './plugins/plugin';
package/plugin.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createDependencies = exports.createNodes = void 0;
3
+ exports.createNodesV2 = exports.createNodes = void 0;
4
4
  var plugin_1 = require("./plugins/plugin");
5
5
  Object.defineProperty(exports, "createNodes", { enumerable: true, get: function () { return plugin_1.createNodes; } });
6
- Object.defineProperty(exports, "createDependencies", { enumerable: true, get: function () { return plugin_1.createDependencies; } });
6
+ Object.defineProperty(exports, "createNodesV2", { enumerable: true, get: function () { return plugin_1.createNodesV2; } });
@@ -1,4 +1,4 @@
1
- import { CreateDependencies, CreateNodes } from '@nx/devkit';
1
+ import { CreateNodes, CreateNodesV2 } from '@nx/devkit';
2
2
  export interface ExpoPluginOptions {
3
3
  startTargetName?: string;
4
4
  serveTargetName?: string;
@@ -10,5 +10,5 @@ export interface ExpoPluginOptions {
10
10
  buildTargetName?: string;
11
11
  submitTargetName?: string;
12
12
  }
13
- export declare const createDependencies: CreateDependencies;
13
+ export declare const createNodesV2: CreateNodesV2<ExpoPluginOptions>;
14
14
  export declare const createNodes: CreateNodes<ExpoPluginOptions>;
package/plugins/plugin.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createNodes = exports.createDependencies = void 0;
3
+ exports.createNodes = exports.createNodesV2 = void 0;
4
4
  const devkit_1 = require("@nx/devkit");
5
5
  const path_1 = require("path");
6
6
  const js_1 = require("@nx/js");
@@ -8,51 +8,69 @@ const get_named_inputs_1 = require("@nx/devkit/src/utils/get-named-inputs");
8
8
  const fs_1 = require("fs");
9
9
  const calculate_hash_for_create_nodes_1 = require("@nx/devkit/src/utils/calculate-hash-for-create-nodes");
10
10
  const cache_directory_1 = require("nx/src/utils/cache-directory");
11
+ const devkit_internals_1 = require("nx/src/devkit-internals");
11
12
  const config_utils_1 = require("@nx/devkit/src/utils/config-utils");
12
- const cachePath = (0, path_1.join)(cache_directory_1.workspaceDataDirectory, 'expo.hash');
13
- const targetsCache = readTargetsCache();
14
- function readTargetsCache() {
13
+ function readTargetsCache(cachePath) {
15
14
  return (0, fs_1.existsSync)(cachePath) ? (0, devkit_1.readJsonFile)(cachePath) : {};
16
15
  }
17
- function writeTargetsToCache() {
18
- const oldCache = readTargetsCache();
16
+ function writeTargetsToCache(cachePath, targetsCache) {
17
+ const oldCache = readTargetsCache(cachePath);
19
18
  (0, devkit_1.writeJsonFile)(cachePath, {
20
19
  ...oldCache,
21
20
  targetsCache,
22
21
  });
23
22
  }
24
- const createDependencies = () => {
25
- writeTargetsToCache();
26
- return [];
27
- };
28
- exports.createDependencies = createDependencies;
29
- exports.createNodes = [
23
+ exports.createNodesV2 = [
30
24
  '**/app.{json,config.js,config.ts}',
31
- async (configFilePath, options, context) => {
32
- options = normalizeOptions(options);
33
- const projectRoot = (0, path_1.dirname)(configFilePath);
34
- // Do not create a project if package.json or project.json or metro.config.js isn't there.
35
- const siblingFiles = (0, fs_1.readdirSync)((0, path_1.join)(context.workspaceRoot, projectRoot));
36
- if (!siblingFiles.includes('package.json') ||
37
- !siblingFiles.includes('metro.config.js')) {
38
- return {};
25
+ async (configFiles, options, context) => {
26
+ const optionsHash = (0, devkit_internals_1.hashObject)(options);
27
+ const cachePath = (0, path_1.join)(cache_directory_1.workspaceDataDirectory, `expo-${optionsHash}.hash`);
28
+ const targetsCache = readTargetsCache(cachePath);
29
+ try {
30
+ return await (0, devkit_1.createNodesFromFiles)((configFile, options, context) => createNodesInternal(configFile, options, context, targetsCache), configFiles, options, context);
39
31
  }
40
- const appConfig = await getAppConfig(configFilePath, context);
41
- // if appConfig.expo is not defined
42
- if (!appConfig.expo) {
43
- return {};
32
+ finally {
33
+ writeTargetsToCache(cachePath, targetsCache);
44
34
  }
45
- const hash = await (0, calculate_hash_for_create_nodes_1.calculateHashForCreateNodes)(projectRoot, options, context, [(0, js_1.getLockFileName)((0, devkit_1.detectPackageManager)(context.workspaceRoot))]);
46
- targetsCache[hash] ??= buildExpoTargets(projectRoot, options, context);
47
- return {
48
- projects: {
49
- [projectRoot]: {
50
- targets: targetsCache[hash],
51
- },
52
- },
53
- };
54
35
  },
55
36
  ];
37
+ exports.createNodes = [
38
+ '**/app.{json,config.js,config.ts}',
39
+ async (configFilePath, options, context) => {
40
+ devkit_1.logger.warn('`createNodes` is deprecated. Update your plugin to utilize createNodesV2 instead. In Nx 20, this will change to the createNodesV2 API.');
41
+ const optionsHash = (0, devkit_internals_1.hashObject)(options);
42
+ const cachePath = (0, path_1.join)(cache_directory_1.workspaceDataDirectory, `expo-${optionsHash}.hash`);
43
+ const targetsCache = readTargetsCache(cachePath);
44
+ return createNodesInternal(configFilePath, options, context, targetsCache);
45
+ },
46
+ ];
47
+ async function createNodesInternal(configFile, options, context, targetsCache) {
48
+ options = normalizeOptions(options);
49
+ const projectRoot = (0, path_1.dirname)(configFile);
50
+ // Do not create a project if package.json or project.json or metro.config.js isn't there.
51
+ const siblingFiles = (0, fs_1.readdirSync)((0, path_1.join)(context.workspaceRoot, projectRoot));
52
+ if (!siblingFiles.includes('package.json') ||
53
+ !siblingFiles.includes('metro.config.js')) {
54
+ return {};
55
+ }
56
+ // Check if it's an Expo project
57
+ const packageJson = (0, devkit_1.readJsonFile)((0, path_1.join)(context.workspaceRoot, projectRoot, 'package.json'));
58
+ const appConfig = await getAppConfig(configFile, context);
59
+ if (!appConfig.expo &&
60
+ !packageJson.dependencies?.['expo'] &&
61
+ !packageJson.devDependencies?.['expo']) {
62
+ return {};
63
+ }
64
+ const hash = await (0, calculate_hash_for_create_nodes_1.calculateHashForCreateNodes)(projectRoot, options, context, [(0, js_1.getLockFileName)((0, devkit_1.detectPackageManager)(context.workspaceRoot))]);
65
+ targetsCache[hash] ??= buildExpoTargets(projectRoot, options, context);
66
+ return {
67
+ projects: {
68
+ [projectRoot]: {
69
+ targets: targetsCache[hash],
70
+ },
71
+ },
72
+ };
73
+ }
56
74
  function buildExpoTargets(projectRoot, options, context) {
57
75
  const namedInputs = (0, get_named_inputs_1.getNamedInputs)(projectRoot, context);
58
76
  const targets = {
@@ -103,6 +103,15 @@ function copyPackageJsonAndLock(packageManager, workspaceRoot, projectRoot) {
103
103
  };
104
104
  projectPackageJson.dependencies = rootPackageJsonDependencies;
105
105
  projectPackageJson.devDependencies = rootPackageJsonDevDependencies;
106
+ const projectOverrides = projectPackageJson.overrides;
107
+ const projectResolutions = projectPackageJson.resolutions;
108
+ if (rootPackageJson.overrides) {
109
+ projectPackageJson.overrides = rootPackageJson.overrides;
110
+ }
111
+ // if overrides exists, give precedence to it over resolutions
112
+ if (!rootPackageJson.overrides && rootPackageJson.resolutions) {
113
+ projectPackageJson.resolutions = rootPackageJson.resolutions;
114
+ }
106
115
  // Copy dependencies from root package.json to project package.json
107
116
  (0, devkit_1.writeJsonFile)(packageJsonProject, projectPackageJson);
108
117
  // Copy lock file from root to project
@@ -111,6 +120,18 @@ function copyPackageJsonAndLock(packageManager, workspaceRoot, projectRoot) {
111
120
  // Reset project package.json to original state
112
121
  projectPackageJson.dependencies = projectPackageJsonDependencies;
113
122
  projectPackageJson.devDependencies = projectPackageJsonDevDependencies;
123
+ if (projectOverrides) {
124
+ projectPackageJson.overrides = projectOverrides;
125
+ }
126
+ else {
127
+ delete projectPackageJson.overrides;
128
+ }
129
+ if (projectResolutions) {
130
+ projectPackageJson.resolutions = projectResolutions;
131
+ }
132
+ else {
133
+ delete projectPackageJson.resolutions;
134
+ }
114
135
  (0, node_fs_1.writeFileSync)(packageJsonProject, JSON.stringify(projectPackageJson, null, 2));
115
136
  // Remove lock file from project
116
137
  (0, node_fs_1.rmSync)(lockFileProject, { recursive: true, force: true });
@@ -46,7 +46,7 @@ function createInstallOptions(options) {
46
46
  acc.push(`--${(0, devkit_1.names)(k).fileName}`);
47
47
  }
48
48
  }
49
- else {
49
+ else if (v !== undefined) {
50
50
  acc.push(`--${(0, devkit_1.names)(k).fileName}`, v);
51
51
  }
52
52
  return acc;
@@ -18,7 +18,7 @@ async function convertToInferred(tree, options) {
18
18
  const projectGraph = await (0, devkit_1.createProjectGraphAsync)();
19
19
  const migrationLogs = new aggregate_log_util_1.AggregatedLog();
20
20
  const projects = (0, devkit_1.getProjects)(tree);
21
- const migratedProjects = await (0, executor_to_plugin_migrator_1.migrateProjectExecutorsToPluginV1)(tree, projectGraph, '@nx/expo/plugin', plugin_1.createNodes, {
21
+ const migratedProjects = await (0, executor_to_plugin_migrator_1.migrateProjectExecutorsToPlugin)(tree, projectGraph, '@nx/expo/plugin', plugin_1.createNodesV2, {
22
22
  buildTargetName: 'build',
23
23
  exportTargetName: 'export',
24
24
  installTargetName: 'install',
@@ -38,11 +38,11 @@ async function expoLibraryGeneratorInternal(host, schema) {
38
38
  tasks.push((0, ensure_dependencies_1.ensureDependencies)(host));
39
39
  }
40
40
  (0, init_root_babel_config_1.initRootBabelConfig)(host);
41
+ createFiles(host, options);
41
42
  const addProjectTask = await addProject(host, options);
42
43
  if (addProjectTask) {
43
44
  tasks.push(addProjectTask);
44
45
  }
45
- createFiles(host, options);
46
46
  const lintTask = await (0, add_linting_1.addLinting)(host, {
47
47
  ...options,
48
48
  projectName: options.name,