component.js
function translate(load){
		var filename;

		//!steal-remove-start
		filename = getFilename(load.name);
		//!steal-remove-end

		var localLoader = this.localLoader || this,
			result = parse(load.source),
			tagName = result.tagName,
			texts = result.texts,
			types = result.types,
			froms = result.froms,
			normalize = function(str){
				return localLoader.normalize(str, module.id);
			},
			deps = [normalize("can-component")],
			ases = ["Component"],
			addDep = function(depName, isVirtual){
				deps.push(depName);
				if(isVirtual !== false) load.metadata.virtualDeps.push(depName);
			},
			stylePromise, templatePromise;

		load.metadata.virtualDeps = [];
		var defineVirtualModule = makeDefineVirtualModule(localLoader, load,
														  addDep, ases);

		// Define the template
		templatePromise = defineVirtualModule({
			condition: froms.template || froms.view || result.intermediate.length,
			arg: "view",
			name: "view",
			from: froms.template || froms.view,
			source: templateDefine(result, normalize, filename),
			metadata: {
				originalSource: load.source,
				importSpecifiers: getImportSpecifiers(result)
			}
		});

		// Define the ViewModel
		defineVirtualModule({
			condition: froms["view-model"] || texts["view-model"],
			arg: "ViewModel",
			name: "view-model",
			from: froms["view-model"],
			source: texts["view-model"]
		});

		// Define events
		defineVirtualModule({
			condition: froms.events || texts.events,
			arg: "events",
			name: "events",
			from: froms.events,
			source: texts.events
		});

		// Define helpers
		defineVirtualModule({
			condition: froms.helpers || texts.helpers,
			arg: "helpers",
			name: "helpers",
			from: froms.helpers,
			source: texts.helpers
		});

		// Define simple-helpers
		defineVirtualModule({
			condition: froms["simple-helpers"] || texts["simple-helpers"],
			arg: "simpleHelpers",
			name: "simple-helpers",
			from: froms["simple-helpers"],
			source: texts["simple-helpers"]
		});

		// Define the styles
		stylePromise = defineVirtualModule({
			condition: froms.style || texts.style,
			name: function(name){
				return name("style", types.style || "css") + "!"
			},
			address: function(address){
				return address("style", types.style);
			},
			source: function(){
				var styleText = texts.style;
				if(types.style === "less") {
					var styleText = tagName + " {\n" + texts.style + "}\n";
				}
				return styleText;
			},
			getLoad: function(styleName){
				var styleLoad = {};
				var normalizePromise = localLoader.normalize(styleName, load.name);
				var locatePromise = normalizePromise.then(function(name){
					styleName = name;
					styleLoad = { name: name, metadata: {} };
					return localLoader.locate(styleLoad);
				});

				return locatePromise.then(function(){
					return {
						name: styleName,
						metadata: styleLoad.metadata
					};
				});
			}
		}) || Promise.resolve();


		return Promise.all([
			stylePromise,
			templatePromise
		]).then(function(){
			return Promise.all(deps);
		}).then(function(deps){
			return "def" + "ine(" + JSON.stringify(deps) + ", function(" +
				ases.join(", ") + "){\n" +
				"\tvar __interop = function(m){if(m && m['default']) {return m['default'];}else if(m) return m;};\n\n" +
				"\tvar ViewModel = __interop(typeof ViewModel !== 'undefined' ? ViewModel : undefined);\n" +
				"\tvar ComponentConstructor = Component.extend({\n" +
				"\t\ttag: '" + tagName + "',\n" +
				"\t\tview: __interop(typeof view !== 'undefined' ? view : undefined),\n" +
				"\t\tViewModel: ViewModel,\n" +
				"\t\tevents: __interop(typeof events !== 'undefined' ? events : undefined),\n" +
				"\t\thelpers: __interop(typeof helpers !== 'undefined' ? helpers : undefined),\n" +
				"\t\tsimpleHelpers: __interop(typeof simpleHelpers !== 'undefined' ? simpleHelpers : undefined),\n" +
				"\t\tleakScope: " + result.leakScope + "\n" +
				"\t});\n\n" +
				"\treturn {\n" +
				"\t\tComponent: ComponentConstructor,\n" +
				"\t\tViewModel: ViewModel,\n" +
				"\t\tdefault: ComponentConstructor\n" +
				"\t};\n" +
				"});";
		});

	}
