diff --git a/structure-and-scale/main.go b/structure-and-scale/main.go
index efcb300..feeed52 100644
--- a/structure-and-scale/main.go
+++ b/structure-and-scale/main.go
@@ -22,6 +22,7 @@ func main() {
mux.Handle("GET /seven-seas/", http.StripPrefix("/seven-seas", http.FileServer(http.Dir("seven-seas"))))
mux.Handle("GET /seven-seas-bundlers/", http.StripPrefix("/seven-seas-bundlers", http.FileServer(http.Dir("seven-seas-bundlers"))))
mux.Handle("GET /seven-seas-page-specific-bundles/", http.StripPrefix("/seven-seas-page-specific-bundles", http.FileServer(http.Dir("seven-seas-page-specific-bundles"))))
+ mux.Handle("GET /seven-seas-service-worker/", http.StripPrefix("/seven-seas-service-worker", http.FileServer(http.Dir("seven-seas-service-worker"))))
log.Println("Start the web server...")
err := http.ListenAndServe(":8080", mux)
diff --git a/structure-and-scale/seven-seas-service-worker/README.md b/structure-and-scale/seven-seas-service-worker/README.md
new file mode 100644
index 0000000..3bcb8f5
--- /dev/null
+++ b/structure-and-scale/seven-seas-service-worker/README.md
@@ -0,0 +1,45 @@
+# Project: Seven Seas - Bundle
+
+Using `rollup.js`, bundle the modularized JavaScript files into an
+IIFE that can be run in the browser without the performance issues
+associated with the native ES modules.
+
+## Installing and Using Rollup
+
+To install `rollup` globally:
+
+```bash
+npm install --global rollup
+```
+
+To run `rollup`:
+
+```bash
+rollup index.js --file bundle.js --format iife
+```
+
+To configure `package.json` and install `rollup` locally:
+
+```bash
+npm install rollup --save-dev
+```
+
+Update your `package.json`:
+
+```json
+{
+ "type": "module",
+ "devDependencies": {
+ "rollup": "^4.21.2"
+ },
+ "scripts": {
+ "js": "rollup --config"
+ }
+}
+```
+
+Run the script:
+
+```bash
+npm run js
+```
diff --git a/structure-and-scale/seven-seas-service-worker/bundle.js b/structure-and-scale/seven-seas-service-worker/bundle.js
new file mode 100644
index 0000000..81b0b4a
--- /dev/null
+++ b/structure-and-scale/seven-seas-service-worker/bundle.js
@@ -0,0 +1,395 @@
+(function () {
+ 'use strict';
+
+ class TreasureChest {
+
+ #bronze;
+ #silver;
+ #gold;
+ #loot;
+
+ /**
+ * Create the constructor object
+ * @param {Object} options User settings
+ */
+ constructor (options = {}) {
+
+ // Merge options into defaults
+ let {bronze, silver, gold, loot} = Object.assign({
+ bronze: 0,
+ silver: 0,
+ gold: 0,
+ loot: `You have {{gold}} gold, {{silver}} silver, and {{bronze}} bronze.`
+ }, options);
+
+ // Set instance properties
+ this.#bronze = bronze;
+ this.#silver = silver;
+ this.#gold = gold;
+ this.#loot = loot;
+
+ }
+
+ /**
+ * Randomly shuffle an array
+ * https://stackoverflow.com/a/2450976/1293256
+ * @param {Array} array The array to shuffle
+ * @return {Array} The shuffled array
+ */
+ static #shuffle (array) {
+
+ let currentIndex = array.length;
+ let temporaryValue, randomIndex;
+
+ // While there remain elements to shuffle...
+ while (0 !== currentIndex) {
+ // Pick a remaining element...
+ randomIndex = Math.floor(Math.random() * currentIndex);
+ currentIndex -= 1;
+
+ // And swap it with the current element.
+ temporaryValue = array[currentIndex];
+ array[currentIndex] = array[randomIndex];
+ array[randomIndex] = temporaryValue;
+ }
+
+ return array;
+
+ }
+
+ /**
+ * Emit a custom event
+ * @param {String} type The event type
+ * @param {*} detail Any details to pass along with the event
+ */
+ #emit (type, detail) {
+
+ // Create a new event
+ let event = new CustomEvent(type, {
+ bubbles: true,
+ cancelable: true,
+ detail: detail
+ });
+
+ // Dispatch the event
+ return document.dispatchEvent(event);
+
+ }
+
+ /**
+ * Add bronze to the treasure chest
+ * @param {Number} n The amount to add
+ */
+ addBronze (n) {
+ this.#bronze += n;
+ this.#emit('treasure:bronze', this);
+ return this;
+ }
+
+ /**
+ * Add silver to the treasure chest
+ * @param {Number} n The amount to add
+ */
+ addSilver (n) {
+ this.#silver += n;
+ this.#emit('treasure:silver', this);
+ return this;
+ }
+
+ /**
+ * Add gold to the treasure chest
+ * @param {Number} n The amount to add
+ */
+ addGold (n) {
+ this.#gold += n;
+ this.#emit('treasure:gold', this);
+ return this;
+ }
+
+ /**
+ * Get the total amount of loot as a string
+ * @return {String} The total amount of loot
+ */
+ getLoot () {
+ return this.#loot.replace('{{gold}}', this.#gold).replace('{{silver}}', this.#silver).replace('{{bronze}}', this.#bronze);
+ }
+
+ /**
+ * Get the amount of bronze
+ * @return {Number} The amount
+ */
+ getBronze () {
+ return this.#bronze;
+ }
+
+ /**
+ * Get the amount of silver
+ * @return {Number} The amount
+ */
+ getSilver () {
+ return this.#silver;
+ }
+
+ /**
+ * Get the amount of gold
+ * @return {Number} The amount
+ */
+ getGold () {
+ return this.#gold;
+ }
+
+ /**
+ * Generate random treasure
+ * @return {Object} The amount and type of loot found
+ */
+ static random () {
+
+ // Amount and type
+ let amount = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50];
+ let type = ['bronze', 'silver', 'gold'];
+
+ // Randomize the amounts
+ this.#shuffle(amount);
+ this.#shuffle(type);
+
+ // Return the random loot
+ return {
+ amount: amount[0],
+ type: type[0]
+ };
+
+ }
+
+ }
+
+ //
+ // Functions
+ //
+
+ // Hold the treasure instance
+ let treasure;
+
+ /**
+ * Create new treasure instance
+ * @return {Constructor} A new TreasureChest instance
+ */
+ function createTreasure () {
+
+ // Get any saved loot from localStorage
+ let savedLoot = JSON.parse(localStorage.getItem('ss-treasure'));
+
+ // Create new Treasure Chest instance
+ treasure = new TreasureChest(savedLoot);
+
+ }
+
+ /**
+ * Display the amount of loot in the UI
+ */
+ function showLoot () {
+ let loot = document.querySelector('#loot');
+ if (!loot) return;
+ loot.textContent = treasure.getLoot();
+ }
+
+ /**
+ * Save loot to localStorage and update the UI
+ * @param {Event} event The event object
+ */
+ function saveLoot (event) {
+
+ // Create the treasure object
+ let treasure = {
+ gold: event.detail.getGold(),
+ silver: event.detail.getSilver(),
+ bronze: event.detail.getBronze()
+ };
+
+ // Save it to localStorage
+ localStorage.setItem('ss-treasure', JSON.stringify(treasure));
+
+ // Update the UI
+ showLoot(event.detail);
+
+ }
+
+ /**
+ * Handle treasure submit events
+ * @param {Event} event The event object
+ */
+ function submitHandler (event) {
+
+ // Get the coin type
+ // Only run on [data-treasure] forms
+ let coin = event.target.getAttribute('data-treasure');
+ if (!coin) return;
+
+ // Stop the form from reloading the page
+ event.preventDefault();
+
+ // Get coin value
+ let val = parseFloat(event.target.querySelector('[type="number"]').value);
+ if (!val) return;
+
+ // Add the correct loot
+ if (coin === 'gold') {
+ treasure.addGold(val);
+ } else if (coin === 'silver') {
+ treasure.addSilver(val);
+ } else if (coin === 'bronze') {
+ treasure.addBronze(val);
+ }
+
+ }
+
+ /**
+ * Listen for loot events
+ * @param {Constructor} treasure The TreasureChest object
+ */
+ function lootListeners () {
+ document.addEventListener('submit', submitHandler);
+ document.addEventListener('treasure:gold', saveLoot);
+ document.addEventListener('treasure:silver', saveLoot);
+ document.addEventListener('treasure:bronze', saveLoot);
+ }
+
+ class RollDice extends HTMLElement {
+
+ #dice;
+
+ /**
+ * The constructor object
+ */
+ constructor () {
+
+ // Run this first
+ super();
+
+ // Creates a shadow root
+ this.root = this.attachShadow({mode: 'closed'});
+
+ // Define properties
+ this.#dice = [1, 2, 3, 4, 5, 6];
+
+ // Render HTML
+ this.root.innerHTML =
+ `
+
+ Roll Dice
+
+
`;
+
+ }
+
+ /**
+ * Randomly shuffle an array
+ * https://stackoverflow.com/a/2450976/1293256
+ * @param {Array} array The array to shuffle
+ * @return {Array} The shuffled array
+ */
+ #shuffle (array) {
+
+ let currentIndex = array.length;
+ let temporaryValue, randomIndex;
+
+ // While there remain elements to shuffle...
+ while (0 !== currentIndex) {
+ // Pick a remaining element...
+ randomIndex = Math.floor(Math.random() * currentIndex);
+ currentIndex -= 1;
+
+ // And swap it with the current element.
+ temporaryValue = array[currentIndex];
+ array[currentIndex] = array[randomIndex];
+ array[randomIndex] = temporaryValue;
+ }
+
+ return array;
+
+ }
+
+ /**
+ * Shuffle dice array and return first number
+ * @return {Number} The result
+ */
+ #roll () {
+ this.#shuffle(this.#dice);
+ return this.#dice[0];
+ }
+
+ /**
+ * Handle click events
+ * @param {Event} event The event object
+ */
+ #clickHandler (event) {
+
+ // Get the host component
+ let host = event.target.getRootNode().host;
+
+ // Get the message element
+ let target = host.root.querySelector('[aria-live="polite"]');
+ if (!target) return;
+
+ // Roll the dice
+ let roll = host.#roll();
+
+ // Inject the message into the UI
+ target.textContent = `You rolled a ${roll}`;
+
+ }
+
+ /**
+ * Runs each time the element is appended to or moved in the DOM
+ */
+ connectedCallback () {
+
+ // Attach a click event listener to the button
+ let btn = this.root.querySelector('button');
+ if (!btn) return;
+ btn.addEventListener('click', this.#clickHandler);
+
+ }
+
+ /**
+ * Runs when the element is removed from the DOM
+ */
+ disconnectedCallback () {
+
+ // Remove the click event listener from the button
+ let btn = this.root.querySelector('button');
+ if (!btn) return;
+ btn.removeEventListener('click', this.#clickHandler);
+
+ }
+
+ }
+
+ if ('customElements' in window) {
+ customElements.define('roll-dice', RollDice);
+ }
+
+ //
+ // Inits & Event Listeners
+ //
+
+ createTreasure();
+ showLoot();
+ lootListeners();
+
+})();
diff --git a/structure-and-scale/seven-seas-service-worker/dice.html b/structure-and-scale/seven-seas-service-worker/dice.html
new file mode 100644
index 0000000..99e0ca2
--- /dev/null
+++ b/structure-and-scale/seven-seas-service-worker/dice.html
@@ -0,0 +1,30 @@
+
+
+
+
+ Dice Games | Seven Seas
+
+
+
+
+
+
+
+ 🏴☠️ Seven Seas
+ The travel app for pirates
+
+
+ Dice Games
+
+ Roll some dice, have some fun!
+
+
+
+
+
+
+
+
+
+
+
diff --git a/structure-and-scale/seven-seas-service-worker/dice.js b/structure-and-scale/seven-seas-service-worker/dice.js
new file mode 100644
index 0000000..e557933
--- /dev/null
+++ b/structure-and-scale/seven-seas-service-worker/dice.js
@@ -0,0 +1,135 @@
+(function () {
+ 'use strict';
+
+ class RollDice extends HTMLElement {
+
+ #dice;
+
+ /**
+ * The constructor object
+ */
+ constructor () {
+
+ // Run this first
+ super();
+
+ // Creates a shadow root
+ this.root = this.attachShadow({mode: 'closed'});
+
+ // Define properties
+ this.#dice = [1, 2, 3, 4, 5, 6];
+
+ // Render HTML
+ this.root.innerHTML =
+ `
+
+ Roll Dice
+
+
`;
+
+ }
+
+ /**
+ * Randomly shuffle an array
+ * https://stackoverflow.com/a/2450976/1293256
+ * @param {Array} array The array to shuffle
+ * @return {Array} The shuffled array
+ */
+ #shuffle (array) {
+
+ let currentIndex = array.length;
+ let temporaryValue, randomIndex;
+
+ // While there remain elements to shuffle...
+ while (0 !== currentIndex) {
+ // Pick a remaining element...
+ randomIndex = Math.floor(Math.random() * currentIndex);
+ currentIndex -= 1;
+
+ // And swap it with the current element.
+ temporaryValue = array[currentIndex];
+ array[currentIndex] = array[randomIndex];
+ array[randomIndex] = temporaryValue;
+ }
+
+ return array;
+
+ }
+
+ /**
+ * Shuffle dice array and return first number
+ * @return {Number} The result
+ */
+ #roll () {
+ this.#shuffle(this.#dice);
+ return this.#dice[0];
+ }
+
+ /**
+ * Handle click events
+ * @param {Event} event The event object
+ */
+ #clickHandler (event) {
+
+ // Get the host component
+ let host = event.target.getRootNode().host;
+
+ // Get the message element
+ let target = host.root.querySelector('[aria-live="polite"]');
+ if (!target) return;
+
+ // Roll the dice
+ let roll = host.#roll();
+
+ // Inject the message into the UI
+ target.textContent = `You rolled a ${roll}`;
+
+ }
+
+ /**
+ * Runs each time the element is appended to or moved in the DOM
+ */
+ connectedCallback () {
+
+ // Attach a click event listener to the button
+ let btn = this.root.querySelector('button');
+ if (!btn) return;
+ btn.addEventListener('click', this.#clickHandler);
+
+ }
+
+ /**
+ * Runs when the element is removed from the DOM
+ */
+ disconnectedCallback () {
+
+ // Remove the click event listener from the button
+ let btn = this.root.querySelector('button');
+ if (!btn) return;
+ btn.removeEventListener('click', this.#clickHandler);
+
+ }
+
+ }
+
+ if ('customElements' in window) {
+ customElements.define('roll-dice', RollDice);
+ }
+
+})();
diff --git a/structure-and-scale/seven-seas-service-worker/index.html b/structure-and-scale/seven-seas-service-worker/index.html
new file mode 100644
index 0000000..97b2aac
--- /dev/null
+++ b/structure-and-scale/seven-seas-service-worker/index.html
@@ -0,0 +1,32 @@
+
+
+
+
+
+ Seven Seas
+
+
+
+
+
+
+
+ 🏴☠️ Seven Seas
+ The travel app for pirates
+
+
+ Seven Seas
+
+
+
+
+ Dice Games
+ Treasure Chest
+
+
+
+
+
+
+
+
diff --git a/structure-and-scale/seven-seas-service-worker/index.html~ b/structure-and-scale/seven-seas-service-worker/index.html~
new file mode 100644
index 0000000..7589ef0
--- /dev/null
+++ b/structure-and-scale/seven-seas-service-worker/index.html~
@@ -0,0 +1,30 @@
+
+
+
+
+ Seven Seas
+
+
+
+
+
+
+
+ 🏴☠️ Seven Seas
+ The travel app for pirates
+
+
+ Seven Seas
+
+
+
+
+ Dice Games
+ Treasure Chest
+
+
+
+
+
+
+
diff --git a/structure-and-scale/seven-seas-service-worker/index.js b/structure-and-scale/seven-seas-service-worker/index.js
new file mode 100644
index 0000000..9ea7dc3
--- /dev/null
+++ b/structure-and-scale/seven-seas-service-worker/index.js
@@ -0,0 +1,198 @@
+(function () {
+ 'use strict';
+
+ class TreasureChest {
+
+ #bronze;
+ #silver;
+ #gold;
+ #loot;
+
+ /**
+ * Create the constructor object
+ * @param {Object} options User settings
+ */
+ constructor (options = {}) {
+
+ // Merge options into defaults
+ let {bronze, silver, gold, loot} = Object.assign({
+ bronze: 0,
+ silver: 0,
+ gold: 0,
+ loot: `You have {{gold}} gold, {{silver}} silver, and {{bronze}} bronze.`
+ }, options);
+
+ // Set instance properties
+ this.#bronze = bronze;
+ this.#silver = silver;
+ this.#gold = gold;
+ this.#loot = loot;
+
+ }
+
+ /**
+ * Randomly shuffle an array
+ * https://stackoverflow.com/a/2450976/1293256
+ * @param {Array} array The array to shuffle
+ * @return {Array} The shuffled array
+ */
+ static #shuffle (array) {
+
+ let currentIndex = array.length;
+ let temporaryValue, randomIndex;
+
+ // While there remain elements to shuffle...
+ while (0 !== currentIndex) {
+ // Pick a remaining element...
+ randomIndex = Math.floor(Math.random() * currentIndex);
+ currentIndex -= 1;
+
+ // And swap it with the current element.
+ temporaryValue = array[currentIndex];
+ array[currentIndex] = array[randomIndex];
+ array[randomIndex] = temporaryValue;
+ }
+
+ return array;
+
+ }
+
+ /**
+ * Emit a custom event
+ * @param {String} type The event type
+ * @param {*} detail Any details to pass along with the event
+ */
+ #emit (type, detail) {
+
+ // Create a new event
+ let event = new CustomEvent(type, {
+ bubbles: true,
+ cancelable: true,
+ detail: detail
+ });
+
+ // Dispatch the event
+ return document.dispatchEvent(event);
+
+ }
+
+ /**
+ * Add bronze to the treasure chest
+ * @param {Number} n The amount to add
+ */
+ addBronze (n) {
+ this.#bronze += n;
+ this.#emit('treasure:bronze', this);
+ return this;
+ }
+
+ /**
+ * Add silver to the treasure chest
+ * @param {Number} n The amount to add
+ */
+ addSilver (n) {
+ this.#silver += n;
+ this.#emit('treasure:silver', this);
+ return this;
+ }
+
+ /**
+ * Add gold to the treasure chest
+ * @param {Number} n The amount to add
+ */
+ addGold (n) {
+ this.#gold += n;
+ this.#emit('treasure:gold', this);
+ return this;
+ }
+
+ /**
+ * Get the total amount of loot as a string
+ * @return {String} The total amount of loot
+ */
+ getLoot () {
+ return this.#loot.replace('{{gold}}', this.#gold).replace('{{silver}}', this.#silver).replace('{{bronze}}', this.#bronze);
+ }
+
+ /**
+ * Get the amount of bronze
+ * @return {Number} The amount
+ */
+ getBronze () {
+ return this.#bronze;
+ }
+
+ /**
+ * Get the amount of silver
+ * @return {Number} The amount
+ */
+ getSilver () {
+ return this.#silver;
+ }
+
+ /**
+ * Get the amount of gold
+ * @return {Number} The amount
+ */
+ getGold () {
+ return this.#gold;
+ }
+
+ /**
+ * Generate random treasure
+ * @return {Object} The amount and type of loot found
+ */
+ static random () {
+
+ // Amount and type
+ let amount = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50];
+ let type = ['bronze', 'silver', 'gold'];
+
+ // Randomize the amounts
+ this.#shuffle(amount);
+ this.#shuffle(type);
+
+ // Return the random loot
+ return {
+ amount: amount[0],
+ type: type[0]
+ };
+
+ }
+
+ }
+
+ //
+ // Functions
+ //
+
+ // Hold the treasure instance
+ let treasure;
+
+ /**
+ * Create new treasure instance
+ * @return {Constructor} A new TreasureChest instance
+ */
+ function createTreasure () {
+
+ // Get any saved loot from localStorage
+ let savedLoot = JSON.parse(localStorage.getItem('ss-treasure'));
+
+ // Create new Treasure Chest instance
+ treasure = new TreasureChest(savedLoot);
+
+ }
+
+ /**
+ * Display the amount of loot in the UI
+ */
+ function showLoot () {
+ let loot = document.querySelector('#loot');
+ if (!loot) return;
+ loot.textContent = treasure.getLoot();
+ }
+
+ createTreasure();
+ showLoot();
+
+})();
diff --git a/structure-and-scale/seven-seas-service-worker/node_modules/.bin/rollup b/structure-and-scale/seven-seas-service-worker/node_modules/.bin/rollup
new file mode 120000
index 0000000..5939621
--- /dev/null
+++ b/structure-and-scale/seven-seas-service-worker/node_modules/.bin/rollup
@@ -0,0 +1 @@
+../rollup/dist/bin/rollup
\ No newline at end of file
diff --git a/structure-and-scale/seven-seas-service-worker/node_modules/.package-lock.json b/structure-and-scale/seven-seas-service-worker/node_modules/.package-lock.json
new file mode 100644
index 0000000..841100f
--- /dev/null
+++ b/structure-and-scale/seven-seas-service-worker/node_modules/.package-lock.json
@@ -0,0 +1,64 @@
+{
+ "name": "seven-seas-bundlers",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.21.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.2.tgz",
+ "integrity": "sha512-B90tYAUoLhU22olrafY3JQCFLnT3NglazdwkHyxNDYF/zAxJt5fJUB/yBoWFoIQ7SQj+KLe3iL4BhOMa9fzgpw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
+ "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/rollup": {
+ "version": "4.21.2",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.21.2.tgz",
+ "integrity": "sha512-e3TapAgYf9xjdLvKQCkQTnbTKd4a6jwlpQSJJFokHGaX2IVjoEqkIIhiQfqsi0cdwlOD+tQGuOd5AJkc5RngBw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "1.0.5"
+ },
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=18.0.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "@rollup/rollup-android-arm-eabi": "4.21.2",
+ "@rollup/rollup-android-arm64": "4.21.2",
+ "@rollup/rollup-darwin-arm64": "4.21.2",
+ "@rollup/rollup-darwin-x64": "4.21.2",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.21.2",
+ "@rollup/rollup-linux-arm-musleabihf": "4.21.2",
+ "@rollup/rollup-linux-arm64-gnu": "4.21.2",
+ "@rollup/rollup-linux-arm64-musl": "4.21.2",
+ "@rollup/rollup-linux-powerpc64le-gnu": "4.21.2",
+ "@rollup/rollup-linux-riscv64-gnu": "4.21.2",
+ "@rollup/rollup-linux-s390x-gnu": "4.21.2",
+ "@rollup/rollup-linux-x64-gnu": "4.21.2",
+ "@rollup/rollup-linux-x64-musl": "4.21.2",
+ "@rollup/rollup-win32-arm64-msvc": "4.21.2",
+ "@rollup/rollup-win32-ia32-msvc": "4.21.2",
+ "@rollup/rollup-win32-x64-msvc": "4.21.2",
+ "fsevents": "~2.3.2"
+ }
+ }
+ }
+}
diff --git a/structure-and-scale/seven-seas-service-worker/node_modules/@rollup/rollup-linux-x64-gnu/README.md b/structure-and-scale/seven-seas-service-worker/node_modules/@rollup/rollup-linux-x64-gnu/README.md
new file mode 100644
index 0000000..cabe280
--- /dev/null
+++ b/structure-and-scale/seven-seas-service-worker/node_modules/@rollup/rollup-linux-x64-gnu/README.md
@@ -0,0 +1,3 @@
+# `@rollup/rollup-linux-x64-gnu`
+
+This is the **x86_64-unknown-linux-gnu** binary for `rollup`
diff --git a/structure-and-scale/seven-seas-service-worker/node_modules/@rollup/rollup-linux-x64-gnu/package.json b/structure-and-scale/seven-seas-service-worker/node_modules/@rollup/rollup-linux-x64-gnu/package.json
new file mode 100644
index 0000000..2e8b4c0
--- /dev/null
+++ b/structure-and-scale/seven-seas-service-worker/node_modules/@rollup/rollup-linux-x64-gnu/package.json
@@ -0,0 +1,22 @@
+{
+ "name": "@rollup/rollup-linux-x64-gnu",
+ "version": "4.21.2",
+ "os": [
+ "linux"
+ ],
+ "cpu": [
+ "x64"
+ ],
+ "files": [
+ "rollup.linux-x64-gnu.node"
+ ],
+ "description": "Native bindings for Rollup",
+ "author": "Lukas Taegert-Atkinson",
+ "homepage": "https://rollupjs.org/",
+ "license": "MIT",
+ "repository": "rollup/rollup",
+ "libc": [
+ "glibc"
+ ],
+ "main": "./rollup.linux-x64-gnu.node"
+}
\ No newline at end of file
diff --git a/structure-and-scale/seven-seas-service-worker/node_modules/@rollup/rollup-linux-x64-gnu/rollup.linux-x64-gnu.node b/structure-and-scale/seven-seas-service-worker/node_modules/@rollup/rollup-linux-x64-gnu/rollup.linux-x64-gnu.node
new file mode 100644
index 0000000..1fbcc46
Binary files /dev/null and b/structure-and-scale/seven-seas-service-worker/node_modules/@rollup/rollup-linux-x64-gnu/rollup.linux-x64-gnu.node differ
diff --git a/structure-and-scale/seven-seas-service-worker/node_modules/@types/estree/LICENSE b/structure-and-scale/seven-seas-service-worker/node_modules/@types/estree/LICENSE
new file mode 100644
index 0000000..9e841e7
--- /dev/null
+++ b/structure-and-scale/seven-seas-service-worker/node_modules/@types/estree/LICENSE
@@ -0,0 +1,21 @@
+ MIT License
+
+ Copyright (c) Microsoft Corporation.
+
+ 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
diff --git a/structure-and-scale/seven-seas-service-worker/node_modules/@types/estree/README.md b/structure-and-scale/seven-seas-service-worker/node_modules/@types/estree/README.md
new file mode 100644
index 0000000..90732eb
--- /dev/null
+++ b/structure-and-scale/seven-seas-service-worker/node_modules/@types/estree/README.md
@@ -0,0 +1,15 @@
+# Installation
+> `npm install --save @types/estree`
+
+# Summary
+This package contains type definitions for estree (https://github.com/estree/estree).
+
+# Details
+Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/estree.
+
+### Additional Details
+ * Last updated: Mon, 06 Nov 2023 22:41:05 GMT
+ * Dependencies: none
+
+# Credits
+These definitions were written by [RReverser](https://github.com/RReverser).
diff --git a/structure-and-scale/seven-seas-service-worker/node_modules/@types/estree/flow.d.ts b/structure-and-scale/seven-seas-service-worker/node_modules/@types/estree/flow.d.ts
new file mode 100644
index 0000000..9d001a9
--- /dev/null
+++ b/structure-and-scale/seven-seas-service-worker/node_modules/@types/estree/flow.d.ts
@@ -0,0 +1,167 @@
+declare namespace ESTree {
+ interface FlowTypeAnnotation extends Node {}
+
+ interface FlowBaseTypeAnnotation extends FlowTypeAnnotation {}
+
+ interface FlowLiteralTypeAnnotation extends FlowTypeAnnotation, Literal {}
+
+ interface FlowDeclaration extends Declaration {}
+
+ interface AnyTypeAnnotation extends FlowBaseTypeAnnotation {}
+
+ interface ArrayTypeAnnotation extends FlowTypeAnnotation {
+ elementType: FlowTypeAnnotation;
+ }
+
+ interface BooleanLiteralTypeAnnotation extends FlowLiteralTypeAnnotation {}
+
+ interface BooleanTypeAnnotation extends FlowBaseTypeAnnotation {}
+
+ interface ClassImplements extends Node {
+ id: Identifier;
+ typeParameters?: TypeParameterInstantiation | null;
+ }
+
+ interface ClassProperty {
+ key: Expression;
+ value?: Expression | null;
+ typeAnnotation?: TypeAnnotation | null;
+ computed: boolean;
+ static: boolean;
+ }
+
+ interface DeclareClass extends FlowDeclaration {
+ id: Identifier;
+ typeParameters?: TypeParameterDeclaration | null;
+ body: ObjectTypeAnnotation;
+ extends: InterfaceExtends[];
+ }
+
+ interface DeclareFunction extends FlowDeclaration {
+ id: Identifier;
+ }
+
+ interface DeclareModule extends FlowDeclaration {
+ id: Literal | Identifier;
+ body: BlockStatement;
+ }
+
+ interface DeclareVariable extends FlowDeclaration {
+ id: Identifier;
+ }
+
+ interface FunctionTypeAnnotation extends FlowTypeAnnotation {
+ params: FunctionTypeParam[];
+ returnType: FlowTypeAnnotation;
+ rest?: FunctionTypeParam | null;
+ typeParameters?: TypeParameterDeclaration | null;
+ }
+
+ interface FunctionTypeParam {
+ name: Identifier;
+ typeAnnotation: FlowTypeAnnotation;
+ optional: boolean;
+ }
+
+ interface GenericTypeAnnotation extends FlowTypeAnnotation {
+ id: Identifier | QualifiedTypeIdentifier;
+ typeParameters?: TypeParameterInstantiation | null;
+ }
+
+ interface InterfaceExtends extends Node {
+ id: Identifier | QualifiedTypeIdentifier;
+ typeParameters?: TypeParameterInstantiation | null;
+ }
+
+ interface InterfaceDeclaration extends FlowDeclaration {
+ id: Identifier;
+ typeParameters?: TypeParameterDeclaration | null;
+ extends: InterfaceExtends[];
+ body: ObjectTypeAnnotation;
+ }
+
+ interface IntersectionTypeAnnotation extends FlowTypeAnnotation {
+ types: FlowTypeAnnotation[];
+ }
+
+ interface MixedTypeAnnotation extends FlowBaseTypeAnnotation {}
+
+ interface NullableTypeAnnotation extends FlowTypeAnnotation {
+ typeAnnotation: TypeAnnotation;
+ }
+
+ interface NumberLiteralTypeAnnotation extends FlowLiteralTypeAnnotation {}
+
+ interface NumberTypeAnnotation extends FlowBaseTypeAnnotation {}
+
+ interface StringLiteralTypeAnnotation extends FlowLiteralTypeAnnotation {}
+
+ interface StringTypeAnnotation extends FlowBaseTypeAnnotation {}
+
+ interface TupleTypeAnnotation extends FlowTypeAnnotation {
+ types: FlowTypeAnnotation[];
+ }
+
+ interface TypeofTypeAnnotation extends FlowTypeAnnotation {
+ argument: FlowTypeAnnotation;
+ }
+
+ interface TypeAlias extends FlowDeclaration {
+ id: Identifier;
+ typeParameters?: TypeParameterDeclaration | null;
+ right: FlowTypeAnnotation;
+ }
+
+ interface TypeAnnotation extends Node {
+ typeAnnotation: FlowTypeAnnotation;
+ }
+
+ interface TypeCastExpression extends Expression {
+ expression: Expression;
+ typeAnnotation: TypeAnnotation;
+ }
+
+ interface TypeParameterDeclaration extends Node {
+ params: Identifier[];
+ }
+
+ interface TypeParameterInstantiation extends Node {
+ params: FlowTypeAnnotation[];
+ }
+
+ interface ObjectTypeAnnotation extends FlowTypeAnnotation {
+ properties: ObjectTypeProperty[];
+ indexers: ObjectTypeIndexer[];
+ callProperties: ObjectTypeCallProperty[];
+ }
+
+ interface ObjectTypeCallProperty extends Node {
+ value: FunctionTypeAnnotation;
+ static: boolean;
+ }
+
+ interface ObjectTypeIndexer extends Node {
+ id: Identifier;
+ key: FlowTypeAnnotation;
+ value: FlowTypeAnnotation;
+ static: boolean;
+ }
+
+ interface ObjectTypeProperty extends Node {
+ key: Expression;
+ value: FlowTypeAnnotation;
+ optional: boolean;
+ static: boolean;
+ }
+
+ interface QualifiedTypeIdentifier extends Node {
+ qualification: Identifier | QualifiedTypeIdentifier;
+ id: Identifier;
+ }
+
+ interface UnionTypeAnnotation extends FlowTypeAnnotation {
+ types: FlowTypeAnnotation[];
+ }
+
+ interface VoidTypeAnnotation extends FlowBaseTypeAnnotation {}
+}
diff --git a/structure-and-scale/seven-seas-service-worker/node_modules/@types/estree/index.d.ts b/structure-and-scale/seven-seas-service-worker/node_modules/@types/estree/index.d.ts
new file mode 100644
index 0000000..e933e20
--- /dev/null
+++ b/structure-and-scale/seven-seas-service-worker/node_modules/@types/estree/index.d.ts
@@ -0,0 +1,683 @@
+// This definition file follows a somewhat unusual format. ESTree allows
+// runtime type checks based on the `type` parameter. In order to explain this
+// to typescript we want to use discriminated union types:
+// https://github.com/Microsoft/TypeScript/pull/9163
+//
+// For ESTree this is a bit tricky because the high level interfaces like
+// Node or Function are pulling double duty. We want to pass common fields down
+// to the interfaces that extend them (like Identifier or
+// ArrowFunctionExpression), but you can't extend a type union or enforce
+// common fields on them. So we've split the high level interfaces into two
+// types, a base type which passes down inherited fields, and a type union of
+// all types which extend the base type. Only the type union is exported, and
+// the union is how other types refer to the collection of inheriting types.
+//
+// This makes the definitions file here somewhat more difficult to maintain,
+// but it has the notable advantage of making ESTree much easier to use as
+// an end user.
+
+export interface BaseNodeWithoutComments {
+ // Every leaf interface that extends BaseNode must specify a type property.
+ // The type property should be a string literal. For example, Identifier
+ // has: `type: "Identifier"`
+ type: string;
+ loc?: SourceLocation | null | undefined;
+ range?: [number, number] | undefined;
+}
+
+export interface BaseNode extends BaseNodeWithoutComments {
+ leadingComments?: Comment[] | undefined;
+ trailingComments?: Comment[] | undefined;
+}
+
+export interface NodeMap {
+ AssignmentProperty: AssignmentProperty;
+ CatchClause: CatchClause;
+ Class: Class;
+ ClassBody: ClassBody;
+ Expression: Expression;
+ Function: Function;
+ Identifier: Identifier;
+ Literal: Literal;
+ MethodDefinition: MethodDefinition;
+ ModuleDeclaration: ModuleDeclaration;
+ ModuleSpecifier: ModuleSpecifier;
+ Pattern: Pattern;
+ PrivateIdentifier: PrivateIdentifier;
+ Program: Program;
+ Property: Property;
+ PropertyDefinition: PropertyDefinition;
+ SpreadElement: SpreadElement;
+ Statement: Statement;
+ Super: Super;
+ SwitchCase: SwitchCase;
+ TemplateElement: TemplateElement;
+ VariableDeclarator: VariableDeclarator;
+}
+
+export type Node = NodeMap[keyof NodeMap];
+
+export interface Comment extends BaseNodeWithoutComments {
+ type: "Line" | "Block";
+ value: string;
+}
+
+export interface SourceLocation {
+ source?: string | null | undefined;
+ start: Position;
+ end: Position;
+}
+
+export interface Position {
+ /** >= 1 */
+ line: number;
+ /** >= 0 */
+ column: number;
+}
+
+export interface Program extends BaseNode {
+ type: "Program";
+ sourceType: "script" | "module";
+ body: Array;
+ comments?: Comment[] | undefined;
+}
+
+export interface Directive extends BaseNode {
+ type: "ExpressionStatement";
+ expression: Literal;
+ directive: string;
+}
+
+export interface BaseFunction extends BaseNode {
+ params: Pattern[];
+ generator?: boolean | undefined;
+ async?: boolean | undefined;
+ // The body is either BlockStatement or Expression because arrow functions
+ // can have a body that's either. FunctionDeclarations and
+ // FunctionExpressions have only BlockStatement bodies.
+ body: BlockStatement | Expression;
+}
+
+export type Function = FunctionDeclaration | FunctionExpression | ArrowFunctionExpression;
+
+export type Statement =
+ | ExpressionStatement
+ | BlockStatement
+ | StaticBlock
+ | EmptyStatement
+ | DebuggerStatement
+ | WithStatement
+ | ReturnStatement
+ | LabeledStatement
+ | BreakStatement
+ | ContinueStatement
+ | IfStatement
+ | SwitchStatement
+ | ThrowStatement
+ | TryStatement
+ | WhileStatement
+ | DoWhileStatement
+ | ForStatement
+ | ForInStatement
+ | ForOfStatement
+ | Declaration;
+
+export interface BaseStatement extends BaseNode {}
+
+export interface EmptyStatement extends BaseStatement {
+ type: "EmptyStatement";
+}
+
+export interface BlockStatement extends BaseStatement {
+ type: "BlockStatement";
+ body: Statement[];
+ innerComments?: Comment[] | undefined;
+}
+
+export interface StaticBlock extends Omit {
+ type: "StaticBlock";
+}
+
+export interface ExpressionStatement extends BaseStatement {
+ type: "ExpressionStatement";
+ expression: Expression;
+}
+
+export interface IfStatement extends BaseStatement {
+ type: "IfStatement";
+ test: Expression;
+ consequent: Statement;
+ alternate?: Statement | null | undefined;
+}
+
+export interface LabeledStatement extends BaseStatement {
+ type: "LabeledStatement";
+ label: Identifier;
+ body: Statement;
+}
+
+export interface BreakStatement extends BaseStatement {
+ type: "BreakStatement";
+ label?: Identifier | null | undefined;
+}
+
+export interface ContinueStatement extends BaseStatement {
+ type: "ContinueStatement";
+ label?: Identifier | null | undefined;
+}
+
+export interface WithStatement extends BaseStatement {
+ type: "WithStatement";
+ object: Expression;
+ body: Statement;
+}
+
+export interface SwitchStatement extends BaseStatement {
+ type: "SwitchStatement";
+ discriminant: Expression;
+ cases: SwitchCase[];
+}
+
+export interface ReturnStatement extends BaseStatement {
+ type: "ReturnStatement";
+ argument?: Expression | null | undefined;
+}
+
+export interface ThrowStatement extends BaseStatement {
+ type: "ThrowStatement";
+ argument: Expression;
+}
+
+export interface TryStatement extends BaseStatement {
+ type: "TryStatement";
+ block: BlockStatement;
+ handler?: CatchClause | null | undefined;
+ finalizer?: BlockStatement | null | undefined;
+}
+
+export interface WhileStatement extends BaseStatement {
+ type: "WhileStatement";
+ test: Expression;
+ body: Statement;
+}
+
+export interface DoWhileStatement extends BaseStatement {
+ type: "DoWhileStatement";
+ body: Statement;
+ test: Expression;
+}
+
+export interface ForStatement extends BaseStatement {
+ type: "ForStatement";
+ init?: VariableDeclaration | Expression | null | undefined;
+ test?: Expression | null | undefined;
+ update?: Expression | null | undefined;
+ body: Statement;
+}
+
+export interface BaseForXStatement extends BaseStatement {
+ left: VariableDeclaration | Pattern;
+ right: Expression;
+ body: Statement;
+}
+
+export interface ForInStatement extends BaseForXStatement {
+ type: "ForInStatement";
+}
+
+export interface DebuggerStatement extends BaseStatement {
+ type: "DebuggerStatement";
+}
+
+export type Declaration = FunctionDeclaration | VariableDeclaration | ClassDeclaration;
+
+export interface BaseDeclaration extends BaseStatement {}
+
+export interface MaybeNamedFunctionDeclaration extends BaseFunction, BaseDeclaration {
+ type: "FunctionDeclaration";
+ /** It is null when a function declaration is a part of the `export default function` statement */
+ id: Identifier | null;
+ body: BlockStatement;
+}
+
+export interface FunctionDeclaration extends MaybeNamedFunctionDeclaration {
+ id: Identifier;
+}
+
+export interface VariableDeclaration extends BaseDeclaration {
+ type: "VariableDeclaration";
+ declarations: VariableDeclarator[];
+ kind: "var" | "let" | "const";
+}
+
+export interface VariableDeclarator extends BaseNode {
+ type: "VariableDeclarator";
+ id: Pattern;
+ init?: Expression | null | undefined;
+}
+
+export interface ExpressionMap {
+ ArrayExpression: ArrayExpression;
+ ArrowFunctionExpression: ArrowFunctionExpression;
+ AssignmentExpression: AssignmentExpression;
+ AwaitExpression: AwaitExpression;
+ BinaryExpression: BinaryExpression;
+ CallExpression: CallExpression;
+ ChainExpression: ChainExpression;
+ ClassExpression: ClassExpression;
+ ConditionalExpression: ConditionalExpression;
+ FunctionExpression: FunctionExpression;
+ Identifier: Identifier;
+ ImportExpression: ImportExpression;
+ Literal: Literal;
+ LogicalExpression: LogicalExpression;
+ MemberExpression: MemberExpression;
+ MetaProperty: MetaProperty;
+ NewExpression: NewExpression;
+ ObjectExpression: ObjectExpression;
+ SequenceExpression: SequenceExpression;
+ TaggedTemplateExpression: TaggedTemplateExpression;
+ TemplateLiteral: TemplateLiteral;
+ ThisExpression: ThisExpression;
+ UnaryExpression: UnaryExpression;
+ UpdateExpression: UpdateExpression;
+ YieldExpression: YieldExpression;
+}
+
+export type Expression = ExpressionMap[keyof ExpressionMap];
+
+export interface BaseExpression extends BaseNode {}
+
+export type ChainElement = SimpleCallExpression | MemberExpression;
+
+export interface ChainExpression extends BaseExpression {
+ type: "ChainExpression";
+ expression: ChainElement;
+}
+
+export interface ThisExpression extends BaseExpression {
+ type: "ThisExpression";
+}
+
+export interface ArrayExpression extends BaseExpression {
+ type: "ArrayExpression";
+ elements: Array;
+}
+
+export interface ObjectExpression extends BaseExpression {
+ type: "ObjectExpression";
+ properties: Array;
+}
+
+export interface PrivateIdentifier extends BaseNode {
+ type: "PrivateIdentifier";
+ name: string;
+}
+
+export interface Property extends BaseNode {
+ type: "Property";
+ key: Expression | PrivateIdentifier;
+ value: Expression | Pattern; // Could be an AssignmentProperty
+ kind: "init" | "get" | "set";
+ method: boolean;
+ shorthand: boolean;
+ computed: boolean;
+}
+
+export interface PropertyDefinition extends BaseNode {
+ type: "PropertyDefinition";
+ key: Expression | PrivateIdentifier;
+ value?: Expression | null | undefined;
+ computed: boolean;
+ static: boolean;
+}
+
+export interface FunctionExpression extends BaseFunction, BaseExpression {
+ id?: Identifier | null | undefined;
+ type: "FunctionExpression";
+ body: BlockStatement;
+}
+
+export interface SequenceExpression extends BaseExpression {
+ type: "SequenceExpression";
+ expressions: Expression[];
+}
+
+export interface UnaryExpression extends BaseExpression {
+ type: "UnaryExpression";
+ operator: UnaryOperator;
+ prefix: true;
+ argument: Expression;
+}
+
+export interface BinaryExpression extends BaseExpression {
+ type: "BinaryExpression";
+ operator: BinaryOperator;
+ left: Expression;
+ right: Expression;
+}
+
+export interface AssignmentExpression extends BaseExpression {
+ type: "AssignmentExpression";
+ operator: AssignmentOperator;
+ left: Pattern | MemberExpression;
+ right: Expression;
+}
+
+export interface UpdateExpression extends BaseExpression {
+ type: "UpdateExpression";
+ operator: UpdateOperator;
+ argument: Expression;
+ prefix: boolean;
+}
+
+export interface LogicalExpression extends BaseExpression {
+ type: "LogicalExpression";
+ operator: LogicalOperator;
+ left: Expression;
+ right: Expression;
+}
+
+export interface ConditionalExpression extends BaseExpression {
+ type: "ConditionalExpression";
+ test: Expression;
+ alternate: Expression;
+ consequent: Expression;
+}
+
+export interface BaseCallExpression extends BaseExpression {
+ callee: Expression | Super;
+ arguments: Array;
+}
+export type CallExpression = SimpleCallExpression | NewExpression;
+
+export interface SimpleCallExpression extends BaseCallExpression {
+ type: "CallExpression";
+ optional: boolean;
+}
+
+export interface NewExpression extends BaseCallExpression {
+ type: "NewExpression";
+}
+
+export interface MemberExpression extends BaseExpression, BasePattern {
+ type: "MemberExpression";
+ object: Expression | Super;
+ property: Expression | PrivateIdentifier;
+ computed: boolean;
+ optional: boolean;
+}
+
+export type Pattern = Identifier | ObjectPattern | ArrayPattern | RestElement | AssignmentPattern | MemberExpression;
+
+export interface BasePattern extends BaseNode {}
+
+export interface SwitchCase extends BaseNode {
+ type: "SwitchCase";
+ test?: Expression | null | undefined;
+ consequent: Statement[];
+}
+
+export interface CatchClause extends BaseNode {
+ type: "CatchClause";
+ param: Pattern | null;
+ body: BlockStatement;
+}
+
+export interface Identifier extends BaseNode, BaseExpression, BasePattern {
+ type: "Identifier";
+ name: string;
+}
+
+export type Literal = SimpleLiteral | RegExpLiteral | BigIntLiteral;
+
+export interface SimpleLiteral extends BaseNode, BaseExpression {
+ type: "Literal";
+ value: string | boolean | number | null;
+ raw?: string | undefined;
+}
+
+export interface RegExpLiteral extends BaseNode, BaseExpression {
+ type: "Literal";
+ value?: RegExp | null | undefined;
+ regex: {
+ pattern: string;
+ flags: string;
+ };
+ raw?: string | undefined;
+}
+
+export interface BigIntLiteral extends BaseNode, BaseExpression {
+ type: "Literal";
+ value?: bigint | null | undefined;
+ bigint: string;
+ raw?: string | undefined;
+}
+
+export type UnaryOperator = "-" | "+" | "!" | "~" | "typeof" | "void" | "delete";
+
+export type BinaryOperator =
+ | "=="
+ | "!="
+ | "==="
+ | "!=="
+ | "<"
+ | "<="
+ | ">"
+ | ">="
+ | "<<"
+ | ">>"
+ | ">>>"
+ | "+"
+ | "-"
+ | "*"
+ | "/"
+ | "%"
+ | "**"
+ | "|"
+ | "^"
+ | "&"
+ | "in"
+ | "instanceof";
+
+export type LogicalOperator = "||" | "&&" | "??";
+
+export type AssignmentOperator =
+ | "="
+ | "+="
+ | "-="
+ | "*="
+ | "/="
+ | "%="
+ | "**="
+ | "<<="
+ | ">>="
+ | ">>>="
+ | "|="
+ | "^="
+ | "&="
+ | "||="
+ | "&&="
+ | "??=";
+
+export type UpdateOperator = "++" | "--";
+
+export interface ForOfStatement extends BaseForXStatement {
+ type: "ForOfStatement";
+ await: boolean;
+}
+
+export interface Super extends BaseNode {
+ type: "Super";
+}
+
+export interface SpreadElement extends BaseNode {
+ type: "SpreadElement";
+ argument: Expression;
+}
+
+export interface ArrowFunctionExpression extends BaseExpression, BaseFunction {
+ type: "ArrowFunctionExpression";
+ expression: boolean;
+ body: BlockStatement | Expression;
+}
+
+export interface YieldExpression extends BaseExpression {
+ type: "YieldExpression";
+ argument?: Expression | null | undefined;
+ delegate: boolean;
+}
+
+export interface TemplateLiteral extends BaseExpression {
+ type: "TemplateLiteral";
+ quasis: TemplateElement[];
+ expressions: Expression[];
+}
+
+export interface TaggedTemplateExpression extends BaseExpression {
+ type: "TaggedTemplateExpression";
+ tag: Expression;
+ quasi: TemplateLiteral;
+}
+
+export interface TemplateElement extends BaseNode {
+ type: "TemplateElement";
+ tail: boolean;
+ value: {
+ /** It is null when the template literal is tagged and the text has an invalid escape (e.g. - tag`\unicode and \u{55}`) */
+ cooked?: string | null | undefined;
+ raw: string;
+ };
+}
+
+export interface AssignmentProperty extends Property {
+ value: Pattern;
+ kind: "init";
+ method: boolean; // false
+}
+
+export interface ObjectPattern extends BasePattern {
+ type: "ObjectPattern";
+ properties: Array;
+}
+
+export interface ArrayPattern extends BasePattern {
+ type: "ArrayPattern";
+ elements: Array;
+}
+
+export interface RestElement extends BasePattern {
+ type: "RestElement";
+ argument: Pattern;
+}
+
+export interface AssignmentPattern extends BasePattern {
+ type: "AssignmentPattern";
+ left: Pattern;
+ right: Expression;
+}
+
+export type Class = ClassDeclaration | ClassExpression;
+export interface BaseClass extends BaseNode {
+ superClass?: Expression | null | undefined;
+ body: ClassBody;
+}
+
+export interface ClassBody extends BaseNode {
+ type: "ClassBody";
+ body: Array;
+}
+
+export interface MethodDefinition extends BaseNode {
+ type: "MethodDefinition";
+ key: Expression | PrivateIdentifier;
+ value: FunctionExpression;
+ kind: "constructor" | "method" | "get" | "set";
+ computed: boolean;
+ static: boolean;
+}
+
+export interface MaybeNamedClassDeclaration extends BaseClass, BaseDeclaration {
+ type: "ClassDeclaration";
+ /** It is null when a class declaration is a part of the `export default class` statement */
+ id: Identifier | null;
+}
+
+export interface ClassDeclaration extends MaybeNamedClassDeclaration {
+ id: Identifier;
+}
+
+export interface ClassExpression extends BaseClass, BaseExpression {
+ type: "ClassExpression";
+ id?: Identifier | null | undefined;
+}
+
+export interface MetaProperty extends BaseExpression {
+ type: "MetaProperty";
+ meta: Identifier;
+ property: Identifier;
+}
+
+export type ModuleDeclaration =
+ | ImportDeclaration
+ | ExportNamedDeclaration
+ | ExportDefaultDeclaration
+ | ExportAllDeclaration;
+export interface BaseModuleDeclaration extends BaseNode {}
+
+export type ModuleSpecifier = ImportSpecifier | ImportDefaultSpecifier | ImportNamespaceSpecifier | ExportSpecifier;
+export interface BaseModuleSpecifier extends BaseNode {
+ local: Identifier;
+}
+
+export interface ImportDeclaration extends BaseModuleDeclaration {
+ type: "ImportDeclaration";
+ specifiers: Array;
+ source: Literal;
+}
+
+export interface ImportSpecifier extends BaseModuleSpecifier {
+ type: "ImportSpecifier";
+ imported: Identifier;
+}
+
+export interface ImportExpression extends BaseExpression {
+ type: "ImportExpression";
+ source: Expression;
+}
+
+export interface ImportDefaultSpecifier extends BaseModuleSpecifier {
+ type: "ImportDefaultSpecifier";
+}
+
+export interface ImportNamespaceSpecifier extends BaseModuleSpecifier {
+ type: "ImportNamespaceSpecifier";
+}
+
+export interface ExportNamedDeclaration extends BaseModuleDeclaration {
+ type: "ExportNamedDeclaration";
+ declaration?: Declaration | null | undefined;
+ specifiers: ExportSpecifier[];
+ source?: Literal | null | undefined;
+}
+
+export interface ExportSpecifier extends BaseModuleSpecifier {
+ type: "ExportSpecifier";
+ exported: Identifier;
+}
+
+export interface ExportDefaultDeclaration extends BaseModuleDeclaration {
+ type: "ExportDefaultDeclaration";
+ declaration: MaybeNamedFunctionDeclaration | MaybeNamedClassDeclaration | Expression;
+}
+
+export interface ExportAllDeclaration extends BaseModuleDeclaration {
+ type: "ExportAllDeclaration";
+ exported: Identifier | null;
+ source: Literal;
+}
+
+export interface AwaitExpression extends BaseExpression {
+ type: "AwaitExpression";
+ argument: Expression;
+}
diff --git a/structure-and-scale/seven-seas-service-worker/node_modules/@types/estree/package.json b/structure-and-scale/seven-seas-service-worker/node_modules/@types/estree/package.json
new file mode 100644
index 0000000..2d5a998
--- /dev/null
+++ b/structure-and-scale/seven-seas-service-worker/node_modules/@types/estree/package.json
@@ -0,0 +1,26 @@
+{
+ "name": "@types/estree",
+ "version": "1.0.5",
+ "description": "TypeScript definitions for estree",
+ "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/estree",
+ "license": "MIT",
+ "contributors": [
+ {
+ "name": "RReverser",
+ "githubUsername": "RReverser",
+ "url": "https://github.com/RReverser"
+ }
+ ],
+ "main": "",
+ "types": "index.d.ts",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git",
+ "directory": "types/estree"
+ },
+ "scripts": {},
+ "dependencies": {},
+ "typesPublisherContentHash": "6f0eeaffe488ce594e73f8df619c677d752a279b51edbc744e4aebb20db4b3a7",
+ "typeScriptVersion": "4.5",
+ "nonNpm": true
+}
\ No newline at end of file
diff --git a/structure-and-scale/seven-seas-service-worker/node_modules/rollup/LICENSE.md b/structure-and-scale/seven-seas-service-worker/node_modules/rollup/LICENSE.md
new file mode 100644
index 0000000..ce44fa2
--- /dev/null
+++ b/structure-and-scale/seven-seas-service-worker/node_modules/rollup/LICENSE.md
@@ -0,0 +1,653 @@
+# Rollup core license
+Rollup is released under the MIT license:
+
+The MIT License (MIT)
+
+Copyright (c) 2017 [these people](https://github.com/rollup/rollup/graphs/contributors)
+
+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.
+
+# Licenses of bundled dependencies
+The published Rollup artifact additionally contains code with the following licenses:
+MIT, ISC
+
+# Bundled dependencies:
+## @jridgewell/sourcemap-codec
+License: MIT
+By: Rich Harris
+Repository: git+https://github.com/jridgewell/sourcemap-codec.git
+
+> The MIT License
+>
+> Copyright (c) 2015 Rich Harris
+>
+> 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.
+
+---------------------------------------
+
+## @rollup/pluginutils
+License: MIT
+By: Rich Harris
+Repository: rollup/plugins
+
+> The MIT License (MIT)
+>
+> Copyright (c) 2019 RollupJS Plugin Contributors (https://github.com/rollup/plugins/graphs/contributors)
+>
+> 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.
+
+---------------------------------------
+
+## anymatch
+License: ISC
+By: Elan Shanker
+Repository: https://github.com/micromatch/anymatch
+
+> The ISC License
+>
+> Copyright (c) 2019 Elan Shanker, Paul Miller (https://paulmillr.com)
+>
+> Permission to use, copy, modify, and/or distribute this software for any
+> purpose with or without fee is hereby granted, provided that the above
+> copyright notice and this permission notice appear in all copies.
+>
+> THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+> WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+> MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+> ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+> WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+> ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+> IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+---------------------------------------
+
+## binary-extensions
+License: MIT
+By: Sindre Sorhus
+Repository: sindresorhus/binary-extensions
+
+> MIT License
+>
+> Copyright (c) Sindre Sorhus (https://sindresorhus.com)
+> Copyright (c) Paul Miller (https://paulmillr.com)
+>
+> 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.
+
+---------------------------------------
+
+## braces
+License: MIT
+By: Jon Schlinkert, Brian Woodward, Elan Shanker, Eugene Sharygin, hemanth.hm
+Repository: micromatch/braces
+
+> The MIT License (MIT)
+>
+> Copyright (c) 2014-present, Jon Schlinkert.
+>
+> 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.
+
+---------------------------------------
+
+## builtin-modules
+License: MIT
+By: Sindre Sorhus
+Repository: sindresorhus/builtin-modules
+
+> MIT License
+>
+> Copyright (c) Sindre Sorhus (https://sindresorhus.com)
+>
+> 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.
+
+---------------------------------------
+
+## chokidar
+License: MIT
+By: Paul Miller, Elan Shanker
+Repository: git+https://github.com/paulmillr/chokidar.git
+
+> The MIT License (MIT)
+>
+> Copyright (c) 2012-2019 Paul Miller (https://paulmillr.com), Elan Shanker
+>
+> 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.
+
+---------------------------------------
+
+## colorette
+License: MIT
+By: Jorge Bucaran
+Repository: jorgebucaran/colorette
+
+> Copyright © Jorge Bucaran <>
+>
+> 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.
+
+---------------------------------------
+
+## date-time
+License: MIT
+By: Sindre Sorhus
+Repository: sindresorhus/date-time
+
+> MIT License
+>
+> Copyright (c) Sindre Sorhus (https://sindresorhus.com)
+>
+> 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.
+
+---------------------------------------
+
+## fill-range
+License: MIT
+By: Jon Schlinkert, Edo Rivai, Paul Miller, Rouven Weßling
+Repository: jonschlinkert/fill-range
+
+> The MIT License (MIT)
+>
+> Copyright (c) 2014-present, Jon Schlinkert.
+>
+> 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.
+
+---------------------------------------
+
+## flru
+License: MIT
+By: Luke Edwards
+Repository: lukeed/flru
+
+> MIT License
+>
+> Copyright (c) Luke Edwards (lukeed.com)
+>
+> 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.
+
+---------------------------------------
+
+## glob-parent
+License: ISC
+By: Gulp Team, Elan Shanker, Blaine Bublitz
+Repository: gulpjs/glob-parent
+
+> The ISC License
+>
+> Copyright (c) 2015, 2019 Elan Shanker
+>
+> Permission to use, copy, modify, and/or distribute this software for any
+> purpose with or without fee is hereby granted, provided that the above
+> copyright notice and this permission notice appear in all copies.
+>
+> THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+> WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+> MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+> ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+> WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+> ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+> IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+---------------------------------------
+
+## is-binary-path
+License: MIT
+By: Sindre Sorhus
+Repository: sindresorhus/is-binary-path
+
+> MIT License
+>
+> Copyright (c) 2019 Sindre Sorhus (https://sindresorhus.com), Paul Miller (https://paulmillr.com)
+>
+> 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.
+
+---------------------------------------
+
+## is-extglob
+License: MIT
+By: Jon Schlinkert
+Repository: jonschlinkert/is-extglob
+
+> The MIT License (MIT)
+>
+> Copyright (c) 2014-2016, Jon Schlinkert
+>
+> 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.
+
+---------------------------------------
+
+## is-glob
+License: MIT
+By: Jon Schlinkert, Brian Woodward, Daniel Perez
+Repository: micromatch/is-glob
+
+> The MIT License (MIT)
+>
+> Copyright (c) 2014-2017, Jon Schlinkert.
+>
+> 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.
+
+---------------------------------------
+
+## is-number
+License: MIT
+By: Jon Schlinkert, Olsten Larck, Rouven Weßling
+Repository: jonschlinkert/is-number
+
+> The MIT License (MIT)
+>
+> Copyright (c) 2014-present, Jon Schlinkert.
+>
+> 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.
+
+---------------------------------------
+
+## is-reference
+License: MIT
+By: Rich Harris
+Repository: git+https://github.com/Rich-Harris/is-reference.git
+
+---------------------------------------
+
+## locate-character
+License: MIT
+By: Rich Harris
+Repository: git+https://gitlab.com/Rich-Harris/locate-character.git
+
+---------------------------------------
+
+## magic-string
+License: MIT
+By: Rich Harris
+Repository: https://github.com/rich-harris/magic-string
+
+> Copyright 2018 Rich Harris
+>
+> 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.
+
+---------------------------------------
+
+## normalize-path
+License: MIT
+By: Jon Schlinkert, Blaine Bublitz
+Repository: jonschlinkert/normalize-path
+
+> The MIT License (MIT)
+>
+> Copyright (c) 2014-2018, Jon Schlinkert.
+>
+> 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.
+
+---------------------------------------
+
+## parse-ms
+License: MIT
+By: Sindre Sorhus
+Repository: sindresorhus/parse-ms
+
+> MIT License
+>
+> Copyright (c) Sindre Sorhus (https://sindresorhus.com)
+>
+> 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.
+
+---------------------------------------
+
+## picomatch
+License: MIT
+By: Jon Schlinkert
+Repository: micromatch/picomatch
+
+> The MIT License (MIT)
+>
+> Copyright (c) 2017-present, Jon Schlinkert.
+>
+> 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.
+
+---------------------------------------
+
+## pretty-bytes
+License: MIT
+By: Sindre Sorhus
+Repository: sindresorhus/pretty-bytes
+
+> MIT License
+>
+> Copyright (c) Sindre Sorhus (https://sindresorhus.com)
+>
+> 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.
+
+---------------------------------------
+
+## pretty-ms
+License: MIT
+By: Sindre Sorhus
+Repository: sindresorhus/pretty-ms
+
+> MIT License
+>
+> Copyright (c) Sindre Sorhus (https://sindresorhus.com)
+>
+> 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.
+
+---------------------------------------
+
+## readdirp
+License: MIT
+By: Thorsten Lorenz, Paul Miller
+Repository: git://github.com/paulmillr/readdirp.git
+
+> MIT License
+>
+> Copyright (c) 2012-2019 Thorsten Lorenz, Paul Miller (https://paulmillr.com)
+>
+> 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.
+
+---------------------------------------
+
+## signal-exit
+License: ISC
+By: Ben Coe
+Repository: https://github.com/tapjs/signal-exit.git
+
+> The ISC License
+>
+> Copyright (c) 2015-2023 Benjamin Coe, Isaac Z. Schlueter, and Contributors
+>
+> Permission to use, copy, modify, and/or distribute this software
+> for any purpose with or without fee is hereby granted, provided
+> that the above copyright notice and this permission notice
+> appear in all copies.
+>
+> THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+> WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
+> OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE
+> LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES
+> OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+> WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+> ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+---------------------------------------
+
+## time-zone
+License: MIT
+By: Sindre Sorhus
+Repository: sindresorhus/time-zone
+
+> MIT License
+>
+> Copyright (c) Sindre Sorhus (https://sindresorhus.com)
+>
+> 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.
+
+---------------------------------------
+
+## to-regex-range
+License: MIT
+By: Jon Schlinkert, Rouven Weßling
+Repository: micromatch/to-regex-range
+
+> The MIT License (MIT)
+>
+> Copyright (c) 2015-present, Jon Schlinkert.
+>
+> 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.
+
+---------------------------------------
+
+## yargs-parser
+License: ISC
+By: Ben Coe
+Repository: https://github.com/yargs/yargs-parser.git
+
+> Copyright (c) 2016, Contributors
+>
+> Permission to use, copy, modify, and/or distribute this software
+> for any purpose with or without fee is hereby granted, provided
+> that the above copyright notice and this permission notice
+> appear in all copies.
+>
+> THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+> WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
+> OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE
+> LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES
+> OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+> WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+> ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/structure-and-scale/seven-seas-service-worker/node_modules/rollup/README.md b/structure-and-scale/seven-seas-service-worker/node_modules/rollup/README.md
new file mode 100644
index 0000000..a1b6b9e
--- /dev/null
+++ b/structure-and-scale/seven-seas-service-worker/node_modules/rollup/README.md
@@ -0,0 +1,134 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Rollup
+
+## Overview
+
+Rollup is a module bundler for JavaScript which compiles small pieces of code into something larger and more complex, such as a library or application. It uses the standardized ES module format for code, instead of previous idiosyncratic solutions such as CommonJS and AMD. ES modules let you freely and seamlessly combine the most useful individual functions from your favorite libraries. Rollup can optimize ES modules for faster native loading in modern browsers, or output a legacy module format allowing ES module workflows today.
+
+## Quick Start Guide
+
+Install with `npm install --global rollup`. Rollup can be used either through a [command line interface](https://rollupjs.org/command-line-interface/) with an optional configuration file or else through its [JavaScript API](https://rollupjs.org/javascript-api/). Run `rollup --help` to see the available options and parameters. The starter project templates, [rollup-starter-lib](https://github.com/rollup/rollup-starter-lib) and [rollup-starter-app](https://github.com/rollup/rollup-starter-app), demonstrate common configuration options, and more detailed instructions are available throughout the [user guide](https://rollupjs.org/introduction/).
+
+### Commands
+
+These commands assume the entry point to your application is named main.js, and that you'd like all imports compiled into a single file named bundle.js.
+
+For browsers:
+
+```bash
+# compile to a
+
+