Commit fa2dc153f75f95b2c87f381c1c6c10857c4dbb16

Authored by Georg Hopp
1 parent ed56d565

Add prepared wasm example

  1 +install:
  2 + - appveyor-retry appveyor DownloadFile https://win.rustup.rs/ -FileName rustup-init.exe
  3 + - if not defined RUSTFLAGS rustup-init.exe -y --default-host x86_64-pc-windows-msvc --default-toolchain nightly
  4 + - set PATH=%PATH%;C:\Users\appveyor\.cargo\bin
  5 + - rustc -V
  6 + - cargo -V
  7 +
  8 +build: false
  9 +
  10 +test_script:
  11 + - cargo test --locked
... ...
  1 +bin/
  2 +pkg/
  3 +wasm-pack.log
... ...
  1 +language: rust
  2 +sudo: false
  3 +
  4 +cache: cargo
  5 +
  6 +matrix:
  7 + include:
  8 +
  9 + # Builds with wasm-pack.
  10 + - rust: beta
  11 + env: RUST_BACKTRACE=1
  12 + addons:
  13 + firefox: latest
  14 + chrome: stable
  15 + before_script:
  16 + - (test -x $HOME/.cargo/bin/cargo-install-update || cargo install cargo-update)
  17 + - (test -x $HOME/.cargo/bin/cargo-generate || cargo install --vers "^0.2" cargo-generate)
  18 + - cargo install-update -a
  19 + - curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh -s -- -f
  20 + script:
  21 + - cargo generate --git . --name testing
  22 + # Having a broken Cargo.toml (in that it has curlies in fields) anywhere
  23 + # in any of our parent dirs is problematic.
  24 + - mv Cargo.toml Cargo.toml.tmpl
  25 + - cd testing
  26 + - wasm-pack build
  27 + - wasm-pack test --chrome --firefox --headless
  28 +
  29 + # Builds on nightly.
  30 + - rust: nightly
  31 + env: RUST_BACKTRACE=1
  32 + before_script:
  33 + - (test -x $HOME/.cargo/bin/cargo-install-update || cargo install cargo-update)
  34 + - (test -x $HOME/.cargo/bin/cargo-generate || cargo install --vers "^0.2" cargo-generate)
  35 + - cargo install-update -a
  36 + - rustup target add wasm32-unknown-unknown
  37 + script:
  38 + - cargo generate --git . --name testing
  39 + - mv Cargo.toml Cargo.toml.tmpl
  40 + - cd testing
  41 + - cargo check
  42 + - cargo check --target wasm32-unknown-unknown
  43 + - cargo check --no-default-features
  44 + - cargo check --target wasm32-unknown-unknown --no-default-features
  45 + - cargo check --no-default-features --features console_error_panic_hook
  46 + - cargo check --target wasm32-unknown-unknown --no-default-features --features console_error_panic_hook
  47 + - cargo check --no-default-features --features "console_error_panic_hook wee_alloc"
  48 + - cargo check --target wasm32-unknown-unknown --no-default-features --features "console_error_panic_hook wee_alloc"
  49 +
  50 + # Builds on beta.
  51 + - rust: beta
  52 + env: RUST_BACKTRACE=1
  53 + before_script:
  54 + - (test -x $HOME/.cargo/bin/cargo-install-update || cargo install cargo-update)
  55 + - (test -x $HOME/.cargo/bin/cargo-generate || cargo install --vers "^0.2" cargo-generate)
  56 + - cargo install-update -a
  57 + - rustup target add wasm32-unknown-unknown
  58 + script:
  59 + - cargo generate --git . --name testing
  60 + - mv Cargo.toml Cargo.toml.tmpl
  61 + - cd testing
  62 + - cargo check
  63 + - cargo check --target wasm32-unknown-unknown
  64 + - cargo check --no-default-features
  65 + - cargo check --target wasm32-unknown-unknown --no-default-features
  66 + - cargo check --no-default-features --features console_error_panic_hook
  67 + - cargo check --target wasm32-unknown-unknown --no-default-features --features console_error_panic_hook
  68 + # Note: no enabling the `wee_alloc` feature here because it requires
  69 + # nightly for now.
