@@ -26,8 +26,12 @@ FIND ?= find
2626
2727ifdef JOBS
2828 PARALLEL_ARGS = -j $(JOBS)
29+
30+ # Amount of worker threads to create for generating documentation files
31+ DOC_JOBS = $(JOBS)
2932else
3033 PARALLEL_ARGS =
34+ DOC_JOBS = 12
3135endif
3236
3337ifdef ENABLE_V8_TAP
@@ -82,6 +86,7 @@ NODE_EXE = node$(EXEEXT)
8286NODE ?= "$(PWD ) /$(NODE_EXE ) "
8387NODE_G_EXE = node_g$(EXEEXT )
8488NPM ?= ./deps/npm/bin/npm-cli.js
89+ NPX ?= ./deps/npm/bin/npx-cli.js
8590
8691# Flags for packaging.
8792BUILD_DOWNLOAD_FLAGS ?= --download=all
@@ -333,7 +338,6 @@ coverage-run-js: ## Run JavaScript tests with coverage.
333338# This does not run tests of third-party libraries inside deps.
334339test : all # # Run default tests, linters, and build docs.
335340 $(MAKE ) -s tooltest
336- $(MAKE ) -s test-doc
337341 $(MAKE ) -s build-addons
338342 $(MAKE ) -s build-js-native-api-tests
339343 $(MAKE ) -s build-node-api-tests
@@ -369,7 +373,7 @@ test-valgrind: all ## Run tests using valgrind.
369373test-check-deopts : all
370374 $(PYTHON ) tools/test.py $(PARALLEL_ARGS ) --mode=$(BUILDTYPE_LOWER ) --check-deopts parallel sequential
371375
372- DOCBUILDSTAMP_PREREQS = tools/doc/addon-verify.mjs doc/api/addons.md
376+ DOCBUILDSTAMP_PREREQS = doc/api/addons.md
373377
374378ifeq ($(OSTYPE ) ,aix)
375379DOCBUILDSTAMP_PREREQS := $(DOCBUILDSTAMP_PREREQS ) out/$(BUILDTYPE ) /node.exp
@@ -385,7 +389,7 @@ test/addons/.docbuildstamp: $(DOCBUILDSTAMP_PREREQS) tools/doc/node_modules
385389 echo " Skipping .docbuildstamp (no crypto and/or no ICU)" ; \
386390 else \
387391 $(RM ) -r test/addons/?? _* /; \
388- [ -x $( NODE ) ] && $( NODE ) $< || node $< ; \
392+ $( call available-node, $(NPX ) --prefix tools/doc api-docs-tooling generate -t addon-verify -i doc/api/addons.md -o test/addons/ --skip-lint) \
389393 [ $$ ? -eq 0 ] && touch $@ ; \
390394 fi
391395
@@ -781,14 +785,14 @@ test-v8 test-v8-intl test-v8-benchmarks test-v8-all:
781785 $(warning Use the git repo instead: $$ git clone https://github.com/nodejs/node.git)
782786endif
783787
784- apidoc_dirs = out/doc out/doc/api out/doc/api/assets
788+ apidoc_dirs = out/doc out/doc/api
785789skip_apidoc_files = doc/api/quic.md
786790
787791apidoc_sources = $(filter-out $(skip_apidoc_files ) , $(wildcard doc/api/* .md) )
788792apidocs_html = $(addprefix out/,$(apidoc_sources:.md=.html ) )
789793apidocs_json = $(addprefix out/,$(apidoc_sources:.md=.json ) )
790794
791- apiassets = $(subst api_assets,api/assets, $( addprefix out/, $( wildcard doc/api_assets/ * ) ) )
795+ run-npm-ci = $(PWD ) / $( NPM ) ci --omit=dev
792796
793797tools/doc/node_modules : tools/doc/package.json
794798 @if [ " $( shell $( node_use_openssl_and_icu) ) " != " true" ]; then \
@@ -797,13 +801,16 @@ tools/doc/node_modules: tools/doc/package.json
797801 cd tools/doc && $(call available-node,$(run-npm-ci ) ) \
798802 fi
799803
804+ RAWVER =$(shell $(PYTHON ) tools/getnodeversion.py)
805+ VERSION =v$(RAWVER )
806+
800807.PHONY : doc-only
801808doc-only : tools/doc/node_modules \
802- $(apidoc_dirs ) $( apiassets ) # # Build the docs with the local or the global Node.js binary.
809+ $(apidoc_dirs ) # # Builds the docs with the local or the global Node.js binary.
803810 @if [ " $( shell $( node_use_openssl_and_icu) ) " != " true" ]; then \
804- echo " Skipping doc-only (no crypto and/ or no ICU )" ; \
811+ echo " Skipping doc-only (no crypto or no icu )" ; \
805812 else \
806- $(MAKE ) out/doc/api/all.html out/doc/api/all.json out/doc/api/stability ; \
813+ $(MAKE ) out/doc/api/all.html out/doc/api/all.json; \
807814 fi
808815
809816.PHONY : doc
@@ -819,82 +826,37 @@ out/doc/api: doc/api
819826 mkdir -p $@
820827 cp -r doc/api out/doc
821828
822- # If it's a source tarball, assets are already in doc/api/assets
823- out/doc/api/assets :
824- mkdir -p $@
825- if [ -d doc/api/assets ]; then cp -r doc/api/assets out/doc/api; fi ;
826-
827- # If it's not a source tarball, we need to copy assets from doc/api_assets
828- out/doc/api/assets/% : doc/api_assets/% | out/doc/api/assets
829- @cp $< $@ ; $(RM ) out/doc/api/assets/README.md
830-
829+ # For generating individual doc files instead of all at once
830+ out/doc/api/% .html out/doc/api/% .json : doc/api/% .md tools/doc/node_modules | out/doc/api
831+ $(call available-node, \
832+ $(NPX ) --prefix tools/doc api-docs-tooling generate \
833+ -t $(subst .,legacy-, $(suffix $@ ) ) \
834+ -i $< \
835+ --ignore $(skip_apidoc_files ) \
836+ -o $(@D ) \
837+ --skip-lint \
838+ -c ./CHANGELOG.md \
839+ -v $(VERSION ) \
840+ --index doc/api/index.md \
841+ ) \
831842
832- run-npm-ci = $( PWD ) / $( NPM ) ci
843+ out/doc/api/all.html : $( apidocs_html ) | out/doc/api
833844
834- LINK_DATA = out/doc/apilinks.json
835- VERSIONS_DATA = out/previous-doc-versions.json
836- gen-api = tools/doc/generate.mjs --node-version=$(FULLVERSION ) \
837- --apilinks=$(LINK_DATA ) $< --output-directory=out/doc/api \
838- --versions-file=$(VERSIONS_DATA )
839- gen-apilink = tools/doc/apilinks.mjs $(LINK_DATA ) $(wildcard lib/* .js)
840-
841- $(LINK_DATA ) : $(wildcard lib/* .js) tools/doc/apilinks.mjs | out/doc
842- $(call available-node, $(gen-apilink ) )
843-
844- # Regenerate previous versions data if the current version changes
845- $(VERSIONS_DATA ) : CHANGELOG.md src/node_version.h tools/doc/versions.mjs
846- $(call available-node, tools/doc/versions.mjs $@ )
847-
848- node_use_icu = $(call available-node,"-p" "typeof Intl === 'object'")
849-
850- out/doc/api/% .json out/doc/api/% .html : doc/api/% .md tools/doc/generate.mjs \
851- tools/doc/markdown.mjs tools/doc/html.mjs tools/doc/json.mjs \
852- tools/doc/apilinks.mjs $(VERSIONS_DATA ) | $(LINK_DATA ) out/doc/api
853- @if [ " $( shell $( node_use_icu) ) " != " true" ]; then \
854- echo " Skipping documentation generation (no ICU)" ; \
855- else \
856- $(call available-node, $(gen-api ) ) \
857- fi
858-
859- out/doc/api/all.html : $(apidocs_html ) tools/doc/allhtml.mjs \
860- tools/doc/apilinks.mjs | out/doc/api
861- @if [ " $( shell $( node_use_icu) ) " != " true" ]; then \
862- echo " Skipping HTML single-page doc generation (no ICU)" ; \
863- else \
864- $(call available-node, tools/doc/allhtml.mjs) \
865- fi
866-
867- out/doc/api/all.json : $(apidocs_json ) tools/doc/alljson.mjs | out/doc/api
868- @if [ " $( shell $( node_use_icu) ) " != " true" ]; then \
869- echo " Skipping JSON single-file generation (no ICU)" ; \
870- else \
871- $(call available-node, tools/doc/alljson.mjs) \
872- fi
873-
874- .PHONY : out/doc/api/stability
875- out/doc/api/stability : out/doc/api/all.json tools/doc/stability.mjs | out/doc/api
876- @if [ " $( shell $( node_use_icu) ) " != " true" ]; then \
877- echo " Skipping stability indicator generation (no ICU)" ; \
878- else \
879- $(call available-node, tools/doc/stability.mjs) \
880- fi
845+ out/doc/api/all.json : $(apidocs_json ) | out/doc/api
881846
882847.PHONY : docopen
883- docopen : out/ doc/api/all.html # # Open the documentation in a web browser.
848+ docopen : doc-only # # Open the documentation in a web browser.
884849 @$(PYTHON ) -mwebbrowser file://$(abspath $< )
885850
886851.PHONY : docserve
887- docserve : $( apidocs_html ) $( apiassets ) # # Serve the documentation on localhost:8000.
852+ docserve : doc-only # # Serve the documentation on localhost:8000.
888853 @$(PYTHON ) -m http.server 8000 --bind 127.0.0.1 --directory out/doc/api
889854
890855.PHONY : docclean
891856.NOTPARALLEL : docclean
892857docclean : # # Remove the generated documentation.
893858 $(RM ) -r out/doc
894- $(RM ) " $( VERSIONS_DATA) "
895859
896- RAWVER =$(shell $(PYTHON ) tools/getnodeversion.py)
897- VERSION =v$(RAWVER )
898860CHANGELOG =doc/changelogs/CHANGELOG_V$(firstword $(subst ., ,$(RAWVER ) ) ) .md
899861
900862# For nightly builds, you must set DISTTYPE to "nightly", "next-nightly" or
@@ -1393,7 +1355,12 @@ tools/.mdlintstamp: tools/lint-md/node_modules/remark-parse/package.json $(LINT_
13931355 @touch $@
13941356
13951357.PHONY : lint-md
1396- lint-md : lint-js-doc | tools/.mdlintstamp # # Lint the markdown documents maintained by us in the codebase.
1358+ lint-md : lint-js-doc lint-docs | tools/.mdlintstamp # # Lint the markdown documents maintained by us in the codebase.
1359+
1360+ .PHONY : lint-docs
1361+ lint-docs : tools/doc/node_modules
1362+ $(info Running API Doc linter...)
1363+ $(call available-node, $(NPX ) --prefix tools/doc api-docs-tooling lint -i doc/api/* .md)
13971364
13981365run-format-md = tools/lint-md/lint-md.mjs --format $(LINT_MD_FILES )
13991366.PHONY : format-md
0 commit comments