Git Product home page Git Product logo

Comments (32)

EisenbergEffect avatar EisenbergEffect commented on May 24, 2024

Where exactly is this breaking things? Is it breaking our view loading?

from bootstrapper.

MicahZoltu avatar MicahZoltu commented on May 24, 2024

It breaks half way through the bootstrapping process. This index.html file alone will cause the bug to reproduce:

<!doctype html>
<html>
<body aurelia-app>
    <script src="jspm_packages/system.js"></script>
    <script src="config.js"></script>
    <script>
        System.import('aurelia-bootstrapper');
    </script>
</body>
</html>

It never gets to the point where it tries to load app.js or app.html.

from bootstrapper.

guybedford avatar guybedford commented on May 24, 2024

Here's the debug log -

NFO [aurelia] Aurelia Starting
jspm_packages/github/aurelia/[email protected]/index.js:41 DEBUG [aurelia] Loading plugin file:///Users/guybedford/Projects/test/systemjs-bug-repro/jspm_packages/github/aurelia/[email protected].
jspm_packages/github/aurelia/[email protected]/index.js:41 DEBUG [aurelia] Configured plugin file:///Users/guybedford/Projects/test/systemjs-bug-repro/jspm_packages/github/aurelia/[email protected].
jspm_packages/github/aurelia/[email protected]/index.js:41 DEBUG [aurelia] Loading plugin file:///Users/guybedford/Projects/test/systemjs-bug-repro/jspm_packages/github/aurelia/[email protected].
jspm_packages/github/aurelia/[email protected]/index.js:41 DEBUG [aurelia] Configured plugin file:///Users/guybedford/Projects/test/systemjs-bug-repro/jspm_packages/github/aurelia/[email protected].
jspm_packages/github/aurelia/[email protected]/index.js:41 DEBUG [aurelia] Loading plugin file:///Users/guybedford/Projects/test/systemjs-bug-repro/jspm_packages/github/aurelia/[email protected].
jspm_packages/github/aurelia/[email protected]/index.js:41 DEBUG [aurelia] Configured plugin file:///Users/guybedford/Projects/test/systemjs-bug-repro/jspm_packages/github/aurelia/[email protected].
jspm_packages/github/aurelia/[email protected]/index.js:41 DEBUG [aurelia] Loading plugin file:///Users/guybedford/Projects/test/systemjs-bug-repro/jspm_packages/github/aurelia/[email protected].
jspm_packages/github/aurelia/[email protected]/index.js:41 DEBUG [aurelia] Configured plugin file:///Users/guybedford/Projects/test/systemjs-bug-repro/jspm_packages/github/aurelia/[email protected].
jspm_packages/github/aurelia/[email protected]/index.js:41 DEBUG [aurelia] Loading plugin file:///Users/guybedford/Projects/test/systemjs-bug-repro/jspm_packages/github/aurelia/[email protected].
jspm_packages/github/aurelia/[email protected]/index.js:41 DEBUG [aurelia] Configured plugin file:///Users/guybedford/Projects/test/systemjs-bug-repro/jspm_packages/github/aurelia/[email protected].
system.js:1020 XMLHttpRequest cannot load file://users/guybedford/Projects/test/systemjs-bug-repro/jspm_packages/github/aurelia/[email protected]/compose.js. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource.fetchTextFromURL @ system.js:1020
system.js:1020 XMLHttpRequest cannot load file://users/guybedford/Projects/test/systemjs-bug-repro/jspm_packages/github/aurelia/[email protected]/if.js. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource.fetchTextFromURL @ system.js:1020
system.js:1020 XMLHttpRequest cannot load file://users/guybedford/Projects/test/systemjs-bug-repro/jspm_packages/github/aurelia/[email protected]/with.js. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource.fetchTextFromURL @ system.js:1020
system.js:1020 XMLHttpRequest cannot load file://users/guybedford/Projects/test/systemjs-bug-repro/jspm_packages/github/aurelia/[email protected]/repeat.js. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource.fetchTextFromURL @ system.js:1020
system.js:1020 XMLHttpRequest cannot load file://users/guybedford/Projects/test/systemjs-bug-repro/jspm_packages/github/aurelia/[email protected]/show.js. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource.fetchTextFromURL @ system.js:1020
system.js:1020 XMLHttpRequest cannot load file://users/guybedford/Projects/test/systemjs-bug-repro/jspm_packages/github/aurelia/[email protected]/replaceable.js. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource.fetchTextFromURL @ system.js:1020
system.js:1020 XMLHttpRequest cannot load file://users/guybedford/Projects/test/systemjs-bug-repro/jspm_packages/github/aurelia/[email protected]/global-behavior.js. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource.fetchTextFromURL @ system.js:1020
system.js:1020 XMLHttpRequest cannot load file://users/guybedford/Projects/test/systemjs-bug-repro/jspm_packages/github/aurelia/[email protected]/sanitize-html.js. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource.fetchTextFromURL @ system.js:1020
system.js:1020 XMLHttpRequest cannot load file://users/guybedford/Projects/test/systemjs-bug-repro/jspm_packages/github/aurelia/[email protected]/focus.js. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource.fetchTextFromURL @ system.js:1020
system.js:1020 XMLHttpRequest cannot load file://users/guybedford/Projects/test/systemjs-bug-repro/jspm_packages/github/aurelia/[email protected]/router-view.js. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource.fetchTextFromURL @ system.js:1020
system.js:1020 XMLHttpRequest cannot load file://users/guybedford/Projects/test/systemjs-bug-repro/jspm_packages/github/aurelia/[email protected]/route-href.js. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource.fetchTextFromURL @ system.js:1020
jspm_packages/npm/[email protected]/modules/es6.promise.js:139 Unhandled promise rejection : file://Users/guybedford/Projects/test/systemjs-bug-repro/jspm_packages/github/aurelia/[email protected]/compose.js
    Error loading file://Users/guybedford/Projects/test/systemjs-bug-repro/jspm_packages/github/aurelia/[email protected]/compose.js

from bootstrapper.

EisenbergEffect avatar EisenbergEffect commented on May 24, 2024

