sverweij/state-machine-cat

View on GitHub
Makefile

Summary

Maintainability
Test Coverage
.SUFFIXES: .cjs .peggy .css .html .smcat .svg .png .jpg
PEGGY=node_modules/peggy/bin/peggy.js
ESBUILD=node_modules/.bin/esbuild
HANDLEBARS=node_modules/.bin/handlebars
GRAMMKIT=node_modules/.bin/grammkit

GENERATED_BASE_SOURCES=src/parse/smcat/smcat-parser.mjs \
    src/parse/smcat-ast.schema.mts \
    src/render/dot/dot.states.template.cjs \
    src/render/dot/dot.template.cjs \
    src/version.mts

EXTRA_GENERATED_CLI_SOURCES=src/cli/attributes-parser.mjs

GENERATED_CLI_SOURCES=$(GENERATED_BASE_SOURCES) $(EXTRA_GENERATED_CLI_SOURCES)

GENERATED_GRAMMAR_DOC=docs/grammar.html

EXTRA_GENERATED_PROD_SOURCES=docs/index.html \
    docs/smcat-online-interpreter.min.js \
    docs/inpage.html \
    docs/state-machine-cat-inpage.min.js

GENERATED_PROD_SOURCES=$(GENERATED_BASE_SOURCES) $(EXTRA_GENERATED_PROD_SOURCES) $(GENERATED_GRAMMAR_DOC)

GENERATED_SOURCES=$(GENERATED_BASE_SOURCES) $(EXTRA_GENERATED_CLI_SOURCES) $(EXTRA_GENERATED_PROD_SOURCES) 

# production rules
%smcat-parser.mjs: %peg/smcat-parser.peggy
    $(PEGGY) --extra-options-file config/peggy-config-smcat-parser.json -o $@ $<

%attributes-parser.mjs: %peg/attributes-parser.peggy
    $(PEGGY) --extra-options-file config/peggy-config-attributes-parser.json -o $@ $<

src/render/%.template.cjs: src/render/%.template.hbs
    $(HANDLEBARS) --min --commonjs handlebars/dist/handlebars.runtime -f $@ $<

src/version.mts: package.json
    npx tsx tools/get-version.mts > $@

src/parse/smcat-ast.schema.mts: tools/smcat-ast.schema.json
    npx tsx tools/js-json.mts < $< > $@

docs/index.html: docs/index.hbs docs/smcat-online-interpreter.min.js docs/config/prod.json tools/template-to-html.mts
    npx tsx tools/template-to-html.mts docs/config/prod.json < $< > $@

docs/inpage.html: docs/inpage.hbs docs/state-machine-cat-inpage.min.js docs/config/inpage-prod.json tools/template-to-html.mts
    npx tsx tools/template-to-html.mts docs/config/inpage-prod.json < $< > $@

docs/state-machine-cat-inpage.min.js: docs/state-machine-cat-inpage.js
    $(ESBUILD) $< \
        --platform=browser \
        --bundle \
        --format=esm \
        --minify \
        --sourcemap \
        --outfile=$@

docs/smcat-online-interpreter.min.js: $(ONLINE_INTERPRETER_SOURCES)
    $(ESBUILD) docs/smcat-online-interpreter.js \
        --platform=browser \
        --bundle \
        --format=esm \
        --minify \
        --sourcemap \
        --outfile=$@

docs/grammar.html: src/parse/smcat/peg/smcat-parser.peggy
    $(GRAMMKIT) --output-format html --output $@ $<

docs: $(GENERATED_SOURCES)

templates-dist:
    cp src/render/dot/*.template.cjs dist/render/dot/.

dist:
    mkdir -p $@

public:
    mkdir -p $@

public/samples:
    mkdir -p $@

public/%: docs/%
    cp $< $@

%.gz: %
    gzip --best --stdout $< > $@

# executable targets
clean:
    rm -rf $(GENERATED_SOURCES)
    rm -rf coverage
    rm -rf public
    rm -rf dist
    rm -f docs/grammar.html

cli-build: $(GENERATED_CLI_SOURCES)

distro: $(GENERATED_CLI_SOURCES) $(GENERATED_PROD_SOURCES)

pages: distro \
    public \
    public/index.html \
    public/index.html.gz \
    public/inpage.html \
    public/inpage.html.gz \
    public/smcat-online-interpreter.min.js \
    public/smcat-online-interpreter.min.js.gz \
    public/state-machine-cat-inpage.min.js \
    public/state-machine-cat-inpage.min.js.gz \
    public/samples \
    public/samples/on-off.smcat \
    public/samples/on-off.smcat.gz \
    public/samples/cat.smcat \
    public/samples/cat.smcat.gz \
    public/samples/desugarable.smcat \
    public/samples/desugarable.smcat.gz \
    public/samples/sprint-states.smcat \
    public/samples/sprint-states.smcat.gz \
    public/samples/sprint-states.scxml \
    public/samples/sprint-states.scxml.gz \
    public/samples/vscode-issues-triaging.smcat \
    public/samples/vscode-issues-triaging.smcat.gz \
    public/samples/tcp.smcat \
    public/samples/tcp.smcat.gz \
    public/samples/mediaplayer.smcat \
    public/samples/mediaplayer.smcat.gz \
    public/samples/phone.smcat \
    public/samples/phone.smcat.gz \
    public/samples/karl.smcat \
    public/samples/karl.smcat.gz \
    public/samples/parallel.smcat \
    public/samples/parallel.smcat.gz \
    public/samples/bitbitggeranonymized.smcat \
    public/samples/bitbitggeranonymized.smcat.gz \
    public/samples/empty.smcat \
    public/samples/empty.smcat.gz \
    public/samples/cheatsheet.smcat \
    public/samples/cheatsheet.smcat.gz \
    public/samples/cassetteplayer.smcat \
    public/samples/cassetteplayer.smcat.gz \
    public/samples/DHCP.smcat \
    public/samples/DHCP.smcat.gz \
    public/samples/PDSA.smcat \
    public/samples/PDSA.smcat.gz \
    public/samples/kitchensink.smcat \
    public/samples/kitchensink.smcat.gz