Giter Club home page Giter Club logo

crisper's People

Contributors

addyosmani avatar ankon avatar customcommander avatar danbeam avatar dfreedm avatar ebidel avatar fredkschott avatar garlicnation avatar jscissr avatar lweichselbaum avatar ragingwind avatar scarygami avatar wojtkowiak avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

crisper's Issues

crisper + vulcanize example in readme not working

Attempting to run the vulcanize example from the readme against the latest Polymer code, I get an error:

$ vulcanize polymer.html --inline-script | crisper --html build.html --js build.js
Missing source html file!

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: write EPIPE
    at errnoException (net.js:904:11)
    at Object.afterWrite (net.js:720:19)

...I'm able to workaround by creating an intermediary source file, but this adds a step to the build process.

I'm on the latest crisper.

New Feature Request- 'jsFilePath'

Feature Request

A nice feature would be the ability to set the javascript file path.

Example

Currently, the path for a js file from /dist/views/index.html is index.js.
An option, such as jsFilePath : '/dist/js/' would change index.js to /dist/js/index.js.

My particular issue

I'm currently vulcanizing my components all the way to the top level html file. As a result, my view at /dist/views/index.html has a path of / and it looks for http://myhost.com/index.js which doesn't exist.

Thanks Team!

Crisper ignores crossorigin attribute on script tag

Running crisper --source file.html --html c.html --js c.js over a file that contains script with crossorigin attribute produces html code without crossorigin attribute.

Source:

<html>
  <body>
    <script crossorigin="anonymous">
      (function() {
          'use strict';
          console.log('foo');
      });
    </script>
  </body>
</html>

Resulting html:

<html><head><script src="c.js" defer=""></script>
    <meta charset="UTF-8">

Semicolon not added when script ending with a comment causes issues when concatenating

Whenever there's a comment at the last line of a script, no final semicolon (;) will be added even if the script needs it. When concatenated with the next script, the lack of this final semicolon leads to fatal issues.

Consider the following two scripts:

(function() {
    console.log('ok1');
})()
// some comment
(function() {
    console.log('ok2');
})()

Since the last line of script 1 has a comment, no semicolon is added and the final resulting script is interpreted as:

(function(){console.log('ok1')})()(function(){console.log('ok2')})()

throwing a Uncaught TypeError: (intermediate value)(...) is not a function.

And before anyone says that this is most probably an issue with the source scripts, the actual case which led me to find this issue is a source map comment automatically added to the end of some scripts.

More specifically, for me, that was the shadycss shim required by the polymer 2.0 core.

Semicolon

I've been successfully using this line with crisper, until I updated my crisper today.

vulcanize --inline-scripts --inline-css polymerImports.html | crisper --html vulcanized-polymer.html --js vulcanized-polymer.js

Error:
Uncaught TypeError: this._factory is not a function

It seems it's related to the "semi-colons" which I noticed there was recent update in this project.

noSemiColonInsertion regexp incorrect matches // in string

The code looks for "//" in the last line, to determine whether it's a comment: but it also matches e.g.;

(function() {"https://example.com"})()

No semicolon will be appended in this case. There's a few issues about this—maybe it could just be an option, to force semicolon insertion, possibly even on a newline (sidestepping the "on-a-comment-line" problem).

Failed to execute 'registerElement' on 'Document': Registration failed for type 'dom-module'

I used vulcanize crisper pipe on Polymer Stater Kit and got the error bellow, only vulcanize works fine.

build.js:209 Uncaught NotSupportedError: Failed to execute 'registerElement' on 'Document': Registration failed for type 'dom-module'. A type with that name is already registered.(anonymous function) @ build.js:209(anonymous function) @ build.js:222 build.js:6042 Uncaught TypeError: Cannot read property 'whenLoaded' of undefinedPolymer.created @ build.js:6042Polymer.Base._addFeature._invokeBehavior @ build.js:296Polymer.Base._addFeature._doBehavior @ build.js:291Polymer.Base.createdCallback @ build.js:104 build.js:6035 Uncaught TypeError: Cannot read property '_importsLoaded' of undefined(anonymous function) @ build.js:6035checkDone @ webcomponents-lite.js:968watchImportsLoad @ webcomponents-lite.js:990(anonymous function) @ webcomponents-lite.js:939whenDocumentReady @ webcomponents-lite.js:957checkReady @ webcomponents-lite.js:952 build.js:6031 Uncaught TypeError: Cannot read property '_importsLoaded' of undefined