So, do we just need to change our normalize calls to append a trailing slash? I'm confused as to what the change actually is in behavior and why this has been done.

from bootstrapper.

guybedford avatar guybedford commented on May 24, 2024

Yes exactly. The reason for this is that the locate hook and normalize hook are now just one hook in the new spec - resolve. So we resolve to URL in normalize now in the latest SystemJS in preparation for this (effectively deprecating the locate hook to be an identity operation). As a result automatic .js extensions which would have been added in locate are now added in normalize.

from bootstrapper.

EisenbergEffect avatar EisenbergEffect commented on May 24, 2024

I feel like this is going to cause us broader problems. I'm not sure just yet. Is there a way to not upgrade to the Beta? I don't know when I'm going to have time to look into this. Not this week for sure.

from bootstrapper.

guybedford avatar guybedford commented on May 24, 2024

Basically it's caused by module names and URLs being able to exist side-by-side (import '//cdn.jquery.com/jquery.js'). As a result the simplest normalization system is to turn everything into a URL as the lowest common reference system. There's a broader discussion at whatwg/loader#52 if you care to dive into the arguments as well. The beta is not currently installed via npm install jspm, only npm install jspm@beta. Do let me know when you are able to look into this, and I can adapt timelines here as well.

from bootstrapper.

guybedford avatar guybedford commented on May 24, 2024

To update on the exact issue here -

System.normalize('templating-resources', parent).then(function(normalized) {
});

Will return normalized above as the package name, with the ".js" extension added.

As far as I can guess, I think that is the issue for the dynamic import of aurelia/[email protected].

from bootstrapper.

EisenbergEffect avatar EisenbergEffect commented on May 24, 2024

Ok, I think I know the set of scenarios where we do things like that. I will look into it. Is the change of adding the final slash backwards compatible with the current release version?

from bootstrapper.

guybedford avatar guybedford commented on May 24, 2024

Glad it's making sense! Yes, it should be as far as I'm aware.

from bootstrapper.

lzonjic avatar lzonjic commented on May 24, 2024

@EisenbergEffect Is there any hope that this will be solved in near future? Is there any alternate way to make it work? Can I help in any way?

JSPM beta has support for TypeScript transpiler so it's very important for my stack (Aurelia + TS + ASP.NET 5 in VS Code), but today Aurelia doesn't work with JSPM beta...

from bootstrapper.

EisenbergEffect avatar EisenbergEffect commented on May 24, 2024

@lzonjic It won't be in today's releases, but we can address it soon after. If you want to submit a PR to fix the problem, you are welcome to. In my understanding, it mostly involves changes to how we call the normalize API which happens in the bootstrapper and in the loader-default libraries.

from bootstrapper.

guybedford avatar guybedford commented on May 24, 2024

I'm hoping to release the jspm beta as the main release very soon as it has a lot of important features. This is the blocker for that so please do keep me posted here.

from bootstrapper.

EisenbergEffect avatar EisenbergEffect commented on May 24, 2024

@guybedford Is there any way to do a synchronous normalize in the new version? Or is the api still the same, just with the change in behavior?

from bootstrapper.

EisenbergEffect avatar EisenbergEffect commented on May 24, 2024

Also, can you expand on what changes will likely be coming in the new version of the loader spec that might affect us?

from bootstrapper.

guybedford avatar guybedford commented on May 24, 2024

@EisenbergEffect yes there is System.normalizeSync but it is not documented as a stable API at the moment, although there are no plans to remove it. I'd still suggest using async normalize where you can though.

Did you want to know more about the changes already pushed or further changes in future?

from bootstrapper.

EisenbergEffect avatar EisenbergEffect commented on May 24, 2024

I'm interested in the future set of changes that are coming.

from bootstrapper.

EisenbergEffect avatar EisenbergEffect commented on May 24, 2024

@guybedford Do I need to install an updated version of jspm as well? or just the system.js loader? I'm looking into this now after updating to the beta loader and I'm getting a completely different set of errors. The bootstrapper module isn't even loading correctly.

from bootstrapper.

EisenbergEffect avatar EisenbergEffect commented on May 24, 2024

In my index.html file I have System.import('aurelia-bootstrapper'); The result of that is that the bootstrapper module never loads. The define function is never run. Instead, an error occurs with respect to a dependency. Here are the errors I get:

