2013-11-25 02:06:42 -05:00
<!DOCTYPE html> < html lang = "en" > < head > < title > lib/cli/migrate< / title > < / head > < meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" > < meta name = "viewport" content = "width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0" > < meta name = "groc-relative-root" content = "../../" > < meta name = "groc-document-path" content = "lib/cli/migrate" > < meta name = "groc-project-path" content = "lib/cli/migrate.js" > < link rel = "stylesheet" type = "text/css" media = "all" href = "../../assets/style.css" > < script type = "text/javascript" src = "../../assets/behavior.js" > < / script > < body > < div id = "meta" > < div class = "file-path" > lib/cli/migrate.js< / div > < / div > < div id = "document" > < div class = "segment" > < div class = "code" > < div class = "wrapper" > < span class = "kd" > var< / span > < span class = "nx" > Promise< / span > < span class = "o" > =< / span > < span class = "nx" > require< / span > < span class = "p" > (< / span > < span class = "s1" > ' ../promise' < / span > < span class = "p" > ).< / span > < span class = "nx" > Promise< / span > < span class = "p" > ;< / span >
< span class = "kd" > var< / span > < span class = "nx" > colors< / span > < span class = "o" > =< / span > < span class = "nx" > require< / span > < span class = "p" > (< / span > < span class = "s1" > ' colors' < / span > < span class = "p" > );< / span >
< span class = "kd" > var< / span > < span class = "nx" > path< / span > < span class = "o" > =< / span > < span class = "nx" > require< / span > < span class = "p" > (< / span > < span class = "s1" > ' path' < / span > < span class = "p" > );< / span >
< span class = "kd" > var< / span > < span class = "nx" > _< / span > < span class = "o" > =< / span > < span class = "nx" > require< / span > < span class = "p" > (< / span > < span class = "s1" > ' lodash' < / span > < span class = "p" > );< / span >
< span class = "kd" > var< / span > < span class = "nx" > fs< / span > < span class = "o" > =< / span > < span class = "nx" > Promise< / span > < span class = "p" > .< / span > < span class = "nx" > promisifyAll< / span > < span class = "p" > (< / span > < span class = "nx" > require< / span > < span class = "p" > (< / span > < span class = "s1" > ' fs' < / span > < span class = "p" > ));< / span >
2013-12-12 17:37:44 -05:00
< span class = "kd" > var< / span > < span class = "nx" > Knex< / span > < span class = "p" > ,< / span > < span class = "nx" > knex< / span > < span class = "p" > ;< / span > < / div > < / div > < / div > < div class = "segment" > < div class = "comments" > < div class = "wrapper" > < p > The CLI options for running migrations< / p > < / div > < / div > < div class = "code" > < div class = "wrapper" > < span class = "nx" > module< / span > < span class = "p" > .< / span > < span class = "nx" > exports< / span > < span class = "o" > =< / span > < span class = "kd" > function< / span > < span class = "p" > (< / span > < span class = "nx" > commands< / span > < span class = "p" > )< / span > < span class = "p" > {< / span >
2013-11-25 02:06:42 -05:00
< span class = "nx" > commands< / span > < span class = "p" > [< / span > < span class = "s1" > ' migrate' < / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "kd" > function< / span > < span class = "p" > (< / span > < span class = "nx" > argv< / span > < span class = "p" > )< / span > < span class = "p" > {< / span >
< span class = "nx" > console< / span > < span class = "p" > .< / span > < span class = "nx" > log< / span > < span class = "p" > (< / span > < span class = "s1" > ' Did you mean migrate:latest?' < / span > < span class = "p" > .< / span > < span class = "nx" > cyan< / span > < span class = "p" > );< / span >
< span class = "p" > };< / span >
< span class = "nx" > commands< / span > < span class = "p" > [< / span > < span class = "s1" > ' migrate:latest' < / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "kd" > function< / span > < span class = "p" > (< / span > < span class = "nx" > argv< / span > < span class = "p" > )< / span > < span class = "p" > {< / span >
< span class = "nx" > checkConfig< / span > < span class = "p" > (< / span > < span class = "nx" > argv< / span > < span class = "p" > ).< / span > < span class = "nx" > then< / span > < span class = "p" > (< / span > < span class = "kd" > function< / span > < span class = "p" > (< / span > < span class = "nx" > config< / span > < span class = "p" > )< / span > < span class = "p" > {< / span >
< span class = "k" > return< / span > < span class = "nx" > knex< / span > < span class = "p" > .< / span > < span class = "nx" > migrate< / span > < span class = "p" > .< / span > < span class = "nx" > latest< / span > < span class = "p" > (< / span > < span class = "nx" > config< / span > < span class = "p" > );< / span >
< span class = "p" > })< / span >
< span class = "p" > .< / span > < span class = "nx" > spread< / span > < span class = "p" > (< / span > < span class = "kd" > function< / span > < span class = "p" > (< / span > < span class = "nx" > batchNo< / span > < span class = "p" > ,< / span > < span class = "nx" > log< / span > < span class = "p" > )< / span > < span class = "p" > {< / span >
< span class = "k" > if< / span > < span class = "p" > (< / span > < span class = "nx" > log< / span > < span class = "p" > .< / span > < span class = "nx" > length< / span > < span class = "o" > ===< / span > < span class = "mi" > 0< / span > < span class = "p" > )< / span > < span class = "p" > {< / span >
< span class = "nx" > console< / span > < span class = "p" > .< / span > < span class = "nx" > log< / span > < span class = "p" > (< / span > < span class = "s1" > ' Already up to date' < / span > < span class = "p" > .< / span > < span class = "nx" > cyan< / span > < span class = "p" > );< / span >
< span class = "p" > }< / span > < span class = "k" > else< / span > < span class = "p" > {< / span >
< span class = "nx" > console< / span > < span class = "p" > .< / span > < span class = "nx" > log< / span > < span class = "p" > ((< / span > < span class = "s1" > ' Batch ' < / span > < span class = "o" > +< / span > < span class = "nx" > batchNo< / span > < span class = "o" > +< / span > < span class = "s1" > ' run: ' < / span > < span class = "o" > +< / span > < span class = "nx" > log< / span > < span class = "p" > .< / span > < span class = "nx" > length< / span > < span class = "o" > +< / span > < span class = "s1" > ' migrations \n' < / span > < span class = "p" > ).< / span > < span class = "nx" > green< / span > < span class = "o" > +< / span >
< span class = "nx" > log< / span > < span class = "p" > .< / span > < span class = "nx" > join< / span > < span class = "p" > (< / span > < span class = "s1" > ' \n' < / span > < span class = "p" > ).< / span > < span class = "nx" > cyan< / span > < span class = "p" > );< / span >
< span class = "p" > }< / span >
< span class = "p" > })< / span >
< span class = "p" > .< / span > < span class = "k" > catch< / span > < span class = "p" > (< / span > < span class = "nx" > logError< / span > < span class = "p" > )< / span >
< span class = "p" > .< / span > < span class = "k" > finally< / span > < span class = "p" > (< / span > < span class = "nx" > exit< / span > < span class = "p" > );< / span >
< span class = "p" > };< / span >
< span class = "nx" > commands< / span > < span class = "p" > [< / span > < span class = "s1" > ' migrate:latest' < / span > < span class = "p" > ].< / span > < span class = "nx" > help< / span > < span class = "o" > =< / span > < span class = "s1" > ' runs migrations that have not run yet' < / span > < span class = "p" > ;< / span >
< span class = "nx" > commands< / span > < span class = "p" > [< / span > < span class = "s1" > ' migrate:make' < / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "kd" > function< / span > < span class = "p" > (< / span > < span class = "nx" > argv< / span > < span class = "p" > )< / span > < span class = "p" > {< / span >
< span class = "kd" > var< / span > < span class = "nx" > name< / span > < span class = "o" > =< / span > < span class = "nx" > argv< / span > < span class = "p" > .< / span > < span class = "nx" > _< / span > < span class = "p" > [< / span > < span class = "mi" > 1< / span > < span class = "p" > ];< / span >
2013-12-12 17:37:44 -05:00
< span class = "k" > if< / span > < span class = "p" > (< / span > < span class = "nx" > name< / span > < span class = "o" > ==< / span > < span class = "kc" > null< / span > < span class = "p" > )< / span > < span class = "k" > return< / span > < span class = "nx" > err< / span > < span class = "p" > (< / span > < span class = "s1" > ' The name must be defined' < / span > < span class = "p" > );< / span >
2013-11-25 02:06:42 -05:00
< span class = "nx" > checkConfig< / span > < span class = "p" > (< / span > < span class = "nx" > argv< / span > < span class = "p" > ).< / span > < span class = "nx" > then< / span > < span class = "p" > (< / span > < span class = "kd" > function< / span > < span class = "p" > (< / span > < span class = "nx" > config< / span > < span class = "p" > )< / span > < span class = "p" > {< / span >
< span class = "k" > return< / span > < span class = "nx" > knex< / span > < span class = "p" > .< / span > < span class = "nx" > migrate< / span > < span class = "p" > .< / span > < span class = "nx" > make< / span > < span class = "p" > (< / span > < span class = "nx" > name< / span > < span class = "p" > ,< / span > < span class = "nx" > config< / span > < span class = "p" > );< / span >
< span class = "p" > }).< / span > < span class = "nx" > then< / span > < span class = "p" > (< / span > < span class = "kd" > function< / span > < span class = "p" > (< / span > < span class = "nx" > filename< / span > < span class = "p" > )< / span > < span class = "p" > {< / span >
< span class = "nx" > console< / span > < span class = "p" > .< / span > < span class = "nx" > log< / span > < span class = "p" > ((< / span > < span class = "s1" > ' Migration ' < / span > < span class = "o" > +< / span > < span class = "nx" > filename< / span > < span class = "o" > +< / span > < span class = "s1" > ' created!' < / span > < span class = "p" > ).< / span > < span class = "nx" > green< / span > < span class = "p" > );< / span >
< span class = "p" > })< / span >
< span class = "p" > .< / span > < span class = "k" > catch< / span > < span class = "p" > (< / span > < span class = "nx" > logError< / span > < span class = "p" > )< / span >
< span class = "p" > .< / span > < span class = "k" > finally< / span > < span class = "p" > (< / span > < span class = "nx" > exit< / span > < span class = "p" > );< / span >
< span class = "p" > };< / span >
< span class = "nx" > commands< / span > < span class = "p" > [< / span > < span class = "s1" > ' migrate:make' < / span > < span class = "p" > ].< / span > < span class = "nx" > help< / span > < span class = "o" > =< / span > < span class = "s1" > ' generates a new migration' < / span > < span class = "p" > ;< / span >
< span class = "nx" > commands< / span > < span class = "p" > [< / span > < span class = "s1" > ' migrate:rollback' < / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "kd" > function< / span > < span class = "p" > (< / span > < span class = "nx" > argv< / span > < span class = "p" > )< / span > < span class = "p" > {< / span >
< span class = "nx" > checkConfig< / span > < span class = "p" > (< / span > < span class = "nx" > argv< / span > < span class = "p" > ).< / span > < span class = "nx" > then< / span > < span class = "p" > (< / span > < span class = "kd" > function< / span > < span class = "p" > (< / span > < span class = "nx" > config< / span > < span class = "p" > )< / span > < span class = "p" > {< / span >
< span class = "k" > return< / span > < span class = "nx" > knex< / span > < span class = "p" > .< / span > < span class = "nx" > migrate< / span > < span class = "p" > .< / span > < span class = "nx" > rollback< / span > < span class = "p" > (< / span > < span class = "nx" > config< / span > < span class = "p" > );< / span >
< span class = "p" > })< / span >
< span class = "p" > .< / span > < span class = "nx" > spread< / span > < span class = "p" > (< / span > < span class = "kd" > function< / span > < span class = "p" > (< / span > < span class = "nx" > batchNo< / span > < span class = "p" > ,< / span > < span class = "nx" > log< / span > < span class = "p" > )< / span > < span class = "p" > {< / span >
< span class = "k" > if< / span > < span class = "p" > (< / span > < span class = "nx" > log< / span > < span class = "p" > .< / span > < span class = "nx" > length< / span > < span class = "o" > ===< / span > < span class = "mi" > 0< / span > < span class = "p" > )< / span > < span class = "p" > {< / span >
< span class = "nx" > console< / span > < span class = "p" > .< / span > < span class = "nx" > log< / span > < span class = "p" > (< / span > < span class = "s1" > ' Already at the base migration' < / span > < span class = "p" > .< / span > < span class = "nx" > cyan< / span > < span class = "p" > );< / span >
< span class = "p" > }< / span > < span class = "k" > else< / span > < span class = "p" > {< / span >
< span class = "nx" > console< / span > < span class = "p" > .< / span > < span class = "nx" > log< / span > < span class = "p" > ((< / span > < span class = "s1" > ' Batch ' < / span > < span class = "o" > +< / span > < span class = "nx" > batchNo< / span > < span class = "o" > +< / span > < span class = "s1" > ' rolled back: ' < / span > < span class = "o" > +< / span > < span class = "nx" > log< / span > < span class = "p" > .< / span > < span class = "nx" > length< / span > < span class = "o" > +< / span > < span class = "s1" > ' migrations \n' < / span > < span class = "p" > ).< / span > < span class = "nx" > green< / span > < span class = "o" > +< / span >
< span class = "nx" > log< / span > < span class = "p" > .< / span > < span class = "nx" > join< / span > < span class = "p" > (< / span > < span class = "s1" > ' \n' < / span > < span class = "p" > ).< / span > < span class = "nx" > cyan< / span > < span class = "p" > );< / span >
< span class = "p" > }< / span >
< span class = "p" > })< / span >
< span class = "p" > .< / span > < span class = "k" > catch< / span > < span class = "p" > (< / span > < span class = "nx" > logError< / span > < span class = "p" > )< / span >
< span class = "p" > .< / span > < span class = "k" > finally< / span > < span class = "p" > (< / span > < span class = "nx" > exit< / span > < span class = "p" > );< / span >
< span class = "p" > };< / span >
< span class = "nx" > commands< / span > < span class = "p" > [< / span > < span class = "s1" > ' migrate:rollback' < / span > < span class = "p" > ].< / span > < span class = "nx" > help< / span > < span class = "o" > =< / span > < span class = "s1" > ' rolls back the latest migration group' < / span > < span class = "p" > ;< / span >
< span class = "nx" > commands< / span > < span class = "p" > [< / span > < span class = "s1" > ' migrate:currentVersion' < / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "kd" > function< / span > < span class = "p" > (< / span > < span class = "nx" > argv< / span > < span class = "p" > )< / span > < span class = "p" > {< / span >
< span class = "nx" > checkConfig< / span > < span class = "p" > (< / span > < span class = "nx" > argv< / span > < span class = "p" > ).< / span > < span class = "nx" > then< / span > < span class = "p" > (< / span > < span class = "kd" > function< / span > < span class = "p" > (< / span > < span class = "nx" > config< / span > < span class = "p" > )< / span > < span class = "p" > {< / span >
< span class = "k" > return< / span > < span class = "nx" > knex< / span > < span class = "p" > .< / span > < span class = "nx" > migrate< / span > < span class = "p" > .< / span > < span class = "nx" > currentVersion< / span > < span class = "p" > (< / span > < span class = "nx" > config< / span > < span class = "p" > );< / span >
< span class = "p" > })< / span >
< span class = "p" > .< / span > < span class = "nx" > then< / span > < span class = "p" > (< / span > < span class = "kd" > function< / span > < span class = "p" > (< / span > < span class = "nx" > version< / span > < span class = "p" > )< / span > < span class = "p" > {< / span >
< span class = "nx" > console< / span > < span class = "p" > .< / span > < span class = "nx" > log< / span > < span class = "p" > (< / span > < span class = "s1" > ' Current Version: ' < / span > < span class = "p" > .< / span > < span class = "nx" > green< / span > < span class = "o" > +< / span > < span class = "nx" > version< / span > < span class = "p" > .< / span > < span class = "nx" > blue< / span > < span class = "p" > );< / span >
< span class = "p" > })< / span >
< span class = "p" > .< / span > < span class = "k" > catch< / span > < span class = "p" > (< / span > < span class = "nx" > logError< / span > < span class = "p" > )< / span >
< span class = "p" > .< / span > < span class = "k" > finally< / span > < span class = "p" > (< / span > < span class = "nx" > exit< / span > < span class = "p" > );< / span >
< span class = "p" > };< / span >
< span class = "p" > };< / span >
< span class = "kd" > var< / span > < span class = "nx" > checkConfig< / span > < span class = "o" > =< / span > < span class = "kd" > function< / span > < span class = "p" > (< / span > < span class = "nx" > argv< / span > < span class = "p" > )< / span > < span class = "p" > {< / span >
2013-12-12 17:37:44 -05:00
< span class = "kd" > var< / span > < span class = "nx" > configFile< / span > < span class = "o" > =< / span > < span class = "nx" > argv< / span > < span class = "p" > .< / span > < span class = "nx" > c< / span > < span class = "o" > ||< / span > < span class = "nx" > argv< / span > < span class = "p" > .< / span > < span class = "nx" > config< / span > < span class = "p" > ;< / span >
< span class = "k" > if< / span > < span class = "p" > (< / span > < span class = "o" > !< / span > < span class = "nx" > configFile< / span > < span class = "p" > )< / span > < span class = "p" > {< / span >
2013-11-25 02:06:42 -05:00
< span class = "nx" > configFile< / span > < span class = "o" > =< / span > < span class = "nx" > path< / span > < span class = "p" > .< / span > < span class = "nx" > join< / span > < span class = "p" > (< / span > < span class = "nx" > process< / span > < span class = "p" > .< / span > < span class = "nx" > cwd< / span > < span class = "p" > (),< / span > < span class = "s1" > ' config.js' < / span > < span class = "p" > );< / span >
< span class = "p" > }< / span >
< span class = "k" > return< / span > < span class = "nx" > fs< / span > < span class = "p" > .< / span > < span class = "nx" > statAsync< / span > < span class = "p" > (< / span > < span class = "nx" > configFile< / span > < span class = "p" > ).< / span > < span class = "nx" > then< / span > < span class = "p" > (< / span > < span class = "kd" > function< / span > < span class = "p" > ()< / span > < span class = "p" > {< / span >
2013-12-12 17:37:44 -05:00
< span class = "k" > return< / span > < span class = "nx" > require< / span > < span class = "p" > (< / span > < span class = "nx" > path< / span > < span class = "p" > .< / span > < span class = "nx" > resolve< / span > < span class = "p" > (< / span > < span class = "nx" > configFile< / span > < span class = "p" > ));< / span >
2013-11-25 02:06:42 -05:00
< span class = "p" > }).< / span > < span class = "nx" > tap< / span > < span class = "p" > (< / span > < span class = "kd" > function< / span > < span class = "p" > (< / span > < span class = "nx" > config< / span > < span class = "p" > )< / span > < span class = "p" > {< / span >
2013-12-12 17:37:44 -05:00
< span class = "nx" > config< / span > < span class = "p" > .< / span > < span class = "nx" > projectRoot< / span > < span class = "o" > =< / span > < span class = "nx" > config< / span > < span class = "p" > .< / span > < span class = "nx" > projectRoot< / span > < span class = "o" > ||< / span > < span class = "nx" > process< / span > < span class = "p" > .< / span > < span class = "nx" > cwd< / span > < span class = "p" > ();< / span > < / div > < / div > < / div > < div class = "segment" > < div class = "comments" > < div class = "wrapper" > < p > Try to use the Knex install local to the current project, so that we're
resolving to the locally installed database driver.< / p > < / div > < / div > < div class = "code" > < div class = "wrapper" > < span class = "k" > if< / span > < span class = "p" > (< / span > < span class = "o" > !< / span > < span class = "nx" > Knex< / span > < span class = "p" > )< / span > < span class = "p" > {< / span >
< span class = "k" > try< / span > < span class = "p" > {< / span >
< span class = "nx" > Knex< / span > < span class = "o" > =< / span > < span class = "nx" > require< / span > < span class = "p" > (< / span > < span class = "nx" > path< / span > < span class = "p" > .< / span > < span class = "nx" > join< / span > < span class = "p" > (< / span > < span class = "nx" > config< / span > < span class = "p" > .< / span > < span class = "nx" > projectRoot< / span > < span class = "p" > ,< / span > < span class = "s1" > ' node_modules/knex' < / span > < span class = "p" > ));< / span >
< span class = "p" > }< / span > < span class = "k" > catch< / span > < span class = "p" > (< / span > < span class = "nx" > e< / span > < span class = "p" > )< / span > < span class = "p" > {< / span >
< span class = "nx" > Knex< / span > < span class = "o" > =< / span > < span class = "nx" > require< / span > < span class = "p" > (< / span > < span class = "s1" > ' ../../knex' < / span > < span class = "p" > );< / span >
< span class = "p" > }< / span >
< span class = "p" > }< / span >
< span class = "k" > if< / span > < span class = "p" > (< / span > < span class = "nx" > config< / span > < span class = "p" > .< / span > < span class = "nx" > database< / span > < span class = "p" > .< / span > < span class = "nx" > client< / span > < span class = "o" > & & < / span > < span class = "p" > (< / span > < span class = "nx" > config< / span > < span class = "p" > .< / span > < span class = "nx" > database< / span > < span class = "p" > .< / span > < span class = "nx" > client< / span > < span class = "k" > instanceof< / span > < span class = "nx" > Knex< / span > < span class = "p" > .< / span > < span class = "nx" > ClientBase< / span > < span class = "p" > ))< / span > < span class = "p" > {< / span >
2013-11-25 02:06:42 -05:00
< span class = "nx" > knex< / span > < span class = "o" > =< / span > < span class = "nx" > config< / span > < span class = "p" > .< / span > < span class = "nx" > database< / span > < span class = "p" > ;< / span >
< span class = "p" > }< / span > < span class = "k" > else< / span > < span class = "p" > {< / span >
< span class = "nx" > knex< / span > < span class = "o" > =< / span > < span class = "nx" > Knex< / span > < span class = "p" > (< / span > < span class = "nx" > config< / span > < span class = "p" > .< / span > < span class = "nx" > database< / span > < span class = "p" > );< / span >
< span class = "p" > }< / span >
< span class = "p" > });< / span >
< span class = "p" > };< / span >
< span class = "kd" > var< / span > < span class = "nx" > logError< / span > < span class = "o" > =< / span > < span class = "kd" > function< / span > < span class = "p" > (< / span > < span class = "nx" > err< / span > < span class = "p" > )< / span > < span class = "p" > {< / span >
< span class = "nx" > console< / span > < span class = "p" > .< / span > < span class = "nx" > log< / span > < span class = "p" > (< / span > < span class = "nx" > err< / span > < span class = "p" > .< / span > < span class = "nx" > stack< / span > < span class = "p" > );< / span >
< span class = "p" > };< / span >
< span class = "kd" > var< / span > < span class = "nx" > err< / span > < span class = "o" > =< / span > < span class = "kd" > function< / span > < span class = "p" > (< / span > < span class = "nx" > msg< / span > < span class = "p" > )< / span > < span class = "p" > {< / span >
< span class = "nx" > console< / span > < span class = "p" > .< / span > < span class = "nx" > log< / span > < span class = "p" > (< / span > < span class = "nx" > msg< / span > < span class = "p" > .< / span > < span class = "nx" > red< / span > < span class = "p" > );< / span >
< span class = "p" > };< / span >
< span class = "kd" > var< / span > < span class = "nx" > exit< / span > < span class = "o" > =< / span > < span class = "kd" > function< / span > < span class = "p" > ()< / span > < span class = "p" > {< / span >
2013-12-12 17:37:44 -05:00
< span class = "k" > if< / span > < span class = "p" > (< / span > < span class = "nx" > knex< / span > < span class = "o" > & & < / span > < span class = "nx" > knex< / span > < span class = "p" > .< / span > < span class = "nx" > client< / span > < span class = "p" > )< / span > < span class = "p" > {< / span >
< span class = "nx" > knex< / span > < span class = "p" > .< / span > < span class = "nx" > client< / span > < span class = "p" > .< / span > < span class = "nx" > pool< / span > < span class = "p" > .< / span > < span class = "nx" > destroy< / span > < span class = "p" > ();< / span >
< span class = "p" > }< / span >
2013-11-25 02:06:42 -05:00
< span class = "nx" > process< / span > < span class = "p" > .< / span > < span class = "nx" > exit< / span > < span class = "p" > ();< / span >
< span class = "p" > };< / span > < / div > < / div > < / div > < / div > < / body > < / html >