Skip to content

Commit

Permalink
depcache implementation (#2134)
Browse files Browse the repository at this point in the history
  • Loading branch information
guybedford authored Jul 23, 2020
1 parent 7398358 commit c8210d6
Show file tree
Hide file tree
Showing 18 changed files with 140 additions and 8 deletions.
8 changes: 7 additions & 1 deletion src/common.js
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ function resolveAndComposePackages (packages, outPackages, baseUrl, parentMap, p
}

export function resolveAndComposeImportMap (json, baseUrl, parentMap) {
var outMap = { imports: objectAssign({}, parentMap.imports), scopes: objectAssign({}, parentMap.scopes) };
var outMap = { imports: objectAssign({}, parentMap.imports), scopes: objectAssign({}, parentMap.scopes), depcache: objectAssign({}, parentMap.depcache) };

if (json.imports)
resolveAndComposePackages(json.imports, outMap.imports, baseUrl, parentMap, null);
Expand All @@ -163,6 +163,12 @@ export function resolveAndComposeImportMap (json, baseUrl, parentMap) {
resolveAndComposePackages(json.scopes[s], outMap.scopes[resolvedScope] || (outMap.scopes[resolvedScope] = {}), baseUrl, parentMap, resolvedScope);
}

if (json.depcache)
for (var d in json.depcache) {
var resolvedDepcache = resolveUrl(d, baseUrl);
outMap.depcache[resolvedDepcache] = json.depcache[d];
}

return outMap;
}

Expand Down
14 changes: 12 additions & 2 deletions src/features/browser-scripts.js → src/features/import-maps.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@
* SystemJS browser attachments for script and import map processing
*/
import { baseUrl, resolveAndComposeImportMap, hasDocument, resolveUrl, IMPORT_MAP } from '../common.js';
import { systemJSPrototype } from '../system-core.js';
import { systemJSPrototype, getOrCreateLoad } from '../system-core.js';
import { errMsg } from '../err-msg.js';

var importMapPromise = Promise.resolve({ imports: {}, scopes: {} });
var importMapPromise = Promise.resolve({ imports: {}, scopes: {}, depcache: {} });

// Scripts are processed immediately, on the first System.import, and on DOMReady.
// Import map scripts are processed only once (by being marked) and in order for each phase.
Expand All @@ -26,6 +26,16 @@ if (hasDocument) {
window.addEventListener('DOMContentLoaded', processScripts);
}

const systemInstantiate = systemJSPrototype.instantiate;
systemJSPrototype.instantiate = function (url, firstParentUrl) {
var preloads = this[IMPORT_MAP].depcache[url];
if (preloads) {
for (var i = 0; i < preloads.length; i++)
getOrCreateLoad(this, this.resolve(preloads[i], url), url);
}
return systemInstantiate.call(this, url, firstParentUrl);
};

function processScripts () {
[].forEach.call(document.querySelectorAll('script'), function (script) {
if (script.sp) // sp marker = systemjs processed
Expand Down
4 changes: 2 additions & 2 deletions src/s.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import './features/resolve.js';
import './features/browser-scripts.js';
import './features/script-load.js';
import './features/resolve.js';
import './features/import-maps.js';
import './features/auto-import.js';
import './features/worker-load.js';
2 changes: 1 addition & 1 deletion src/system-core.js
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ systemJSPrototype.getRegister = function () {
return _lastRegister;
};

function getOrCreateLoad (loader, id, firstParentUrl) {
export function getOrCreateLoad (loader, id, firstParentUrl) {
var load = loader[REGISTRY][id];
if (load)
return load;
Expand Down
4 changes: 2 additions & 2 deletions src/system.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import './features/resolve.js';
import './features/browser-scripts.js';
import './features/script-load.js';
import './features/resolve.js';
import './features/import-maps.js';
import './features/auto-import.js';
import './features/worker-load.js';
import './extras/global.js';
Expand Down
7 changes: 7 additions & 0 deletions test/browser/core.js
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,13 @@ suite('SystemJS Standard Tests', function() {
});
});

test('should support depcache', function () {
return System.import('/test/fixtures/browser/depcache.js').then(function (m) {
assert.ok(m);
assert.equal(m.default, '10th module');
});
});

test('should not get confused by filenames in url hash when resolving module type', function () {
return System.import('fixturesbase/css-modules/hash.css?foo=bar.html').then(function (m) {
assert.ok(m);
Expand Down
9 changes: 9 additions & 0 deletions test/fixtures/browser/depcache.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
System.register(['./depcache1.js'], function(_export) {
var dep;
return {
setters: [function (_dep) { dep = _dep.default }],
execute: function () {
_export('default', dep);
}
};
});
9 changes: 9 additions & 0 deletions test/fixtures/browser/depcache1.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
System.register(['./depcache2.js'], function(_export) {
var dep;
return {
setters: [function (_dep) { dep = _dep.default }],
execute: function () {
_export('default', dep);
}
};
});
7 changes: 7 additions & 0 deletions test/fixtures/browser/depcache10.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
System.register([], function(_export) {
return {
execute: function () {
_export('default', '10th module');
}
};
});
9 changes: 9 additions & 0 deletions test/fixtures/browser/depcache2.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
System.register(['./depcache3.js'], function(_export) {
var dep;
return {
setters: [function (_dep) { dep = _dep.default }],
execute: function () {
_export('default', dep);
}
};
});
9 changes: 9 additions & 0 deletions test/fixtures/browser/depcache3.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
System.register(['./depcache4.js'], function(_export) {
var dep;
return {
setters: [function (_dep) { dep = _dep.default }],
execute: function () {
_export('default', dep);
}
};
});
9 changes: 9 additions & 0 deletions test/fixtures/browser/depcache4.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
System.register(['./depcache5.js'], function(_export) {
var dep;
return {
setters: [function (_dep) { dep = _dep.default }],
execute: function () {
_export('default', dep);
}
};
});
9 changes: 9 additions & 0 deletions test/fixtures/browser/depcache5.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
System.register(['./depcache6.js'], function(_export) {
var dep;
return {
setters: [function (_dep) { dep = _dep.default }],
execute: function () {
_export('default', dep);
}
};
});
9 changes: 9 additions & 0 deletions test/fixtures/browser/depcache6.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
System.register(['./depcache7.js'], function(_export) {
var dep;
return {
setters: [function (_dep) { dep = _dep.default }],
execute: function () {
_export('default', dep);
}
};
});
9 changes: 9 additions & 0 deletions test/fixtures/browser/depcache7.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
System.register(['./depcache8.js'], function(_export) {
var dep;
return {
setters: [function (_dep) { dep = _dep.default }],
execute: function () {
_export('default', dep);
}
};
});
9 changes: 9 additions & 0 deletions test/fixtures/browser/depcache8.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
System.register(['./depcache9.js'], function(_export) {
var dep;
return {
setters: [function (_dep) { dep = _dep.default }],
execute: function () {
_export('default', dep);
}
};
});
9 changes: 9 additions & 0 deletions test/fixtures/browser/depcache9.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
System.register(['./depcache10.js'], function(_export) {
var dep;
return {
setters: [function (_dep) { dep = _dep.default }],
execute: function () {
_export('default', dep);
}
};
});
12 changes: 12 additions & 0 deletions test/fixtures/browser/importmap.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,5 +19,17 @@
"wasm/": {
"example": "./wasm/example.js"
}
},
"depcache": {
"depcache.js": ["./depcache1.js"],
"depcache1.js": ["./depcache2.js"],
"depcache2.js": ["./depcache3.js"],
"depcache3.js": ["./depcache4.js"],
"depcache4.js": ["./depcache5.js"],
"depcache5.js": ["./depcache6.js"],
"depcache6.js": ["./depcache7.js"],
"depcache7.js": ["./depcache8.js"],
"depcache8.js": ["./depcache9.js"],
"depcache9.js": ["./depcache10.js"]
}
}

0 comments on commit c8210d6

Please sign in to comment.