system.src.js:3798 GET http://localhost:9000/dist/aurelia-logging-console.js 404 (Not Found)j @ system.src.js:3798o.fetch @ system.src.js:3798o.fetch @ system.src.js:3798p @ system.src.js:3798(anonymous function) @ system.src.js:3798a @ system.src.js:3798a @ system.src.js:3798n @ system.src.js:3798(anonymous function) @ system.src.js:3798(anonymous function) @ system.src.js:3798(anonymous function) @ system.src.js:3798
(index):1 Uncaught (in promise) Not Found: http://localhost:9000/dist/aurelia-logging-console.js
Error loading http://localhost:9000/dist/aurelia-logging-console.js from http://localhost:9000/jspm_packages/github/aurelia/[email protected]
Error loading http://localhost:9000/dist/aurelia-logging-console.js
system.src.js:3798 GET http://localhost:9000/dist/process.js 404 (Not Found)j @ system.src.js:3798o.fetch @ system.src.js:3798o.fetch @ system.src.js:3798p @ system.src.js:3798(anonymous function) @ system.src.js:3798a @ system.src.js:3798a @ system.src.js:3798n @ system.src.js:3798(anonymous function) @ system.src.js:3798(anonymous function) @ system.src.js:3798(anonymous function) @ system.src.js:3798
system.src.js:3798 GET http://localhost:9000/dist/aurelia-logging.js 404 (Not Found)j @ system.src.js:3798o.fetch @ system.src.js:3798o.fetch @ system.src.js:3798p @ system.src.js:3798(anonymous function) @ system.src.js:3798a @ system.src.js:3798a @ system.src.js:3798n @ system.src.js:3798(anonymous function) @ system.src.js:3798(anonymous function) @ system.src.js:3798(anonymous function) @ system.src.js:3798
system.src.js:3798 GET http://localhost:9000/dist/aurelia-metadata.js 404 (Not Found)j @ system.src.js:3798o.fetch @ system.src.js:3798o.fetch @ system.src.js:3798p @ system.src.js:3798(anonymous function) @ system.src.js:3798a @ system.src.js:3798a @ system.src.js:3798n @ system.src.js:3798(anonymous function) @ system.src.js:3798(anonymous function) @ system.src.js:3798(anonymous function) @ system.src.js:3798
system.src.js:3798 GET http://localhost:9000/dist/aurelia-loader.js 404 (Not Found)j @ system.src.js:3798o.fetch @ system.src.js:3798o.fetch @ system.src.js:3798p @ system.src.js:3798(anonymous function) @ system.src.js:3798a @ system.src.js:3798a @ system.src.js:3798n @ system.src.js:3798(anonymous function) @ system.src.js:3798(anonymous function) @ system.src.js:3798(anonymous function) @ system.src.js:3798
system.src.js:3798 GET http://localhost:9000/dist/aurelia-path.js 404 (Not Found)j @ system.src.js:3798o.fetch @ system.src.js:3798o.fetch @ system.src.js:3798p @ system.src.js:3798(anonymous function) @ system.src.js:3798a @ system.src.js:3798a @ system.src.js:3798n @ system.src.js:3798(anonymous function) @ system.src.js:3798(anonymous function) @ system.src.js:3798(anonymous function) @ system.src.js:3798
system.src.js:3798 GET http://localhost:9000/dist/aurelia-templating.js 404 (Not Found)j @ system.src.js:3798o.fetch @ system.src.js:3798o.fetch @ system.src.js:3798p @ system.src.js:3798(anonymous function) @ system.src.js:3798a @ system.src.js:3798a @ system.src.js:3798n @ system.src.js:3798(anonymous function) @ system.src.js:3798(anonymous function) @ system.src.js:3798(anonymous function) @ system.src.js:3798
system.src.js:3798 GET http://localhost:9000/dist/aurelia-binding.js 404 (Not Found)j @ system.src.js:3798o.fetch @ system.src.js:3798o.fetch @ system.src.js:3798p @ system.src.js:3798(anonymous function) @ system.src.js:3798a @ system.src.js:3798a @ system.src.js:3798n @ system.src.js:3798(anonymous function) @ system.src.js:3798(anonymous function) @ system.src.js:3798(anonymous function) @ system.src.js:3798
system.src.js:3798 GET http://localhost:9000/dist/aurelia-task-queue.js 404 (Not Found)

I'm stumped. I can't do anything here. Grab the latest skeleton and see. Unless the way jspm installs things has changed as well, and maybe it has, I don't know why this wouldn't work.

from bootstrapper.

lzonjic avatar lzonjic commented on May 24, 2024

@EisenbergEffect You'll need to install jspm@beta. You can also read here systemjs/systemjs#540 how to reproduce it...

from bootstrapper.

EisenbergEffect avatar EisenbergEffect commented on May 24, 2024

Got jspm beta installed. Now I am seeing what I expect. Thanks!

from bootstrapper.

EisenbergEffect avatar EisenbergEffect commented on May 24, 2024

Ok, I've got the fixes into framework (for plugin loading) and templating (for view loading). I will release the patched versions tomorrow.

from bootstrapper.

plwalters avatar plwalters commented on May 24, 2024

@EisenbergEffect Is the change backwards compatible?

from bootstrapper.

lzonjic avatar lzonjic commented on May 24, 2024

@EisenbergEffect Excellent! I can hardly wait your patch. Thanks!

from bootstrapper.

alvarezmario avatar alvarezmario commented on May 24, 2024

Fixed in aurelia/templating@4589ec2 and aurelia/framework@5823c93

from bootstrapper.

damianof avatar damianof commented on May 24, 2024

This might not be completely fixed. I have update to latest aurelia, 0.13.2, and getting a bunch of these 404 errors in the browser console (for templating-resources and templating-router):

/jspm_packages/github/aurelia/[email protected]/compose.html 404 (Not Found)
...
/jspm_packages/github/aurelia/[email protected]/router-view.html
...

from bootstrapper.

damianof avatar damianof commented on May 24, 2024

I have and in my main.js file i am loading aurelia-validation and datatables.
When i commented out the aurelia-validation line it works
export function configure(aurelia) {
aurelia.use
.standardConfiguration()
.developmentLogging()
.plugin('aurelia-validation')
.plugin('datatables');
aurelia
.start()
.then(a => a.setRoot());
}
I had 0.2.4 of aurelia-validation. So i upgraded to latest which is0.2.6, but still no luck
So not sure if aurelia-validation is still not up to date with this issue here , or maybe this one systemjs/systemjs#540

from bootstrapper.

damianof avatar damianof commented on May 24, 2024

Disregard my previous comment. I fixed this by modifying the config.js file for aurelia-validation:
"github:aurelia/[email protected]": {
"aurelia-binding": "github:aurelia/[email protected]",
"aurelia-dependency-injection": "github:aurelia/[email protected]",
"aurelia-templating": "github:aurelia/[email protected]"
}

from bootstrapper.

lmaspoch avatar lmaspoch commented on May 24, 2024

@damianof I'm still having the 404 on the same html pages (same problem as you). Once I added the code on the main.js to use the plugin 'aurelia-validation' it blew up my application. I checked my config.js and the validation piece looks exactly like yours. I've tried deleting the jspm_packages folder and reinstalling it to no avail. If you have any ideas I would really appreciate it, i put the main js code below and the config code as well for your review.


Config

"github:aurelia/[email protected]": {
  "aurelia-binding": "github:aurelia/[email protected]",
  "aurelia-dependency-injection": "github:aurelia/[email protected]",
  "aurelia-templating": "github:aurelia/[email protected]"
}

Main

aurelia.use
        .standardConfiguration()
        .developmentLogging()
        .plugin("aurelia-validation");

from bootstrapper.

shellfyred avatar shellfyred commented on May 24, 2024