CSS

If a file contains an external stylesheet, how should crisper handle it?

Could we add a --css option?

Currently, the output HTML will reference a file that is probably not there (because the output file is in a different location).

Fails if writing to a directory that doesn't already exist

This happens in Windows and OS X.

Here's my command:

vulcanize --inline-css src/index.html --inline-script | crisper --html webroot/index.html --js webroot/index.js

This is the error I get

fs.js:500
  return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);
                 ^
Error: ENOENT, no such file or directory 'G:\Losttime\code\polymer-app\webroot\index.html'
    at Error (native)
    at Object.fs.openSync (fs.js:500:18)
    at Object.fs.writeFileSync (fs.js:1099:15)
    at Socket.processSource (G:\Losttime\code\polymer-app\node_modules\crisper\bin\crisper:65:6)
    at Socket.emit (events.js:129:20)
    at _stream_readable.js:908:16
    at process._tickCallback (node.js:355:11)

I created simple little node script that uses fs to write to to that directory. It also fails.

Found this possible resolution:
http://stackoverflow.com/questions/16316330/how-to-write-file-if-parent-folder-dosent-exists

I'll try to implement it.

PERF: Move <script> to top of doc so it downloads sooner

When using cripser with --inline-script, the standalone file ends up at the bottom of the import:

</div><script src="elements.build.js"></script></body></html>

A vulcanized import can end up being quite large (all the css, dom-module, and svg from icons). The problem is that elements.build.js won't start loading until this entire document is parsed! On slow connections this needlessly delays the element registration :\

Current. elements.build.js doesn't start downloading until elements.html is done parsing:

screen shot 2015-09-27 at 6 49 56 pm

By moving <script src="elements.build.js" defer></script> to the top of the import and using defer, the script downloads in parallel with the html parsing and doesn't cause js errors (e.g. references to this.$.ID that won't exist yet).

screen shot 2015-09-27 at 7 08 13 pm

@azakus wdyt?

error if last element is template

I get these errors in the developer console after applying vulcanize and crisper:

[custom-style::_prepTemplate]: top-level Polymer template must not be a type-extension, found <template is=​"dom-bind">​…​</template>​ Move inside simple <template>.
[dom-template::_prepTemplate]: top-level Polymer template must not be a type-extension, found <template is=​"dom-bind">​…​</template>​ Move inside simple <template>.
[dom-repeat::_prepTemplate]: top-level Polymer template must not be a type-extension, found <template is=​"dom-bind">​…​</template>​ Move inside simple <template>.
[array-selector::_prepTemplate]: top-level Polymer template must not be a type-extension, found <template is=​"dom-bind">​…​</template>​ Move inside simple <template>.
[dom-if::_prepTemplate]: top-level Polymer template must not be a type-extension, found <template is=​"dom-bind">​…​</template>​ Move inside simple <template>.

I could reduce the repro to this (see also this example):

index.html:

<!DOCTYPE html>
<title>Demo</title>
<script src="bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
<link rel="import" href="bower_components/polymer/polymer.html">

<body>
<template is="dom-bind"></template>

Command line:

npm install -g vulcanize crisper
bower install Polymer/polymer
vulcanize index.html --inline-script | crisper --html build.html --js build.js

And then open build.html in Chrome.

I found that Polymer looks for <template> elements just before the current <script>. If it finds one it assumes that it belongs to the Polymer element being registered. However this situation happens here too (in build.html):

<template is="dom-bind"></template>
<script src="build.js"></script>

And for all elements registered in build.js without a template, Polymer thinks this is the element's template.
An easy fix in cripser would be to simply insert any element (like a <span>) just before the <script>, if there is a <template> before it:

<template is="dom-bind"></template>
<span></span>
<script src="build.js"></script>

