Skip to content
/ shuji Public

Reverse engineering JavaScript and CSS sources from sourcemaps

License

Notifications You must be signed in to change notification settings

paazmaya/shuji

Repository files navigation

shuji (周氏)

Reverse engineering JavaScript and CSS sources from sourcemaps

Windows build status Node.js v22 CI codecov FOSSA Status

Background for the project name

The name of the project is for honouring the legacy of a certain master from the Ryukyu archipelago who contributed to the martial arts that we today know as karate and ryukyu kobujutsu.

Read more about why these martial arts are important for me at karatejukka.fi.

Getting started

Install the shuji command line utility globally with npm. Elevated privileges might be needed via sudo, depending on the platform. In most cases just:

npm install --global shuji

Usage example:

shuji file.js.map -o folder

Please note that the minimum supported version of Node.js is 22.11.0, which is the active Long Term Support (LTS) version.

Command line options

The output of shuji --help pretty much covers all the options:

shuji - Reverse engineering JavaScript and CSS sources from sourcemaps
Usage: shuji [options] <file|directory>

  -h, --help               Help and usage instructions
  -o, --output-dir String  Output directory - default: .
  -p, --preserve           Preserve sourcemap's original folder structure.
  -M, --match String       Regular expression for matching and filtering files -
                           default: \.map$
  -v, --verbose            Verbose output, will print which file is currently being
                           processed
  -V, --version            Version number

Version 0.8.0

Testing

Test files are generated with UglifyJS 3 and sass by using files from the stretchy project, with the following commands:

uglifyjs stretchy.js --compress --mangle \
 --output stretchy.min.js --source-map includeSources
mv stretchy.min.js.map stretchy-with-sources.min.js.map

uglifyjs stretchy.js --compress --mangle \
 --output stretchy.min.js --source-map "url=inline"
mv stretchy.min.js stretchy-inline-sources.min.js

uglifyjs stretchy.js --compress --mangle \
 --output stretchy.min.js --source-map "url=stretchy.min.js.map"

sass stretchy.scss:stretchy.css

sass stretchy.scss:stretchy-inline.css --embed-source-map

Unit tests are written with tape and can be executed with npm test. Code coverage is inspected with nyc and can be executed with npm run coverage after running npm test. Please make sure it is over 90% at all times.

Contributing

"A Beginner's Guide to Open Source: The Best Advice for Making your First Contribution".

Also there is a blog post about "45 Github Issues Dos and Don’ts".

Linting is done with ESLint and can be executed with npm run lint. There should be no errors appearing after any JavaScript file changes.

Please note that any features or changed will not be merged without working unit tests.

Version history

Changes happening across different versions and upcoming changes are tracked in the CHANGELOG.md file.

License

Copyright (c) Juga Paazmaya [email protected]

Licensed under the MIT license.

FOSSA Status

About

Reverse engineering JavaScript and CSS sources from sourcemaps

Topics

Resources

License

Stars

Watchers

Forks