@lmaspoch The steps outlined by @damianof worked for me but I ran jspm update before applying his config.js changes. Jspm said I was up to date and I could see the newer binding, DI and templating versions under jspm_packages but they were not applied to config.js. Manually setting the versions in config.js fixed my app with no more warnings being thrown. Running jspm update after making the version changes in config.js resulted in validation's deps reverting back to the older versions of binding, DI and templating, breaking my app again. Hope this helps and thank you @damianof for the fix!

from bootstrapper.

damianof avatar damianof commented on May 24, 2024

@lmaspoch @rdmead223 Here is what i have in my aureliafile.js in addition of the config.js section above:

var aurelia = require('aurelia-cli');

  aurelia.command('bundle', {
    js: {
      "dist/app-bundle": {
        modules: [
          'dist/**/*.js',
          'aurelia-bootstrapper',
          'aurelia-http-client',
          'aurelia-router',
          'aurelia-animator-css',
          'github:aurelia/[email protected]',
          'github:aurelia/[email protected]',
          'github:aurelia/[email protected]',
          'github:aurelia/[email protected]',
          'github:aurelia/[email protected]'
        ],
        options: {
          inject: true,
          minify: true
        }
      }
    },
    template: {
      "dist/app-bundle": {
        pattern: 'dist/**/*.html',
        options: {
          inject: true
        }
      }
    }
  });

Also here is my path in config.js:

"paths": {
    "*": "dist/*.js",
    "github:*": "jspm_packages/github/*.js",
    "npm:*": "jspm_packages/npm/*.js",
    "aurelia-skeleton-navigation/*": "lib/*.js"
  },

