Skip to content

Commit f9a7742

Browse files
siddharthkpCompuIves
authored andcommitted
Use app logic for loading default file in embed (codesandbox#2382)
* Use app logic for loading default file in embed * simplify flow by removing try catch * we basically need the entire sandbox at this point * fetch parsedConfig * make conditionals less error prone * reset circle ci cache * Revert "reset circle ci cache" This reverts commit c9d30a2. * create a browser compatible fork of jsonlint * remove outdated comment * remove jsonlint from deps * move jsonlint to vendors + eslintignore it * Revert "move jsonlint to vendors + eslintignore it" This reverts commit 90a3559.
1 parent 9733ef7 commit f9a7742

File tree

4 files changed

+65
-34
lines changed

4 files changed

+65
-34
lines changed

packages/app/src/embed/components/App/index.js

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -225,13 +225,11 @@ export default class App extends React.PureComponent<
225225
getCurrentModuleFromPath = (sandbox: Sandbox): Module => {
226226
const { currentModule: currentModulePath } = this.state;
227227

228-
return (
229-
findCurrentModule(
230-
sandbox.modules,
231-
sandbox.directories,
232-
currentModulePath,
233-
findMainModule(sandbox.modules, sandbox.directories, sandbox.entry)
234-
) || sandbox.modules[0]
228+
return findCurrentModule(
229+
sandbox.modules,
230+
sandbox.directories,
231+
currentModulePath,
232+
findMainModule(sandbox)
235233
);
236234
};
237235

packages/app/src/embed/components/Content/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -387,7 +387,7 @@ export default class Content extends React.PureComponent<Props, State> {
387387
} = this.props;
388388

389389
const mainModule = isInProjectView
390-
? findMainModule(sandbox.modules, sandbox.directories, sandbox.entry)
390+
? findMainModule(sandbox)
391391
: currentModule;
392392

393393
if (!mainModule) throw new Error('Cannot find main module');

packages/common/src/sandbox/modules.ts

Lines changed: 51 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import memoize from 'lodash/memoize';
2-
import { Module, Directory } from '../types';
2+
import { Module, Directory, Sandbox } from '../types';
3+
import getTemplateDefinition from '../templates';
4+
import parse from '../templates/configuration/parse';
35

46
const compareTitle = (
57
original: string,
@@ -248,18 +250,40 @@ export const isMainModule = (
248250
return path.replace('/', '') === entry;
249251
};
250252

251-
export const findMainModule = (
252-
modules: Module[],
253-
directories: Directory[],
254-
entry: string = 'index.js'
255-
) => {
256-
try {
257-
const module = resolveModule(entry, modules, directories);
253+
export const findMainModule = (sandbox?: Sandbox) => {
254+
const resolve = resolveModuleWrapped(sandbox);
258255

259-
return module;
260-
} catch (e) {
261-
return modules[0];
256+
// first attempt: try loading the entry file if it exists
257+
const entryModule = resolve(sandbox.entry);
258+
if (entryModule) {
259+
return entryModule;
262260
}
261+
262+
// second attempt: try loading the first file that exists from
263+
// the list of possible defaults in the template defination
264+
const templateDefinition = getTemplateDefinition(sandbox.template);
265+
266+
const parsedConfigs = parse(
267+
sandbox.template,
268+
templateDefinition.configurationFiles,
269+
resolve,
270+
sandbox
271+
);
272+
273+
const defaultOpenedFiles = templateDefinition.getDefaultOpenedFiles(
274+
parsedConfigs
275+
);
276+
277+
const defaultOpenModule = defaultOpenedFiles
278+
.map(path => resolve(path))
279+
.find(module => module);
280+
281+
if (defaultOpenModule) {
282+
return defaultOpenModule;
283+
}
284+
285+
// third attempt: give up and load the first file in the list
286+
return sandbox.modules[0];
263287
};
264288

265289
export const findCurrentModule = (
@@ -284,3 +308,19 @@ export const findCurrentModule = (
284308
mainModule
285309
);
286310
};
311+
312+
export const resolveModuleWrapped = sandbox => (path: string) => {
313+
try {
314+
return resolveModule(path, sandbox.modules, sandbox.directories);
315+
} catch (e) {
316+
return undefined;
317+
}
318+
};
319+
320+
export const resolveDirectoryWrapped = sandbox => (path: string) => {
321+
try {
322+
return resolveDirectory(path, sandbox.modules, sandbox.directories);
323+
} catch (e) {
324+
return undefined;
325+
}
326+
};
Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,10 @@
1-
import { resolveModule, resolveDirectory } from '../../sandbox/modules';
1+
import {
2+
resolveModuleWrapped,
3+
resolveDirectoryWrapped,
4+
} from '../../sandbox/modules';
25

3-
export const resolveModuleWrapped = sandbox => (path: string) => {
4-
try {
5-
return resolveModule(path, sandbox.modules, sandbox.directories);
6-
} catch (e) {
7-
return undefined;
8-
}
9-
};
6+
// keeping this file around to reduce merge conflicts
7+
// with other open branches
8+
// TODO @sid: Replace the usage of this file after overmind refactor is complete.
109

11-
export const resolveDirectoryWrapped = sandbox => (path: string) => {
12-
try {
13-
return resolveDirectory(path, sandbox.modules, sandbox.directories);
14-
} catch (e) {
15-
return undefined;
16-
}
17-
};
10+
export { resolveModuleWrapped, resolveDirectoryWrapped };

0 commit comments

Comments
 (0)