... ...
  1 +[package]
  2 +name = "wasm-game-of-life"
  3 +version = "0.1.0"
  4 +authors = ["Georg Hopp <georg@steffers.org>"]
  5 +edition = "2018"
  6 +
  7 +[lib]
  8 +crate-type = ["cdylib", "rlib"]
  9 +
  10 +[features]
  11 +default = ["console_error_panic_hook"]
  12 +
  13 +[dependencies]
  14 +wasm-bindgen = "0.2"
  15 +
  16 +# The `console_error_panic_hook` crate provides better debugging of panics by
  17 +# logging them with `console.error`. This is great for development, but requires
  18 +# all the `std::fmt` and `std::panicking` infrastructure, so isn't great for
  19 +# code size when deploying.
  20 +console_error_panic_hook = { version = "0.1.1", optional = true }
  21 +
  22 +# `wee_alloc` is a tiny allocator for wasm that is only ~1K in code size
  23 +# compared to the default allocator's ~10K. It is slower than the default
  24 +# allocator, however.
  25 +#
  26 +# Unfortunately, `wee_alloc` requires nightly Rust when targeting wasm for now.
  27 +wee_alloc = { version = "0.4.2", optional = true }
  28 +
  29 +[dev-dependencies]
  30 +wasm-bindgen-test = "0.2"
  31 +
  32 +[profile.release]
  33 +# Tell `rustc` to optimize for small code size.
  34 +opt-level = "s"
