-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcommon.mk
More file actions
122 lines (100 loc) · 4.03 KB
/
Copy pathcommon.mk
File metadata and controls
122 lines (100 loc) · 4.03 KB
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# Shared build rules for every member package. Include from packages/<name>/Makefile
# after setting any of the variables below; add genuinely local targets afterwards.
#
# MOCK_DIR fixture directory exported to mocha runs (unset means no MOCK_DIR)
# MOCHA_EXTRA extra mocha flags appended to MOCHA_OPTS
# MOCHA_UI mocha interface flag (default: -u tdd; empty selects mocha's bdd)
# TEST_FILES test sources (default: test/tests/**/*.ts; empty means no suite)
# TEST_DEPS extra prerequisites for the test targets
# LINT_PATHS oxlint and oxfmt targets (default: src)
# DOCS_ENTRY typedoc entry point (default: src/index.ts)
# BROWSER_OUT browser bundle output, matching browser-test.rolldown.config.mjs (empty means none)
# CLEAN_EXTRA extra paths removed by clean
SHELL := /usr/bin/env bash
ROOT := $(patsubst %/,%,$(dir $(lastword $(MAKEFILE_LIST))))
BIN ?= $(ROOT)/node_modules/.bin
SRC_FILES := $(shell find src -name '*.ts')
TEST_FILES ?= $(shell find test/tests -name '*.ts' 2>/dev/null | sort)
LINT_PATHS ?= src
MOCHA_UI ?= -u tdd
DOCS_ENTRY ?= src/index.ts
BROWSER_OUT ?= build/browser.html
STRIP_TYPES_FLAG := $(shell node -e 'const [a,b]=process.versions.node.split(".").map(Number); if (a>22||(a===22&&b>=6)) console.log("--no-experimental-strip-types")')
MOCHA_ENV := TSX_TSCONFIG_PATH=test/tsconfig.json NODE_OPTIONS='$(STRIP_TYPES_FLAG)' $(if $(MOCK_DIR),MOCK_DIR='$(MOCK_DIR)',)
MOCHA_OPTS := $(MOCHA_UI) --require tsx --extension ts $(MOCHA_EXTRA)
NYC_OPTS := --temp-dir build/nyc_output --report-dir build/coverage
LIB_CONFIG := $(ROOT)/rolldown.config.mjs $(ROOT)/rolldown.base.mjs
BROWSER_CONFIG := $(ROOT)/browser-test.rolldown.config.mjs $(ROOT)/browser-test.rolldown.mjs
lib: $(SRC_FILES) package.json tsconfig.json $(ROOT)/node_modules $(LIB_CONFIG)
@$(BIN)/rolldown -c $(ROOT)/rolldown.config.mjs && touch lib
.PHONY: test
test: $(ROOT)/node_modules $(TEST_DEPS)
ifeq ($(strip $(TEST_FILES)),)
@echo '$(notdir $(CURDIR)) has no test suite'
else
@$(MOCHA_ENV) \
$(BIN)/mocha $(MOCHA_OPTS) $(TEST_FILES) --grep '$(grep)'
endif
.PHONY: test/watch
test/watch: $(ROOT)/node_modules $(TEST_DEPS)
@$(MOCHA_ENV) \
$(BIN)/mocha --watch $(MOCHA_OPTS) $(TEST_FILES) --grep '$(grep)'
.PHONY: ci-test
ci-test: $(ROOT)/node_modules $(TEST_DEPS)
ifeq ($(strip $(TEST_FILES)),)
@echo '$(notdir $(CURDIR)) has no test suite'
else
@$(MOCHA_ENV) \
$(BIN)/nyc $(NYC_OPTS) --reporter=text \
$(BIN)/mocha $(MOCHA_OPTS) -R list $(TEST_FILES)
endif
build/coverage: $(SRC_FILES) $(TEST_FILES) $(ROOT)/node_modules $(TEST_DEPS)
@$(MOCHA_ENV) \
$(BIN)/nyc $(NYC_OPTS) --reporter=html \
$(BIN)/mocha $(MOCHA_OPTS) -R nyan $(TEST_FILES)
.PHONY: coverage
coverage: build/coverage
@open build/coverage/index.html
.PHONY: check
check: $(ROOT)/node_modules
@$(BIN)/oxlint $(LINT_PATHS) --max-warnings 0 && echo "Ok"
.PHONY: format
format: $(ROOT)/node_modules
@$(BIN)/oxlint $(LINT_PATHS) --fix && $(BIN)/oxfmt $(LINT_PATHS)
build/docs: $(SRC_FILES) $(ROOT)/node_modules
@$(BIN)/typedoc --out build/docs \
--excludeInternal --excludePrivate --excludeProtected \
--includeVersion --hideGenerator --readme none \
$(DOCS_ENTRY)
.PHONY: docs
docs: build/docs
@open build/docs/index.html
ifneq ($(strip $(BROWSER_OUT)),)
$(BROWSER_OUT): $(SRC_FILES) $(TEST_FILES) $(ROOT)/node_modules $(BROWSER_CONFIG)
@$(BIN)/rolldown -c $(ROOT)/browser-test.rolldown.config.mjs
.PHONY: browser
browser: $(BROWSER_OUT)
.PHONY: browser-test
browser-test: $(BROWSER_OUT)
@open $(BROWSER_OUT)
else
.PHONY: browser
browser:
@echo '$(notdir $(CURDIR)) has no browser bundle'
endif
build/pages: build/docs build/coverage $(BROWSER_OUT)
@mkdir -p build/pages
@cp -r build/docs/* build/pages/
@cp -r build/coverage build/pages/coverage
@$(if $(BROWSER_OUT),cp $(BROWSER_OUT) build/pages/tests.html,true)
.PHONY: deploy-pages
deploy-pages: | clean lib build/pages
@$(BIN)/gh-pages -d build/pages
$(ROOT)/node_modules:
@bun install --cwd $(ROOT)
.PHONY: clean
clean:
rm -rf lib/ build/ $(CLEAN_EXTRA)
.PHONY: distclean
distclean: clean
rm -rf node_modules/