[Pkg-javascript-commits] [node-css] 09/17: bundle dependencies - they are or too small or used only in this content

Leo Iannacone l3on-guest at moszumanska.debian.org
Sun Oct 12 12:15:54 UTC 2014


This is an automated email from the git hooks/post-receive script.

l3on-guest pushed a commit to branch master
in repository node-css.

commit 87199f2f748adaadeed1800f69e8ab5fcf117c04
Author: Leo Iannacone <l3on at ubuntu.com>
Date:   Sun Oct 12 13:19:52 2014 +0200

    bundle dependencies - they are or too small or used only in this content
---
 debian/patches/0000-bundle_atob.patch              |  626 ++++++
 debian/patches/0001-bundle_urix.patch              |  229 +++
 debian/patches/0002-bundle_resolve-url.patch       |  382 ++++
 debian/patches/0003-bundle_source-map-url.patch    |  764 +++++++
 .../patches/0004-bundle_source-map-resolve.patch   | 2109 ++++++++++++++++++++
 debian/patches/series                              |    5 +
 6 files changed, 4115 insertions(+)

diff --git a/debian/patches/0000-bundle_atob.patch b/debian/patches/0000-bundle_atob.patch
new file mode 100644
index 0000000..cb35d94
--- /dev/null
+++ b/debian/patches/0000-bundle_atob.patch
@@ -0,0 +1,626 @@
+Description: Bundle atob as patch. Too small to be packaged.
+Author: Leo Iannacone <l3on at ubuntu.com>
+Forwarded: not-needed
+Last-Update: 2014-10-12
+
+--- /dev/null
++++ node-css-2.1.0/node_modules/atob/LICENSE
+@@ -0,0 +1,191 @@
++Apache License
++Version 2.0, January 2004
++http://www.apache.org/licenses/
++
++TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
++
++1. Definitions.
++
++"License" shall mean the terms and conditions for use, reproduction, and
++distribution as defined by Sections 1 through 9 of this document.
++
++"Licensor" shall mean the copyright owner or entity authorized by the copyright
++owner that is granting the License.
++
++"Legal Entity" shall mean the union of the acting entity and all other entities
++that control, are controlled by, or are under common control with that entity.
++For the purposes of this definition, "control" means (i) the power, direct or
++indirect, to cause the direction or management of such entity, whether by
++contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the
++outstanding shares, or (iii) beneficial ownership of such entity.
++
++"You" (or "Your") shall mean an individual or Legal Entity exercising
++permissions granted by this License.
++
++"Source" form shall mean the preferred form for making modifications, including
++but not limited to software source code, documentation source, and configuration
++files.
++
++"Object" form shall mean any form resulting from mechanical transformation or
++translation of a Source form, including but not limited to compiled object code,
++generated documentation, and conversions to other media types.
++
++"Work" shall mean the work of authorship, whether in Source or Object form, made
++available under the License, as indicated by a copyright notice that is included
++in or attached to the work (an example is provided in the Appendix below).
++
++"Derivative Works" shall mean any work, whether in Source or Object form, that
++is based on (or derived from) the Work and for which the editorial revisions,
++annotations, elaborations, or other modifications represent, as a whole, an
++original work of authorship. For the purposes of this License, Derivative Works
++shall not include works that remain separable from, or merely link (or bind by
++name) to the interfaces of, the Work and Derivative Works thereof.
++
++"Contribution" shall mean any work of authorship, including the original version
++of the Work and any modifications or additions to that Work or Derivative Works
++thereof, that is intentionally submitted to Licensor for inclusion in the Work
++by the copyright owner or by an individual or Legal Entity authorized to submit
++on behalf of the copyright owner. For the purposes of this definition,
++"submitted" means any form of electronic, verbal, or written communication sent
++to the Licensor or its representatives, including but not limited to
++communication on electronic mailing lists, source code control systems, and
++issue tracking systems that are managed by, or on behalf of, the Licensor for
++the purpose of discussing and improving the Work, but excluding communication
++that is conspicuously marked or otherwise designated in writing by the copyright
++owner as "Not a Contribution."
++
++"Contributor" shall mean Licensor and any individual or Legal Entity on behalf
++of whom a Contribution has been received by Licensor and subsequently
++incorporated within the Work.
++
++2. Grant of Copyright License.
++
++Subject to the terms and conditions of this License, each Contributor hereby
++grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
++irrevocable copyright license to reproduce, prepare Derivative Works of,
++publicly display, publicly perform, sublicense, and distribute the Work and such
++Derivative Works in Source or Object form.
++
++3. Grant of Patent License.
++
++Subject to the terms and conditions of this License, each Contributor hereby
++grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
++irrevocable (except as stated in this section) patent license to make, have
++made, use, offer to sell, sell, import, and otherwise transfer the Work, where
++such license applies only to those patent claims licensable by such Contributor
++that are necessarily infringed by their Contribution(s) alone or by combination
++of their Contribution(s) with the Work to which such Contribution(s) was
++submitted. If You institute patent litigation against any entity (including a
++cross-claim or counterclaim in a lawsuit) alleging that the Work or a
++Contribution incorporated within the Work constitutes direct or contributory
++patent infringement, then any patent licenses granted to You under this License
++for that Work shall terminate as of the date such litigation is filed.
++
++4. Redistribution.
++
++You may reproduce and distribute copies of the Work or Derivative Works thereof
++in any medium, with or without modifications, and in Source or Object form,
++provided that You meet the following conditions:
++
++You must give any other recipients of the Work or Derivative Works a copy of
++this License; and
++You must cause any modified files to carry prominent notices stating that You
++changed the files; and
++You must retain, in the Source form of any Derivative Works that You distribute,
++all copyright, patent, trademark, and attribution notices from the Source form
++of the Work, excluding those notices that do not pertain to any part of the
++Derivative Works; and
++If the Work includes a "NOTICE" text file as part of its distribution, then any
++Derivative Works that You distribute must include a readable copy of the
++attribution notices contained within such NOTICE file, excluding those notices
++that do not pertain to any part of the Derivative Works, in at least one of the
++following places: within a NOTICE text file distributed as part of the
++Derivative Works; within the Source form or documentation, if provided along
++with the Derivative Works; or, within a display generated by the Derivative
++Works, if and wherever such third-party notices normally appear. The contents of
++the NOTICE file are for informational purposes only and do not modify the
++License. You may add Your own attribution notices within Derivative Works that
++You distribute, alongside or as an addendum to the NOTICE text from the Work,
++provided that such additional attribution notices cannot be construed as
++modifying the License.
++You may add Your own copyright statement to Your modifications and may provide
++additional or different license terms and conditions for use, reproduction, or
++distribution of Your modifications, or for any such Derivative Works as a whole,
++provided Your use, reproduction, and distribution of the Work otherwise complies
++with the conditions stated in this License.
++
++5. Submission of Contributions.
++
++Unless You explicitly state otherwise, any Contribution intentionally submitted
++for inclusion in the Work by You to the Licensor shall be under the terms and
++conditions of this License, without any additional terms or conditions.
++Notwithstanding the above, nothing herein shall supersede or modify the terms of
++any separate license agreement you may have executed with Licensor regarding
++such Contributions.
++
++6. Trademarks.
++
++This License does not grant permission to use the trade names, trademarks,
++service marks, or product names of the Licensor, except as required for
++reasonable and customary use in describing the origin of the Work and
++reproducing the content of the NOTICE file.
++
++7. Disclaimer of Warranty.
++
++Unless required by applicable law or agreed to in writing, Licensor provides the
++Work (and each Contributor provides its Contributions) on an "AS IS" BASIS,
++WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
++including, without limitation, any warranties or conditions of TITLE,
++NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are
++solely responsible for determining the appropriateness of using or
++redistributing the Work and assume any risks associated with Your exercise of
++permissions under this License.
++
++8. Limitation of Liability.
++
++In no event and under no legal theory, whether in tort (including negligence),
++contract, or otherwise, unless required by applicable law (such as deliberate
++and grossly negligent acts) or agreed to in writing, shall any Contributor be
++liable to You for damages, including any direct, indirect, special, incidental,
++or consequential damages of any character arising as a result of this License or
++out of the use or inability to use the Work (including but not limited to
++damages for loss of goodwill, work stoppage, computer failure or malfunction, or
++any and all other commercial damages or losses), even if such Contributor has
++been advised of the possibility of such damages.
++
++9. Accepting Warranty or Additional Liability.
++
++While redistributing the Work or Derivative Works thereof, You may choose to
++offer, and charge a fee for, acceptance of support, warranty, indemnity, or
++other liability obligations and/or rights consistent with this License. However,
++in accepting such obligations, You may act only on Your own behalf and on Your
++sole responsibility, not on behalf of any other Contributor, and only if You
++agree to indemnify, defend, and hold each Contributor harmless for any liability
++incurred by, or claims asserted against, such Contributor by reason of your
++accepting any such warranty or additional liability.
++
++END OF TERMS AND CONDITIONS
++
++APPENDIX: How to apply the Apache License to your work
++
++To apply the Apache License to your work, attach the following boilerplate
++notice, with the fields enclosed by brackets "[]" replaced with your own
++identifying information. (Don't include the brackets!) The text should be
++enclosed in the appropriate comment syntax for the file format. We also
++recommend that a file or class name and description of purpose be included on
++the same "printed page" as the copyright notice for easier identification within
++third-party archives.
++
++   Copyright [yyyy] [name of copyright owner]
++
++   Licensed under the Apache License, Version 2.0 (the "License");
++   you may not use this file except in compliance with the License.
++   You may obtain a copy of the License at
++
++     http://www.apache.org/licenses/LICENSE-2.0
++
++   Unless required by applicable law or agreed to in writing, software
++   distributed under the License is distributed on an "AS IS" BASIS,
++   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++   See the License for the specific language governing permissions and
++   limitations under the License.
+--- /dev/null
++++ node-css-2.1.0/node_modules/atob/LICENSE.DOCS
+@@ -0,0 +1,319 @@
++Creative Commons Legal Code
++
++Attribution 3.0 Unported
++
++    CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
++    LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN
++    ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
++    INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
++    REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR
++    DAMAGES RESULTING FROM ITS USE.
++
++License
++
++THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE
++COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY
++COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS
++AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
++
++BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE
++TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY
++BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS
++CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND
++CONDITIONS.
++
++1. Definitions
++
++ a. "Adaptation" means a work based upon the Work, or upon the Work and
++    other pre-existing works, such as a translation, adaptation,
++    derivative work, arrangement of music or other alterations of a
++    literary or artistic work, or phonogram or performance and includes
++    cinematographic adaptations or any other form in which the Work may be
++    recast, transformed, or adapted including in any form recognizably
++    derived from the original, except that a work that constitutes a
++    Collection will not be considered an Adaptation for the purpose of
++    this License. For the avoidance of doubt, where the Work is a musical
++    work, performance or phonogram, the synchronization of the Work in
++    timed-relation with a moving image ("synching") will be considered an
++    Adaptation for the purpose of this License.
++ b. "Collection" means a collection of literary or artistic works, such as
++    encyclopedias and anthologies, or performances, phonograms or
++    broadcasts, or other works or subject matter other than works listed
++    in Section 1(f) below, which, by reason of the selection and
++    arrangement of their contents, constitute intellectual creations, in
++    which the Work is included in its entirety in unmodified form along
++    with one or more other contributions, each constituting separate and
++    independent works in themselves, which together are assembled into a
++    collective whole. A work that constitutes a Collection will not be
++    considered an Adaptation (as defined above) for the purposes of this
++    License.
++ c. "Distribute" means to make available to the public the original and
++    copies of the Work or Adaptation, as appropriate, through sale or
++    other transfer of ownership.
++ d. "Licensor" means the individual, individuals, entity or entities that
++    offer(s) the Work under the terms of this License.
++ e. "Original Author" means, in the case of a literary or artistic work,
++    the individual, individuals, entity or entities who created the Work
++    or if no individual or entity can be identified, the publisher; and in
++    addition (i) in the case of a performance the actors, singers,
++    musicians, dancers, and other persons who act, sing, deliver, declaim,
++    play in, interpret or otherwise perform literary or artistic works or
++    expressions of folklore; (ii) in the case of a phonogram the producer
++    being the person or legal entity who first fixes the sounds of a
++    performance or other sounds; and, (iii) in the case of broadcasts, the
++    organization that transmits the broadcast.
++ f. "Work" means the literary and/or artistic work offered under the terms
++    of this License including without limitation any production in the
++    literary, scientific and artistic domain, whatever may be the mode or
++    form of its expression including digital form, such as a book,
++    pamphlet and other writing; a lecture, address, sermon or other work
++    of the same nature; a dramatic or dramatico-musical work; a
++    choreographic work or entertainment in dumb show; a musical
++    composition with or without words; a cinematographic work to which are
++    assimilated works expressed by a process analogous to cinematography;
++    a work of drawing, painting, architecture, sculpture, engraving or
++    lithography; a photographic work to which are assimilated works
++    expressed by a process analogous to photography; a work of applied
++    art; an illustration, map, plan, sketch or three-dimensional work
++    relative to geography, topography, architecture or science; a
++    performance; a broadcast; a phonogram; a compilation of data to the
++    extent it is protected as a copyrightable work; or a work performed by
++    a variety or circus performer to the extent it is not otherwise
++    considered a literary or artistic work.
++ g. "You" means an individual or entity exercising rights under this
++    License who has not previously violated the terms of this License with
++    respect to the Work, or who has received express permission from the
++    Licensor to exercise rights under this License despite a previous
++    violation.
++ h. "Publicly Perform" means to perform public recitations of the Work and
++    to communicate to the public those public recitations, by any means or
++    process, including by wire or wireless means or public digital
++    performances; to make available to the public Works in such a way that
++    members of the public may access these Works from a place and at a
++    place individually chosen by them; to perform the Work to the public
++    by any means or process and the communication to the public of the
++    performances of the Work, including by public digital performance; to
++    broadcast and rebroadcast the Work by any means including signs,
++    sounds or images.
++ i. "Reproduce" means to make copies of the Work by any means including
++    without limitation by sound or visual recordings and the right of
++    fixation and reproducing fixations of the Work, including storage of a
++    protected performance or phonogram in digital form or other electronic
++    medium.
++
++2. Fair Dealing Rights. Nothing in this License is intended to reduce,
++limit, or restrict any uses free from copyright or rights arising from
++limitations or exceptions that are provided for in connection with the
++copyright protection under copyright law or other applicable laws.
++
++3. License Grant. Subject to the terms and conditions of this License,
++Licensor hereby grants You a worldwide, royalty-free, non-exclusive,
++perpetual (for the duration of the applicable copyright) license to
++exercise the rights in the Work as stated below:
++
++ a. to Reproduce the Work, to incorporate the Work into one or more
++    Collections, and to Reproduce the Work as incorporated in the
++    Collections;
++ b. to create and Reproduce Adaptations provided that any such Adaptation,
++    including any translation in any medium, takes reasonable steps to
++    clearly label, demarcate or otherwise identify that changes were made
++    to the original Work. For example, a translation could be marked "The
++    original work was translated from English to Spanish," or a
++    modification could indicate "The original work has been modified.";
++ c. to Distribute and Publicly Perform the Work including as incorporated
++    in Collections; and,
++ d. to Distribute and Publicly Perform Adaptations.
++ e. For the avoidance of doubt:
++
++     i. Non-waivable Compulsory License Schemes. In those jurisdictions in
++        which the right to collect royalties through any statutory or
++        compulsory licensing scheme cannot be waived, the Licensor
++        reserves the exclusive right to collect such royalties for any
++        exercise by You of the rights granted under this License;
++    ii. Waivable Compulsory License Schemes. In those jurisdictions in
++        which the right to collect royalties through any statutory or
++        compulsory licensing scheme can be waived, the Licensor waives the
++        exclusive right to collect such royalties for any exercise by You
++        of the rights granted under this License; and,
++   iii. Voluntary License Schemes. The Licensor waives the right to
++        collect royalties, whether individually or, in the event that the
++        Licensor is a member of a collecting society that administers
++        voluntary licensing schemes, via that society, from any exercise
++        by You of the rights granted under this License.
++
++The above rights may be exercised in all media and formats whether now
++known or hereafter devised. The above rights include the right to make
++such modifications as are technically necessary to exercise the rights in
++other media and formats. Subject to Section 8(f), all rights not expressly
++granted by Licensor are hereby reserved.
++
++4. Restrictions. The license granted in Section 3 above is expressly made
++subject to and limited by the following restrictions:
++
++ a. You may Distribute or Publicly Perform the Work only under the terms
++    of this License. You must include a copy of, or the Uniform Resource
++    Identifier (URI) for, this License with every copy of the Work You
++    Distribute or Publicly Perform. You may not offer or impose any terms
++    on the Work that restrict the terms of this License or the ability of
++    the recipient of the Work to exercise the rights granted to that
++    recipient under the terms of the License. You may not sublicense the
++    Work. You must keep intact all notices that refer to this License and
++    to the disclaimer of warranties with every copy of the Work You
++    Distribute or Publicly Perform. When You Distribute or Publicly
++    Perform the Work, You may not impose any effective technological
++    measures on the Work that restrict the ability of a recipient of the
++    Work from You to exercise the rights granted to that recipient under
++    the terms of the License. This Section 4(a) applies to the Work as
++    incorporated in a Collection, but this does not require the Collection
++    apart from the Work itself to be made subject to the terms of this
++    License. If You create a Collection, upon notice from any Licensor You
++    must, to the extent practicable, remove from the Collection any credit
++    as required by Section 4(b), as requested. If You create an
++    Adaptation, upon notice from any Licensor You must, to the extent
++    practicable, remove from the Adaptation any credit as required by
++    Section 4(b), as requested.
++ b. If You Distribute, or Publicly Perform the Work or any Adaptations or
++    Collections, You must, unless a request has been made pursuant to
++    Section 4(a), keep intact all copyright notices for the Work and
++    provide, reasonable to the medium or means You are utilizing: (i) the
++    name of the Original Author (or pseudonym, if applicable) if supplied,
++    and/or if the Original Author and/or Licensor designate another party
++    or parties (e.g., a sponsor institute, publishing entity, journal) for
++    attribution ("Attribution Parties") in Licensor's copyright notice,
++    terms of service or by other reasonable means, the name of such party
++    or parties; (ii) the title of the Work if supplied; (iii) to the
++    extent reasonably practicable, the URI, if any, that Licensor
++    specifies to be associated with the Work, unless such URI does not
++    refer to the copyright notice or licensing information for the Work;
++    and (iv) , consistent with Section 3(b), in the case of an Adaptation,
++    a credit identifying the use of the Work in the Adaptation (e.g.,
++    "French translation of the Work by Original Author," or "Screenplay
++    based on original Work by Original Author"). The credit required by
++    this Section 4 (b) may be implemented in any reasonable manner;
++    provided, however, that in the case of a Adaptation or Collection, at
++    a minimum such credit will appear, if a credit for all contributing
++    authors of the Adaptation or Collection appears, then as part of these
++    credits and in a manner at least as prominent as the credits for the
++    other contributing authors. For the avoidance of doubt, You may only
++    use the credit required by this Section for the purpose of attribution
++    in the manner set out above and, by exercising Your rights under this
++    License, You may not implicitly or explicitly assert or imply any
++    connection with, sponsorship or endorsement by the Original Author,
++    Licensor and/or Attribution Parties, as appropriate, of You or Your
++    use of the Work, without the separate, express prior written
++    permission of the Original Author, Licensor and/or Attribution
++    Parties.
++ c. Except as otherwise agreed in writing by the Licensor or as may be
++    otherwise permitted by applicable law, if You Reproduce, Distribute or
++    Publicly Perform the Work either by itself or as part of any
++    Adaptations or Collections, You must not distort, mutilate, modify or
++    take other derogatory action in relation to the Work which would be
++    prejudicial to the Original Author's honor or reputation. Licensor
++    agrees that in those jurisdictions (e.g. Japan), in which any exercise
++    of the right granted in Section 3(b) of this License (the right to
++    make Adaptations) would be deemed to be a distortion, mutilation,
++    modification or other derogatory action prejudicial to the Original
++    Author's honor and reputation, the Licensor will waive or not assert,
++    as appropriate, this Section, to the fullest extent permitted by the
++    applicable national law, to enable You to reasonably exercise Your
++    right under Section 3(b) of this License (right to make Adaptations)
++    but not otherwise.
++
++5. Representations, Warranties and Disclaimer
++
++UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR
++OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY
++KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE,
++INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY,
++FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF
++LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS,
++WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION
++OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
++
++6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE
++LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR
++ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES
++ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS
++BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
++
++7. Termination
++
++ a. This License and the rights granted hereunder will terminate
++    automatically upon any breach by You of the terms of this License.
++    Individuals or entities who have received Adaptations or Collections
++    from You under this License, however, will not have their licenses
++    terminated provided such individuals or entities remain in full
++    compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will
++    survive any termination of this License.
++ b. Subject to the above terms and conditions, the license granted here is
++    perpetual (for the duration of the applicable copyright in the Work).
++    Notwithstanding the above, Licensor reserves the right to release the
++    Work under different license terms or to stop distributing the Work at
++    any time; provided, however that any such election will not serve to
++    withdraw this License (or any other license that has been, or is
++    required to be, granted under the terms of this License), and this
++    License will continue in full force and effect unless terminated as
++    stated above.
++
++8. Miscellaneous
++
++ a. Each time You Distribute or Publicly Perform the Work or a Collection,
++    the Licensor offers to the recipient a license to the Work on the same
++    terms and conditions as the license granted to You under this License.
++ b. Each time You Distribute or Publicly Perform an Adaptation, Licensor
++    offers to the recipient a license to the original Work on the same
++    terms and conditions as the license granted to You under this License.
++ c. If any provision of this License is invalid or unenforceable under
++    applicable law, it shall not affect the validity or enforceability of
++    the remainder of the terms of this License, and without further action
++    by the parties to this agreement, such provision shall be reformed to
++    the minimum extent necessary to make such provision valid and
++    enforceable.
++ d. No term or provision of this License shall be deemed waived and no
++    breach consented to unless such waiver or consent shall be in writing
++    and signed by the party to be charged with such waiver or consent.
++ e. This License constitutes the entire agreement between the parties with
++    respect to the Work licensed here. There are no understandings,
++    agreements or representations with respect to the Work not specified
++    here. Licensor shall not be bound by any additional provisions that
++    may appear in any communication from You. This License may not be
++    modified without the mutual written agreement of the Licensor and You.
++ f. The rights granted under, and the subject matter referenced, in this
++    License were drafted utilizing the terminology of the Berne Convention
++    for the Protection of Literary and Artistic Works (as amended on
++    September 28, 1979), the Rome Convention of 1961, the WIPO Copyright
++    Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996
++    and the Universal Copyright Convention (as revised on July 24, 1971).
++    These rights and subject matter take effect in the relevant
++    jurisdiction in which the License terms are sought to be enforced
++    according to the corresponding provisions of the implementation of
++    those treaty provisions in the applicable national law. If the
++    standard suite of rights granted under applicable copyright law
++    includes additional rights not granted under this License, such
++    additional rights are deemed to be included in the License; this
++    License is not intended to restrict the license of any rights under
++    applicable law.
++
++
++Creative Commons Notice
++
++    Creative Commons is not a party to this License, and makes no warranty
++    whatsoever in connection with the Work. Creative Commons will not be
++    liable to You or any party on any legal theory for any damages
++    whatsoever, including without limitation any general, special,
++    incidental or consequential damages arising in connection to this
++    license. Notwithstanding the foregoing two (2) sentences, if Creative
++    Commons has expressly identified itself as the Licensor hereunder, it
++    shall have all rights and obligations of Licensor.
++
++    Except for the limited purpose of indicating to the public that the
++    Work is licensed under the CCPL, Creative Commons does not authorize
++    the use by either party of the trademark "Creative Commons" or any
++    related trademark or logo of Creative Commons without the prior
++    written consent of Creative Commons. Any permitted use will be in
++    compliance with Creative Commons' then-current trademark usage
++    guidelines, as may be published on its website or otherwise made
++    available upon request from time to time. For the avoidance of doubt,
++    this trademark restriction does not form part of this License.
++
++    Creative Commons may be contacted at http://creativecommons.org/.
+--- /dev/null
++++ node-css-2.1.0/node_modules/atob/README.md
+@@ -0,0 +1,28 @@
++atob
++===
++
++Uses `Buffer` to emulate the exact functionality of the browser's atob.
++
++Note: Unicode may be handled incorrectly (like the browser).
++
++It turns base64-encoded **a**scii data back **to** **b**inary.
++
++    (function () {
++      "use strict";
++
++      var atob = require('atob')
++        , b64 = "SGVsbG8gV29ybGQ="
++        , bin = atob(b64)
++        ;
++
++      console.log(bin); // "Hello World"
++    }());
++
++Copyright and license
++===
++
++Code and documentation copyright 2012-2014 AJ ONeal Tech, LLC.
++
++Code released under the [Apache license](https://github.com/node-browser-compat/atob/blob/master/LICENSE).
++
++Docs released under [Creative Commons](https://github.com/node-browser-compat/atob/blob/master/LICENSE.DOCS).
+--- /dev/null
++++ node-css-2.1.0/node_modules/atob/bin/atob.js
+@@ -0,0 +1,10 @@
++#!/usr/bin/env node
++/*jshint strict:true node:true es5:true onevar:true laxcomma:true laxbreak:true eqeqeq:true immed:true latedef:true*/
++(function () {
++  "use strict";
++
++  var atob = require('../index')
++    ;
++
++  console.log(atob(process.argv[2]));
++}());
+--- /dev/null
++++ node-css-2.1.0/node_modules/atob/index.js
+@@ -0,0 +1,9 @@
++(function () {
++  "use strict";
++
++  function atob(str) {
++    return new Buffer(str, 'base64').toString('binary');
++  }
++
++  module.exports = atob;
++}());
+--- /dev/null
++++ node-css-2.1.0/node_modules/atob/package.json
+@@ -0,0 +1,23 @@
++{
++  "name": "atob",
++  "homepage": "https://github.com/coolaj86/node-browser-compat",
++  "description": "atob for Node.JS and Linux / Mac / Windows CLI (it's a one-liner)",
++  "repository": {
++    "type": "git",
++    "url": "git://github.com/coolaj86/node-browser-compat.git"
++  },
++  "keywords": [
++    "atob",
++    "browser"
++  ],
++  "author": "AJ ONeal <coolaj86 at gmail.com> (http://coolaj86.info)",
++  "engines": {
++    "node": ">= 0.4.0"
++  },
++  "main": "index",
++  "bin": {
++    "atob": "bin/atob.js"
++  },
++  "license": "Apache2",
++  "version": "1.1.2"
++}
+--- /dev/null
++++ node-css-2.1.0/node_modules/atob/test.js
+@@ -0,0 +1,20 @@
++/*jshint strict:true node:true es5:true onevar:true laxcomma:true laxbreak:true eqeqeq:true immed:true latedef:true*/
++(function () {
++  "use strict";
++
++  var atob = require('./index')
++    , encoded = "SGVsbG8gV29ybGQ="
++    , unencoded = "Hello World"
++  /*
++    , encoded = "SGVsbG8sIBZM"
++    , unencoded = "Hello, 世界"
++  */
++    ;
++
++  if (unencoded !== atob(encoded)) {
++    console.log('[FAIL]', unencoded, atob(encoded));
++    return;
++  }
++
++  console.log('[PASS] all tests pass');
++}());
diff --git a/debian/patches/0001-bundle_urix.patch b/debian/patches/0001-bundle_urix.patch
new file mode 100644
index 0000000..6f55098
--- /dev/null
+++ b/debian/patches/0001-bundle_urix.patch
@@ -0,0 +1,229 @@
+Description: Bundle urix as patch. Too small to be packaged.
+Author: Leo Iannacone <l3on at ubuntu.com>
+Forwarded: not-needed
+Last-Update: 2014-10-12
+
+--- /dev/null
++++ node-css-2.1.0/node_modules/urix/.jshintrc
+@@ -0,0 +1,42 @@
++{
++	"bitwise": true,
++	"camelcase": true,
++	"curly": false,
++	"eqeqeq": true,
++	"es3": false,
++	"forin": true,
++	"immed": false,
++	"indent": false,
++	"latedef": "nofunc",
++	"newcap": false,
++	"noarg": true,
++	"noempty": true,
++	"nonew": false,
++	"plusplus": false,
++	"quotmark": true,
++	"undef": true,
++	"unused": "vars",
++	"strict": false,
++	"trailing": true,
++	"maxparams": 5,
++	"maxdepth": false,
++	"maxstatements": false,
++	"maxcomplexity": false,
++	"maxlen": 100,
++
++	"asi": true,
++	"expr": true,
++	"globalstrict": true,
++	"smarttabs": true,
++	"sub": true,
++
++	"node": true,
++	"globals": {
++		"describe": false,
++		"it": false,
++		"before": false,
++		"beforeEach": false,
++		"after": false,
++		"afterEach": false
++	}
++}
+--- /dev/null
++++ node-css-2.1.0/node_modules/urix/.npmignore
+@@ -0,0 +1,4 @@
++example
++.*
++!.jshintrc
++*.sublime-*
+--- /dev/null
++++ node-css-2.1.0/node_modules/urix/.travis.yml
+@@ -0,0 +1,4 @@
++language: node_js
++node_js:
++  - "0.11"
++  - "0.10"
+--- /dev/null
++++ node-css-2.1.0/node_modules/urix/LICENSE
+@@ -0,0 +1,21 @@
++The MIT License (MIT)
++
++Copyright (c) 2013 Simon Lydell
++
++Permission is hereby granted, free of charge, to any person obtaining a copy
++of this software and associated documentation files (the "Software"), to deal
++in the Software without restriction, including without limitation the rights
++to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
++copies of the Software, and to permit persons to whom the Software is
++furnished to do so, subject to the following conditions:
++
++The above copyright notice and this permission notice shall be included in
++all copies or substantial portions of the Software.
++
++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
++AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
++LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
++OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
++THE SOFTWARE.
+--- /dev/null
++++ node-css-2.1.0/node_modules/urix/index.js
+@@ -0,0 +1,17 @@
++// Copyright 2014 Simon Lydell
++// X11 (“MIT”) Licensed. (See LICENSE.)
++
++var path = require("path")
++
++"use strict"
++
++function urix(aPath) {
++  if (path.sep === "\\") {
++    return aPath
++      .replace(/\\/g, "/")
++      .replace(/^[a-z]:\/?/i, "/")
++  }
++  return aPath
++}
++
++module.exports = urix
+--- /dev/null
++++ node-css-2.1.0/node_modules/urix/package.json
+@@ -0,0 +1,25 @@
++{
++  "name": "urix",
++  "version": "0.1.0",
++  "author": "Simon Lydell",
++  "license": "MIT",
++  "description": "Makes Windows-style paths more unix and URI friendly.",
++  "main": "index.js",
++  "repository": "lydell/urix",
++  "keywords": [
++    "path",
++    "url",
++    "uri",
++    "unix",
++    "windows",
++    "backslash",
++    "slash"
++  ],
++  "scripts": {
++    "test": "jshint index.js test/ && mocha"
++  },
++  "devDependencies": {
++    "mocha": "^1.17.1",
++    "jshint": "^2.4.4"
++  }
++}
+--- /dev/null
++++ node-css-2.1.0/node_modules/urix/readme.md
+@@ -0,0 +1,44 @@
++Overview [![Build Status](https://travis-ci.org/lydell/urix.png?branch=master)](https://travis-ci.org/lydell/urix)
++========
++
++Makes Windows-style paths more unix and URI friendly. Useful if you work with
++paths that eventually will be used in URLs.
++
++```js
++var urix = require("urix")
++
++// On Windows:
++urix("c:\\users\\you\\foo")
++// /users/you/foo
++
++// On unix-like systems:
++urix("c:\\users\\you\\foo")
++// c:\users\you\foo
++```
++
++
++Installation
++============
++
++`npm install urix`
++
++```js
++var urix = require("urix")
++```
++
++
++Usage
++=====
++
++### `urix(path)` ###
++
++On Windows, replaces all backslashes with slashes and uses a slash instead of a
++drive letter and a colon for absolute paths.
++
++On unix-like systems it is a no-op.
++
++
++License
++=======
++
++[The X11 (“MIT”) License](LICENSE).
+--- /dev/null
++++ node-css-2.1.0/node_modules/urix/test/index.js
+@@ -0,0 +1,43 @@
++// Copyright 2014 Simon Lydell
++// X11 (“MIT”) Licensed. (See LICENSE.)
++
++var path   = require("path")
++var assert = require("assert")
++var urix   = require("../")
++
++"use stict"
++
++function test(testPath, expected) {
++  path.sep = "\\"
++  assert.equal(urix(testPath), expected)
++  path.sep = "/"
++  assert.equal(urix(testPath), testPath)
++}
++
++describe("urix", function() {
++
++  it("is a function", function() {
++    assert.equal(typeof urix, "function")
++  })
++
++
++  it("converts backslashes to slashes", function() {
++    test("a\\b\\c", "a/b/c")
++    test("\\a\\b\\c", "/a/b/c")
++    test("a/b\\c", "a/b/c")
++    test("\\\\a\\\\\\b///c", "//a///b///c")
++  })
++
++
++  it("changes the drive letter to a slash", function() {
++    test("c:\\a", "/a")
++    test("C:\\a", "/a")
++    test("z:\\a", "/a")
++    test("c:a", "/a")
++    test("c:/a", "/a")
++    test("c:\\\\a", "//a")
++    test("c://a", "//a")
++    test("c:\\//a", "///a")
++  })
++
++})
diff --git a/debian/patches/0002-bundle_resolve-url.patch b/debian/patches/0002-bundle_resolve-url.patch
new file mode 100644
index 0000000..3b60e06
--- /dev/null
+++ b/debian/patches/0002-bundle_resolve-url.patch
@@ -0,0 +1,382 @@
+Description: Bundle resolve-url as patch.
+ It is used only in this context.
+Author: Leo Iannacone <l3on at ubuntu.com>
+Forwarded: not-needed
+Last-Update: 2014-10-12
+
+--- /dev/null
++++ node-css-2.1.0/node_modules/resolve-url/.jshintrc
+@@ -0,0 +1,44 @@
++{
++  "bitwise": true,
++  "camelcase": true,
++  "curly": false,
++  "eqeqeq": true,
++  "es3": true,
++  "forin": true,
++  "immed": false,
++  "indent": false,
++  "latedef": "nofunc",
++  "newcap": false,
++  "noarg": true,
++  "noempty": true,
++  "nonew": false,
++  "plusplus": false,
++  "quotmark": false,
++  "undef": true,
++  "unused": "vars",
++  "strict": false,
++  "trailing": true,
++  "maxparams": 5,
++  "maxdepth": false,
++  "maxstatements": false,
++  "maxcomplexity": false,
++  "maxlen": 100,
++
++  "asi": true,
++  "expr": true,
++  "globalstrict": true,
++  "smarttabs": true,
++  "sub": true,
++
++  "node": true,
++  "browser": true,
++  "globals": {
++    "describe": false,
++    "it": false,
++    "before": false,
++    "beforeEach": false,
++    "after": false,
++    "afterEach": false,
++    "define": false
++  }
++}
+--- /dev/null
++++ node-css-2.1.0/node_modules/resolve-url/.npmignore
+@@ -0,0 +1,2 @@
++.*
++!.jshintrc
+--- /dev/null
++++ node-css-2.1.0/node_modules/resolve-url/LICENSE
+@@ -0,0 +1,21 @@
++The MIT License (MIT)
++
++Copyright (c) 2013 Simon Lydell
++
++Permission is hereby granted, free of charge, to any person obtaining a copy
++of this software and associated documentation files (the "Software"), to deal
++in the Software without restriction, including without limitation the rights
++to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
++copies of the Software, and to permit persons to whom the Software is
++furnished to do so, subject to the following conditions:
++
++The above copyright notice and this permission notice shall be included in
++all copies or substantial portions of the Software.
++
++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
++AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
++LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
++OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
++THE SOFTWARE.
+--- /dev/null
++++ node-css-2.1.0/node_modules/resolve-url/bower.json
+@@ -0,0 +1,15 @@
++{
++  "name": "resolve-url",
++  "version": "0.2.1",
++  "description": "Like Node.js’ `path.resolve`/`url.resolve` for the browser.",
++  "authors": ["Simon Lydell"],
++  "license": "MIT",
++  "main": "resolve-url.js",
++  "keywords": [
++    "resolve",
++    "url"
++  ],
++  "ignore": [
++    ".*"
++  ]
++}
+--- /dev/null
++++ node-css-2.1.0/node_modules/resolve-url/changelog.md
+@@ -0,0 +1,15 @@
++### Version 0.2.1 (2014-02-25) ###
++
++- Fix edge case when (accidentally) supplying only one argument, and that
++  argument happens to be a falsy value such as `undefined` or `null`.
++
++
++### Version 0.2.0 (2014-02-24) ###
++
++- Disallow passing 0 arguments. It’s weird and inconsistent between browsers.
++  (Backwards incompatible change.)
++
++
++### Version 0.1.0 (2014-02-23) ###
++
++- Initial release.
+--- /dev/null
++++ node-css-2.1.0/node_modules/resolve-url/component.json
+@@ -0,0 +1,15 @@
++{
++  "name": "resolve-url",
++  "version": "0.2.1",
++  "license": "MIT",
++  "description": "Like Node.js’ `path.resolve`/`url.resolve` for the browser.",
++  "main": "resolve-url.js",
++  "repo": "lydell/resolve-url",
++  "keywords": [
++    "resolve",
++    "url"
++  ],
++  "scripts": [
++    "resolve-url.js"
++  ]
++}
+--- /dev/null
++++ node-css-2.1.0/node_modules/resolve-url/package.json
+@@ -0,0 +1,34 @@
++{
++  "name": "resolve-url",
++  "version": "0.2.1",
++  "description": "Like Node.js’ `path.resolve`/`url.resolve` for the browser.",
++  "author": "Simon Lydell",
++  "license": "MIT",
++  "main": "resolve-url.js",
++  "repository": "lydell/resolve-url",
++  "keywords": [
++    "resolve",
++    "url"
++  ],
++  "scripts": {
++    "test": "jshint resolve-url.js test/ && testling -u"
++  },
++  "devDependencies": {
++    "testling": "~1.6.0",
++    "jshint": "~2.4.3",
++    "tape": "~2.5.0"
++  },
++  "testling": {
++    "files": "test/*.js",
++    "browsers": [
++      "ie/8..latest",
++      "chrome/latest",
++      "firefox/latest",
++      "opera/12",
++      "opera/latest",
++      "safari/5",
++      "iphone/6",
++      "android-browser/4"
++    ]
++  }
++}
+--- /dev/null
++++ node-css-2.1.0/node_modules/resolve-url/readme.md
+@@ -0,0 +1,83 @@
++Overview
++========
++
++[![browser support](https://ci.testling.com/lydell/resolve-url.png)](https://ci.testling.com/lydell/resolve-url)
++
++Like Node.js’ [`path.resolve`]/[`url.resolve`] for the browser.
++
++```js
++var resolveUrl = require("resolve-url")
++
++window.location
++// https://example.com/articles/resolving-urls/edit
++
++resolveUrl("remove")
++// https://example.com/articles/resolving-urls/remove
++
++resolveUrl("/static/scripts/app.js")
++// https://example.com/static/scripts/app.js
++
++// Imagine /static/scripts/app.js contains `//# sourceMappingURL=../source-maps/app.js.map`
++resolveUrl("/static/scripts/app.js", "../source-maps/app.js.map")
++// https://example.com/static/source-maps/app.js.map
++
++resolveUrl("/static/scripts/app.js", "../source-maps/app.js.map", "../coffee/app.coffee")
++// https://example.com/static/coffee/app.coffee
++
++resolveUrl("//cdn.example.com/jquery.js")
++// https://cdn.example.com/jquery.js
++
++resolveUrl("http://foo.org/")
++// http://foo.org/
++```
++
++
++Installation
++============
++
++- `npm install resolve-url`
++- `bower install resolve-url`
++- `component install lydell/resolve-url`
++
++Works with CommonJS, AMD and browser globals, through UMD.
++
++
++Usage
++=====
++
++### `resolveUrl(...urls)` ###
++
++Pass one or more urls. Resolves the last one to an absolute url, using the
++previous ones and `window.location`.
++
++It’s like starting out on `window.location`, and then clicking links with the
++urls as `href` attributes in order, from left to right.
++
++Unlike Node.js’ [`path.resolve`], this function always goes through all of the
++arguments, from left to right. `path.resolve` goes from right to left and only
++in the worst case goes through them all. Should that matter.
++
++Actually, the function is _really_ like clicking a lot of links in series: An
++actual `<a>` gets its `href` attribute set for each url! This means that the
++url resolution of the browser is used, which makes this module really
++light-weight.
++
++Also note that this functions deals with urls, not paths, so in that respect it
++has more in common with Node.js’ [`url.resolve`]. But the arguments are more
++like [`path.resolve`].
++
++[`path.resolve`]: http://nodejs.org/api/path.html#path_path_resolve_from_to
++[`url.resolve`]: http://nodejs.org/api/url.html#url_url_resolve_from_to
++
++
++Tests
++=====
++
++Run `npm test`, which lints the code and then gives you a link to open in a
++browser of choice (using `testling`).
++
++
++License
++=======
++
++[The X11 (“MIT”) License](LICENSE).
+--- /dev/null
++++ node-css-2.1.0/node_modules/resolve-url/resolve-url.js
+@@ -0,0 +1,47 @@
++// Copyright 2014 Simon Lydell
++// X11 (“MIT”) Licensed. (See LICENSE.)
++
++void (function(root, factory) {
++  if (typeof define === "function" && define.amd) {
++    define(factory)
++  } else if (typeof exports === "object") {
++    module.exports = factory()
++  } else {
++    root.resolveUrl = factory()
++  }
++}(this, function() {
++
++  function resolveUrl(/* ...urls */) {
++    var numUrls = arguments.length
++
++    if (numUrls === 0) {
++      throw new Error("resolveUrl requires at least one argument; got none.")
++    }
++
++    var base = document.createElement("base")
++    base.href = arguments[0]
++
++    if (numUrls === 1) {
++      return base.href
++    }
++
++    var head = document.getElementsByTagName("head")[0]
++    head.insertBefore(base, head.firstChild)
++
++    var a = document.createElement("a")
++    var resolved
++
++    for (var index = 1; index < numUrls; index++) {
++      a.href = arguments[index]
++      resolved = a.href
++      base.href = resolved
++    }
++
++    head.removeChild(base)
++
++    return resolved
++  }
++
++  return resolveUrl
++
++}));
+--- /dev/null
++++ node-css-2.1.0/node_modules/resolve-url/test/resolve-url.js
+@@ -0,0 +1,70 @@
++// Copyright 2014 Simon Lydell
++// X11 (“MIT”) Licensed. (See LICENSE.)
++
++var test = require("tape")
++
++var resolveUrl = require("../")
++
++"use strict"
++
++test("resolveUrl", function(t) {
++
++  t.plan(7)
++
++  t.equal(typeof resolveUrl, "function", "is a function")
++
++  t.equal(
++    resolveUrl("https://example.com/"),
++    "https://example.com/"
++  )
++
++  var loc = "https://example.com/articles/resolving-urls/edit"
++
++  t.equal(
++    resolveUrl(loc, "remove"),
++    "https://example.com/articles/resolving-urls/remove"
++  )
++
++  t.equal(
++    resolveUrl(loc, "/static/scripts/app.js"),
++    "https://example.com/static/scripts/app.js"
++  )
++
++  t.equal(
++    resolveUrl(loc, "/static/scripts/app.js", "../source-maps/app.js.map"),
++    "https://example.com/static/source-maps/app.js.map"
++  )
++
++  t.equal(
++    resolveUrl(loc, "/static/scripts/app.js", "../source-maps/app.js.map", "../coffee/app.coffee"),
++    "https://example.com/static/coffee/app.coffee"
++  )
++
++  t.equal(
++    resolveUrl(loc, "//cdn.example.com/jquery.js"),
++    "https://cdn.example.com/jquery.js"
++  )
++
++})
++
++test("edge cases", function(t) {
++
++  t.plan(4)
++
++  t["throws"](resolveUrl, /at least one argument/, "throws with no arguments")
++
++  var accidentallyUndefined
++  var result
++  t.doesNotThrow(
++    function() { result = resolveUrl(accidentallyUndefined) },
++    "undefined is still an argument"
++  )
++  t.ok(result.match(/\/undefined$/), "undefined is stringified")
++
++  t.equal(
++    resolveUrl("http://foo.org/test", undefined, {}, ["a/b"], null),
++    "http://foo.org/a/null",
++    "arguments are stringified"
++  )
++
++})
diff --git a/debian/patches/0003-bundle_source-map-url.patch b/debian/patches/0003-bundle_source-map-url.patch
new file mode 100644
index 0000000..6aaa269
--- /dev/null
+++ b/debian/patches/0003-bundle_source-map-url.patch
@@ -0,0 +1,764 @@
+Description: Description: source-map-url as patch.
+ It is used only in this context.
+Author: Leo Iannacone <l3on at ubuntu.com>
+Forwarded: not-needed
+Last-Update: 2014-10-12
+
+--- /dev/null
++++ node-css-2.1.0/node_modules/source-map-url/.jshintrc
+@@ -0,0 +1,43 @@
++{
++  "bitwise": true,
++  "camelcase": true,
++  "curly": false,
++  "eqeqeq": true,
++  "es3": true,
++  "forin": true,
++  "immed": false,
++  "indent": false,
++  "latedef": "nofunc",
++  "newcap": false,
++  "noarg": true,
++  "noempty": true,
++  "nonew": false,
++  "plusplus": false,
++  "quotmark": false,
++  "undef": true,
++  "unused": "vars",
++  "strict": false,
++  "trailing": true,
++  "maxparams": 5,
++  "maxdepth": false,
++  "maxstatements": false,
++  "maxcomplexity": false,
++  "maxlen": 100,
++
++  "asi": true,
++  "expr": true,
++  "globalstrict": true,
++  "smarttabs": true,
++  "sub": true,
++
++  "node": true,
++  "globals": {
++    "describe": false,
++    "it": false,
++    "before": false,
++    "beforeEach": false,
++    "after": false,
++    "afterEach": false,
++    "define": false
++  }
++}
+--- /dev/null
++++ node-css-2.1.0/node_modules/source-map-url/.npmignore
+@@ -0,0 +1,2 @@
++.*
++!.jshintrc
+--- /dev/null
++++ node-css-2.1.0/node_modules/source-map-url/.travis.yml
+@@ -0,0 +1,4 @@
++language: node_js
++node_js:
++  - "0.11"
++  - "0.10"
+--- /dev/null
++++ node-css-2.1.0/node_modules/source-map-url/LICENSE
+@@ -0,0 +1,21 @@
++The MIT License (MIT)
++
++Copyright (c) 2014 Simon Lydell
++
++Permission is hereby granted, free of charge, to any person obtaining a copy
++of this software and associated documentation files (the "Software"), to deal
++in the Software without restriction, including without limitation the rights
++to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
++copies of the Software, and to permit persons to whom the Software is
++furnished to do so, subject to the following conditions:
++
++The above copyright notice and this permission notice shall be included in
++all copies or substantial portions of the Software.
++
++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
++AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
++LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
++OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
++THE SOFTWARE.
+--- /dev/null
++++ node-css-2.1.0/node_modules/source-map-url/bower.json
+@@ -0,0 +1,20 @@
++{
++  "name": "source-map-url",
++  "version": "0.3.0",
++  "author": "Simon Lydell",
++  "license": "MIT",
++  "description": "Tools for working with sourceMappingURL comments.",
++  "keywords": [
++    "source map",
++    "sourceMappingURL",
++    "comment",
++    "annotation"
++  ],
++  "main": "source-map-url.js",
++  "authors": [
++    "Simon Lydell"
++  ],
++  "ignore": [
++    ".*"
++  ]
++}
+\ No newline at end of file
+--- /dev/null
++++ node-css-2.1.0/node_modules/source-map-url/changelog.md
+@@ -0,0 +1,42 @@
++### Version 0.3.0 (2014-08-16) ###
++
++- Changed: sourceMappingURL comments used to be matched only if they appeared
++  on their own line. However, the spec only says:
++
++  > The generated code may include a line at the end of the source, with the following form:
++  >
++  >     //# sourceMappingURL=<url>
++
++  So now they are matched also when they appear on the same line as code.
++
++- Removed: The `.set()` method. I couldn’t decide how it should work
++  considering the above change. Moreover, it was unnecessarily complex (and
++  would have gotten worse) for very little gain. It is much easier to run
++  `.remove()` if needed, and then simply `code += "\n//# sourceMappingURL=" +
++  url` (using the appropriate comment syntax and newline). KISS.
++
++- Changed: The `.insertBefore()` method now always inserts the string exactly
++  before the sourceMappingURL comment; not before the newline before the
++  comment (if any). Moreover, it does not ensure that the comment will be on a
++  new line anymore. This is up to the caller. KISS.
++
++- Changed: The `.remove()` method no longer removes the newline before the
++  sourceMappingURL (if any).
++
++- Changed: Renamed `.get()` to `.getFrom()`.
++- Changed: Renamed `.remove()` to `.removeFrom()`.
++
++- Added: The `.existsIn()` method.
++
++
++### Version 0.2.0 (2014-02-23) ###
++
++- Changed: A space is no longer inserted before the closing comment syntax. If
++  such a space is desired, it needs to be put in the closing comment syntax
++  itself (such as `["/*", " */"]` instead of `["/*", "*/"]`). (Backwards
++  incompatible change.)
++
++
++### Version 0.1.0 (2014-02-22) ###
++
++- Initial release.
+--- /dev/null
++++ node-css-2.1.0/node_modules/source-map-url/component.json
+@@ -0,0 +1,18 @@
++{
++  "name": "source-map-url",
++  "version": "0.3.0",
++  "author": "Simon Lydell",
++  "license": "MIT",
++  "description": "Tools for working with sourceMappingURL comments.",
++  "keywords": [
++    "source map",
++    "sourceMappingURL",
++    "comment",
++    "annotation"
++  ],
++  "main": "source-map-url.js",
++  "repo": "lydell/source-map-url",
++  "scripts": [
++    "source-map-url.js"
++  ]
++}
+\ No newline at end of file
+--- /dev/null
++++ node-css-2.1.0/node_modules/source-map-url/package.json
+@@ -0,0 +1,39 @@
++{
++  "name": "source-map-url",
++  "version": "0.3.0",
++  "author": "Simon Lydell",
++  "license": "MIT",
++  "description": "Tools for working with sourceMappingURL comments.",
++  "keywords": [
++    "source map",
++    "sourceMappingURL",
++    "comment",
++    "annotation"
++  ],
++  "main": "source-map-url.js",
++  "repository": "lydell/source-map-url",
++  "scripts": {
++    "lint": "jshint source-map-url.js test/ ",
++    "unit": "mocha",
++    "test": "npm run lint && npm run unit"
++  },
++  "devDependencies": {
++    "mocha": "~1.17.1",
++    "expect.js": "~0.3.1",
++    "jshint": "~2.4.3"
++  },
++  "testling": {
++    "harness": "mocha",
++    "files": "test/*.js",
++    "browsers": [
++      "ie/8..latest",
++      "chrome/latest",
++      "firefox/latest",
++      "opera/12",
++      "opera/latest",
++      "safari/5",
++      "iphone/6",
++      "android-browser/4"
++    ]
++  }
++}
+\ No newline at end of file
+--- /dev/null
++++ node-css-2.1.0/node_modules/source-map-url/readme.md
+@@ -0,0 +1,97 @@
++Overview [![Build Status](https://travis-ci.org/lydell/source-map-url.png?branch=master)](https://travis-ci.org/lydell/source-map-url)
++========
++
++[![browser support](https://ci.testling.com/lydell/source-map-url.png)](https://ci.testling.com/lydell/source-map-url)
++
++Tools for working with sourceMappingURL comments.
++
++```js
++var sourceMappingURL = require("source-map-url")
++
++var code = [
++  "!function(){...}();",
++  "/*# sourceMappingURL=foo.js.map */"
++].join("\n")
++
++sourceMappingURL.existsIn(code)
++// true
++
++sourceMappingURL.getFrom(code)
++// foo.js.map
++
++code = sourceMappingURL.insertBefore(code, "// License: MIT\n")
++// !function(){...}();
++// // License: MIT
++// /*# sourceMappingURL=foo.js.map */
++
++code = sourceMappingURL.removeFrom(code)
++// !function(){...}();
++// // License: MIT
++
++sourceMappingURL.existsIn(code)
++// false
++
++sourceMappingURL.getFrom(code)
++// null
++
++code += "//# sourceMappingURL=/other/file.js.map"
++// !function(){...}();
++// // License: MIT
++// //# sourceMappingURL=/other/file.js.map
++```
++
++
++Installation
++============
++
++- `npm install source-map-url`
++- `bower install source-map-url`
++- `component install lydell/source-map-url`
++
++Works with CommonJS, AMD and browser globals, through UMD.
++
++
++Usage
++=====
++
++### `sourceMappingURL.getFrom(code)` ###
++
++Returns the url of the sourceMappingURL comment in `code`. Returns `null` if
++there is no such comment.
++
++### `sourceMappingURL.existsIn(code)` ###
++
++Returns `true` if there is a sourceMappingURL comment in `code`, or `false`
++otherwise.
++
++### `sourceMappingURL.removeFrom(code)` ###
++
++Removes the sourceMappingURL comment in `code`. Does nothing if there is no
++such comment. Returns the updated `code`.
++
++### `sourceMappingURL.insertBefore(code, string)` ###
++
++Inserts `string` before the sourceMappingURL comment in `code`. Appends
++`string` to `code` if there is no such comment.
++
++Lets you append something to a file without worrying about breaking the
++sourceMappingURL comment (which needs to be at the end of the file).
++
++### `sourceMappingURL.regex` ###
++
++The regex that is used to match sourceMappingURL comments. It matches both `//`
++and `/**/` comments, thus supporting both JavaScript and CSS.
++
++
++Tests
++=====
++
++Start by running `npm test`, which lints the code and runs the test suite in Node.js.
++
++To run the tests in a browser, run `testling` (`npm install -g testling`) or `testling -u`.
++
++
++License
++=======
++
++[The X11 (“MIT”) License](LICENSE).
+--- /dev/null
++++ node-css-2.1.0/node_modules/source-map-url/source-map-url.js
+@@ -0,0 +1,57 @@
++// Copyright 2014 Simon Lydell
++// X11 (“MIT”) Licensed. (See LICENSE.)
++
++void (function(root, factory) {
++  if (typeof define === "function" && define.amd) {
++    define(factory)
++  } else if (typeof exports === "object") {
++    module.exports = factory()
++  } else {
++    root.sourceMappingURL = factory()
++  }
++}(this, function() {
++
++  var innerRegex = /[#@] sourceMappingURL=([^\s'"]*)/
++
++  var regex = RegExp(
++    "(?:" +
++      "/\\*" +
++      "(?:\\s*\r?\n(?://)?)?" +
++      "(?:" + innerRegex.source + ")" +
++      "\\s*" +
++      "\\*/" +
++      "|" +
++      "//(?:" + innerRegex.source + ")" +
++    ")" +
++    "\\s*$"
++  )
++
++  return {
++
++    regex: regex,
++    _innerRegex: innerRegex,
++
++    getFrom: function(code) {
++      var match = code.match(regex)
++      return (match ? match[1] || match[2] || "" : null)
++    },
++
++    existsIn: function(code) {
++      return regex.test(code)
++    },
++
++    removeFrom: function(code) {
++      return code.replace(regex, "")
++    },
++
++    insertBefore: function(code, string) {
++      var match = code.match(regex)
++      if (match) {
++        return code.slice(0, match.index) + string + code.slice(match.index)
++      } else {
++        return code + string
++      }
++    }
++  }
++
++}));
+--- /dev/null
++++ node-css-2.1.0/node_modules/source-map-url/test/source-map-url.js
+@@ -0,0 +1,321 @@
++// Copyright 2014 Simon Lydell
++// X11 (“MIT”) Licensed. (See LICENSE.)
++
++var expect = require("expect.js")
++
++var sourceMappingURL = require("../")
++
++var comments = {
++
++  universal: [
++    "/*# sourceMappingURL=foo.js.map */"
++  ],
++
++  js: [
++    "//# sourceMappingURL=foo.js.map"
++  ],
++
++  block: [
++    "/*",
++    "# sourceMappingURL=foo.js.map",
++    "*/"
++  ],
++
++  mix: [
++    "/*",
++    "//# sourceMappingURL=foo.js.map",
++    "*/"
++  ]
++
++}
++
++function forEachComment(fn) {
++  forOf(comments, function(name, comment) {
++    var description = "the '" + name + "' syntax with "
++    fn(comment.join("\n"),   description + "regular newlines")
++    fn(comment.join("\r\n"), description + "Windows newlines")
++  })
++}
++
++function forOf(obj, fn) {
++  for (var key in obj) {
++    if (Object.prototype.hasOwnProperty.call(obj, key)) {
++      fn(key, obj[key])
++    }
++  }
++}
++
++
++describe("sourceMappingURL", function() {
++
++  describe(".getFrom", function() {
++
++    forEachComment(function(comment, description) {
++
++      it("gets the url from " + description, function() {
++        expect(sourceMappingURL.getFrom("code\n" + comment))
++          .to.equal("foo.js.map")
++
++        expect(sourceMappingURL.getFrom("code" + comment))
++          .to.equal("foo.js.map")
++
++        expect(sourceMappingURL.getFrom(comment))
++          .to.equal("foo.js.map")
++      })
++
++    })
++
++
++    it("returns null if no comment", function() {
++      expect(sourceMappingURL.getFrom("code"))
++        .to.equal(null)
++    })
++
++
++    it("can return an empty string as url", function() {
++      expect(sourceMappingURL.getFrom("/*# sourceMappingURL= */"))
++        .to.equal("")
++    })
++
++
++    it("is detachable", function() {
++      var get = sourceMappingURL.getFrom
++      expect(get("/*# sourceMappingURL=foo */"))
++        .to.equal("foo")
++    })
++
++  })
++
++
++  describe(".existsIn", function() {
++
++    forEachComment(function(comment, description) {
++
++      it("returns true for " + description, function() {
++        expect(sourceMappingURL.existsIn("code\n" + comment))
++          .to.equal(true)
++
++        expect(sourceMappingURL.existsIn("code" + comment))
++          .to.equal(true)
++
++        expect(sourceMappingURL.existsIn(comment))
++          .to.equal(true)
++      })
++
++    })
++
++
++    it("returns false if no comment", function() {
++      expect(sourceMappingURL.existsIn("code"))
++        .to.equal(false)
++    })
++
++
++    it("is detachable", function() {
++      var has = sourceMappingURL.existsIn
++      expect(has("/*# sourceMappingURL=foo */"))
++        .to.equal(true)
++    })
++
++  })
++
++
++  describe(".removeFrom", function() {
++
++    forEachComment(function(comment, description) {
++
++      it("removes the comment for " + description, function() {
++        expect(sourceMappingURL.removeFrom("code\n" + comment))
++          .to.equal("code\n")
++
++        expect(sourceMappingURL.removeFrom("code" + comment))
++          .to.equal("code")
++
++        expect(sourceMappingURL.removeFrom(comment))
++          .to.equal("")
++      })
++
++    })
++
++
++    it("does nothing if no comment", function() {
++      expect(sourceMappingURL.removeFrom("code\n"))
++        .to.equal("code\n")
++    })
++
++
++    it("is detachable", function() {
++      var remove = sourceMappingURL.removeFrom
++      expect(remove("/*# sourceMappingURL=foo */"))
++        .to.equal("")
++    })
++
++  })
++
++
++  describe(".insertBefore", function() {
++
++    forEachComment(function(comment, description) {
++
++      it("inserts a string before the comment for " + description, function() {
++        expect(sourceMappingURL.insertBefore("code\n" + comment, "more code\n"))
++          .to.equal("code\nmore code\n" + comment)
++
++        expect(sourceMappingURL.insertBefore("code" + comment, "\nmore code"))
++          .to.equal("code\nmore code" + comment)
++
++        expect(sourceMappingURL.insertBefore(comment, "some code"))
++          .to.equal("some code" + comment)
++      })
++
++    })
++
++
++    it("appends if no comment", function() {
++      expect(sourceMappingURL.insertBefore("code", "\nmore code"))
++        .to.equal("code\nmore code")
++    })
++
++
++    it("is detachable", function() {
++      var insertBefore = sourceMappingURL.insertBefore
++      expect(insertBefore("/*# sourceMappingURL=foo */", "bar"))
++        .to.equal("bar/*# sourceMappingURL=foo */")
++    })
++
++  })
++
++
++  describe(".regex", function() {
++
++    it("includes ._innerRegex", function() {
++      expect(sourceMappingURL.regex.source)
++        .to.contain(sourceMappingURL._innerRegex.source)
++    })
++
++
++    var match = function(code) {
++      expect(code)
++        .to.match(sourceMappingURL.regex)
++    }
++
++    var noMatch = function(code) {
++      expect(code)
++        .not.to.match(sourceMappingURL.regex)
++    }
++
++
++    forEachComment(function(comment, description) {
++
++      it("matches " + description, function() {
++        match("code\n" + comment)
++        match("code" + comment)
++        match(comment)
++      })
++
++
++      it("matches " + description + ", with trailing whitespace", function() {
++        match(comment + "  ")
++        match(comment + "\n")
++        match(comment + "\n\n\t\n    \t  ")
++      })
++
++
++      it("only matches " + description + " at the end of files", function() {
++        noMatch("code\n" + comment + " code")
++        noMatch("code" + comment + " code")
++        noMatch("code\n" + comment + "\ncode")
++        noMatch("code" + comment + "\ncode")
++        noMatch("code\n" + comment + "\n// Generated by foobar")
++        noMatch("code" + comment + "\n// Generated by foobar")
++        noMatch("alert\n('\\" + comment + "')")
++        noMatch("alert('\\" + comment + "')")
++        noMatch('alert\n("\\' + comment + '")')
++        noMatch('alert("\\' + comment + '")')
++      })
++
++    })
++
++
++    it("does not match some cases that are easy to mess up", function() {
++      noMatch(
++        "/* # sourceMappingURL=foo */"
++      )
++
++      noMatch(
++        "/*\n" +
++        "  //# sourceMappingURL=foo\n" +
++        "*/"
++      )
++
++      noMatch(
++        "/*//# sourceMappingURL=foo\n" +
++        "*/"
++      )
++
++      noMatch(
++        "// # sourceMappingURL=foo"
++      )
++    })
++
++
++    it("is liberal regarding inner whitespace", function() {
++      match(
++        "/*# sourceMappingURL=foo*/"
++      )
++
++      match(
++        "/*# sourceMappingURL=foo    */"
++      )
++
++      match(
++        "/*# sourceMappingURL=foo   \t\n" +
++        "*/"
++      )
++
++      match(
++        "/*    \n" +
++        "# sourceMappingURL=foo\n" +
++        "*/"
++      )
++
++      match(
++        "/*\n" +
++        "# sourceMappingURL=foo\n" +
++        "     */"
++      )
++
++      match(
++        "/*\n" +
++        "# sourceMappingURL=foo\n" +
++        "\n" +
++        "\t\n" +
++        "*/"
++      )
++    })
++
++  })
++
++
++  describe("._innerRegex", function() {
++
++    it("matches the contents of sourceMappingURL comments", function() {
++      expect("# sourceMappingURL=http://www.example.com/foo/bar.js.map")
++        .to.match(sourceMappingURL._innerRegex)
++    })
++
++
++    it("captures the url in the first capture group", function() {
++      expect(sourceMappingURL._innerRegex.exec("# sourceMappingURL=foo")[1])
++        .to.equal("foo")
++    })
++
++
++    it("supports the legacy syntax", function() {
++      expect("@ sourceMappingURL=http://www.example.com/foo/bar.js.map")
++        .to.match(sourceMappingURL._innerRegex)
++    })
++
++  })
++
++})
+--- /dev/null
++++ node-css-2.1.0/node_modules/source-map-url/x-package.json5
+@@ -0,0 +1,55 @@
++{
++  name: "source-map-url",
++  version: "0.3.0",
++  author: "Simon Lydell",
++  license: "MIT",
++  description: "Tools for working with sourceMappingURL comments.",
++  keywords: [
++    "source map",
++    "sourceMappingURL",
++    "comment",
++    "annotation"
++  ],
++  main: "source-map-url.js",
++  overlay: {
++    npm: {
++      repository: "lydell/source-map-url",
++      scripts: {
++        lint: "jshint source-map-url.js test/ ",
++        unit: "mocha",
++        test: "npm run lint && npm run unit"
++      },
++      devDependencies: {
++        "mocha": "~1.17.1",
++        "expect.js": "~0.3.1",
++        "jshint": "~2.4.3"
++      },
++      testling: {
++        harness: "mocha",
++        files: "test/*.js",
++        browsers: [
++          "ie/8..latest",
++          "chrome/latest",
++          "firefox/latest",
++          "opera/12",
++          "opera/latest",
++          "safari/5",
++          "iphone/6",
++          "android-browser/4"
++        ]
++      }
++    },
++    component: {
++      repo: "lydell/source-map-url",
++      scripts: [
++        "source-map-url.js"
++      ]
++    },
++    bower: {
++      authors: ["Simon Lydell"],
++      ignore: [
++        ".*"
++      ]
++    }
++  }
++}
diff --git a/debian/patches/0004-bundle_source-map-resolve.patch b/debian/patches/0004-bundle_source-map-resolve.patch
new file mode 100644
index 0000000..bef84fd
--- /dev/null
+++ b/debian/patches/0004-bundle_source-map-resolve.patch
@@ -0,0 +1,2109 @@
+Description: Description: source-map-resolve as patch.
+ It is used only in this context.
+Author: Leo Iannacone <l3on at ubuntu.com>
+Forwarded: not-needed
+Last-Update: 2014-10-12
+
+--- /dev/null
++++ node-css-2.1.0/node_modules/source-map-resolve/.jshintrc
+@@ -0,0 +1,45 @@
++{
++  "bitwise": true,
++  "camelcase": true,
++  "curly": false,
++  "eqeqeq": true,
++  "es3": true,
++  "forin": true,
++  "immed": false,
++  "indent": false,
++  "latedef": "nofunc",
++  "newcap": false,
++  "noarg": true,
++  "noempty": true,
++  "nonew": false,
++  "plusplus": false,
++  "quotmark": false,
++  "undef": true,
++  "unused": "vars",
++  "strict": false,
++  "trailing": true,
++  "maxparams": 5,
++  "maxdepth": false,
++  "maxstatements": false,
++  "maxcomplexity": false,
++  "maxlen": 100,
++
++  "asi": true,
++  "expr": true,
++  "globalstrict": true,
++  "smarttabs": true,
++  "sub": true,
++
++  "node": true,
++  "globals": {
++    "describe": false,
++    "it": false,
++    "before": false,
++    "beforeEach": false,
++    "after": false,
++    "afterEach": false,
++    "define": false,
++    "window": false,
++    "atob": true
++  }
++}
+--- /dev/null
++++ node-css-2.1.0/node_modules/source-map-resolve/.npmignore
+@@ -0,0 +1,2 @@
++.*
++!.jshintrc
+--- /dev/null
++++ node-css-2.1.0/node_modules/source-map-resolve/.travis.yml
+@@ -0,0 +1,4 @@
++language: node_js
++node_js:
++  - "0.11"
++  - "0.10"
+--- /dev/null
++++ node-css-2.1.0/node_modules/source-map-resolve/LICENSE
+@@ -0,0 +1,21 @@
++The MIT License (MIT)
++
++Copyright (c) 2014 Simon Lydell
++
++Permission is hereby granted, free of charge, to any person obtaining a copy
++of this software and associated documentation files (the "Software"), to deal
++in the Software without restriction, including without limitation the rights
++to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
++copies of the Software, and to permit persons to whom the Software is
++furnished to do so, subject to the following conditions:
++
++The above copyright notice and this permission notice shall be included in
++all copies or substantial portions of the Software.
++
++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
++AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
++LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
++OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
++THE SOFTWARE.
+--- /dev/null
++++ node-css-2.1.0/node_modules/source-map-resolve/bower.json
+@@ -0,0 +1,30 @@
++{
++  "name": "source-map-resolve",
++  "version": "0.3.1",
++  "author": "Simon Lydell",
++  "license": "MIT",
++  "description": "Resolve the source map and/or sources for a generated file.",
++  "keywords": [
++    "source map",
++    "sourcemap",
++    "source",
++    "map",
++    "sourceMappingURL",
++    "resolve",
++    "resolver",
++    "locate",
++    "locator",
++    "find",
++    "finder"
++  ],
++  "authors": [
++    "Simon Lydell"
++  ],
++  "ignore": [
++    ".*"
++  ],
++  "dependencies": {
++    "source-map-url": "~0.3.0",
++    "resolve-url": "~0.2.1"
++  }
++}
+\ No newline at end of file
+--- /dev/null
++++ node-css-2.1.0/node_modules/source-map-resolve/changelog.md
+@@ -0,0 +1,60 @@
++### Version 0.3.1 (2014-08-16) ###
++
++- Improved: Updated the source-map-url dependency to 0.3.0.
++
++
++### Version 0.3.0 (2014-07-02) ###
++
++- Removed: Argument checking. It’s not worth it. (Possibly
++  backwards-incompatible change.)
++- Added: The `sourceRoot` property of source maps may now be ignored, which can
++  be useful when resolving sources outside of the browser.
++- Added: It is now possible to resolve only the URLs of sources, without
++  reading them.
++
++
++### Version 0.2.0 (2014-06-22) ###
++
++- Changed: The result of `resolveSources` is now an object, not an array. The
++  old result array is available in the `sourcesContent` property.
++  (Backwards-incompatible change.)
++- Changed: `sources` has been renamed to `sourcesContent` in the result object
++  of `resolve`. (Backwards-incompatible change.)
++- Added: `resolveSources` now also returns all sources fully resolved, in the
++  `sourcesResolved` property.
++- Added: The result object of `resolve` now contains the `sourcesResolved`
++  property from `resolveSources`.
++
++
++### Version 0.1.4 (2014-06-16) ###
++
++- Fixed: `sourcesContent` was mis-typed as `sourceContents`, which meant that
++  the `sourcesContent` property of source maps never was used when resolving
++  sources.
++
++
++### Version 0.1.3 (2014-05-06) ###
++
++- Only documentation and meta-data changes.
++
++
++### Version 0.1.2 (2014-03-23) ###
++
++- Improved: Source maps starting with `)]}'` are now parsed correctly. The spec
++  allows source maps to start with that character sequence to prevent XSSI
++  attacks.
++
++
++### Version 0.1.1 (2014-03-06) ###
++
++- Improved: Make sourceRoot resolving more sensible.
++
++  A source root such as `/scripts/subdir` is now treated as `/scripts/subdir/`
++  — that is, as a directory called “subdir”, not a file called “subdir”.
++  Pointing to a file as source root does not makes sense.
++
++
++
++### Version 0.1.0 (2014-03-03) ###
++
++- Initial release.
+--- /dev/null
++++ node-css-2.1.0/node_modules/source-map-resolve/component.json
+@@ -0,0 +1,29 @@
++{
++  "name": "source-map-resolve",
++  "version": "0.3.1",
++  "author": "Simon Lydell",
++  "license": "MIT",
++  "description": "Resolve the source map and/or sources for a generated file.",
++  "keywords": [
++    "source map",
++    "sourcemap",
++    "source",
++    "map",
++    "sourceMappingURL",
++    "resolve",
++    "resolver",
++    "locate",
++    "locator",
++    "find",
++    "finder"
++  ],
++  "repo": "lydell/source-map-resolve",
++  "main": "source-map-resolve.js",
++  "scripts": [
++    "source-map-resolve.js"
++  ],
++  "dependencies": {
++    "lydell/source-map-url": "~0.3.0",
++    "lydell/resolve-url": "~0.2.1"
++  }
++}
+\ No newline at end of file
+--- /dev/null
++++ node-css-2.1.0/node_modules/source-map-resolve/generate-source-map-resolve.js
+@@ -0,0 +1,25 @@
++// Copyright 2014 Simon Lydell
++// X11 (“MIT”) Licensed. (See LICENSE.)
++
++var fs = require("fs")
++
++var template = fs.readFileSync("source-map-resolve.js.template").toString()
++var nodeCode = fs.readFileSync("lib/source-map-resolve-node.js").toString()
++
++nodeCode = nodeCode
++
++  // Remove leading comments and `require`s.
++  .replace(/^\s*(?:\/\/.+\s+|var\s+\w+\s*=\s*require\([^)]+\).*\s+)*/, "")
++
++  // Remove `urix`.
++  .replace(/(\w+)\s*=\s*urix\(\1\)\s*/g, "")
++
++  // Change `module.exports = {...}` to `return {...}`.
++  .replace(/module\.exports = (\{[^}]+\})\s*$/, "return $1")
++
++  // Indent.
++  .replace(/^(?!$)/gm, "  ")
++
++var code = template.replace(/[ \t]*\{\{source-map-resolve-node.js\}\}/, nodeCode)
++
++fs.writeFileSync("source-map-resolve.js", code)
+--- /dev/null
++++ node-css-2.1.0/node_modules/source-map-resolve/lib/resolve-url.js
+@@ -0,0 +1,12 @@
++// Copyright 2014 Simon Lydell
++// X11 (“MIT”) Licensed. (See LICENSE.)
++
++var url = require("url")
++
++function resolveUrl(/* ...urls */) {
++  return Array.prototype.reduce.call(arguments, function(resolved, nextUrl) {
++    return url.resolve(resolved, nextUrl)
++  })
++}
++
++module.exports = resolveUrl
+--- /dev/null
++++ node-css-2.1.0/node_modules/source-map-resolve/lib/source-map-resolve-node.js
+@@ -0,0 +1,215 @@
++// Copyright 2014 Simon Lydell
++// X11 (“MIT”) Licensed. (See LICENSE.)
++
++var sourceMappingURL = require("source-map-url")
++var resolveUrl       = require("./resolve-url")
++var urix             = require("urix")
++var atob             = require("atob")
++
++
++
++function callbackAsync(callback, error, result) {
++  setImmediate(function() { callback(error, result) })
++}
++
++function parseMapToJSON(string) {
++  return JSON.parse(string.replace(/^\)\]\}'/, ""))
++}
++
++
++
++function resolveSourceMap(code, codeUrl, read, callback) {
++  var mapData
++  try {
++    mapData = resolveSourceMapHelper(code, codeUrl)
++  } catch (error) {
++    return callbackAsync(callback, error)
++  }
++  if (!mapData || mapData.map) {
++    return callbackAsync(callback, null, mapData)
++  }
++  read(mapData.url, function(error, result) {
++    if (error) {
++      return callback(error)
++    }
++    try {
++      mapData.map = parseMapToJSON(String(result))
++    } catch (error) {
++      return callback(error)
++    }
++    callback(null, mapData)
++  })
++}
++
++function resolveSourceMapSync(code, codeUrl, read) {
++  var mapData = resolveSourceMapHelper(code, codeUrl)
++  if (!mapData || mapData.map) {
++    return mapData
++  }
++  mapData.map = parseMapToJSON(String(read(mapData.url)))
++  return mapData
++}
++
++var dataUriRegex = /^data:([^,;]*)(;[^,;]*)*(?:,(.*))?$/
++var jsonMimeTypeRegex = /^(?:application|text)\/json$/
++
++function resolveSourceMapHelper(code, codeUrl) {
++  codeUrl = urix(codeUrl)
++
++  var url = sourceMappingURL.getFrom(code)
++  if (!url) {
++    return null
++  }
++
++  var dataUri = url.match(dataUriRegex)
++  if (dataUri) {
++    var mimeType = dataUri[1]
++    var lastParameter = dataUri[2]
++    var encoded = dataUri[3]
++    if (!jsonMimeTypeRegex.test(mimeType)) {
++      throw new Error("Unuseful data uri mime type: " + (mimeType || "text/plain"))
++    }
++    return {
++      sourceMappingURL: url,
++      url: null,
++      sourcesRelativeTo: codeUrl,
++      map: parseMapToJSON(lastParameter === ";base64" ? atob(encoded) : decodeURIComponent(encoded))
++    }
++  }
++
++  var mapUrl = resolveUrl(codeUrl, url)
++  return {
++    sourceMappingURL: url,
++    url: mapUrl,
++    sourcesRelativeTo: mapUrl,
++    map: null
++  }
++}
++
++
++
++function resolveSources(map, mapUrl, read, options, callback) {
++  if (typeof options === "function") {
++    callback = options
++    options = {}
++  }
++  var pending = map.sources.length
++  var errored = false
++  var result = {
++    sourcesResolved: [],
++    sourcesContent:  []
++  }
++
++  var done = function(error) {
++    if (errored) {
++      return
++    }
++    if (error) {
++      errored = true
++      return callback(error)
++    }
++    pending--
++    if (pending === 0) {
++      callback(null, result)
++    }
++  }
++
++  resolveSourcesHelper(map, mapUrl, options, function(fullUrl, sourceContent, index) {
++    result.sourcesResolved[index] = fullUrl
++    if (typeof sourceContent === "string") {
++      result.sourcesContent[index] = sourceContent
++      callbackAsync(done, null)
++    } else {
++      read(fullUrl, function(error, source) {
++        result.sourcesContent[index] = String(source)
++        done(error)
++      })
++    }
++  })
++}
++
++function resolveSourcesSync(map, mapUrl, read, options) {
++  var result = {
++    sourcesResolved: [],
++    sourcesContent:  []
++  }
++  resolveSourcesHelper(map, mapUrl, options, function(fullUrl, sourceContent, index) {
++    result.sourcesResolved[index] = fullUrl
++    if (read !== null) {
++      if (typeof sourceContent === "string") {
++        result.sourcesContent[index] = sourceContent
++      } else {
++        result.sourcesContent[index] = String(read(fullUrl))
++      }
++    }
++  })
++  return result
++}
++
++var endingSlash = /\/?$/
++
++function resolveSourcesHelper(map, mapUrl, options, fn) {
++  options = options || {}
++  mapUrl = urix(mapUrl)
++  var fullUrl
++  var sourceContent
++  for (var index = 0, len = map.sources.length; index < len; index++) {
++    if (map.sourceRoot && !options.ignoreSourceRoot) {
++      // Make sure that the sourceRoot ends with a slash, so that `/scripts/subdir` becomes
++      // `/scripts/subdir/<source>`, not `/scripts/<source>`. Pointing to a file as source root
++      // does not make sense.
++      fullUrl = resolveUrl(mapUrl, map.sourceRoot.replace(endingSlash, "/"), map.sources[index])
++    } else {
++      fullUrl = resolveUrl(mapUrl, map.sources[index])
++    }
++    sourceContent = (map.sourcesContent || [])[index]
++    fn(fullUrl, sourceContent, index)
++  }
++}
++
++
++
++function resolve(code, codeUrl, read, options, callback) {
++  if (typeof options === "function") {
++    callback = options
++    options = {}
++  }
++  resolveSourceMap(code, codeUrl, read, function(error, mapData) {
++    if (error) {
++      return callback(error)
++    }
++    if (!mapData) {
++      return callback(null, null)
++    }
++    resolveSources(mapData.map, mapData.sourcesRelativeTo, read, options, function(error, result) {
++      if (error) {
++        return callback(error)
++      }
++      mapData.sourcesResolved = result.sourcesResolved
++      mapData.sourcesContent  = result.sourcesContent
++      callback(null, mapData)
++    })
++  })
++}
++
++function resolveSync(code, codeUrl, read, options) {
++  var mapData = resolveSourceMapSync(code, codeUrl, read)
++  if (!mapData) {
++    return null
++  }
++  var result = resolveSourcesSync(mapData.map, mapData.sourcesRelativeTo, read, options)
++  mapData.sourcesResolved = result.sourcesResolved
++  mapData.sourcesContent  = result.sourcesContent
++  return mapData
++}
++
++
++
++module.exports = {
++  resolveSourceMap:     resolveSourceMap,
++  resolveSourceMapSync: resolveSourceMapSync,
++  resolveSources:       resolveSources,
++  resolveSourcesSync:   resolveSourcesSync,
++  resolve:              resolve,
++  resolveSync:          resolveSync
++}
+--- /dev/null
++++ node-css-2.1.0/node_modules/source-map-resolve/package.json
+@@ -0,0 +1,55 @@
++{
++  "name": "source-map-resolve",
++  "version": "0.3.1",
++  "author": "Simon Lydell",
++  "license": "MIT",
++  "description": "Resolve the source map and/or sources for a generated file.",
++  "keywords": [
++    "source map",
++    "sourcemap",
++    "source",
++    "map",
++    "sourceMappingURL",
++    "resolve",
++    "resolver",
++    "locate",
++    "locator",
++    "find",
++    "finder"
++  ],
++  "repository": "lydell/source-map-resolve",
++  "main": "lib/source-map-resolve-node.js",
++  "browser": "source-map-resolve.js",
++  "scripts": {
++    "lint": "jshint lib/ test/",
++    "unit": "node test/source-map-resolve.js && node test/windows.js",
++    "test": "npm run lint && npm run unit",
++    "build": "node generate-source-map-resolve.js"
++  },
++  "dependencies": {
++    "source-map-url": "~0.3.0",
++    "atob": "~1.1.0",
++    "urix": "~0.1.0",
++    "resolve-url": "~0.2.1"
++  },
++  "devDependencies": {
++    "tape": "~2.5.0",
++    "jshint": "~2.4.3",
++    "setimmediate": "~1.0.1",
++    "Base64": "~0.2.0",
++    "simple-asyncify": "~0.1.0"
++  },
++  "testling": {
++    "files": "test/source-map-resolve.js",
++    "browsers": [
++      "ie/8..latest",
++      "chrome/latest",
++      "firefox/latest",
++      "opera/12",
++      "opera/latest",
++      "safari/5",
++      "iphone/6",
++      "android-browser/4"
++    ]
++  }
++}
+\ No newline at end of file
+--- /dev/null
++++ node-css-2.1.0/node_modules/source-map-resolve/readme.md
+@@ -0,0 +1,208 @@
++Overview [![Build Status](https://travis-ci.org/lydell/source-map-resolve.png?branch=master)](https://travis-ci.org/lydell/source-map-resolve)
++========
++
++[![browser support](https://ci.testling.com/lydell/source-map-resolve.png)](https://ci.testling.com/lydell/source-map-resolve)
++
++Resolve the source map and/or sources for a generated file.
++
++```js
++var sourceMapResolve = require("source-map-resolve")
++var sourceMap        = require("source-map")
++
++var code = [
++  "!function(){...}();",
++  "/*# sourceMappingURL=foo.js.map */"
++].join("\n")
++
++sourceMapResolve.resolveSourceMap(code, "/js/foo.js", fs.readFile, function(error, result) {
++  if (error) {
++    return notifyFailure(error)
++  }
++  result
++  // {
++  //   map: {file: "foo.js", mappings: "...", sources: ["/coffee/foo.coffee"], names: []},
++  //   url: "/js/foo.js.map",
++  //   sourcesRelativeTo: "/js/foo.js.map",
++  //   sourceMappingURL: "foo.js.map"
++  // }
++
++  sourceMapResolve.resolveSources(result.map, result.sourcesRelativeTo, fs.readFile, function(error, result) {
++    if (error) {
++      return notifyFailure(error)
++    }
++    result
++    // {
++    //   sourcesResolved: ["/coffee/foo.coffee"],
++    //   sourcesContent: ["<contents of /coffee/foo.coffee>"]
++    // }
++  })
++})
++
++sourceMapResolve.resolve(code, "/js/foo.js", fs.readFile, function(error, result) {
++  if (error) {
++    return notifyFailure(error)
++  }
++  result
++  // {
++  //   map: {file: "foo.js", mappings: "...", sources: ["/coffee/foo.coffee"], names: []},
++  //   url: "/js/foo.js.map",
++  //   sourcesRelativeTo: "/js/foo.js.map",
++  //   sourceMappingURL: "foo.js.map",
++  //   sourcesResolved: ["/coffee/foo.coffee"],
++  //   sourcesContent: ["<contents of /coffee/foo.coffee>"]
++  // }
++  result.map.sourcesContent = result.sourcesContent
++  var map = new sourceMap.sourceMapConsumer(result.map)
++  map.sourceContentFor("/coffee/foo.coffee")
++  // "<contents of /coffee/foo.coffee>"
++})
++```
++
++
++Installation
++============
++
++- `npm install source-map-resolve`
++- `bower install source-map-resolve`
++- `component install lydell/source-map-resolve`
++
++Works with CommonJS, AMD and browser globals, through UMD.
++
++Note: This module requires `setImmediate` and `atob`.
++Use polyfills if needed, such as:
++
++- <https://github.com/NobleJS/setImmediate>
++- <https://github.com/davidchambers/Base64.js>
++
++
++Usage
++=====
++
++### `sourceMapResolve.resolveSourceMap(code, codeUrl, read, callback)` ###
++
++- `code` is a string of code that may or may not contain a sourceMappingURL
++  comment. Such a comment is used to resolve the source map.
++- `codeUrl` is the url to the file containing `code`. If the sourceMappingURL
++  is relative, it is resolved against `codeUrl`.
++- `read(url, callback)` is a function that reads `url` and responds using
++  `callback(error, content)`. In Node.js you might want to use `fs.readFile`,
++  while in the browser you might want to use an asynchronus `XMLHttpRequest`.
++- `callback(error, result)` is a function that is invoked with either an error
++  or `null` and the result.
++
++The result is an object with the following properties:
++
++- `map`: The source map for `code`, as an object (not a string).
++- `url`: The url to the source map. If the source map came from a data uri,
++  this property is `null`, since then there is no url to it.
++- `sourcesRelativeTo`: The url that the sources of the source map are relative
++  to. Since the sources are relative to the source map, and the url to the
++  source map is provided as the `url` property, this property might seem
++  superfluos. However, remember that the `url` property can be `null` if the
++  source map came from a data uri. If so, the sources are relative to the file
++  containing the data uri—`codeUrl`. This property will be identical to the
++  `url` property or `codeUrl`, whichever is appropriate. This way you can
++  conveniently resolve the sources without having to think about where the
++  source map came from.
++- `sourceMappingURL`: The url of the sourceMappingURL comment in `code`.
++
++If `code` contains no sourceMappingURL, the result is `null`.
++
++### `sourceMapResolve.resolveSources(map, mapUrl, read, [options], callback)` ###
++
++- `map` is a source map, as an object (not a string).
++- `mapUrl` is the url to the file containing `map`. Relative sources in the
++  source map, if any, are resolved against `mapUrl`.
++- `read(url, callback)` is a function that reads `url` and responds using
++  `callback(error, content)`. In Node.js you might want to use `fs.readFile`,
++  while in the browser you might want to use an asynchronus `XMLHttpRequest`.
++- `options` is an optional object with any of the following properties:
++  - `ignoreSourceRoot`: The `sourceRoot` property of source maps might only be
++    relevant when resolving sources in the browser. This lets you bypass it
++    when using the module outside of a browser, if needed. Defaults to `false`.
++- `callback(error, result)` is a function that is invoked with either an error
++  or `null` and the result.
++
++The result is an object with the following properties:
++
++- `sourcesResolved`: The same as `map.sources`, except all the sources are
++  fully resolved.
++- `sourcesContent`: An array with the contents of all sources in `map.sources`,
++  in the same order as `map.sources`.
++
++### `sourceMapResolve.resolve(code, codeUrl, read, [options], callback)` ###
++
++The arguments are identical to `sourceMapResolve.resolveSourceMap`, except that
++you may also provide the same `options` as in
++`sourceMapResolve.resolveSources`.
++
++This is simply a convienience method that first resolves the source map and
++then its sources. You could also do this by first calling
++`sourceMapResolve.resolveSourceMap` and then `sourceMapResolve.resolveSources`.
++
++The result is identical to `sourceMapResolve.resolveSourceMap`, with the
++properties from `sourceMapResolve.resolveSources` merged into it.
++
++### `sourceMapResolve.*Sync()` ###
++
++There are also sync versions of the three previous functions. They are identical
++to the async versions, except:
++
++- They expect a sync reading function. In Node.js you might want to use
++  `fs.readFileSync`, while in the browser you might want to use a synchronus
++  `XMLHttpRequest`.
++- They throw errors and return the result instead of using a callback.
++
++`sourceMapResolve.resolveSourcesSync` also accepts `null` as the `read`
++parameter. The result is the same as when passing a function as the `read
++parameter`, except that the `sourcesContent` property of the result will be an
++empty array. In other words, the sources aren’t read. You only get the
++`sourcesResolved` property. (This only supported in the synchronus version, since
++there is no point doing it asynchronusly.)
++
++
++Note
++====
++
++This module resolves the source map for a given generated file by looking for a
++sourceMappingURL comment. The spec defines yet a way to provide the URL to the
++source map: By sending the `SourceMap: <url>` header along with the generated
++file. Since this module doesn’t retrive the generated code for you (instead
++_you_ give the generated code to the module), it’s up to you to look for such a
++header when you retrieve the file (should the need arise).
++
++
++Development
++===========
++
++Tests
++-----
++
++First off, run `npm install` to install testing modules and browser polyfills.
++
++`npm test` lints the code and runs the test suite in Node.js.
++
++To run the tests in a browser, run `testling` (`npm install -g testling`) or
++`testling -u`.
++
++x-package.json5
++---------------
++
++package.json, component.json and bower.json are all generated from
++x-package.json5 by using [`xpkg`]. Only edit x-package.json5, and remember to
++run `xpkg` before commiting!
++
++[`xpkg`]: https://github.com/kof/node-xpkg
++
++Generating the browser version
++------------------------------
++
++source-map-resolve.js is generated from source-map-resolve-node.js and
++source-map-resolve-template.js. Only edit the two latter files, _not_
++source-map-resolve.js! To generate it, run `npm run build`.
++
++
++License
++=======
++
++[The X11 (“MIT”) License](LICENSE).
+--- /dev/null
++++ node-css-2.1.0/node_modules/source-map-resolve/source-map-resolve.js
+@@ -0,0 +1,223 @@
++// Copyright 2014 Simon Lydell
++// X11 (“MIT”) Licensed. (See LICENSE.)
++
++// Note: source-map-resolve.js is generated from source-map-resolve-node.js and
++// source-map-resolve-template.js. Only edit the two latter files, _not_
++// source-map-resolve.js!
++
++void (function(root, factory) {
++  if (typeof define === "function" && define.amd) {
++    define(["source-map-url", "resolve-url"], factory)
++  } else if (typeof exports === "object") {
++    var sourceMappingURL = require("source-map-url")
++    var resolveUrl = require("resolve-url")
++    module.exports = factory(sourceMappingURL, resolveUrl)
++  } else {
++    root.sourceMapResolve = factory(root.sourceMappingURL, root.resolveUrl)
++  }
++}(this, function(sourceMappingURL, resolveUrl) {
++
++  function callbackAsync(callback, error, result) {
++    setImmediate(function() { callback(error, result) })
++  }
++
++  function parseMapToJSON(string) {
++    return JSON.parse(string.replace(/^\)\]\}'/, ""))
++  }
++
++
++
++  function resolveSourceMap(code, codeUrl, read, callback) {
++    var mapData
++    try {
++      mapData = resolveSourceMapHelper(code, codeUrl)
++    } catch (error) {
++      return callbackAsync(callback, error)
++    }
++    if (!mapData || mapData.map) {
++      return callbackAsync(callback, null, mapData)
++    }
++    read(mapData.url, function(error, result) {
++      if (error) {
++        return callback(error)
++      }
++      try {
++        mapData.map = parseMapToJSON(String(result))
++      } catch (error) {
++        return callback(error)
++      }
++      callback(null, mapData)
++    })
++  }
++
++  function resolveSourceMapSync(code, codeUrl, read) {
++    var mapData = resolveSourceMapHelper(code, codeUrl)
++    if (!mapData || mapData.map) {
++      return mapData
++    }
++    mapData.map = parseMapToJSON(String(read(mapData.url)))
++    return mapData
++  }
++
++  var dataUriRegex = /^data:([^,;]*)(;[^,;]*)*(?:,(.*))?$/
++  var jsonMimeTypeRegex = /^(?:application|text)\/json$/
++
++  function resolveSourceMapHelper(code, codeUrl) {
++    var url = sourceMappingURL.getFrom(code)
++    if (!url) {
++      return null
++    }
++
++    var dataUri = url.match(dataUriRegex)
++    if (dataUri) {
++      var mimeType = dataUri[1]
++      var lastParameter = dataUri[2]
++      var encoded = dataUri[3]
++      if (!jsonMimeTypeRegex.test(mimeType)) {
++        throw new Error("Unuseful data uri mime type: " + (mimeType || "text/plain"))
++      }
++      return {
++        sourceMappingURL: url,
++        url: null,
++        sourcesRelativeTo: codeUrl,
++        map: parseMapToJSON(lastParameter === ";base64" ? atob(encoded) : decodeURIComponent(encoded))
++      }
++    }
++
++    var mapUrl = resolveUrl(codeUrl, url)
++    return {
++      sourceMappingURL: url,
++      url: mapUrl,
++      sourcesRelativeTo: mapUrl,
++      map: null
++    }
++  }
++
++
++
++  function resolveSources(map, mapUrl, read, options, callback) {
++    if (typeof options === "function") {
++      callback = options
++      options = {}
++    }
++    var pending = map.sources.length
++    var errored = false
++    var result = {
++      sourcesResolved: [],
++      sourcesContent:  []
++    }
++
++    var done = function(error) {
++      if (errored) {
++        return
++      }
++      if (error) {
++        errored = true
++        return callback(error)
++      }
++      pending--
++      if (pending === 0) {
++        callback(null, result)
++      }
++    }
++
++    resolveSourcesHelper(map, mapUrl, options, function(fullUrl, sourceContent, index) {
++      result.sourcesResolved[index] = fullUrl
++      if (typeof sourceContent === "string") {
++        result.sourcesContent[index] = sourceContent
++        callbackAsync(done, null)
++      } else {
++        read(fullUrl, function(error, source) {
++          result.sourcesContent[index] = String(source)
++          done(error)
++        })
++      }
++    })
++  }
++
++  function resolveSourcesSync(map, mapUrl, read, options) {
++    var result = {
++      sourcesResolved: [],
++      sourcesContent:  []
++    }
++    resolveSourcesHelper(map, mapUrl, options, function(fullUrl, sourceContent, index) {
++      result.sourcesResolved[index] = fullUrl
++      if (read !== null) {
++        if (typeof sourceContent === "string") {
++          result.sourcesContent[index] = sourceContent
++        } else {
++          result.sourcesContent[index] = String(read(fullUrl))
++        }
++      }
++    })
++    return result
++  }
++
++  var endingSlash = /\/?$/
++
++  function resolveSourcesHelper(map, mapUrl, options, fn) {
++    options = options || {}
++    var fullUrl
++    var sourceContent
++    for (var index = 0, len = map.sources.length; index < len; index++) {
++      if (map.sourceRoot && !options.ignoreSourceRoot) {
++        // Make sure that the sourceRoot ends with a slash, so that `/scripts/subdir` becomes
++        // `/scripts/subdir/<source>`, not `/scripts/<source>`. Pointing to a file as source root
++        // does not make sense.
++        fullUrl = resolveUrl(mapUrl, map.sourceRoot.replace(endingSlash, "/"), map.sources[index])
++      } else {
++        fullUrl = resolveUrl(mapUrl, map.sources[index])
++      }
++      sourceContent = (map.sourcesContent || [])[index]
++      fn(fullUrl, sourceContent, index)
++    }
++  }
++
++
++
++  function resolve(code, codeUrl, read, options, callback) {
++    if (typeof options === "function") {
++      callback = options
++      options = {}
++    }
++    resolveSourceMap(code, codeUrl, read, function(error, mapData) {
++      if (error) {
++        return callback(error)
++      }
++      if (!mapData) {
++        return callback(null, null)
++      }
++      resolveSources(mapData.map, mapData.sourcesRelativeTo, read, options, function(error, result) {
++        if (error) {
++          return callback(error)
++        }
++        mapData.sourcesResolved = result.sourcesResolved
++        mapData.sourcesContent  = result.sourcesContent
++        callback(null, mapData)
++      })
++    })
++  }
++
++  function resolveSync(code, codeUrl, read, options) {
++    var mapData = resolveSourceMapSync(code, codeUrl, read)
++    if (!mapData) {
++      return null
++    }
++    var result = resolveSourcesSync(mapData.map, mapData.sourcesRelativeTo, read, options)
++    mapData.sourcesResolved = result.sourcesResolved
++    mapData.sourcesContent  = result.sourcesContent
++    return mapData
++  }
++
++
++
++  return {
++    resolveSourceMap:     resolveSourceMap,
++    resolveSourceMapSync: resolveSourceMapSync,
++    resolveSources:       resolveSources,
++    resolveSourcesSync:   resolveSourcesSync,
++    resolve:              resolve,
++    resolveSync:          resolveSync
++  }
++
++}));
+--- /dev/null
++++ node-css-2.1.0/node_modules/source-map-resolve/source-map-resolve.js.template
+@@ -0,0 +1,22 @@
++// Copyright 2014 Simon Lydell
++// X11 (“MIT”) Licensed. (See LICENSE.)
++
++// Note: source-map-resolve.js is generated from source-map-resolve-node.js and
++// source-map-resolve-template.js. Only edit the two latter files, _not_
++// source-map-resolve.js!
++
++void (function(root, factory) {
++  if (typeof define === "function" && define.amd) {
++    define(["source-map-url", "resolve-url"], factory)
++  } else if (typeof exports === "object") {
++    var sourceMappingURL = require("source-map-url")
++    var resolveUrl = require("resolve-url")
++    module.exports = factory(sourceMappingURL, resolveUrl)
++  } else {
++    root.sourceMapResolve = factory(root.sourceMappingURL, root.resolveUrl)
++  }
++}(this, function(sourceMappingURL, resolveUrl) {
++
++  {{source-map-resolve-node.js}}
++
++}));
+--- /dev/null
++++ node-css-2.1.0/node_modules/source-map-resolve/test/common.js
+@@ -0,0 +1,27 @@
++// Copyright 2014 Simon Lydell
++// X11 (“MIT”) Licensed. (See LICENSE.)
++
++function u(url) {
++  return "code\n/*# sourceMappingURL=" + url + " */"
++}
++
++function read(x) {
++  return function() {
++    return x
++  }
++}
++
++function Throws(x) {
++  throw new Error(x)
++}
++
++function identity(x) {
++  return x
++}
++
++module.exports = {
++  u:        u,
++  read:     read,
++  Throws:   Throws,
++  identity: identity
++}
+--- /dev/null
++++ node-css-2.1.0/node_modules/source-map-resolve/test/source-map-resolve.js
+@@ -0,0 +1,819 @@
++// Copyright 2014 Simon Lydell
++// X11 (“MIT”) Licensed. (See LICENSE.)
++
++var test         = require("tape")
++var asyncify     = require("simple-asyncify")
++var common       = require("./common")
++var u            = common.u
++var read         = common.read
++var Throws       = common.Throws
++var identity     = common.identity
++
++var sourceMapResolve = require("../")
++
++// Polyfills.
++require("setimmediate")
++if (typeof window !== "undefined" && !window.atob) {
++  window.atob = require("Base64").atob
++}
++
++"use strict"
++
++var map = {
++  simple: {
++    mappings: "AAAA",
++    sources:  ["foo.js"],
++    names:    []
++  },
++  sourceRoot: {
++    mappings:   "AAAA",
++    sourceRoot: "/static/js/app/",
++    sources:    ["foo.js", "lib/bar.js", "../vendor/dom.js", "/version.js", "//foo.org/baz.js"],
++    names:      []
++  },
++  sourceRootNoSlash: {
++    mappings:   "AAAA",
++    sourceRoot: "/static/js/app",
++    sources:    ["foo.js", "lib/bar.js", "../vendor/dom.js", "/version.js", "//foo.org/baz.js"],
++    names:      []
++  },
++  sourcesContent: {
++    mappings:       "AAAA",
++    sourceRoot:     "/static/js/app/",
++    sources:        ["foo.js", "lib/bar.js", "../vendor/dom.js", "/version.js", "//foo.org/baz.js"],
++    sourcesContent: ["foo.js", "lib/bar.js", "../vendor/dom.js", "/version.js", "//foo.org/baz.js"],
++    names:          []
++  },
++  mixed: {
++    mappings:       "AAAA",
++    sources:        ["foo.js", "lib/bar.js", "../vendor/dom.js", "/version.js", "//foo.org/baz.js"],
++    sourcesContent: ["foo.js", null        , null              , "/version.js", "//foo.org/baz.js"],
++    names:          []
++  }
++}
++map.simpleString = JSON.stringify(map.simple)
++map.XSSIsafe = ")]}'" + map.simpleString
++
++var code = {
++  fileRelative:       u("foo.js.map"),
++  domainRelative:     u("/foo.js.map"),
++  schemeRelative:     u("//foo.org/foo.js.map"),
++  absolute:           u("https://foo.org/foo.js.map"),
++  dataUri:            u("data:application/json," +
++                        "%7B%22mappings%22%3A%22AAAA%22%2C%22sources%22%3A%5B%22" +
++                        "foo.js%22%5D%2C%22names%22%3A%5B%5D%7D"),
++  base64:             u("data:application/json;base64," +
++                        "eyJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VzIjpbImZvby5qcyJdLCJuYW1lcyI6W119"),
++  dataUriText:        u("data:text/json," +
++                        "%7B%22mappings%22%3A%22AAAA%22%2C%22sources%22%3A%5B%22" +
++                        "foo.js%22%5D%2C%22names%22%3A%5B%5D%7D"),
++  dataUriParameter:   u("data:application/json;charset=UTF-8;foo=bar," +
++                        "%7B%22mappings%22%3A%22AAAA%22%2C%22sources%22%3A%5B%22" +
++                        "foo.js%22%5D%2C%22names%22%3A%5B%5D%7D"),
++  dataUriNoMime:      u("data:,foo"),
++  dataUriInvalidMime: u("data:text/html,foo"),
++  dataUriInvalidJSON: u("data:application/json,foo"),
++  dataUriXSSIsafe:    u("data:application/json," + ")%5D%7D%27" +
++                        "%7B%22mappings%22%3A%22AAAA%22%2C%22sources%22%3A%5B%22" +
++                        "foo.js%22%5D%2C%22names%22%3A%5B%5D%7D"),
++  dataUriEmpty:       u("data:"),
++  noMap:              ""
++}
++
++
++function testResolveSourceMap(method, sync) {
++  return function(t) {
++    var wrap = (sync ? identity : asyncify)
++
++    var codeUrl = "http://example.com/a/b/c/foo.js"
++
++    t.plan(1 + 18*3)
++
++    t.equal(typeof method, "function", "is a function")
++
++    if (sync) {
++      method = asyncify(method)
++    }
++
++    var next = false
++    function isAsync() { t.ok(next, "is async") }
++
++    method(code.fileRelative, codeUrl, wrap(read(map.simpleString)), function(error, result) {
++      t.error(error)
++      t.deepEqual(result, {
++        sourceMappingURL:  "foo.js.map",
++        url:               "http://example.com/a/b/c/foo.js.map",
++        sourcesRelativeTo: "http://example.com/a/b/c/foo.js.map",
++        map:               map.simple
++      }, "fileRelative")
++      isAsync()
++    })
++
++    method(code.domainRelative, codeUrl, wrap(read(map.simpleString)), function(error, result) {
++      t.error(error)
++      t.deepEqual(result, {
++        sourceMappingURL:  "/foo.js.map",
++        url:               "http://example.com/foo.js.map",
++        sourcesRelativeTo: "http://example.com/foo.js.map",
++        map:               map.simple
++      }, "domainRelative")
++      isAsync()
++    })
++
++    method(code.schemeRelative, codeUrl, wrap(read(map.simpleString)), function(error, result) {
++      t.error(error)
++      t.deepEqual(result, {
++        sourceMappingURL:  "//foo.org/foo.js.map",
++        url:               "http://foo.org/foo.js.map",
++        sourcesRelativeTo: "http://foo.org/foo.js.map",
++        map:               map.simple
++      }, "schemeRelative")
++      isAsync()
++    })
++
++    method(code.absolute, codeUrl, wrap(read(map.simpleString)), function(error, result) {
++      t.error(error)
++      t.deepEqual(result, {
++        sourceMappingURL:  "https://foo.org/foo.js.map",
++        url:               "https://foo.org/foo.js.map",
++        sourcesRelativeTo: "https://foo.org/foo.js.map",
++        map:               map.simple
++      }, "absolute")
++      isAsync()
++    })
++
++    method(code.dataUri, codeUrl, wrap(Throws), function(error, result) {
++      t.error(error)
++      t.deepEqual(result, {
++        sourceMappingURL:  "data:application/json," +
++                           "%7B%22mappings%22%3A%22AAAA%22%2C%22sources%22%3A%5B%22" +
++                           "foo.js%22%5D%2C%22names%22%3A%5B%5D%7D",
++        url:               null,
++        sourcesRelativeTo: codeUrl,
++        map:               map.simple
++      }, "dataUri")
++      isAsync()
++    })
++
++    method(code.base64, codeUrl, wrap(Throws), function(error, result) {
++      t.error(error)
++      t.deepEqual(result, {
++        sourceMappingURL:  "data:application/json;base64," +
++                           "eyJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VzIjpbImZvby5qcyJdLCJuYW1lcyI6W119",
++        url:               null,
++        sourcesRelativeTo: codeUrl,
++        map:               map.simple
++      }, "base64")
++      isAsync()
++    })
++
++    method(code.dataUriText, codeUrl, wrap(Throws), function(error, result) {
++      t.error(error)
++      t.deepEqual(result, {
++        sourceMappingURL:  "data:text/json," +
++                           "%7B%22mappings%22%3A%22AAAA%22%2C%22sources%22%3A%5B%22" +
++                           "foo.js%22%5D%2C%22names%22%3A%5B%5D%7D",
++        url:               null,
++        sourcesRelativeTo: codeUrl,
++        map:               map.simple
++      }, "dataUriText")
++      isAsync()
++    })
++
++    method(code.dataUriParameter, codeUrl, wrap(Throws), function(error, result) {
++      t.error(error)
++      t.deepEqual(result, {
++        sourceMappingURL:  "data:application/json;charset=UTF-8;foo=bar," +
++                           "%7B%22mappings%22%3A%22AAAA%22%2C%22sources%22%3A%5B%22" +
++                           "foo.js%22%5D%2C%22names%22%3A%5B%5D%7D",
++        url:               null,
++        sourcesRelativeTo: codeUrl,
++        map:               map.simple
++      }, "dataUriParameter")
++      isAsync()
++    })
++
++    method(code.dataUriNoMime, codeUrl, wrap(Throws), function(error, result) {
++      t.ok(error.message.match(/mime type.+text\/plain/), "dataUriNoMime")
++      t.notOk(result)
++      isAsync()
++    })
++
++    method(code.dataUriInvalidMime, codeUrl, wrap(Throws), function(error, result) {
++      t.ok(error.message.match(/mime type.+text\/html/), "dataUriInvalidMime")
++      t.notOk(result)
++      isAsync()
++    })
++
++    method(code.dataUriInvalidJSON, codeUrl, wrap(Throws), function(error, result) {
++      t.ok(error instanceof SyntaxError && error.message !== "data:application/json,foo",
++        "dataUriInvalidJSON")
++      t.notOk(result)
++      isAsync()
++    })
++
++    method(code.dataUriXSSIsafe, codeUrl, wrap(Throws), function(error, result) {
++      t.error(error)
++      t.deepEqual(result, {
++        sourceMappingURL:  "data:application/json," + ")%5D%7D%27" +
++                           "%7B%22mappings%22%3A%22AAAA%22%2C%22sources%22%3A%5B%22" +
++                           "foo.js%22%5D%2C%22names%22%3A%5B%5D%7D",
++        url:               null,
++        sourcesRelativeTo: codeUrl,
++        map:               map.simple
++      }, "dataUriXSSIsafe")
++      isAsync()
++    })
++
++    method(code.dataUriEmpty, codeUrl, wrap(Throws), function(error, result) {
++      t.ok(error.message.match(/mime type.+text\/plain/), "dataUriEmpty")
++      t.notOk(result)
++      isAsync()
++    })
++
++    method(code.noMap, codeUrl, wrap(Throws), function(error, result) {
++      t.error(error)
++      t.equal(result, null, "noMap")
++      isAsync()
++    })
++
++    method(code.absolute, codeUrl, wrap(read([map.simpleString])), function(error, result) {
++      t.error(error)
++      t.deepEqual(result, {
++        sourceMappingURL:  "https://foo.org/foo.js.map",
++        url:               "https://foo.org/foo.js.map",
++        sourcesRelativeTo: "https://foo.org/foo.js.map",
++        map:               map.simple
++      }, "read non-string")
++      isAsync()
++    })
++
++    method(code.absolute, codeUrl, wrap(read("invalid JSON")), function(error, result) {
++      t.ok(error instanceof SyntaxError, "read invalid JSON")
++      t.notOk(result)
++      isAsync()
++    })
++
++    method(code.absolute, codeUrl, wrap(read(map.XSSIsafe)), function(error, result) {
++      t.error(error)
++      t.deepEqual(result, {
++        sourceMappingURL:  "https://foo.org/foo.js.map",
++        url:               "https://foo.org/foo.js.map",
++        sourcesRelativeTo: "https://foo.org/foo.js.map",
++        map:               map.simple
++      }, "XSSIsafe map")
++      isAsync()
++    })
++
++    method(code.absolute, codeUrl, wrap(Throws), function(error, result) {
++      t.equal(error.message, "https://foo.org/foo.js.map", "read throws")
++      t.notOk(result)
++      isAsync()
++    })
++
++    next = true
++  }
++}
++
++test(".resolveSourceMap",     testResolveSourceMap(sourceMapResolve.resolveSourceMap,    false))
++
++test(".resolveSourceMapSync", testResolveSourceMap(sourceMapResolve.resolveSourceMapSync, true))
++
++
++function testResolveSources(method, sync) {
++  return function(t) {
++    var wrap = (sync ? identity : asyncify)
++
++    var mapUrl = "http://example.com/a/b/c/foo.js.map"
++
++    t.plan(1 + 7*3 + 4)
++
++    t.equal(typeof method, "function", "is a function")
++
++    if (sync) {
++      method = asyncify(method)
++    }
++
++    var next = false
++    function isAsync() { t.ok(next, "is async") }
++
++    var options
++
++    method(map.simple, mapUrl, wrap(identity), function(error, result) {
++      t.error(error)
++      t.deepEqual(result, {
++        sourcesResolved: ["http://example.com/a/b/c/foo.js"],
++        sourcesContent:  ["http://example.com/a/b/c/foo.js"]
++      }, "simple")
++      isAsync()
++    })
++
++    method(map.sourceRoot, mapUrl, wrap(identity), function(error, result) {
++      t.error(error)
++      t.deepEqual(result, {
++        sourcesResolved: [
++          "http://example.com/static/js/app/foo.js",
++          "http://example.com/static/js/app/lib/bar.js",
++          "http://example.com/static/js/vendor/dom.js",
++          "http://example.com/version.js",
++          "http://foo.org/baz.js"
++        ],
++        sourcesContent: [
++          "http://example.com/static/js/app/foo.js",
++          "http://example.com/static/js/app/lib/bar.js",
++          "http://example.com/static/js/vendor/dom.js",
++          "http://example.com/version.js",
++          "http://foo.org/baz.js"
++        ]
++      }, "sourceRoot")
++      isAsync()
++    })
++
++    options = {ignoreSourceRoot: true}
++    method(map.sourceRoot, mapUrl, wrap(identity), options, function(error, result) {
++      t.error(error)
++      t.deepEqual(result, {
++        sourcesResolved: [
++          "http://example.com/a/b/c/foo.js",
++          "http://example.com/a/b/c/lib/bar.js",
++          "http://example.com/a/b/vendor/dom.js",
++          "http://example.com/version.js",
++          "http://foo.org/baz.js"
++        ],
++        sourcesContent: [
++          "http://example.com/a/b/c/foo.js",
++          "http://example.com/a/b/c/lib/bar.js",
++          "http://example.com/a/b/vendor/dom.js",
++          "http://example.com/version.js",
++          "http://foo.org/baz.js"
++        ]
++      }, "ignore sourceRoot")
++      isAsync()
++    })
++
++    method(map.sourceRootNoSlash, mapUrl, wrap(identity), function(error, result) {
++      t.error(error)
++      t.deepEqual(result, {
++        sourcesResolved: [
++          "http://example.com/static/js/app/foo.js",
++          "http://example.com/static/js/app/lib/bar.js",
++          "http://example.com/static/js/vendor/dom.js",
++          "http://example.com/version.js",
++          "http://foo.org/baz.js"
++        ],
++        sourcesContent: [
++          "http://example.com/static/js/app/foo.js",
++          "http://example.com/static/js/app/lib/bar.js",
++          "http://example.com/static/js/vendor/dom.js",
++          "http://example.com/version.js",
++          "http://foo.org/baz.js"
++        ]
++      }, "sourceRootNoSlash")
++      isAsync()
++    })
++
++    method(map.sourcesContent, mapUrl, wrap(Throws), function(error, result) {
++      t.error(error)
++      t.deepEqual(result, {
++        sourcesResolved: [
++          "http://example.com/static/js/app/foo.js",
++          "http://example.com/static/js/app/lib/bar.js",
++          "http://example.com/static/js/vendor/dom.js",
++          "http://example.com/version.js",
++          "http://foo.org/baz.js"
++        ],
++        sourcesContent: [
++          "foo.js",
++          "lib/bar.js",
++          "../vendor/dom.js",
++          "/version.js",
++          "//foo.org/baz.js"
++        ]
++      }, "sourcesContent")
++      isAsync()
++    })
++
++    method(map.mixed, mapUrl, wrap(identity), function(error, result) {
++      t.error(error)
++      t.deepEqual(result, {
++        sourcesResolved: [
++          "http://example.com/a/b/c/foo.js",
++          "http://example.com/a/b/c/lib/bar.js",
++          "http://example.com/a/b/vendor/dom.js",
++          "http://example.com/version.js",
++          "http://foo.org/baz.js"
++        ],
++        sourcesContent: [
++          "foo.js",
++          "http://example.com/a/b/c/lib/bar.js",
++          "http://example.com/a/b/vendor/dom.js",
++          "/version.js",
++          "//foo.org/baz.js"
++        ]
++      }, "mixed")
++      isAsync()
++    })
++
++    method(map.simple, mapUrl, wrap(read(["non", "string"])), function(error, result) {
++      t.error(error)
++      t.deepEqual(result, {
++        sourcesResolved: ["http://example.com/a/b/c/foo.js"],
++        sourcesContent:  ["non,string"]
++      }, "read non-string")
++      isAsync()
++    })
++
++    var calledBack = false
++    method(map.mixed, mapUrl, wrap(Throws), function(error, result) {
++      t.equal(calledBack, false)
++      calledBack = true
++      t.equal(error.message, "http://example.com/a/b/c/lib/bar.js", "read throws")
++      t.notOk(result)
++      isAsync()
++    })
++
++    next = true
++  }
++}
++
++test(".resolveSources",     testResolveSources(sourceMapResolve.resolveSources,    false))
++
++test(".resolveSourcesSync", testResolveSources(sourceMapResolve.resolveSourcesSync, true))
++
++test(".resolveSourcesSync no read", function(t) {
++  t.plan(1)
++
++  var mapUrl = "http://example.com/a/b/c/foo.js.map"
++  var result = sourceMapResolve.resolveSourcesSync(map.mixed, mapUrl, null)
++
++  t.deepEqual(result, {
++    sourcesResolved: [
++      "http://example.com/a/b/c/foo.js",
++      "http://example.com/a/b/c/lib/bar.js",
++      "http://example.com/a/b/vendor/dom.js",
++      "http://example.com/version.js",
++      "http://foo.org/baz.js"
++    ],
++    sourcesContent: []
++  })
++})
++
++
++function testResolve(method, sync) {
++  return function(t) {
++    var wrap = (sync ? identity : asyncify)
++    var wrapMap = function(mapFn, fn) {
++      return wrap(function(url) {
++        if (/\.map$/.test(url)) {
++          return mapFn(url)
++        }
++        return fn(url)
++      })
++    }
++
++    var codeUrl = "http://example.com/a/b/c/foo.js"
++
++    t.plan(1 + 18*3 + 7*4 + 4)
++
++    t.equal(typeof method, "function", "is a function")
++
++    if (sync) {
++      method = asyncify(method)
++    }
++
++    var next = false
++    function isAsync() { t.ok(next, "is async") }
++
++    var readSimple = wrapMap(read(map.simpleString), identity)
++
++    method(code.fileRelative, codeUrl, readSimple, function(error, result) {
++      t.error(error)
++      t.deepEqual(result, {
++        sourceMappingURL:  "foo.js.map",
++        url:               "http://example.com/a/b/c/foo.js.map",
++        sourcesRelativeTo: "http://example.com/a/b/c/foo.js.map",
++        map:               map.simple,
++        sourcesResolved:   ["http://example.com/a/b/c/foo.js"],
++        sourcesContent:    ["http://example.com/a/b/c/foo.js"]
++      }, "fileRelative")
++      isAsync()
++    })
++
++    method(code.domainRelative, codeUrl, readSimple, function(error, result) {
++      t.error(error)
++      t.deepEqual(result, {
++        sourceMappingURL:  "/foo.js.map",
++        url:               "http://example.com/foo.js.map",
++        sourcesRelativeTo: "http://example.com/foo.js.map",
++        map:               map.simple,
++        sourcesResolved:   ["http://example.com/foo.js"],
++        sourcesContent:    ["http://example.com/foo.js"]
++      }, "domainRelative")
++      isAsync()
++    })
++
++    method(code.schemeRelative, codeUrl, readSimple, function(error, result) {
++      t.error(error)
++      t.deepEqual(result, {
++        sourceMappingURL:  "//foo.org/foo.js.map",
++        url:               "http://foo.org/foo.js.map",
++        sourcesRelativeTo: "http://foo.org/foo.js.map",
++        map:               map.simple,
++        sourcesResolved:   ["http://foo.org/foo.js"],
++        sourcesContent:    ["http://foo.org/foo.js"]
++      }, "schemeRelative")
++      isAsync()
++    })
++
++    method(code.absolute, codeUrl, readSimple, function(error, result) {
++      t.error(error)
++      t.deepEqual(result, {
++        sourceMappingURL:  "https://foo.org/foo.js.map",
++        url:               "https://foo.org/foo.js.map",
++        sourcesRelativeTo: "https://foo.org/foo.js.map",
++        map:               map.simple,
++        sourcesResolved:   ["https://foo.org/foo.js"],
++        sourcesContent:    ["https://foo.org/foo.js"]
++      }, "absolute")
++      isAsync()
++    })
++
++    method(code.dataUri, codeUrl, wrapMap(Throws, identity), function(error, result) {
++      t.error(error)
++      t.deepEqual(result, {
++        sourceMappingURL:  "data:application/json," +
++                           "%7B%22mappings%22%3A%22AAAA%22%2C%22sources%22%3A%5B%22" +
++                           "foo.js%22%5D%2C%22names%22%3A%5B%5D%7D",
++        url:               null,
++        sourcesRelativeTo: codeUrl,
++        map:               map.simple,
++        sourcesResolved:   ["http://example.com/a/b/c/foo.js"],
++        sourcesContent:    ["http://example.com/a/b/c/foo.js"]
++      }, "dataUri")
++      isAsync()
++    })
++
++    method(code.base64, codeUrl, wrapMap(Throws, identity), function(error, result) {
++      t.error(error)
++      t.deepEqual(result, {
++        sourceMappingURL:  "data:application/json;base64," +
++                           "eyJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VzIjpbImZvby5qcyJdLCJuYW1lcyI6W119",
++        url:               null,
++        sourcesRelativeTo: codeUrl,
++        map:               map.simple,
++        sourcesResolved:   ["http://example.com/a/b/c/foo.js"],
++        sourcesContent:    ["http://example.com/a/b/c/foo.js"]
++      }, "base64")
++      isAsync()
++    })
++
++    method(code.dataUriText, codeUrl, wrapMap(Throws, identity), function(error, result) {
++      t.error(error)
++      t.deepEqual(result, {
++        sourceMappingURL:  "data:text/json," +
++                           "%7B%22mappings%22%3A%22AAAA%22%2C%22sources%22%3A%5B%22" +
++                           "foo.js%22%5D%2C%22names%22%3A%5B%5D%7D",
++        url:               null,
++        sourcesRelativeTo: codeUrl,
++        map:               map.simple,
++        sourcesResolved:   ["http://example.com/a/b/c/foo.js"],
++        sourcesContent:    ["http://example.com/a/b/c/foo.js"]
++      }, "dataUriText")
++      isAsync()
++    })
++
++    method(code.dataUriParameter, codeUrl, wrapMap(Throws, identity), function(error, result) {
++      t.error(error)
++      t.deepEqual(result, {
++        sourceMappingURL:  "data:application/json;charset=UTF-8;foo=bar," +
++                           "%7B%22mappings%22%3A%22AAAA%22%2C%22sources%22%3A%5B%22" +
++                           "foo.js%22%5D%2C%22names%22%3A%5B%5D%7D",
++        url:               null,
++        sourcesRelativeTo: codeUrl,
++        map:               map.simple,
++        sourcesResolved:   ["http://example.com/a/b/c/foo.js"],
++        sourcesContent:    ["http://example.com/a/b/c/foo.js"]
++      }, "dataUriParameter")
++      isAsync()
++    })
++
++    method(code.dataUriNoMime, codeUrl, wrap(Throws), function(error, result) {
++      t.ok(error.message.match(/mime type.+text\/plain/), "dataUriNoMime")
++      t.notOk(result)
++      isAsync()
++    })
++
++    method(code.dataUriInvalidMime, codeUrl, wrap(Throws), function(error, result) {
++      t.ok(error.message.match(/mime type.+text\/html/), "dataUriInvalidMime")
++      t.notOk(result)
++      isAsync()
++    })
++
++    method(code.dataUriInvalidJSON, codeUrl, wrap(Throws), function(error, result) {
++      t.ok(error instanceof SyntaxError && error.message !== "data:application/json,foo",
++        "dataUriInvalidJSON")
++      t.notOk(result)
++      isAsync()
++    })
++
++    method(code.dataUriXSSIsafe, codeUrl, wrapMap(Throws, identity), function(error, result) {
++      t.error(error)
++      t.deepEqual(result, {
++        sourceMappingURL:  "data:application/json," + ")%5D%7D%27" +
++                           "%7B%22mappings%22%3A%22AAAA%22%2C%22sources%22%3A%5B%22" +
++                           "foo.js%22%5D%2C%22names%22%3A%5B%5D%7D",
++        url:               null,
++        sourcesRelativeTo: codeUrl,
++        map:               map.simple,
++        sourcesResolved:   ["http://example.com/a/b/c/foo.js"],
++        sourcesContent:    ["http://example.com/a/b/c/foo.js"]
++      }, "dataUriXSSIsafe")
++      isAsync()
++    })
++
++    method(code.dataUriEmpty, codeUrl, wrap(Throws), function(error, result) {
++      t.ok(error.message.match(/mime type.+text\/plain/), "dataUriEmpty")
++      t.notOk(result)
++      isAsync()
++    })
++
++    method(code.noMap, codeUrl, wrap(Throws), function(error, result) {
++      t.error(error)
++      t.equal(result, null, "noMap")
++      isAsync()
++    })
++
++    method(code.absolute, codeUrl, wrap(read([map.simpleString])), function(error, result) {
++      t.error(error)
++      t.deepEqual(result, {
++        sourceMappingURL:  "https://foo.org/foo.js.map",
++        url:               "https://foo.org/foo.js.map",
++        sourcesRelativeTo: "https://foo.org/foo.js.map",
++        map:               map.simple,
++        sourcesResolved:   ["https://foo.org/foo.js"],
++        sourcesContent:    [map.simpleString]
++      }, "read non-string")
++      isAsync()
++    })
++
++    method(code.absolute, codeUrl, wrap(read("invalid JSON")), function(error, result) {
++      t.ok(error instanceof SyntaxError, "read invalid JSON")
++      t.notOk(result)
++      isAsync()
++    })
++
++    method(code.absolute, codeUrl, wrapMap(read(map.XSSIsafe), identity), function(error, result) {
++      t.error(error)
++      t.deepEqual(result, {
++        sourceMappingURL:  "https://foo.org/foo.js.map",
++        url:               "https://foo.org/foo.js.map",
++        sourcesRelativeTo: "https://foo.org/foo.js.map",
++        map:               map.simple,
++        sourcesResolved:   ["https://foo.org/foo.js"],
++        sourcesContent:    ["https://foo.org/foo.js"]
++      }, "XSSIsafe map")
++      isAsync()
++    })
++
++    method(code.absolute, codeUrl, wrap(Throws), function(error, result) {
++      t.equal(error.message, "https://foo.org/foo.js.map", "read throws")
++      t.notOk(result)
++      isAsync()
++    })
++
++    function readMap(what) {
++      return wrapMap(read(JSON.stringify(what)), identity)
++    }
++
++    var options
++
++    method(code.fileRelative, codeUrl, readMap(map.simple), function(error, result) {
++      t.error(error)
++      t.deepEqual(result.sourcesResolved, ["http://example.com/a/b/c/foo.js"], "simple")
++      t.deepEqual(result.sourcesContent,  ["http://example.com/a/b/c/foo.js"], "simple")
++      isAsync()
++    })
++
++    method(code.fileRelative, codeUrl, readMap(map.sourceRoot), function(error, result) {
++      t.error(error)
++      t.deepEqual(result.sourcesResolved, [
++        "http://example.com/static/js/app/foo.js",
++        "http://example.com/static/js/app/lib/bar.js",
++        "http://example.com/static/js/vendor/dom.js",
++        "http://example.com/version.js",
++        "http://foo.org/baz.js"
++      ], "sourceRoot")
++      t.deepEqual(result.sourcesContent, [
++        "http://example.com/static/js/app/foo.js",
++        "http://example.com/static/js/app/lib/bar.js",
++        "http://example.com/static/js/vendor/dom.js",
++        "http://example.com/version.js",
++        "http://foo.org/baz.js"
++      ], "sourceRoot")
++      isAsync()
++    })
++
++    options = {ignoreSourceRoot: true}
++    method(code.fileRelative, codeUrl, readMap(map.sourceRoot), options, function(error, result) {
++      t.error(error)
++      t.deepEqual(result.sourcesResolved, [
++        "http://example.com/a/b/c/foo.js",
++        "http://example.com/a/b/c/lib/bar.js",
++        "http://example.com/a/b/vendor/dom.js",
++        "http://example.com/version.js",
++        "http://foo.org/baz.js"
++      ], "sourceRoot")
++      t.deepEqual(result.sourcesContent, [
++        "http://example.com/a/b/c/foo.js",
++        "http://example.com/a/b/c/lib/bar.js",
++        "http://example.com/a/b/vendor/dom.js",
++        "http://example.com/version.js",
++        "http://foo.org/baz.js"
++      ], "ignore sourceRoot")
++      isAsync()
++    })
++
++    method(code.fileRelative, codeUrl, readMap(map.sourceRootNoSlash), function(error, result) {
++      t.error(error)
++      t.deepEqual(result.sourcesResolved, [
++        "http://example.com/static/js/app/foo.js",
++        "http://example.com/static/js/app/lib/bar.js",
++        "http://example.com/static/js/vendor/dom.js",
++        "http://example.com/version.js",
++        "http://foo.org/baz.js"
++      ], "sourceRootNoSlash")
++      t.deepEqual(result.sourcesContent, [
++        "http://example.com/static/js/app/foo.js",
++        "http://example.com/static/js/app/lib/bar.js",
++        "http://example.com/static/js/vendor/dom.js",
++        "http://example.com/version.js",
++        "http://foo.org/baz.js"
++      ], "sourceRootNoSlash")
++      isAsync()
++    })
++
++    method(code.fileRelative, codeUrl, readMap(map.sourcesContent), function(error, result) {
++      t.error(error)
++      t.deepEqual(result.sourcesResolved, [
++        "http://example.com/static/js/app/foo.js",
++        "http://example.com/static/js/app/lib/bar.js",
++        "http://example.com/static/js/vendor/dom.js",
++        "http://example.com/version.js",
++        "http://foo.org/baz.js"
++      ], "sourcesContent")
++      t.deepEqual(result.sourcesContent, [
++        "foo.js",
++        "lib/bar.js",
++        "../vendor/dom.js",
++        "/version.js",
++        "//foo.org/baz.js"
++      ], "sourcesContent")
++      isAsync()
++    })
++
++    method(code.fileRelative, codeUrl, readMap(map.mixed), function(error, result) {
++      t.error(error)
++      t.deepEqual(result.sourcesResolved, [
++        "http://example.com/a/b/c/foo.js",
++        "http://example.com/a/b/c/lib/bar.js",
++        "http://example.com/a/b/vendor/dom.js",
++        "http://example.com/version.js",
++        "http://foo.org/baz.js"
++      ], "mixed")
++      t.deepEqual(result.sourcesContent, [
++        "foo.js",
++        "http://example.com/a/b/c/lib/bar.js",
++        "http://example.com/a/b/vendor/dom.js",
++        "/version.js",
++        "//foo.org/baz.js"
++      ], "mixed")
++      isAsync()
++    })
++
++    method(code.fileRelative, codeUrl, wrap(read([map.simpleString])), function(error, result) {
++      t.error(error)
++      t.deepEqual(result.sourcesResolved, ["http://example.com/a/b/c/foo.js"], "read non-string")
++      t.deepEqual(result.sourcesContent,  [map.simpleString],                  "read non-string")
++      isAsync()
++    })
++
++    function ThrowsMap(what) {
++      return wrapMap(read(JSON.stringify(what)), Throws)
++    }
++
++    var calledBack = false
++    method(code.fileRelative, codeUrl, ThrowsMap(map.mixed), function(error, result) {
++      t.equal(calledBack, false)
++      calledBack = true
++      t.equal(error.message, "http://example.com/a/b/c/lib/bar.js", "read throws")
++      t.notOk(result)
++      isAsync()
++    })
++
++    next = true
++  }
++}
++
++test(".resolve",     testResolve(sourceMapResolve.resolve,    false))
++
++test(".resolveSync", testResolve(sourceMapResolve.resolveSync, true))
+--- /dev/null
++++ node-css-2.1.0/node_modules/source-map-resolve/test/windows.js
+@@ -0,0 +1,166 @@
++// Copyright 2014 Simon Lydell
++// X11 (“MIT”) Licensed. (See LICENSE.)
++
++var path         = require("path")
++var test         = require("tape")
++var asyncify     = require("simple-asyncify")
++var common       = require("./common")
++var u            = common.u
++var read         = common.read
++var identity     = common.identity
++
++var sourceMapResolve = require("../")
++
++path.sep = "\\"
++
++
++function testResolveSourceMap(method, sync) {
++  return function(t) {
++    var wrap = (sync ? identity : asyncify)
++
++    var codeUrl = "c:\\a\\b\\c\\foo.js"
++
++    t.plan(3 * 2)
++
++    if (sync) {
++      method = asyncify(method)
++    }
++
++    var map = {}
++    var readMap = wrap(read(JSON.stringify(map)))
++
++    method(u("foo.js.map"), codeUrl, readMap, function(error, result) {
++      t.error(error)
++      t.deepEqual(result, {
++        sourceMappingURL:  "foo.js.map",
++        url:               "/a/b/c/foo.js.map",
++        sourcesRelativeTo: "/a/b/c/foo.js.map",
++        map:               map
++      })
++    })
++
++    method(u("/foo.js.map"), codeUrl, readMap, function(error, result) {
++      t.error(error)
++      t.deepEqual(result, {
++        sourceMappingURL:  "/foo.js.map",
++        url:               "/foo.js.map",
++        sourcesRelativeTo: "/foo.js.map",
++        map:               map
++      })
++    })
++
++    method(u("../foo.js.map"), codeUrl, readMap, function(error, result) {
++      t.error(error)
++      t.deepEqual(result, {
++        sourceMappingURL:  "../foo.js.map",
++        url:               "/a/b/foo.js.map",
++        sourcesRelativeTo: "/a/b/foo.js.map",
++        map:               map
++      })
++    })
++
++  }
++}
++
++test(".resolveSourceMap",     testResolveSourceMap(sourceMapResolve.resolveSourceMap,    false))
++
++test(".resolveSourceMapSync", testResolveSourceMap(sourceMapResolve.resolveSourceMapSync, true))
++
++
++function testResolveSources(method, sync) {
++  return function(t) {
++    var wrap = (sync ? identity : asyncify)
++
++    var mapUrl = "c:\\a\\b\\c\\foo.js.map"
++
++    t.plan(1 * 3)
++
++    if (sync) {
++      method = asyncify(method)
++    }
++
++    var map = {
++      sources: ["foo.js", "/foo.js", "../foo.js"]
++    }
++
++    method(map, mapUrl, wrap(identity), function(error, result) {
++      t.error(error)
++      t.deepEqual(result.sourcesResolved, ["/a/b/c/foo.js", "/foo.js", "/a/b/foo.js"])
++      t.deepEqual(result.sourcesContent,  ["/a/b/c/foo.js", "/foo.js", "/a/b/foo.js"])
++    })
++
++  }
++}
++
++test(".resolveSources",     testResolveSources(sourceMapResolve.resolveSources,    false))
++
++test(".resolveSourcesSync", testResolveSources(sourceMapResolve.resolveSourcesSync, true))
++
++
++function testResolve(method, sync) {
++  return function(t) {
++    var wrap = (sync ? identity : asyncify)
++    var wrapMap = function(mapFn, fn) {
++      return wrap(function(url) {
++        if (/\.map$/.test(url)) {
++          return mapFn(url)
++        }
++        return fn(url)
++      })
++    }
++
++    var codeUrl = "c:\\a\\b\\c\\foo.js"
++
++    t.plan(3 * 2)
++
++    if (sync) {
++      method = asyncify(method)
++    }
++
++    var map = {
++      sources: ["foo.js", "/foo.js", "../foo.js"]
++    }
++    var readMap = wrapMap(read(JSON.stringify(map)), identity)
++
++    method(u("foo.js.map"), codeUrl, readMap, function(error, result) {
++      t.error(error)
++      t.deepEqual(result, {
++        sourceMappingURL:  "foo.js.map",
++        url:               "/a/b/c/foo.js.map",
++        sourcesRelativeTo: "/a/b/c/foo.js.map",
++        map:               map,
++        sourcesResolved:   ["/a/b/c/foo.js", "/foo.js", "/a/b/foo.js"],
++        sourcesContent:    ["/a/b/c/foo.js", "/foo.js", "/a/b/foo.js"]
++      })
++    })
++
++    method(u("/foo.js.map"), codeUrl, readMap, function(error, result) {
++      t.error(error)
++      t.deepEqual(result, {
++        sourceMappingURL:  "/foo.js.map",
++        url:               "/foo.js.map",
++        sourcesRelativeTo: "/foo.js.map",
++        map:               map,
++        sourcesResolved:   ["/foo.js", "/foo.js", "/foo.js"],
++        sourcesContent:    ["/foo.js", "/foo.js", "/foo.js"]
++      })
++    })
++
++    method(u("../foo.js.map"), codeUrl, readMap, function(error, result) {
++      t.error(error)
++      t.deepEqual(result, {
++        sourceMappingURL:  "../foo.js.map",
++        url:               "/a/b/foo.js.map",
++        sourcesRelativeTo: "/a/b/foo.js.map",
++        map:               map,
++        sourcesResolved:   ["/a/b/foo.js", "/foo.js", "/a/foo.js"],
++        sourcesContent:    ["/a/b/foo.js", "/foo.js", "/a/foo.js"]
++      })
++    })
++
++  }
++}
++
++test(".resolve",     testResolve(sourceMapResolve.resolve,    false))
++
++test(".resolveSync", testResolve(sourceMapResolve.resolveSync, true))
+--- /dev/null
++++ node-css-2.1.0/node_modules/source-map-resolve/x-package.json5
+@@ -0,0 +1,83 @@
++{
++  name: "source-map-resolve",
++  version: "0.3.1",
++  author: "Simon Lydell",
++  license: "MIT",
++  description: "Resolve the source map and/or sources for a generated file.",
++  keywords: [
++    "source map",
++    "sourcemap",
++    "source",
++    "map",
++    "sourceMappingURL",
++    "resolve",
++    "resolver",
++    "locate",
++    "locator",
++    "find",
++    "finder"
++  ],
++  overlay: {
++    npm: {
++      repository: "lydell/source-map-resolve",
++      main: "lib/source-map-resolve-node.js",
++      browser: "source-map-resolve.js",
++      scripts: {
++        lint: "jshint lib/ test/",
++        unit: "node test/source-map-resolve.js && node test/windows.js",
++        test: "npm run lint && npm run unit",
++        build: "node generate-source-map-resolve.js"
++      },
++      dependencies: {
++        "source-map-url": "~0.3.0",
++        "atob": "~1.1.0",
++        "urix": "~0.1.0",
++        // resolve-url is a dependency in package.json even though it is not
++        // needed in Node.js, to allow using npm as a package manager for
++        // browser projects too.
++        "resolve-url": "~0.2.1"
++      },
++      devDependencies: {
++        "tape": "~2.5.0",
++        "jshint": "~2.4.3",
++        "setimmediate": "~1.0.1",
++        "Base64": "~0.2.0",
++        "simple-asyncify": "~0.1.0"
++      },
++      testling: {
++        files: "test/source-map-resolve.js",
++        browsers: [
++          "ie/8..latest",
++          "chrome/latest",
++          "firefox/latest",
++          "opera/12",
++          "opera/latest",
++          "safari/5",
++          "iphone/6",
++          "android-browser/4"
++        ]
++      }
++    },
++    component: {
++      repo: "lydell/source-map-resolve",
++      main: "source-map-resolve.js",
++      scripts: [
++        "source-map-resolve.js"
++      ],
++      dependencies: {
++        "lydell/source-map-url": "~0.3.0",
++        "lydell/resolve-url": "~0.2.1"
++      }
++    },
++    bower: {
++      authors: ["Simon Lydell"],
++      ignore: [
++        ".*"
++      ],
++      dependencies: {
++        "source-map-url": "~0.3.0",
++        "resolve-url": "~0.2.1"
++      }
++    }
++  }
++}
diff --git a/debian/patches/series b/debian/patches/series
new file mode 100644
index 0000000..a62c681
--- /dev/null
+++ b/debian/patches/series
@@ -0,0 +1,5 @@
+0000-bundle_atob.patch
+0001-bundle_urix.patch
+0002-bundle_resolve-url.patch
+0003-bundle_source-map-url.patch
+0004-bundle_source-map-resolve.patch

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/node-css.git



More information about the Pkg-javascript-commits mailing list