... ...
  1 + Apache License
  2 + Version 2.0, January 2004
  3 + http://www.apache.org/licenses/
  4 +
  5 +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
  6 +
  7 +1. Definitions.
  8 +
  9 + "License" shall mean the terms and conditions for use, reproduction,
  10 + and distribution as defined by Sections 1 through 9 of this document.
  11 +
  12 + "Licensor" shall mean the copyright owner or entity authorized by
  13 + the copyright owner that is granting the License.
  14 +
  15 + "Legal Entity" shall mean the union of the acting entity and all
  16 + other entities that control, are controlled by, or are under common
  17 + control with that entity. For the purposes of this definition,
  18 + "control" means (i) the power, direct or indirect, to cause the
  19 + direction or management of such entity, whether by contract or
  20 + otherwise, or (ii) ownership of fifty percent (50%) or more of the
  21 + outstanding shares, or (iii) beneficial ownership of such entity.
  22 +
  23 + "You" (or "Your") shall mean an individual or Legal Entity
  24 + exercising permissions granted by this License.
  25 +
  26 + "Source" form shall mean the preferred form for making modifications,
  27 + including but not limited to software source code, documentation
  28 + source, and configuration files.
  29 +
  30 + "Object" form shall mean any form resulting from mechanical
  31 + transformation or translation of a Source form, including but
  32 + not limited to compiled object code, generated documentation,
  33 + and conversions to other media types.
  34 +
  35 + "Work" shall mean the work of authorship, whether in Source or
  36 + Object form, made available under the License, as indicated by a
  37 + copyright notice that is included in or attached to the work
  38 + (an example is provided in the Appendix below).
  39 +
  40 + "Derivative Works" shall mean any work, whether in Source or Object
  41 + form, that is based on (or derived from) the Work and for which the
  42 + editorial revisions, annotations, elaborations, or other modifications
  43 + represent, as a whole, an original work of authorship. For the purposes
  44 + of this License, Derivative Works shall not include works that remain
  45 + separable from, or merely link (or bind by name) to the interfaces of,
  46 + the Work and Derivative Works thereof.
  47 +
  48 + "Contribution" shall mean any work of authorship, including
  49 + the original version of the Work and any modifications or additions
  50 + to that Work or Derivative Works thereof, that is intentionally
  51 + submitted to Licensor for inclusion in the Work by the copyright owner
  52 + or by an individual or Legal Entity authorized to submit on behalf of
  53 + the copyright owner. For the purposes of this definition, "submitted"
  54 + means any form of electronic, verbal, or written communication sent
  55 + to the Licensor or its representatives, including but not limited to
  56 + communication on electronic mailing lists, source code control systems,
  57 + and issue tracking systems that are managed by, or on behalf of, the
  58 + Licensor for the purpose of discussing and improving the Work, but
  59 + excluding communication that is conspicuously marked or otherwise
  60 + designated in writing by the copyright owner as "Not a Contribution."
  61 +
  62 + "Contributor" shall mean Licensor and any individual or Legal Entity
  63 + on behalf of whom a Contribution has been received by Licensor and
  64 + subsequently incorporated within the Work.
  65 +
  66 +2. Grant of Copyright License. Subject to the terms and conditions of
  67 + this License, each Contributor hereby grants to You a perpetual,
  68 + worldwide, non-exclusive, no-charge, royalty-free, irrevocable
  69 + copyright license to reproduce, prepare Derivative Works of,
  70 + publicly display, publicly perform, sublicense, and distribute the
  71 + Work and such Derivative Works in Source or Object form.
  72 +
  73 +3. Grant of Patent License. Subject to the terms and conditions of
  74 + this License, each Contributor hereby grants to You a perpetual,
  75 + worldwide, non-exclusive, no-charge, royalty-free, irrevocable
  76 + (except as stated in this section) patent license to make, have made,
  77 + use, offer to sell, sell, import, and otherwise transfer the Work,
  78 + where such license applies only to those patent claims licensable
  79 + by such Contributor that are necessarily infringed by their
  80 + Contribution(s) alone or by combination of their Contribution(s)
  81 + with the Work to which such Contribution(s) was submitted. If You
  82 + institute patent litigation against any entity (including a
  83 + cross-claim or counterclaim in a lawsuit) alleging that the Work
  84 + or a Contribution incorporated within the Work constitutes direct
  85 + or contributory patent infringement, then any patent licenses
  86 + granted to You under this License for that Work shall terminate
  87 + as of the date such litigation is filed.
  88 +
  89 +4. Redistribution. You may reproduce and distribute copies of the
  90 + Work or Derivative Works thereof in any medium, with or without
  91 + modifications, and in Source or Object form, provided that You
  92 + meet the following conditions:
  93 +
  94 + (a) You must give any other recipients of the Work or
  95 + Derivative Works a copy of this License; and
  96 +
  97 + (b) You must cause any modified files to carry prominent notices
  98 + stating that You changed the files; and
  99 +
  100 + (c) You must retain, in the Source form of any Derivative Works
  101 + that You distribute, all copyright, patent, trademark, and
  102 + attribution notices from the Source form of the Work,
  103 + excluding those notices that do not pertain to any part of
  104 + the Derivative Works; and
  105 +
  106 + (d) If the Work includes a "NOTICE" text file as part of its
  107 + distribution, then any Derivative Works that You distribute must
  108 + include a readable copy of the attribution notices contained
  109 + within such NOTICE file, excluding those notices that do not
  110 + pertain to any part of the Derivative Works, in at least one
  111 + of the following places: within a NOTICE text file distributed
  112 + as part of the Derivative Works; within the Source form or
  113 + documentation, if provided along with the Derivative Works; or,
  114 + within a display generated by the Derivative Works, if and
  115 + wherever such third-party notices normally appear. The contents
  116 + of the NOTICE file are for informational purposes only and
  117 + do not modify the License. You may add Your own attribution
  118 + notices within Derivative Works that You distribute, alongside
  119 + or as an addendum to the NOTICE text from the Work, provided
  120 + that such additional attribution notices cannot be construed
  121 + as modifying the License.
  122 +
  123 + You may add Your own copyright statement to Your modifications and
  124 + may provide additional or different license terms and conditions
  125 + for use, reproduction, or distribution of Your modifications, or
  126 + for any such Derivative Works as a whole, provided Your use,
  127 + reproduction, and distribution of the Work otherwise complies with
  128 + the conditions stated in this License.
  129 +
  130 +5. Submission of Contributions. Unless You explicitly state otherwise,
  131 + any Contribution intentionally submitted for inclusion in the Work
  132 + by You to the Licensor shall be under the terms and conditions of
  133 + this License, without any additional terms or conditions.
  134 + Notwithstanding the above, nothing herein shall supersede or modify
  135 + the terms of any separate license agreement you may have executed
  136 + with Licensor regarding such Contributions.
  137 +
  138 +6. Trademarks. This License does not grant permission to use the trade
  139 + names, trademarks, service marks, or product names of the Licensor,
  140 + except as required for reasonable and customary use in describing the
  141 + origin of the Work and reproducing the content of the NOTICE file.
  142 +
  143 +7. Disclaimer of Warranty. Unless required by applicable law or
  144 + agreed to in writing, Licensor provides the Work (and each
  145 + Contributor provides its Contributions) on an "AS IS" BASIS,
  146 + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
  147 + implied, including, without limitation, any warranties or conditions
  148 + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
  149 + PARTICULAR PURPOSE. You are solely responsible for determining the
  150 + appropriateness of using or redistributing the Work and assume any
  151 + risks associated with Your exercise of permissions under this License.
  152 +
  153 +8. Limitation of Liability. In no event and under no legal theory,
  154 + whether in tort (including negligence), contract, or otherwise,
  155 + unless required by applicable law (such as deliberate and grossly
  156 + negligent acts) or agreed to in writing, shall any Contributor be
  157 + liable to You for damages, including any direct, indirect, special,
  158 + incidental, or consequential damages of any character arising as a
  159 + result of this License or out of the use or inability to use the
  160 + Work (including but not limited to damages for loss of goodwill,
  161 + work stoppage, computer failure or malfunction, or any and all
  162 + other commercial damages or losses), even if such Contributor
  163 + has been advised of the possibility of such damages.
  164 +
  165 +9. Accepting Warranty or Additional Liability. While redistributing
  166 + the Work or Derivative Works thereof, You may choose to offer,
  167 + and charge a fee for, acceptance of support, warranty, indemnity,
  168 + or other liability obligations and/or rights consistent with this
  169 + License. However, in accepting such obligations, You may act only
  170 + on Your own behalf and on Your sole responsibility, not on behalf
  171 + of any other Contributor, and only if You agree to indemnify,
  172 + defend, and hold each Contributor harmless for any liability
  173 + incurred by, or claims asserted against, such Contributor by reason
  174 + of your accepting any such warranty or additional liability.
  175 +
  176 +END OF TERMS AND CONDITIONS