However that is probably not the cleanest solution.

scripts should be wrapped in IIFEs on concatenation

Scripts should each be wrapped in immediately invoked function expressions (IIFEs) on concatenation as mentioned in Effective Javascript by David Herman (chapter 1).
This would avoid several problems, e.g. considering scopes and usage of "use strict";

So instead of:

script_1;
script_2;
...
script_n;

The concatenated file should look like:

(function (){
  script_1
})();
(function (){
  script_2
})();
...
(function (){
  script_n
})();

Implementation should be easy:

var content = dom5.getTextContent(sn).trim();
// wrap content in immediately invoked function expression (IIFE)
let iifeContent = '(function(){\n' + content + '\n})();'
contents.push(iifeContent);

Thank you in advance!

Can't set `--script-in-head` to false with command line usage?

It looks --script-in-head=false doesn't work at v2.0.0.

According to the command-line-args notation rule of Boolean in command-line-args, the --script-in-head flag's value is always set to true regardless of the value.

Options with a type of Boolean do not need to supply a value. Setting --flag or -f will set that option's value to true. This is the only type with special behaviour.
https://www.npmjs.com/package/command-line-args#module_command-line-args

Sorry if it's my misunderstanding.

Don't do scriptInHead by default

If you use a tool like Babel with Crisper then the scriptInHead bit will cause all kinds of hard to debug race conditions. Because the option feels like a performance tuning thing, it seems like you'd want to make in opt-in for advanced users. cc @ebidel

Make --script-in-head the default

In experimenting, I saw an ~80% improvement in relative startTime of the vulcanized .js bundle download compared to its .html parent.

Second image here:

screen shot 2015-10-16 at 4 52 14 pm

This is a breaking change, so we'll need to rev accordingly. I'll help advocate!

Running crisper on HTML imports (e.g., Polymer files) produces a full HTML tree

crisper (2.0.1) seems to always outputs HTML as a well-formed document, <html> tags and all -- even if the input file is just <script>foo;</script>, like most files intended to be used as a link rel="import" target.

This makes running crisper on Polymer element files a pain, because the result is a bunch of files which all think they're root HTML trees. This, in turn, breaks vulcanization's script ordering: Polymer/vulcanize#284

Output of vulcanize and crisper on polymer app template causes RangeError

