Created
November 19, 2019 22:47
-
-
Save kristoferbaxter/aa44140f4186d5b1236d9a11f3b27def to your computer and use it in GitHub Desktop.
IIFE "Variable declared more than once" Example
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var app = (function () { | |
'use strict'; | |
function noop() { } | |
function run(fn) { | |
return fn(); | |
} | |
function blank_object() { | |
return Object.create(null); | |
} | |
function run_all(fns) { | |
fns.forEach(run); | |
} | |
function is_function(thing) { | |
return typeof thing === 'function'; | |
} | |
function safe_not_equal(a, b) { | |
return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function'); | |
} | |
function append(target, node) { | |
target.appendChild(node); | |
} | |
function insert(target, node, anchor) { | |
target.insertBefore(node, anchor || null); | |
} | |
function detach(node) { | |
node.parentNode.removeChild(node); | |
} | |
function element(name) { | |
return document.createElement(name); | |
} | |
function text(data) { | |
return document.createTextNode(data); | |
} | |
function children(element) { | |
return Array.from(element.childNodes); | |
} | |
let current_component; | |
function set_current_component(component) { | |
current_component = component; | |
} | |
const dirty_components = []; | |
const binding_callbacks = []; | |
const render_callbacks = []; | |
const flush_callbacks = []; | |
const resolved_promise = Promise.resolve(); | |
let update_scheduled = false; | |
function schedule_update() { | |
if (!update_scheduled) { | |
update_scheduled = true; | |
resolved_promise.then(flush); | |
} | |
} | |
function add_render_callback(fn) { | |
render_callbacks.push(fn); | |
} | |
function flush() { | |
const seen_callbacks = new Set(); | |
do { | |
// first, call beforeUpdate functions | |
// and update components | |
while (dirty_components.length) { | |
const component = dirty_components.shift(); | |
set_current_component(component); | |
update(component.$$); | |
} | |
while (binding_callbacks.length) | |
binding_callbacks.pop()(); | |
// then, once components are updated, call | |
// afterUpdate functions. This may cause | |
// subsequent updates... | |
for (let i = 0; i < render_callbacks.length; i += 1) { | |
const callback = render_callbacks[i]; | |
if (!seen_callbacks.has(callback)) { | |
callback(); | |
// ...so guard against infinite loops | |
seen_callbacks.add(callback); | |
} | |
} | |
render_callbacks.length = 0; | |
} while (dirty_components.length); | |
while (flush_callbacks.length) { | |
flush_callbacks.pop()(); | |
} | |
update_scheduled = false; | |
} | |
function update($$) { | |
if ($$.fragment) { | |
$$.update($$.dirty); | |
run_all($$.before_update); | |
$$.fragment.p($$.dirty, $$.ctx); | |
$$.dirty = null; | |
$$.after_update.forEach(add_render_callback); | |
} | |
} | |
const outroing = new Set(); | |
function transition_in(block, local) { | |
if (block && block.i) { | |
outroing.delete(block); | |
block.i(local); | |
} | |
} | |
function mount_component(component, target, anchor) { | |
const { fragment, on_mount, on_destroy, after_update } = component.$$; | |
fragment.m(target, anchor); | |
// onMount happens before the initial afterUpdate | |
add_render_callback(() => { | |
const new_on_destroy = on_mount.map(run).filter(is_function); | |
if (on_destroy) { | |
on_destroy.push(...new_on_destroy); | |
} | |
else { | |
// Edge case - component was destroyed immediately, | |
// most likely as a result of a binding initialising | |
run_all(new_on_destroy); | |
} | |
component.$$.on_mount = []; | |
}); | |
after_update.forEach(add_render_callback); | |
} | |
function destroy_component(component, detaching) { | |
if (component.$$.fragment) { | |
run_all(component.$$.on_destroy); | |
component.$$.fragment.d(detaching); | |
// TODO null out other refs, including component.$$ (but need to | |
// preserve final state?) | |
component.$$.on_destroy = component.$$.fragment = null; | |
component.$$.ctx = {}; | |
} | |
} | |
function make_dirty(component, key) { | |
if (!component.$$.dirty) { | |
dirty_components.push(component); | |
schedule_update(); | |
component.$$.dirty = blank_object(); | |
} | |
component.$$.dirty[key] = true; | |
} | |
function init(component, options, instance, create_fragment, not_equal, prop_names) { | |
const parent_component = current_component; | |
set_current_component(component); | |
const props = options.props || {}; | |
const $$ = component.$$ = { | |
fragment: null, | |
ctx: null, | |
// state | |
props: prop_names, | |
update: noop, | |
not_equal, | |
bound: blank_object(), | |
// lifecycle | |
on_mount: [], | |
on_destroy: [], | |
before_update: [], | |
after_update: [], | |
context: new Map(parent_component ? parent_component.$$.context : []), | |
// everything else | |
callbacks: blank_object(), | |
dirty: null | |
}; | |
let ready = false; | |
$$.ctx = instance | |
? instance(component, props, (key, ret, value = ret) => { | |
if ($$.ctx && not_equal($$.ctx[key], $$.ctx[key] = value)) { | |
if ($$.bound[key]) | |
$$.bound[key](value); | |
if (ready) | |
make_dirty(component, key); | |
} | |
return ret; | |
}) | |
: props; | |
$$.update(); | |
ready = true; | |
run_all($$.before_update); | |
$$.fragment = create_fragment($$.ctx); | |
if (options.target) { | |
if (options.hydrate) { | |
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion | |
$$.fragment.l(children(options.target)); | |
} | |
else { | |
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion | |
$$.fragment.c(); | |
} | |
if (options.intro) | |
transition_in(component.$$.fragment); | |
mount_component(component, options.target, options.anchor); | |
flush(); | |
} | |
set_current_component(parent_component); | |
} | |
class SvelteComponent { | |
$destroy() { | |
destroy_component(this, 1); | |
this.$destroy = noop; | |
} | |
$on(type, callback) { | |
const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = [])); | |
callbacks.push(callback); | |
return () => { | |
const index = callbacks.indexOf(callback); | |
if (index !== -1) | |
callbacks.splice(index, 1); | |
}; | |
} | |
$set() { | |
// overridden by instance, if it has props | |
} | |
} | |
/* src/Index.svelte generated by Svelte v3.12.1 */ | |
function create_fragment(ctx) { | |
var h1, t0, t1, t2; | |
return { | |
c() { | |
h1 = element("h1"); | |
t0 = text("Hello "); | |
t1 = text(name); | |
t2 = text("! :P"); | |
}, | |
m(target, anchor) { | |
insert(target, h1, anchor); | |
append(h1, t0); | |
append(h1, t1); | |
append(h1, t2); | |
}, | |
p: noop, | |
i: noop, | |
o: noop, | |
d(detaching) { | |
if (detaching) { | |
detach(h1); | |
} | |
} | |
}; | |
} | |
let name = 'world'; | |
class Index extends SvelteComponent { | |
constructor(options) { | |
super(); | |
init(this, options, null, create_fragment, safe_not_equal, []); | |
} | |
} | |
var mainApp = new Index({ | |
target: document.body | |
}); | |
return mainApp; | |
}()); | |
//# sourceMappingURL=bundle.js.map |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"devDependencies": { | |
"@ampproject/rollup-plugin-closure-compiler": "0.12.1", | |
"rollup": "1.27.2" | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import compiler from '@ampproject/rollup-plugin-closure-compiler'; | |
export default { | |
input: 'input.js', | |
output: { | |
file: 'output.js', | |
format: 'iife', | |
name: 'app' | |
}, | |
plugins: [ | |
compiler({ | |
compilationLevel: 'ADVANCED', | |
languageOut: 'ECMASCRIPT5_STRICT', | |
warningLevel: 'VERBOSE', | |
}), | |
], | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment