Skip to content

Commit e8a1cf1

Browse files
authored
Packager upgrades (codesandbox#411)
* Packager upgrades * Add faster resolving of depenendency versions * Resolve main api
1 parent 6ac2bed commit e8a1cf1

File tree

3 files changed

+49
-7
lines changed

3 files changed

+49
-7
lines changed

packages/app/src/app/pages/Sandbox/Editor/Workspace/Dependencies/SearchDependencies.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,12 @@ export default class SearchDependencies extends React.PureComponent {
103103
hitToVersionMap = new Map();
104104

105105
handleSelect = hit => {
106-
const version = this.hitToVersionMap.get(hit);
106+
let version = this.hitToVersionMap.get(hit);
107+
108+
if (!version && hit.tags) {
109+
version = hit.tags.latest;
110+
}
111+
107112
this.props.onConfirm(hit.name, version);
108113
};
109114

packages/app/src/sandbox/eval/npm/fetch-npm-module.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ import * as pathUtils from 'common/utils/path';
33
import resolve from 'browser-resolve';
44

55
import type { Module } from '../entities/module';
6-
import Manager, { Manifest } from '../manager';
6+
import Manager from '../manager';
7+
import type { Manifest } from '../manager';
78

89
import DependencyNotFoundError from '../../errors/dependency-not-found-error';
910
import getDependencyName from '../utils/get-dependency-name';
@@ -76,8 +77,13 @@ function downloadDependency(depName: string, depVersion: string, path: string) {
7677
''
7778
);
7879

80+
const isGitHub = /\//.test(depVersion);
81+
const url = isGitHub
82+
? `https://cdn.jsdelivr.net/gh/${depVersion}${relativePath}`
83+
: `https://unpkg.com/${depName}@${depVersion}${relativePath}`;
84+
7985
packages[path] = window
80-
.fetch(`https://unpkg.com/${depName}@${depVersion}${relativePath}`)
86+
.fetch(url)
8187
.then(x => {
8288
if (x.ok) {
8389
return x.text();

packages/app/src/sandbox/npm/fetch-dependencies.js

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ type Dependencies = {
1313
const RETRY_COUNT = 60;
1414
const debug = _debug('cs:sandbox:packager');
1515

16+
const host = process.env.CODESANDBOX_HOST;
17+
1618
const VERSION = 1;
1719

1820
const BUCKET_URL =
@@ -81,9 +83,39 @@ function dependenciesToBucketPath(dependencies: Object) {
8183
.join('%2B')}.json`;
8284
}
8385

86+
async function getAbsoluteDependencies(dependencies: Object) {
87+
const nonAbsoluteDependencies = Object.keys(dependencies).filter(dep => {
88+
const version = dependencies[dep];
89+
90+
const isAbsolute = /^\d+\.\d+\.\d+$/.test(version);
91+
92+
return !isAbsolute && !/\//.test(version);
93+
});
94+
95+
const newDependencies = { ...dependencies };
96+
97+
await Promise.all(
98+
nonAbsoluteDependencies.map(async dep => {
99+
try {
100+
const data = await window
101+
.fetch(`${host}/api/v1/dependencies/${dep}@${dependencies[dep]}`)
102+
.then(x => x.json())
103+
.then(x => x.data);
104+
105+
newDependencies[dep] = data.version;
106+
} catch (e) {
107+
/* ignore */
108+
}
109+
})
110+
);
111+
112+
return newDependencies;
113+
}
114+
84115
async function getDependencies(dependencies: Object) {
85-
const dependencyUrl = dependenciesToQuery(dependencies);
86-
const bucketDependencyUrl = dependenciesToBucketPath(dependencies);
116+
const absoluteDependencies = await getAbsoluteDependencies(dependencies);
117+
const dependencyUrl = dependenciesToQuery(absoluteDependencies);
118+
const bucketDependencyUrl = dependenciesToBucketPath(absoluteDependencies);
87119

88120
setScreen({ type: 'loading', text: 'Downloading Dependencies...' });
89121
try {
@@ -92,15 +124,14 @@ async function getDependencies(dependencies: Object) {
92124
);
93125
return bucketManifest;
94126
} catch (e) {
95-
dispatch(actions.notifications.show('Bundling dependencies...'));
127+
dispatch(actions.notifications.show('Resolving dependencies...'));
96128

97129
// The dep has not been generated yet...
98130
const { url } = await requestPackager(
99131
`${PACKAGER_URL}/${dependencyUrl}`,
100132
'POST'
101133
);
102134

103-
setScreen({ type: 'loading', text: 'Downloading Dependencies...' });
104135
return requestPackager(`${BUCKET_URL}/${url}`);
105136
}
106137
}

0 commit comments

Comments
 (0)