Trying to use the provided app template mentioned during IO for polymer 1.0 found here https://developers.google.com/web/tools/polymer-starter-kit/ to be the basis of a chrome app I am working on.
First try was to simply run crisper on the file, this led to csp errors since it looked like it didn't inline first. So I tried the command listed in the instructions to vulcanize and then crisper the output.
vulcanize index.html --inline-script | crisper --html start.html --js start.js
This seamed to work until I launched the packaged app, chrome seemed to freeze for a long time and then I received this output (I understand the font failures and know how to fix them, it's the rest I worry about) :

GET chrome-extension://fonts.googleapis.com/css?family=Roboto:400,300,300italic,400italic,500,500italic,700,700italic net::ERR_FAILED start.html:637 GET chrome-extension://fonts.googleapis.com/css?family=Inconsolata:400,700 net::ERR_FAILED start.js:2847 [custom-style::_prepTemplate]: top-level Polymer template must not be a type-extension, found Move inside simple <template>. start.js:2847 [dom-template::_prepTemplate]: top-level Polymer template must not be a type-extension, found Move inside simple <template>. start.js:2847 [dom-repeat::_prepTemplate]: top-level Polymer template must not be a type-extension, found Move inside simple <template>. start.js:2847 [array-selector::_prepTemplate]: top-level Polymer template must not be a type-extension, found Move inside simple <template>. start.js:2847 [dom-if::_prepTemplate]: top-level Polymer template must not be a type-extension, found Move inside simple <template>. start.js:2847 [iron-media-query::_prepTemplate]: top-level Polymer template must not be a type-extension, found Move inside simple <template>. start.js:2847 [iron-selector::_prepTemplate]: top-level Polymer template must not be a type-extension, found Move inside simple <template>. start.js:2847 [iron-meta::_prepTemplate]: top-level Polymer template must not be a type-extension, found Move inside simple <template>. start.js:2847 [iron-meta-query::_prepTemplate]: top-level Polymer template must not be a type-extension, found Move inside simple <template>. start.js:2847 [iron-iconset-svg::_prepTemplate]: top-level Polymer template must not be a type-extension, found Move inside simple <template>. 2start.js:2856 Uncaught RangeError: Maximum call stack size exceeded.Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401window.Polymer @ start.js:2350(anonymous function) @ start.js:11226(anonymous function) @ start.js:11490 start.html:2630 Resource interpreted as Document but transferred with MIME type text/css: "chrome-extension://pacpbgchohinmeipfgojlbdifeehegab/bower_components/paper-drawer-panel/paper-drawer-panel.css". 12start.js:2856 Uncaught RangeError: Maximum call stack size exceeded.Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401window.Polymer @ start.js:2350(anonymous function) @ start.js:11226(anonymous function) @ start.js:11490 start.html:3445 Resource interpreted as Document but transferred with MIME type text/css: "chrome-extension://pacpbgchohinmeipfgojlbdifeehegab/bower_components/paper-item/paper-item-shared.css". 1182start.js:2856 Uncaught RangeError: Maximum call stack size exceeded.Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401Polymer.Base._addFeature.instanceTemplate @ start.js:2856Polymer.Base._addFeature._stampTemplate @ start.js:2852Polymer.Base._addFeature._initFeatures @ start.js:6901Polymer.Base.createdCallback @ start.js:2401window.Polymer @ start.js:2350(anonymous function) @ start.js:11226(anonymous function) @ start.js:11490

Crisper ignores type="text/javascript"

This was quite confusing as to why some script was removed and some not. The logic only includes script tags that have no type or type application/javascript. There is probably still quite a bit of code that has text/javascript.

I feel like it should extract text/javascript too. At the very least it would be useful to scan the result html and issue a warning if there are still script tags in it.

Inline scripts in <head> are run at incorrect time

If you include an inline script in the head of the document, like here
which is shown on the polymer tutorial
the crisper causes the script to be run after polymer.html has loaded, which causes an error discussed here

There should be an option to ignore script tags in the head of a html document, since they occasionally need to be run synchronously in a specific order.

Perhaps
--ignore-head=true
and
ignoreHead: true

Until then, you can include such scripts
window.Polymer = window.Polymer || {}; Polymer.dom = 'shadow';

in an external file, "dom.js",
and I just reference is like so
<script src="components/webcomponentsjs/webcomponents-lite.js"></script>
<script src="scripts/dom.js"></script>
<!-- import a component that relies on Polymer -->
<link rel="import" href="elements/my-app.html">

Crisper will just leave them as they were, obviously make sure not to name it the same name as the html file with a js extension though, as by default crisper will overwrite such a file.

Uncaught ReferenceError: babelHelpers is not defined

We are trying to implement CSP in our Polymer 2 application. The suggested way is by adding crisper to our polymer build. Unfortunately, when adding this additional step we get the following error:

Uncaught ReferenceError: babelHelpers is not defined

Without crisper, all works just fine. My question is:

  • to use CSP, do we need crisper?
  • why does it need the babelHelpers? Or why is it not included?

gulp-crisper: ignoring relative path

When using without vulcanize.js gulp-crisper seams to ignore relative paths ex

return gulp
     .src('./app/**/*.html') // same with base option
     .pipe(crisper())
     .pipe(gulp.dest('./build/');

output

./app/elements/list/list.html -> ./build/list.html
./app/tmpl/template.html -> ./build/template.html

Crisper causing FOUC

I have set up a simple polymer project here that uses vulcanize and crisper. When I view index.html, there is a flash of unstyled content. I have tried adding the unresolved attribute to the body, but this did not work. It seems to be caused by waiting for the index.js file generated by crisper to load. Any idea on how to fix this?

CSS Support

CSP blocks inline styles by default. It would be ideal if crisper either externalized CSS or utilized hashing.

I'm guessing there might be some feasibility issues related to Polymer or the WC.js polyfill. If so, please elaborate for the benefit of future readers : )

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.