And here is currently my index.html (it's actually a server-side views served through express/ejs but you get the idea)

<body aurelia-app="main">
<base href="/dashboard">
<script src="jspm_packages/system.js"></script>
<script src="config.js"></script>
<script>
    System.config({
        'paths': {
            '*': 'dist/*.js'
        }
    });

Now, not sure how much it matters (and I dont think affects this issue in anyway), but all my aurelia project is inside a folder called 'frontend', which is inside my root for my node/express app. In express, i just serve the whole folder as static.

app.use(express.static(path.join(__dirname, 'frontend')));

NOTE: Myself and a couple of partners are building something great with Aurelia and we are targeting our beta to be live in 4 months. The company is called Entensive. Stay tuned on entensive.com and follow on twitter at @entensive as it will be our main channel to communicate when we are ready to launch.

from bootstrapper.

damianof avatar damianof commented on May 24, 2024

Ok getting the same error again after trying upgrading to aurelia 1.0.0 beta 1. Here is my config,js file

System.config({
  "transpiler": "babel",
  "babelOptions": {
    "optional": [
      "runtime",
      "es7.decorators",
      "es7.classProperties"
    ]
  },
  "paths": {
    "*": "dist/*.js",
    "github:*": "jspm_packages/github/*.js",
    "npm:*": "jspm_packages/npm/*.js"
  },
  "buildCSS": false
});

System.config({
  "map": {
    "aurelia-animator-css": "github:aurelia/[email protected]",
    "aurelia-bootstrapper": "github:aurelia/[email protected]",
    "aurelia-dependency-injection": "github:aurelia/[email protected]",
    "aurelia-event-aggregator": "github:aurelia/[email protected]",
    "aurelia-framework": "github:aurelia/[email protected]",
    "aurelia-http-client": "github:aurelia/[email protected]",
    "aurelia-router": "github:aurelia/[email protected]",
    "aurelia-validation": "github:aurelia/[email protected]",
    "babel": "npm:[email protected]",
    "babel-runtime": "npm:[email protected]",
    "bootstrap": "github:twbs/[email protected]",
    "core-js": "npm:[email protected]",
    "css": "github:systemjs/[email protected]",
    "datatables": "github:DataTables/[email protected]",
    "font-awesome": "npm:[email protected]",
    "jquery": "github:components/[email protected]",
    "socket.io-client": "npm:[email protected]",
    "sortable": "github:rubaxa/[email protected]",
    "toastr": "github:CodeSeven/[email protected]",
    "github:CodeSeven/[email protected]": {
      "css": "github:systemjs/[email protected]",
      "jquery": "github:components/[email protected]"
    },
    "github:DataTables/[email protected]": {
      "css": "github:systemjs/[email protected]",
      "jquery": "github:components/[email protected]"
    },
    "github:aurelia/[email protected]": {
      "aurelia-metadata": "npm:[email protected]",
      "aurelia-pal": "npm:[email protected]",
      "aurelia-templating": "npm:[email protected]"
    },
    "github:aurelia/[email protected]": {
      "aurelia-dependency-injection": "github:aurelia/[email protected]",
      "aurelia-metadata": "github:aurelia/[email protected]",
      "aurelia-task-queue": "github:aurelia/[email protected]",
      "core-js": "npm:[email protected]"
    },
    "github:aurelia/[email protected]": {
      "aurelia-event-aggregator": "npm:[email protected]",
      "aurelia-framework": "npm:[email protected]",
      "aurelia-history": "npm:[email protected]",
      "aurelia-history-browser": "npm:[email protected]",
      "aurelia-loader-default": "npm:[email protected]",
      "aurelia-logging-console": "npm:[email protected]",
      "aurelia-pal": "npm:[email protected]",
      "aurelia-pal-browser": "npm:[email protected]",
      "aurelia-router": "npm:[email protected]",
      "aurelia-templating": "npm:[email protected]",
      "aurelia-templating-binding": "npm:[email protected]",
      "aurelia-templating-resources": "npm:[email protected]",
      "aurelia-templating-router": "npm:[email protected]",
      "core-js": "npm:[email protected]"
    },
    "github:aurelia/[email protected]": {
      "aurelia-logging": "github:aurelia/[email protected]",
      "aurelia-metadata": "github:aurelia/[email protected]",
      "core-js": "npm:[email protected]"
    },
    "github:aurelia/[email protected]": {
      "aurelia-logging": "npm:[email protected]",
      "aurelia-metadata": "npm:[email protected]",
      "aurelia-pal": "npm:[email protected]",
      "core-js": "npm:[email protected]"
    },
    "github:aurelia/[email protected]": {
      "aurelia-logging": "npm:[email protected]"
    },
    "github:aurelia/[email protected]": {
      "aurelia-binding": "npm:[email protected]",
      "aurelia-dependency-injection": "npm:[email protected]",
      "aurelia-loader": "npm:[email protected]",
      "aurelia-logging": "npm:[email protected]",
      "aurelia-metadata": "npm:[email protected]",
      "aurelia-pal": "npm:[email protected]",
      "aurelia-path": "npm:[email protected]",
      "aurelia-task-queue": "npm:[email protected]",
      "aurelia-templating": "npm:[email protected]",
      "core-js": "npm:[email protected]"
    },
    "github:aurelia/[email protected]": {
      "aurelia-pal": "npm:[email protected]",
      "aurelia-path": "npm:[email protected]",
      "core-js": "npm:[email protected]"
    },
    "github:aurelia/[email protected]": {
      "aurelia-html-template-element": "github:aurelia/[email protected]",
      "aurelia-metadata": "github:aurelia/[email protected]",
      "aurelia-path": "github:aurelia/[email protected]",
      "core-js": "npm:[email protected]",
      "webcomponentsjs": "github:webcomponents/[email protected]"
    },
    "github:aurelia/[email protected]": {
      "core-js": "npm:[email protected]"
    },
    "github:aurelia/[email protected]": {
      "aurelia-dependency-injection": "npm:[email protected]",
      "aurelia-event-aggregator": "npm:[email protected]",
      "aurelia-history": "npm:[email protected]",
      "aurelia-logging": "npm:[email protected]",
      "aurelia-path": "npm:[email protected]",
      "aurelia-route-recognizer": "npm:[email protected]",
      "core-js": "npm:[email protected]"
    },
    "github:aurelia/[email protected]": {
      "aurelia-binding": "github:aurelia/[email protected]",
      "aurelia-dependency-injection": "github:aurelia/[email protected]",
      "aurelia-html-template-element": "github:aurelia/[email protected]",
      "aurelia-loader": "github:aurelia/[email protected]",
      "aurelia-logging": "github:aurelia/[email protected]",
      "aurelia-metadata": "github:aurelia/[email protected]",
      "aurelia-path": "github:aurelia/[email protected]",
      "aurelia-task-queue": "github:aurelia/[email protected]",
      "core-js": "npm:[email protected]"
    },
    "github:aurelia/[email protected]": {
      "aurelia-binding": "github:aurelia/[email protected]",
      "aurelia-dependency-injection": "github:aurelia/[email protected]",
      "aurelia-logging": "github:aurelia/[email protected]",
      "aurelia-templating": "github:aurelia/[email protected]"
    },
    "github:jspm/[email protected]": {
      "assert": "npm:[email protected]"
    },
    "github:jspm/[email protected]": {
      "buffer": "npm:[email protected]"
    },
    "github:jspm/[email protected]": {
      "constants-browserify": "npm:[email protected]"
    },
    "github:jspm/[email protected]": {
      "crypto-browserify": "npm:[email protected]"
    },
    "github:jspm/[email protected]": {
      "events": "npm:[email protected]"
    },
    "github:jspm/[email protected]": {
      "Base64": "npm:[email protected]",
      "events": "github:jspm/[email protected]",
      "inherits": "npm:[email protected]",
      "stream": "github:jspm/[email protected]",
      "url": "github:jspm/[email protected]",
      "util": "github:jspm/[email protected]"
    },
    "github:jspm/[email protected]": {
      "https-browserify": "npm:[email protected]"
    },
    "github:jspm/[email protected]": {
      "buffer": "github:jspm/[email protected]",
      "crypto": "github:jspm/[email protected]",
      "http": "github:jspm/[email protected]",
      "net": "github:jspm/[email protected]",
      "process": "github:jspm/[email protected]",
      "stream": "github:jspm/[email protected]",
      "timers": "github:jspm/[email protected]",
      "util": "github:jspm/[email protected]"
    },
    "github:jspm/[email protected]": {
      "path-browserify": "npm:[email protected]"
    },
    "github:jspm/[email protected]": {
      "process": "npm:[email protected]"
    },
    "github:jspm/[email protected]": {
      "stream-browserify": "npm:[email protected]"
    },
    "github:jspm/[email protected]": {
      "string_decoder": "npm:[email protected]"
    },
    "github:jspm/[email protected]": {
      "timers-browserify": "npm:[email protected]"
    },
    "github:jspm/[email protected]": {
      "tty-browserify": "npm:[email protected]"
    },
    "github:jspm/[email protected]": {
      "url": "npm:[email protected]"
    },
    "github:jspm/[email protected]": {
      "util": "npm:[email protected]"
    },
    "github:jspm/[email protected]": {
      "vm-browserify": "npm:[email protected]"
    },
    "github:jspm/[email protected]": {
      "browserify-zlib": "npm:[email protected]"
    },
    "github:twbs/[email protected]": {
      "jquery": "github:components/[email protected]"
    },
    "npm:[email protected]": {
      "assert": "github:jspm/[email protected]",
      "bn.js": "npm:[email protected]",
      "buffer": "github:jspm/[email protected]",
      "inherits": "npm:[email protected]",
      "minimalistic-assert": "npm:[email protected]",
      "vm": "github:jspm/[email protected]"
    },
    "npm:[email protected]": {
      "util": "npm:[email protected]"
    },
    "npm:[email protected]": {
      "aurelia-metadata": "npm:[email protected]",
      "aurelia-pal": "npm:[email protected]",
      "aurelia-task-queue": "npm:[email protected]",
      "core-js": "npm:[email protected]"
    },
    "npm:[email protected]": {
      "aurelia-logging": "npm:[email protected]",
      "aurelia-metadata": "npm:[email protected]",
      "aurelia-pal": "npm:[email protected]",
      "core-js": "npm:[email protected]"
    },
    "npm:[email protected]": {
      "aurelia-logging": "npm:[email protected]"
    },
    "npm:[email protected]": {
      "aurelia-binding": "npm:[email protected]",
      "aurelia-dependency-injection": "npm:[email protected]",
      "aurelia-loader": "npm:[email protected]",
      "aurelia-logging": "npm:[email protected]",
      "aurelia-metadata": "npm:[email protected]",
      "aurelia-pal": "npm:[email protected]",
      "aurelia-path": "npm:[email protected]",
      "aurelia-task-queue": "npm:[email protected]",
      "aurelia-templating": "npm:[email protected]",
      "core-js": "npm:[email protected]"
    },
    "npm:[email protected]": {
      "aurelia-history": "npm:[email protected]",
      "aurelia-pal": "npm:[email protected]",
      "core-js": "npm:[email protected]"
    },
    "npm:[email protected]": {
      "aurelia-loader": "npm:[email protected]",
      "aurelia-metadata": "npm:[email protected]",
      "aurelia-pal": "npm:[email protected]"
    },
    "npm:[email protected]": {
      "aurelia-metadata": "npm:[email protected]",
      "aurelia-path": "npm:[email protected]"
    },
    "npm:[email protected]": {
      "aurelia-logging": "npm:[email protected]",
      "aurelia-pal": "npm:[email protected]"
    },
    "npm:[email protected]": {
      "aurelia-pal": "npm:[email protected]",
      "core-js": "npm:[email protected]"
    },
    "npm:[email protected]": {
      "aurelia-pal": "npm:[email protected]"
    },
    "npm:[email protected]": {
      "aurelia-path": "npm:[email protected]",
      "core-js": "npm:[email protected]"
    },
    "npm:[email protected]": {
      "aurelia-dependency-injection": "npm:[email protected]",
      "aurelia-event-aggregator": "npm:[email protected]",
      "aurelia-history": "npm:[email protected]",
      "aurelia-logging": "npm:[email protected]",
      "aurelia-path": "npm:[email protected]",
      "aurelia-route-recognizer": "npm:[email protected]",
      "core-js": "npm:[email protected]"
    },
    "npm:[email protected]": {
      "aurelia-pal": "npm:[email protected]"
    },
    "npm:[email protected]": {
      "aurelia-binding": "npm:[email protected]",
      "aurelia-logging": "npm:[email protected]",
      "aurelia-templating": "npm:[email protected]"
    },
    "npm:[email protected]": {
      "aurelia-binding": "npm:[email protected]",
      "aurelia-dependency-injection": "npm:[email protected]",
      "aurelia-loader": "npm:[email protected]",
      "aurelia-logging": "npm:[email protected]",
      "aurelia-pal": "npm:[email protected]",
      "aurelia-path": "npm:[email protected]",
      "aurelia-task-queue": "npm:[email protected]",
      "aurelia-templating": "npm:[email protected]",
      "core-js": "npm:[email protected]"
    },
    "npm:[email protected]": {
      "aurelia-dependency-injection": "npm:[email protected]",
      "aurelia-logging": "npm:[email protected]",
      "aurelia-metadata": "npm:[email protected]",
      "aurelia-pal": "npm:[email protected]",
      "aurelia-path": "npm:[email protected]",
      "aurelia-router": "npm:[email protected]",
      "aurelia-templating": "npm:[email protected]"
    },
    "npm:[email protected]": {
      "aurelia-binding": "npm:[email protected]",
      "aurelia-dependency-injection": "npm:[email protected]",
      "aurelia-loader": "npm:[email protected]",
      "aurelia-logging": "npm:[email protected]",
      "aurelia-metadata": "npm:[email protected]",
      "aurelia-pal": "npm:[email protected]",
      "aurelia-path": "npm:[email protected]",
      "aurelia-task-queue": "npm:[email protected]",
      "core-js": "npm:[email protected]"
    },
    "npm:[email protected]": {
      "process": "github:jspm/[email protected]"
    },
    "npm:[email protected]": {
      "process": "github:jspm/[email protected]"
    },
    "npm:[email protected]": {
      "assert": "github:jspm/[email protected]",
      "callsite": "npm:[email protected]",
      "fs": "github:jspm/[email protected]",
      "process": "github:jspm/[email protected]"
    },
    "npm:[email protected]": {
      "fs": "github:jspm/[email protected]",
      "path": "github:jspm/[email protected]",
      "process": "github:jspm/[email protected]"
    },
    "npm:[email protected]": {
      "buffer": "github:jspm/[email protected]",
      "buffer-xor": "npm:[email protected]",
      "cipher-base": "npm:[email protected]",
      "create-hash": "npm:[email protected]",
      "crypto": "github:jspm/[email protected]",
      "evp_bytestokey": "npm:[email protected]",
      "fs": "github:jspm/[email protected]",
      "inherits": "npm:[email protected]",
      "systemjs-json": "github:systemjs/[email protected]"
    },
    "npm:[email protected]": {
      "browserify-aes": "npm:[email protected]",
      "browserify-des": "npm:[email protected]",
      "buffer": "github:jspm/[email protected]",
      "crypto": "github:jspm/[email protected]",
      "evp_bytestokey": "npm:[email protected]"
    },
    "npm:[email protected]": {
      "buffer": "github:jspm/[email protected]",
      "cipher-base": "npm:[email protected]",
      "crypto": "github:jspm/[email protected]",
      "des.js": "npm:[email protected]",
      "inherits": "npm:[email protected]"
    },
    "npm:[email protected]": {
      "bn.js": "npm:[email protected]",
      "buffer": "github:jspm/[email protected]",
      "constants": "github:jspm/[email protected]",
      "crypto": "github:jspm/[email protected]",
      "randombytes": "npm:[email protected]"
    },
    "npm:[email protected]": {
      "bn.js": "npm:[email protected]",
      "browserify-rsa": "npm:[email protected]",
      "buffer": "github:jspm/[email protected]",
      "create-hash": "npm:[email protected]",
      "create-hmac": "npm:[email protected]",
      "crypto": "github:jspm/[email protected]",
      "elliptic": "npm:[email protected]",
      "inherits": "npm:[email protected]",
      "parse-asn1": "npm:[email protected]",
      "stream": "github:jspm/[email protected]"
    },
    "npm:[email protected]": {
      "assert": "github:jspm/[email protected]",
      "buffer": "github:jspm/[email protected]",
      "pako": "npm:[email protected]",
      "process": "github:jspm/[email protected]",
      "readable-stream": "npm:[email protected]",
      "util": "github:jspm/[email protected]"
    },
    "npm:[email protected]": {
      "buffer": "github:jspm/[email protected]",
      "systemjs-json": "github:systemjs/[email protected]"
    },
    "npm:[email protected]": {
      "base64-js": "npm:[email protected]",
      "ieee754": "npm:[email protected]",
      "is-array": "npm:[email protected]"
    },
    "npm:[email protected]": {
      "bindings": "npm:[email protected]",
      "nan": "npm:[email protected]"
    },
    "npm:[email protected]": {
      "buffer": "github:jspm/[email protected]",
      "inherits": "npm:[email protected]",
      "stream": "github:jspm/[email protected]",
      "string_decoder": "github:jspm/[email protected]"
    },
    "npm:[email protected]": {
      "systemjs-json": "github:systemjs/[email protected]"
    },
    "npm:[email protected]": {
      "fs": "github:jspm/[email protected]",
      "process": "github:jspm/[email protected]",
      "systemjs-json": "github:systemjs/[email protected]"
    },
    "npm:[email protected]": {
      "fs": "github:jspm/[email protected]",
      "path": "github:jspm/[email protected]",
      "process": "github:jspm/[email protected]",
      "systemjs-json": "github:systemjs/[email protected]"
    },
    "npm:[email protected]": {
      "buffer": "github:jspm/[email protected]"
    },
    "npm:[email protected]": {
      "bn.js": "npm:[email protected]",
      "buffer": "github:jspm/[email protected]",
      "crypto": "github:jspm/[email protected]",
      "elliptic": "npm:[email protected]"
    },
    "npm:[email protected]": {
      "buffer": "github:jspm/[email protected]",
      "cipher-base": "npm:[email protected]",
      "crypto": "github:jspm/[email protected]",
      "fs": "github:jspm/[email protected]",
      "inherits": "npm:[email protected]",
      "ripemd160": "npm:[email protected]",
      "sha.js": "npm:[email protected]"
    },
    "npm:[email protected]": {
      "buffer": "github:jspm/[email protected]",
      "create-hash": "npm:[email protected]",
      "crypto": "github:jspm/[email protected]",
      "inherits": "npm:[email protected]",
      "stream": "github:jspm/[email protected]"
    },
    "npm:[email protected]": {
      "browserify-cipher": "npm:[email protected]",
      "browserify-sign": "npm:[email protected]",
      "create-ecdh": "npm:[email protected]",
      "create-hash": "npm:[email protected]",
      "create-hmac": "npm:[email protected]",
      "diffie-hellman": "npm:[email protected]",
      "inherits": "npm:[email protected]",
      "pbkdf2": "npm:[email protected]",
      "public-encrypt": "npm:[email protected]",
      "randombytes": "npm:[email protected]"
    },
    "npm:[email protected]": {
      "process": "github:jspm/[email protected]",
      "tty": "github:jspm/[email protected]"
    },
    "npm:[email protected]": {
      "fs": "github:jspm/[email protected]",
      "ms": "npm:[email protected]",
      "net": "github:jspm/[email protected]",
      "process": "github:jspm/[email protected]",
      "tty": "github:jspm/[email protected]",
      "util": "github:jspm/[email protected]"
    },
    "npm:[email protected]": {
      "buffer": "github:jspm/[email protected]",
      "inherits": "npm:[email protected]",
      "minimalistic-assert": "npm:[email protected]"
    },
    "npm:[email protected]": {
      "bn.js": "npm:[email protected]",
      "buffer": "github:jspm/[email protected]",
      "crypto": "github:jspm/[email protected]",
      "miller-rabin": "npm:[email protected]",
      "randombytes": "npm:[email protected]",
      "systemjs-json": "github:systemjs/[email protected]"
    },
    "npm:[email protected]": {
      "bn.js": "npm:[email protected]",
      "brorand": "npm:[email protected]",
      "hash.js": "npm:[email protected]",
      "inherits": "npm:[email protected]",
      "systemjs-json": "github:systemjs/[email protected]"
    },
    "npm:[email protected]": {
      "buffer": "github:jspm/[email protected]",
      "component-emitter": "npm:[email protected]",
      "component-inherit": "npm:[email protected]",
      "debug": "npm:[email protected]",
      "engine.io-parser": "npm:[email protected]",
      "has-cors": "npm:[email protected]",
      "indexof": "npm:[email protected]",
      "parsejson": "npm:[email protected]",
      "parseqs": "npm:[email protected]",
      "parseuri": "npm:[email protected]",
      "ws": "npm:[email protected]",
      "xmlhttprequest": "github:rase-/node-XMLHttpRequest@add%2Fssl-support"
    },
    "npm:[email protected]": {
      "after": "npm:[email protected]",
      "arraybuffer.slice": "npm:[email protected]",
      "base64-arraybuffer": "npm:[email protected]",
      "blob": "npm:[email protected]",
      "buffer": "github:jspm/[email protected]",
      "has-binary": "npm:[email protected]",
      "utf8": "npm:[email protected]"
    },
    "npm:[email protected]": {
      "buffer": "github:jspm/[email protected]",
      "create-hash": "npm:[email protected]",
      "crypto": "github:jspm/[email protected]"
    },
    "npm:[email protected]": {
      "css": "github:systemjs/[email protected]"
    },
    "npm:[email protected]": {
      "buffer": "github:jspm/[email protected]",
      "fs": "github:jspm/[email protected]",
      "isarray": "npm:[email protected]"
    },
    "npm:[email protected]": {
      "buffer": "github:jspm/[email protected]",
      "fs": "github:jspm/[email protected]",
      "isarray": "npm:[email protected]"
    },
    "npm:[email protected]": {
      "global": "github:component/[email protected]"
    },
    "npm:[email protected]": {
      "inherits": "npm:[email protected]"
    },
    "npm:[email protected]": {
      "http": "github:jspm/[email protected]"
    },
    "npm:[email protected]": {
      "util": "github:jspm/[email protected]"
    },
    "npm:[email protected]": {
      "bn.js": "npm:[email protected]",
      "brorand": "npm:[email protected]"
    },
    "npm:[email protected]": {
      "path": "github:jspm/[email protected]"
    },
    "npm:[email protected]": {
      "fs": "github:jspm/[email protected]"
    },
    "npm:[email protected]": {
      "buffer": "github:jspm/[email protected]",
      "process": "github:jspm/[email protected]"
    },
    "npm:[email protected]": {
      "asn1.js": "npm:[email protected]",
      "browserify-aes": "npm:[email protected]",
      "buffer": "github:jspm/[email protected]",
      "create-hash": "npm:[email protected]",
      "evp_bytestokey": "npm:[email protected]",
      "pbkdf2": "npm:[email protected]",
      "systemjs-json": "github:systemjs/[email protected]"
    },
    "npm:[email protected]": {
      "better-assert": "npm:[email protected]"
    },
    "npm:[email protected]": {
      "better-assert": "npm:[email protected]"
    },
    "npm:[email protected]": {
      "better-assert": "npm:[email protected]"
    },
    "npm:[email protected]": {
      "better-assert": "npm:[email protected]"
    },
    "npm:[email protected]": {
      "process": "github:jspm/[email protected]"
    },
    "npm:[email protected]": {
      "buffer": "github:jspm/[email protected]",
      "child_process": "github:jspm/[email protected]",
      "create-hmac": "npm:[email protected]",
      "crypto": "github:jspm/[email protected]",
      "path": "github:jspm/[email protected]",
      "process": "github:jspm/[email protected]",
      "systemjs-json": "github:systemjs/[email protected]"
    },
    "npm:[email protected]": {
      "assert": "github:jspm/[email protected]"
    },
    "npm:[email protected]": {
      "bn.js": "npm:[email protected]",
      "browserify-rsa": "npm:[email protected]",
      "buffer": "github:jspm/[email protected]",
      "create-hash": "npm:[email protected]",
      "crypto": "github:jspm/[email protected]",
      "parse-asn1": "npm:[email protected]",
      "randombytes": "npm:[email protected]"
    },
    "npm:[email protected]": {
      "process": "github:jspm/[email protected]"
    },
    "npm:[email protected]": {
      "buffer": "github:jspm/[email protected]",
      "crypto": "github:jspm/[email protected]",
      "process": "github:jspm/[email protected]"
    },
    "npm:[email protected]": {
      "buffer": "github:jspm/[email protected]",
      "core-util-is": "npm:[email protected]",
      "events": "github:jspm/[email protected]",
      "inherits": "npm:[email protected]",
      "isarray": "npm:[email protected]",
      "process": "github:jspm/[email protected]",
      "stream": "github:jspm/[email protected]",
      "stream-browserify": "npm:[email protected]",
      "string_decoder": "npm:[email protected]",
      "util": "github:jspm/[email protected]"
    },
    "npm:[email protected]": {
      "buffer": "github:jspm/[email protected]",
      "process": "github:jspm/[email protected]"
    },
    "npm:[email protected]": {
      "buffer": "github:jspm/[email protected]",
      "fs": "github:jspm/[email protected]",
      "inherits": "npm:[email protected]",
      "process": "github:jspm/[email protected]"
    },
    "npm:[email protected]": {
      "backo2": "npm:[email protected]",
      "buffer": "github:jspm/[email protected]",
      "component-bind": "npm:[email protected]",
      "component-emitter": "npm:[email protected]",
      "debug": "npm:[email protected]",
      "engine.io-client": "npm:[email protected]",
      "has-binary": "npm:[email protected]",
      "indexof": "npm:[email protected]",
      "object-component": "npm:[email protected]",
      "parseuri": "npm:[email protected]",
      "socket.io-parser": "npm:[email protected]",
      "to-array": "npm:[email protected]"
    },
    "npm:[email protected]": {
      "benchmark": "npm:[email protected]",
      "buffer": "github:jspm/[email protected]",
      "component-emitter": "npm:[email protected]",
      "debug": "npm:[email protected]",
      "isarray": "npm:[email protected]",
      "json3": "npm:[email protected]"
    },
    "npm:[email protected]": {
      "events": "github:jspm/[email protected]",
      "inherits": "npm:[email protected]",
      "readable-stream": "npm:[email protected]"
    },
    "npm:[email protected]": {
      "buffer": "github:jspm/[email protected]"
    },
    "npm:[email protected]": {
      "process": "npm:[email protected]"
    },
    "npm:[email protected]": {
      "events": "github:jspm/[email protected]"
    },
    "npm:[email protected]": {
      "assert": "github:jspm/[email protected]",
      "punycode": "npm:[email protected]",
      "querystring": "npm:[email protected]",
      "util": "github:jspm/[email protected]"
    },
    "npm:[email protected]": {
      "bindings": "npm:[email protected]",
      "nan": "npm:[email protected]"
    },
    "npm:[email protected]": {
      "systemjs-json": "github:systemjs/[email protected]"
    },
    "npm:[email protected]": {
      "inherits": "npm:[email protected]",
      "process": "github:jspm/[email protected]"
    },
    "npm:[email protected]": {
      "indexof": "npm:[email protected]"
    },
    "npm:[email protected]": {
      "buffer": "github:jspm/[email protected]",
      "bufferutil": "npm:[email protected]",
      "crypto": "github:jspm/[email protected]",
      "events": "github:jspm/[email protected]",
      "http": "github:jspm/[email protected]",
      "https": "github:jspm/[email protected]",
      "options": "npm:[email protected]",
      "process": "github:jspm/[email protected]",
      "stream": "github:jspm/[email protected]",
      "tls": "github:jspm/[email protected]",
      "ultron": "npm:[email protected]",
      "url": "github:jspm/[email protected]",
      "utf-8-validate": "npm:[email protected]",
      "util": "github:jspm/[email protected]",
      "zlib": "github:jspm/[email protected]"
    }
  }
});

from bootstrapper.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.