function translate(load){
		var filename;

		//!steal-remove-start
		filename = getFilename(load.name);
		//!steal-remove-end

		var localLoader = this.localLoader || this,
			result = parse(load.source),
			tagName = result.tagName,
			texts = result.texts,
			types = result.types,
			froms = result.froms,
			normalize = function(str){
				return localLoader.normalize(str, module.id);
			},
			deps = [normalize("can-component")],
			ases = ["Component"],
			addDep = function(depName, isVirtual){
				deps.push(depName);
				if(isVirtual !== false) load.metadata.virtualDeps.push(depName);
			},
			stylePromise, templatePromise;

		load.metadata.virtualDeps = [];
		var defineVirtualModule = makeDefineVirtualModule(localLoader, load,
														  addDep, ases);

		// Define the template
		templatePromise = defineVirtualModule({
			condition: froms.template || froms.view || result.intermediate.length,
			arg: "view",
			name: "view",
			from: froms.template || froms.view,
			source: templateDefine(result, normalize, filename),
			metadata: {
				originalSource: load.source,
				importSpecifiers: getImportSpecifiers(result)
			}
		});

		// Define the ViewModel
		defineVirtualModule({
			condition: froms["view-model"] || texts["view-model"],
			arg: "ViewModel",
			name: "view-model",
			from: froms["view-model"],
			source: texts["view-model"]
		});

		// Define events
		defineVirtualModule({
			condition: froms.events || texts.events,
			arg: "events",
			name: "events",
			from: froms.events,
			source: texts.events
		});

		// Define helpers
		defineVirtualModule({
			condition: froms.helpers || texts.helpers,
			arg: "helpers",
			name: "helpers",
			from: froms.helpers,
			source: texts.helpers
		});

		// Define simple-helpers
		defineVirtualModule({
			condition: froms["simple-helpers"] || texts["simple-helpers"],
			arg: "simpleHelpers",
			name: "simple-helpers",
			from: froms["simple-helpers"],
			source: texts["simple-helpers"]
		});

		// Define the styles
		stylePromise = defineVirtualModule({
			condition: froms.style || texts.style,
			name: function(name){
				return name("style", types.style || "css") + "!"
			},
			address: function(address){
				return address("style", types.style);
			},
			source: function(){
				var styleText = texts.style;
				if(types.style === "less") {
					var styleText = tagName + " {\n" + texts.style + "}\n";
				}
				return styleText;
			},
			getLoad: function(styleName){
				var styleLoad = {};
				var normalizePromise = localLoader.normalize(styleName, load.name);
				var locatePromise = normalizePromise.then(function(name){
					styleName = name;
					styleLoad = { name: name, metadata: {} };
					return localLoader.locate(styleLoad);
				});

				return locatePromise.then(function(){
					return {
						name: styleName,
						metadata: styleLoad.metadata
					};
				});
			}
		}) || Promise.resolve();


		return Promise.all([
			stylePromise,
			templatePromise
		]).then(function(){
			return Promise.all(deps);
		}).then(function(deps){
			return "def" + "ine(" + JSON.stringify(deps) + ", function(" +
				ases.join(", ") + "){\n" +
				"\tvar __interop = function(m){if(m && m['default']) {return m['default'];}else if(m) return m;};\n\n" +
				"\tvar ViewModel = __interop(typeof ViewModel !== 'undefined' ? ViewModel : undefined);\n" +
				"\tvar ComponentConstructor = Component.extend({\n" +
				"\t\ttag: '" + tagName + "',\n" +
				"\t\tview: __interop(typeof view !== 'undefined' ? view : undefined),\n" +
				"\t\tViewModel: ViewModel,\n" +
				"\t\tevents: __interop(typeof events !== 'undefined' ? events : undefined),\n" +
				"\t\thelpers: __interop(typeof helpers !== 'undefined' ? helpers : undefined),\n" +
				"\t\tsimpleHelpers: __interop(typeof simpleHelpers !== 'undefined' ? simpleHelpers : undefined),\n" +
				"\t\tleakScope: " + result.leakScope + "\n" +
				"\t});\n\n" +
				"\treturn {\n" +
				"\t\tComponent: ComponentConstructor,\n" +
				"\t\tViewModel: ViewModel,\n" +
				"\t\tdefault: ComponentConstructor\n" +
				"\t};\n" +
				"});";
		});

	}
!steal-remove-end