... ...
  1 +Copyright (c) 2018 Georg Hopp <georg@steffers.org>
  2 +
  3 +Permission is hereby granted, free of charge, to any
  4 +person obtaining a copy of this software and associated
  5 +documentation files (the "Software"), to deal in the
  6 +Software without restriction, including without
  7 +limitation the rights to use, copy, modify, merge,
  8 +publish, distribute, sublicense, and/or sell copies of
  9 +the Software, and to permit persons to whom the Software
  10 +is furnished to do so, subject to the following
  11 +conditions:
  12 +
  13 +The above copyright notice and this permission notice
  14 +shall be included in all copies or substantial portions
  15 +of the Software.
  16 +
  17 +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
  18 +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
  19 +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
  20 +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
  21 +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
  22 +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
  23 +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
  24 +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  25 +DEALINGS IN THE SOFTWARE.
... ...
  1 +<div align="center">
  2 +
  3 + <h1><code>wasm-pack-template</code></h1>
  4 +
  5 + <strong>A template for kick starting a Rust and WebAssembly project using <a href="https://github.com/rustwasm/wasm-pack">wasm-pack</a>.</strong>
  6 +
  7 + <p>
  8 + <a href="https://travis-ci.org/rustwasm/wasm-pack-template"><img src="https://img.shields.io/travis/rustwasm/wasm-pack-template.svg?style=flat-square" alt="Build Status" /></a>
  9 + </p>
  10 +
  11 + <h3>
  12 + <a href="https://rustwasm.github.io/docs/wasm-pack/tutorials/npm-browser-packages/index.html">Tutorial</a>
  13 + <span> | </span>
  14 + <a href="https://discordapp.com/channels/442252698964721669/443151097398296587">Chat</a>
  15 + </h3>
  16 +
  17 + <sub>Built with 🦀🕸 by <a href="https://rustwasm.github.io/">The Rust and WebAssembly Working Group</a></sub>
  18 +</div>
  19 +
  20 +## About
  21 +
  22 +[**📚 Read this template tutorial! 📚**][template-docs]
  23 +
  24 +This template is designed for compiling Rust libraries into WebAssembly and
  25 +publishing the resulting package to NPM.
  26 +
  27 +Be sure to check out [other `wasm-pack` tutorials online][tutorials] for other
  28 +templates and usages of `wasm-pack`.
  29 +
  30 +[tutorials]: https://rustwasm.github.io/docs/wasm-pack/tutorials/index.html
  31 +[template-docs]: https://rustwasm.github.io/docs/wasm-pack/tutorials/npm-browser-packages/index.html
  32 +
  33 +## 🚴 Usage
  34 +
  35 +### 🐑 Use `cargo generate` to Clone this Template
  36 +
  37 +[Learn more about `cargo generate` here.](https://github.com/ashleygwilliams/cargo-generate)
  38 +
  39 +```
  40 +cargo generate --git https://github.com/rustwasm/wasm-pack-template.git --name my-project
  41 +cd my-project
  42 +```
  43 +
  44 +### 🛠️ Build with `wasm-pack build`
  45 +
  46 +```
  47 +wasm-pack build
  48 +```
  49 +
  50 +### 🔬 Test in Headless Browsers with `wasm-pack test`
  51 +
  52 +```
  53 +wasm-pack test --headless --firefox
  54 +```
  55 +
  56 +### 🎁 Publish to NPM with `wasm-pack publish`
  57 +
  58 +```
  59 +wasm-pack publish
  60 +```
  61 +
  62 +## 🔋 Batteries Included
  63 +
  64 +* [`wasm-bindgen`](https://github.com/rustwasm/wasm-bindgen) for communicating
  65 + between WebAssembly and JavaScript.
  66 +* [`console_error_panic_hook`](https://github.com/rustwasm/console_error_panic_hook)
  67 + for logging panic messages to the developer console.
  68 +* [`wee_alloc`](https://github.com/rustwasm/wee_alloc), an allocator optimized
  69 + for small code size.
... ...
  1 +{
  2 + "lockfileVersion": 1
  3 +}
... ...
  1 +mod utils;
  2 +
  3 +use wasm_bindgen::prelude::*;
  4 +
  5 +// When the `wee_alloc` feature is enabled, use `wee_alloc` as the global
  6 +// allocator.
  7 +#[cfg(feature = "wee_alloc")]
  8 +#[global_allocator]
  9 +static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT;
  10 +
  11 +#[wasm_bindgen]
  12 +extern {
  13 + fn alert(s: &str);
  14 +}
  15 +
  16 +#[wasm_bindgen]
  17 +pub fn greet(name: &str) {
  18 + alert(&format!("Hello, wasm-game-of-life! {}", name));
  19 +}
... ...
  1 +pub fn set_panic_hook() {
  2 + // When the `console_error_panic_hook` feature is enabled, we can call the
  3 + // `set_panic_hook` function at least once during initialization, and then
  4 + // we will get better error messages if our code ever panics.
  5 + //
  6 + // For more details see
  7 + // https://github.com/rustwasm/console_error_panic_hook#readme
  8 + #[cfg(feature = "console_error_panic_hook")]
  9 + console_error_panic_hook::set_once();
  10 +}
... ...
  1 +//! Test suite for the Web and headless browsers.
  2 +
  3 +#![cfg(target_arch = "wasm32")]
  4 +
  5 +extern crate wasm_bindgen_test;
  6 +use wasm_bindgen_test::*;
  7 +
  8 +wasm_bindgen_test_configure!(run_in_browser);
  9 +
  10 +#[wasm_bindgen_test]
  11 +fn pass() {
  12 + assert_eq!(1 + 1, 2);
  13 +}
... ...
  1 +#!/usr/bin/env node
  2 +
  3 +const { spawn } = require("child_process");
  4 +const fs = require("fs");
  5 +
  6 +let folderName = '.';
  7 +
  8 +if (process.argv.length >= 3) {
  9 + folderName = process.argv[2];
  10 + if (!fs.existsSync(folderName)) {
  11 + fs.mkdirSync(folderName);
  12 + }
  13 +}
  14 +
  15 +const clone = spawn("git", ["clone", "https://github.com/rustwasm/create-wasm-app.git", folderName]);
  16 +
  17 +clone.on("close", code => {
  18 + if (code !== 0) {
  19 + console.error("cloning the template failed!")
  20 + process.exit(code);
  21 + } else {
  22 + console.log("🦀 Rust + 🕸 Wasm = ❤");
  23 + }
  24 +});
... ...
  1 +node_modules
  2 +dist
... ...
  1 +language: node_js
  2 +node_js: "10"
  3 +
  4 +script:
  5 + - ./node_modules/.bin/webpack
... ...
  1 + Apache License
  2 + Version 2.0, January 2004
  3 + http://www.apache.org/licenses/
  4 +
  5 +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
  6 +
  7 +1. Definitions.
  8 +
  9 + "License" shall mean the terms and conditions for use, reproduction,
  10 + and distribution as defined by Sections 1 through 9 of this document.
  11 +
  12 + "Licensor" shall mean the copyright owner or entity authorized by
  13 + the copyright owner that is granting the License.
  14 +
  15 + "Legal Entity" shall mean the union of the acting entity and all
  16 + other entities that control, are controlled by, or are under common
  17 + control with that entity. For the purposes of this definition,
  18 + "control" means (i) the power, direct or indirect, to cause the
  19 + direction or management of such entity, whether by contract or
  20 + otherwise, or (ii) ownership of fifty percent (50%) or more of the
  21 + outstanding shares, or (iii) beneficial ownership of such entity.
  22 +
  23 + "You" (or "Your") shall mean an individual or Legal Entity
  24 + exercising permissions granted by this License.
  25 +
  26 + "Source" form shall mean the preferred form for making modifications,
  27 + including but not limited to software source code, documentation
  28 + source, and configuration files.
  29 +
  30 + "Object" form shall mean any form resulting from mechanical
  31 + transformation or translation of a Source form, including but
  32 + not limited to compiled object code, generated documentation,
  33 + and conversions to other media types.
  34 +
  35 + "Work" shall mean the work of authorship, whether in Source or
  36 + Object form, made available under the License, as indicated by a
  37 + copyright notice that is included in or attached to the work
  38 + (an example is provided in the Appendix below).
  39 +
  40 + "Derivative Works" shall mean any work, whether in Source or Object
  41 + form, that is based on (or derived from) the Work and for which the
  42 + editorial revisions, annotations, elaborations, or other modifications
  43 + represent, as a whole, an original work of authorship. For the purposes
  44 + of this License, Derivative Works shall not include works that remain
  45 + separable from, or merely link (or bind by name) to the interfaces of,
  46 + the Work and Derivative Works thereof.
  47 +
  48 + "Contribution" shall mean any work of authorship, including
  49 + the original version of the Work and any modifications or additions
  50 + to that Work or Derivative Works thereof, that is intentionally
  51 + submitted to Licensor for inclusion in the Work by the copyright owner
  52 + or by an individual or Legal Entity authorized to submit on behalf of
  53 + the copyright owner. For the purposes of this definition, "submitted"
  54 + means any form of electronic, verbal, or written communication sent
  55 + to the Licensor or its representatives, including but not limited to
  56 + communication on electronic mailing lists, source code control systems,
  57 + and issue tracking systems that are managed by, or on behalf of, the
  58 + Licensor for the purpose of discussing and improving the Work, but
  59 + excluding communication that is conspicuously marked or otherwise
  60 + designated in writing by the copyright owner as "Not a Contribution."
  61 +
  62 + "Contributor" shall mean Licensor and any individual or Legal Entity
  63 + on behalf of whom a Contribution has been received by Licensor and
  64 + subsequently incorporated within the Work.
  65 +
  66 +2. Grant of Copyright License. Subject to the terms and conditions of
  67 + this License, each Contributor hereby grants to You a perpetual,
  68 + worldwide, non-exclusive, no-charge, royalty-free, irrevocable
  69 + copyright license to reproduce, prepare Derivative Works of,
  70 + publicly display, publicly perform, sublicense, and distribute the
  71 + Work and such Derivative Works in Source or Object form.
  72 +
  73 +3. Grant of Patent License. Subject to the terms and conditions of
  74 + this License, each Contributor hereby grants to You a perpetual,
  75 + worldwide, non-exclusive, no-charge, royalty-free, irrevocable
  76 + (except as stated in this section) patent license to make, have made,
  77 + use, offer to sell, sell, import, and otherwise transfer the Work,
  78 + where such license applies only to those patent claims licensable
  79 + by such Contributor that are necessarily infringed by their
  80 + Contribution(s) alone or by combination of their Contribution(s)
  81 + with the Work to which such Contribution(s) was submitted. If You
  82 + institute patent litigation against any entity (including a
  83 + cross-claim or counterclaim in a lawsuit) alleging that the Work
  84 + or a Contribution incorporated within the Work constitutes direct
  85 + or contributory patent infringement, then any patent licenses
  86 + granted to You under this License for that Work shall terminate
  87 + as of the date such litigation is filed.
  88 +
  89 +4. Redistribution. You may reproduce and distribute copies of the
  90 + Work or Derivative Works thereof in any medium, with or without
  91 + modifications, and in Source or Object form, provided that You
  92 + meet the following conditions:
  93 +
  94 + (a) You must give any other recipients of the Work or
  95 + Derivative Works a copy of this License; and
  96 +
  97 + (b) You must cause any modified files to carry prominent notices
  98 + stating that You changed the files; and
  99 +
  100 + (c) You must retain, in the Source form of any Derivative Works
  101 + that You distribute, all copyright, patent, trademark, and
  102 + attribution notices from the Source form of the Work,
  103 + excluding those notices that do not pertain to any part of
  104 + the Derivative Works; and
  105 +
  106 + (d) If the Work includes a "NOTICE" text file as part of its
  107 + distribution, then any Derivative Works that You distribute must
  108 + include a readable copy of the attribution notices contained
  109 + within such NOTICE file, excluding those notices that do not
  110 + pertain to any part of the Derivative Works, in at least one
  111 + of the following places: within a NOTICE text file distributed
  112 + as part of the Derivative Works; within the Source form or
  113 + documentation, if provided along with the Derivative Works; or,
  114 + within a display generated by the Derivative Works, if and
  115 + wherever such third-party notices normally appear. The contents
  116 + of the NOTICE file are for informational purposes only and
  117 + do not modify the License. You may add Your own attribution
  118 + notices within Derivative Works that You distribute, alongside
  119 + or as an addendum to the NOTICE text from the Work, provided
  120 + that such additional attribution notices cannot be construed
  121 + as modifying the License.
  122 +
  123 + You may add Your own copyright statement to Your modifications and
  124 + may provide additional or different license terms and conditions
  125 + for use, reproduction, or distribution of Your modifications, or
  126 + for any such Derivative Works as a whole, provided Your use,
  127 + reproduction, and distribution of the Work otherwise complies with
  128 + the conditions stated in this License.
  129 +
  130 +5. Submission of Contributions. Unless You explicitly state otherwise,
  131 + any Contribution intentionally submitted for inclusion in the Work
  132 + by You to the Licensor shall be under the terms and conditions of
  133 + this License, without any additional terms or conditions.
  134 + Notwithstanding the above, nothing herein shall supersede or modify
  135 + the terms of any separate license agreement you may have executed
  136 + with Licensor regarding such Contributions.
  137 +
  138 +6. Trademarks. This License does not grant permission to use the trade
  139 + names, trademarks, service marks, or product names of the Licensor,
  140 + except as required for reasonable and customary use in describing the
  141 + origin of the Work and reproducing the content of the NOTICE file.
  142 +
  143 +7. Disclaimer of Warranty. Unless required by applicable law or
  144 + agreed to in writing, Licensor provides the Work (and each
  145 + Contributor provides its Contributions) on an "AS IS" BASIS,
  146 + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
  147 + implied, including, without limitation, any warranties or conditions
  148 + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
  149 + PARTICULAR PURPOSE. You are solely responsible for determining the
  150 + appropriateness of using or redistributing the Work and assume any
  151 + risks associated with Your exercise of permissions under this License.
  152 +
  153 +8. Limitation of Liability. In no event and under no legal theory,
  154 + whether in tort (including negligence), contract, or otherwise,
  155 + unless required by applicable law (such as deliberate and grossly
  156 + negligent acts) or agreed to in writing, shall any Contributor be
  157 + liable to You for damages, including any direct, indirect, special,
  158 + incidental, or consequential damages of any character arising as a
  159 + result of this License or out of the use or inability to use the
  160 + Work (including but not limited to damages for loss of goodwill,
  161 + work stoppage, computer failure or malfunction, or any and all
  162 + other commercial damages or losses), even if such Contributor
  163 + has been advised of the possibility of such damages.
  164 +
  165 +9. Accepting Warranty or Additional Liability. While redistributing
  166 + the Work or Derivative Works thereof, You may choose to offer,
  167 + and charge a fee for, acceptance of support, warranty, indemnity,
  168 + or other liability obligations and/or rights consistent with this
  169 + License. However, in accepting such obligations, You may act only
  170 + on Your own behalf and on Your sole responsibility, not on behalf
  171 + of any other Contributor, and only if You agree to indemnify,
  172 + defend, and hold each Contributor harmless for any liability
  173 + incurred by, or claims asserted against, such Contributor by reason
  174 + of your accepting any such warranty or additional liability.
  175 +
  176 +END OF TERMS AND CONDITIONS
  177 +
  178 +APPENDIX: How to apply the Apache License to your work.
  179 +
  180 + To apply the Apache License to your work, attach the following
  181 + boilerplate notice, with the fields enclosed by brackets "[]"
  182 + replaced with your own identifying information. (Don't include
  183 + the brackets!) The text should be enclosed in the appropriate
  184 + comment syntax for the file format. We also recommend that a
  185 + file or class name and description of purpose be included on the
  186 + same "printed page" as the copyright notice for easier
  187 + identification within third-party archives.
  188 +
  189 +Copyright [yyyy] [name of copyright owner]
  190 +
  191 +Licensed under the Apache License, Version 2.0 (the "License");
  192 +you may not use this file except in compliance with the License.
  193 +You may obtain a copy of the License at
  194 +
  195 + http://www.apache.org/licenses/LICENSE-2.0
  196 +
  197 +Unless required by applicable law or agreed to in writing, software
  198 +distributed under the License is distributed on an "AS IS" BASIS,
  199 +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  200 +See the License for the specific language governing permissions and
  201 +limitations under the License.
... ...
  1 +Copyright (c) [year] [name]
  2 +
  3 +Permission is hereby granted, free of charge, to any
  4 +person obtaining a copy of this software and associated
  5 +documentation files (the "Software"), to deal in the
  6 +Software without restriction, including without
  7 +limitation the rights to use, copy, modify, merge,
  8 +publish, distribute, sublicense, and/or sell copies of
  9 +the Software, and to permit persons to whom the Software
  10 +is furnished to do so, subject to the following
  11 +conditions:
  12 +
  13 +The above copyright notice and this permission notice
  14 +shall be included in all copies or substantial portions
  15 +of the Software.
  16 +
  17 +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
  18 +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
  19 +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
  20 +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
  21 +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
  22 +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
  23 +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
  24 +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  25 +DEALINGS IN THE SOFTWARE.
... ...
  1 +<div align="center">
  2 +
  3 + <h1><code>create-wasm-app</code></h1>
  4 +
  5 + <strong>An <code>npm init</code> template for kick starting a project that uses NPM packages containing Rust-generated WebAssembly and bundles them with Webpack.</strong>
  6 +
  7 + <p>
  8 + <a href="https://travis-ci.org/rustwasm/create-wasm-app"><img src="https://img.shields.io/travis/rustwasm/create-wasm-app.svg?style=flat-square" alt="Build Status" /></a>
  9 + </p>
  10 +
  11 + <h3>
  12 + <a href="#usage">Usage</a>
  13 + <span> | </span>
  14 + <a href="https://discordapp.com/channels/442252698964721669/443151097398296587">Chat</a>
  15 + </h3>
  16 +
  17 + <sub>Built with 🦀🕸 by <a href="https://rustwasm.github.io/">The Rust and WebAssembly Working Group</a></sub>
  18 +</div>
  19 +
  20 +## About
  21 +
  22 +This template is designed for depending on NPM packages that contain
  23 +Rust-generated WebAssembly and using them to create a Website.
  24 +
  25 +* Want to create an NPM package with Rust and WebAssembly? [Check out
  26 + `wasm-pack-template`.](https://github.com/rustwasm/wasm-pack-template)
  27 +* Want to make a monorepo-style Website without publishing to NPM? Check out
  28 + [`rust-webpack-template`](https://github.com/rustwasm/rust-webpack-template)
  29 + and/or
  30 + [`rust-parcel-template`](https://github.com/rustwasm/rust-parcel-template).
  31 +
  32 +## 🚴 Usage
  33 +
  34 +```
  35 +npm init wasm-app
  36 +```
  37 +
  38 +## 🔋 Batteries Included
  39 +
  40 +- `.gitignore`: ignores `node_modules`
  41 +- `LICENSE-APACHE` and `LICENSE-MIT`: most Rust projects are licensed this way, so these are included for you
  42 +- `README.md`: the file you are reading now!
  43 +- `index.html`: a bare bones html document that includes the webpack bundle
  44 +- `index.js`: example js file with a comment showing how to import and use a wasm pkg
  45 +- `package.json` and `package-lock.json`:
  46 + - pulls in devDependencies for using webpack:
  47 + - [`webpack`](https://www.npmjs.com/package/webpack)
  48 + - [`webpack-cli`](https://www.npmjs.com/package/webpack-cli)
  49 + - [`webpack-dev-server`](https://www.npmjs.com/package/webpack-dev-server)
  50 + - defines a `start` script to run `webpack-dev-server`
  51 +- `webpack.config.js`: configuration file for bundling your js with webpack
  52 +
  53 +## License
  54 +
  55 +Licensed under either of
  56 +
  57 +* Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
  58 +* MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
  59 +
  60 +at your option.
  61 +
  62 +### Contribution
  63 +
  64 +Unless you explicitly state otherwise, any contribution intentionally
  65 +submitted for inclusion in the work by you, as defined in the Apache-2.0
  66 +license, shall be dual licensed as above, without any additional terms or
  67 +conditions.
... ...
  1 +// A dependency graph that contains any wasm must all be imported
  2 +// asynchronously. This `bootstrap.js` file does the single async import, so
  3 +// that no one else needs to worry about it again.
  4 +import("./index.js")
  5 + .catch(e => console.error("Error importing `index.js`:", e));
... ...
  1 +<!DOCTYPE html>
  2 +<html>
  3 + <head>
  4 + <meta charset="utf-8">
  5 + <title>Hello wasm-pack!</title>
  6 + </head>
  7 + <body>
  8 + <noscript>This page contains webassembly and javascript content, please enable javascript in your browser.</noscript>
  9 + <script src="./bootstrap.js"></script>
  10 + </body>
  11 +</html>
... ...
  1 +import * as wasm from "wasm-game-of-life";
  2 +
  3 +wasm.greet("Georg");
... ...
This diff could not be displayed because it is too large.
  1 +{
  2 + "name": "create-wasm-app",
  3 + "version": "0.1.0",
  4 + "description": "create an app to consume rust-generated wasm packages",
  5 + "main": "index.js",
  6 + "bin": {
  7 + "create-wasm-app": ".bin/create-wasm-app.js"
  8 + },
  9 + "scripts": {
  10 + "build": "webpack --config webpack.config.js",
  11 + "start": "webpack-dev-server"
  12 + },
  13 + "repository": {
  14 + "type": "git",
  15 + "url": "git+https://github.com/rustwasm/create-wasm-app.git"
  16 + },
  17 + "keywords": [
  18 + "webassembly",
  19 + "wasm",
  20 + "rust",
  21 + "webpack"
  22 + ],
  23 + "author": "Ashley Williams <ashley666ashley@gmail.com>",
  24 + "license": "(MIT OR Apache-2.0)",
  25 + "bugs": {
  26 + "url": "https://github.com/rustwasm/create-wasm-app/issues"
  27 + },
  28 + "homepage": "https://github.com/rustwasm/create-wasm-app#readme",
  29 + "devDependencies": {
  30 + "wasm-game-of-life": "file:../pkg",
  31 + "hello-wasm-pack": "^0.1.0",
  32 + "webpack": "^4.29.3",
  33 + "webpack-cli": "^3.1.0",
  34 + "webpack-dev-server": "^3.1.5",
  35 + "copy-webpack-plugin": "^5.0.0"
  36 + }
  37 +}
... ...
  1 +const CopyWebpackPlugin = require("copy-webpack-plugin");
  2 +const path = require('path');
  3 +
  4 +module.exports = {
  5 + entry: "./bootstrap.js",
  6 + output: {
  7 + path: path.resolve(__dirname, "dist"),
  8 + filename: "bootstrap.js",
  9 + },
  10 + mode: "development",
  11 + plugins: [
  12 + new CopyWebpackPlugin(['index.html'])
  13 + ],
  14 +};
... ...
Please register or login to post a comment