diff --git a/bin/api-docs/are-api-docs-unstaged.js b/bin/api-docs/are-api-docs-unstaged.js new file mode 100644 index 00000000000000..b7d956b9e145c3 --- /dev/null +++ b/bin/api-docs/are-api-docs-unstaged.js @@ -0,0 +1,43 @@ +#!/usr/bin/env node + +/** + * Node dependencies. + */ +const { extname } = require( 'path' ); +const chalk = require( 'chalk' ); +const execSync = require( 'child_process' ).execSync; +const { readFile } = require( 'fs' ).promises; + +const getUnstagedFiles = () => + execSync( 'git diff --name-only', { encoding: 'utf8' } ) + .split( '\n' ) + .filter( Boolean ); + +const fileHasToken = async ( file ) => + ( await readFile( file, 'utf8' ) ).includes( ' + * // content within will be filled by docgen + * + * + * @example Delimiter tokens that use a specific source file: + * + * // content within will be filled by docgen + * + * + * @type {RegExp} + * @see DEFAULT_PATH + */ +const TOKEN_PATTERN = //g; + +/** + * Given an absolute file path, returns the package name. + * + * @param {string} file Absolute path. + * + * @return {string} Package name. + */ +function getFilePackage( file ) { + return relative( PACKAGES_DIR, file ).split( sep )[ 0 ]; +} + +/** + * Returns an appropriate glob pattern for the packages directory to match + * relevant documentation files for a given set of files. + * + * @param {string[]} files Set of files to match. Pass an empty set to match + * all packages. + * + * @return {string} Packages glob pattern. + */ +function getPackagePattern( files ) { + if ( ! files.length ) { + return '*'; + } + + // Since brace expansion doesn't work with a single package, special-case + // the pattern for the singular match. + const packages = Array.from( new Set( files.map( getFilePackage ) ) ); + return packages.length === 1 ? packages[ 0 ] : '{' + packages.join() + '}'; +} + +/** + * Returns the conventional store name of a given package. + * + * @param {string} packageName Package name. + * + * @return {string} Store name. + */ +function getPackageStoreName( packageName ) { + let storeName = 'core'; + if ( packageName !== 'core-data' ) { + storeName += '/' + packageName; + } + + return storeName; +} + +/** + * Returns the conventional documentation file name of a given package. + * + * @param {string} packageName Package name. + * + * @return {string} Documentation file name. + */ +function getDataDocumentationFile( packageName ) { + const storeName = getPackageStoreName( packageName ); + return `data-${ storeName.replace( '/', '-' ) }.md`; +} + +/** + * Returns an appropriate glob pattern for the data documentation directory to + * match relevant documentation files for a given set of files. + * + * @param {string[]} files Set of files to match. Pass an empty set to match + * all packages. + * + * @return {string} Packages glob pattern. + */ +function getDataDocumentationPattern( files ) { + if ( ! files.length ) { + return '*'; + } + + // Since brace expansion doesn't work with a single package, special-case + // the pattern for the singular match. + const filePackages = Array.from( new Set( files.map( getFilePackage ) ) ); + const docFiles = filePackages.map( getDataDocumentationFile ); + + return docFiles.length === 1 ? docFiles[ 0 ] : '{' + docFiles.join() + '}'; +} + +/** + * Stream transform which filters out README files to include only those + * containing matched token pattern, yielding a tuple of the file and its + * matched tokens. + * + * @type {Transform} + */ +const filterTokenTransform = new Transform( { + objectMode: true, + + async transform( file, _encoding, callback ) { + let content; + try { + content = await readFile( file, 'utf8' ); + } catch {} + + if ( content ) { + const tokens = []; + + for ( const match of content.matchAll( TOKEN_PATTERN ) ) { + const [ , token, path = DEFAULT_PATH ] = match; + tokens.push( [ token, path ] ); + } + + if ( tokens.length ) { + this.push( [ file, tokens ] ); + } + } + + callback(); + }, +} ); + +/** + * Optional process arguments for which to generate documentation. + * + * @type {string[]} + */ +const files = process.argv.slice( 2 ); + +glob.stream( [ + `${ PACKAGES_DIR }/${ getPackagePattern( files ) }/README.md`, + `${ DATA_DOCS_DIR }/${ getDataDocumentationPattern( files ) }`, +] ) + .pipe( filterTokenTransform ) + .on( 'data', async ( /** @type {WPReadmeFileData} */ data ) => { + const [ file, tokens ] = data; + const output = relative( ROOT_DIR, file ); + + // Each file can have more than one placeholder content to update, each + // represented by tokens. The docgen script updates one token at a time, + // so the tokens must be replaced in sequence to prevent the processes + // from overriding each other. + for ( const [ token, path ] of tokens ) { + await execa( + join( __dirname, '..', '..', 'node_modules', '.bin', 'docgen' ), + [ + relative( ROOT_DIR, resolve( dirname( file ), path ) ), + `--output ${ output }`, + '--to-token', + `--use-token "${ token }"`, + '--ignore "/unstable|experimental/i"', + ], + { shell: true } + ); + } + } ); diff --git a/bin/api-docs/update-readmes.js b/bin/api-docs/update-readmes.js deleted file mode 100755 index ab1805c3fdeccd..00000000000000 --- a/bin/api-docs/update-readmes.js +++ /dev/null @@ -1,42 +0,0 @@ -/** - * Node dependencies. - */ -const { join } = require( 'path' ); -const spawnSync = require( 'child_process' ).spawnSync; - -/** - * Local dependencies. - */ -const getPackages = require( './packages' ); - -getPackages().forEach( ( entry ) => { - const [ packageName, targetFiles ] = entry; - - Object.entries( targetFiles ).forEach( ( [ token, path ] ) => { - // Each target operates over the same file, so it needs to be processed synchronously, - // as to make sure the processes don't overwrite each other. - const { status, stderr } = spawnSync( - join( - __dirname, - '..', - '..', - 'node_modules', - '.bin', - 'docgen' - ).replace( / /g, '\\ ' ), - [ - join( 'packages', packageName, path ), - `--output packages/${ packageName }/README.md`, - '--to-token', - `--use-token "${ token }"`, - '--ignore "/unstable|experimental/i"', - ], - { shell: true } - ); - - if ( status !== 0 ) { - process.stderr.write( `${ packageName } ${ stderr.toString() }\n` ); - process.exit( 1 ); - } - } ); -} ); diff --git a/docs/designers-developers/developers/data/data-core-annotations.md b/docs/designers-developers/developers/data/data-core-annotations.md index e71aefd27d2129..0b5840c617d1e4 100644 --- a/docs/designers-developers/developers/data/data-core-annotations.md +++ b/docs/designers-developers/developers/data/data-core-annotations.md @@ -4,17 +4,17 @@ Namespace: `core/annotations`. ## Selectors - + Nothing to document. - - + ## Actions - + Nothing to document. - + + diff --git a/docs/designers-developers/developers/data/data-core-block-editor.md b/docs/designers-developers/developers/data/data-core-block-editor.md index 1bd2c38e601a1e..e19a7cb52c12b1 100644 --- a/docs/designers-developers/developers/data/data-core-block-editor.md +++ b/docs/designers-developers/developers/data/data-core-block-editor.md @@ -4,7 +4,7 @@ Namespace: `core/block-editor`. ## Selectors - + # **canInsertBlockType** @@ -907,12 +907,11 @@ _Returns_ - `?boolean`: Whether the template is valid or not. - - + ## Actions - + # **clearSelectedBlock** @@ -1386,6 +1385,15 @@ _Returns_ # **updateSettings** -Undocumented declaration. +Returns an action object used in signalling that the block editor settings have been updated. + +_Parameters_ + +- _settings_ `Object`: Updated settings + +_Returns_ + +- `Object`: Action object + - + diff --git a/docs/designers-developers/developers/data/data-core-blocks.md b/docs/designers-developers/developers/data/data-core-blocks.md index 933c432cd93260..8d577f4fca040c 100644 --- a/docs/designers-developers/developers/data/data-core-blocks.md +++ b/docs/designers-developers/developers/data/data-core-blocks.md @@ -4,7 +4,7 @@ Namespace: `core/blocks`. ## Selectors - + # **getBlockStyles** @@ -231,12 +231,11 @@ _Returns_ - `Array`: Whether block type matches search term. - - + ## Actions - + # **addBlockCollection** @@ -417,4 +416,5 @@ _Returns_ - `Object`: Action object. - + + diff --git a/docs/designers-developers/developers/data/data-core-edit-post.md b/docs/designers-developers/developers/data/data-core-edit-post.md index 49801a69817be8..0263877b9c567c 100644 --- a/docs/designers-developers/developers/data/data-core-edit-post.md +++ b/docs/designers-developers/developers/data/data-core-edit-post.md @@ -4,7 +4,7 @@ Namespace: `core/edit-post`. ## Selectors - + # **getActiveGeneralSidebarName** @@ -267,12 +267,11 @@ _Returns_ - `boolean`: Whether the metaboxes are being saved. - - + ## Actions - + # **closeGeneralSidebar** @@ -472,4 +471,5 @@ _Returns_ - `Object`: Action object. - + + diff --git a/docs/designers-developers/developers/data/data-core-editor.md b/docs/designers-developers/developers/data/data-core-editor.md index ef0243465e9f3c..ffba8e67b9aa30 100644 --- a/docs/designers-developers/developers/data/data-core-editor.md +++ b/docs/designers-developers/developers/data/data-core-editor.md @@ -4,7 +4,7 @@ Namespace: `core/editor`. ## Selectors - + # **canInsertBlockType** @@ -1060,12 +1060,11 @@ _Related_ - isValidTemplate in core/block-editor store. - - + ## Actions - + # **autosave** @@ -1511,4 +1510,5 @@ _Returns_ - `Object`: Action object. - + + diff --git a/docs/designers-developers/developers/data/data-core-keyboard-shortcuts.md b/docs/designers-developers/developers/data/data-core-keyboard-shortcuts.md index 9db8ab7ce2d362..fefa8e189e2150 100644 --- a/docs/designers-developers/developers/data/data-core-keyboard-shortcuts.md +++ b/docs/designers-developers/developers/data/data-core-keyboard-shortcuts.md @@ -4,7 +4,7 @@ Namespace: `core/keyboard-shortcuts`. ## Selectors - + # **getAllShortcutRawKeyCombinations** @@ -85,12 +85,11 @@ _Returns_ - `?string`: Shortcut representation. - - + ## Actions - + # **registerShortcut** @@ -116,4 +115,5 @@ _Returns_ - `Object`: action. - + + diff --git a/docs/designers-developers/developers/data/data-core-notices.md b/docs/designers-developers/developers/data/data-core-notices.md index 876977576f69bd..54dfbdd8d84ed8 100644 --- a/docs/designers-developers/developers/data/data-core-notices.md +++ b/docs/designers-developers/developers/data/data-core-notices.md @@ -4,7 +4,7 @@ Namespace: `core/notices`. ## Selectors - + # **getNotices** @@ -20,12 +20,11 @@ _Returns_ - `Array`: Array of notices. - - + ## Actions - + # **createErrorNotice** @@ -132,4 +131,5 @@ _Returns_ - `Object`: Action object. - + + diff --git a/docs/designers-developers/developers/data/data-core-nux.md b/docs/designers-developers/developers/data/data-core-nux.md index 92dcf6be1d0ac2..ad0a93e2bde235 100644 --- a/docs/designers-developers/developers/data/data-core-nux.md +++ b/docs/designers-developers/developers/data/data-core-nux.md @@ -4,7 +4,7 @@ Namespace: `core/nux`. ## Selectors - + # **areTipsEnabled** @@ -47,12 +47,11 @@ _Returns_ - `boolean`: Whether or not the given tip is showing. - - + ## Actions - + # **disableTips** @@ -97,4 +96,5 @@ _Returns_ - `Object`: Action object. - + + diff --git a/docs/designers-developers/developers/data/data-core-viewport.md b/docs/designers-developers/developers/data/data-core-viewport.md index b8f133834ec594..4f776c53efbca7 100644 --- a/docs/designers-developers/developers/data/data-core-viewport.md +++ b/docs/designers-developers/developers/data/data-core-viewport.md @@ -4,7 +4,7 @@ Namespace: `core/viewport`. ## Selectors - + # **isViewportMatch** @@ -26,12 +26,11 @@ _Returns_ - `boolean`: Whether viewport matches query. - - + ## Actions - + # **setIsMatching** @@ -47,4 +46,5 @@ _Returns_ - `Object`: Action object. - + + diff --git a/docs/designers-developers/developers/data/data-core.md b/docs/designers-developers/developers/data/data-core.md index 79f3f41991c08f..54ab79f95f1e54 100644 --- a/docs/designers-developers/developers/data/data-core.md +++ b/docs/designers-developers/developers/data/data-core.md @@ -4,7 +4,7 @@ Namespace: `core`. ## Selectors - + # **canUser** @@ -441,12 +441,11 @@ _Returns_ - `boolean`: Whether the entity record is saving or not. - - + ## Actions - + # **addEntities** @@ -617,4 +616,5 @@ _Parameters_ Action triggered to undo the last edit to an entity record, if any. - + + diff --git a/docs/tool/are-data-files-unstaged.js b/docs/tool/are-data-files-unstaged.js deleted file mode 100644 index 38f659ec9bb0c7..00000000000000 --- a/docs/tool/are-data-files-unstaged.js +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env node - -/** - * Node dependencies. - */ -const chalk = require( 'chalk' ); -const execSync = require( 'child_process' ).execSync; - -/** - * Local dependencies. - */ -const getPackages = require( './packages' ); - -const getUnstagedFiles = () => - execSync( 'git diff --name-only', { encoding: 'utf8' } ) - .split( '\n' ) - .filter( ( element ) => '' !== element ); -const readmeFiles = getPackages().map( - ( [ packageName ] ) => - `docs/designers-developers/developers/data/data-${ packageName.replace( - '/', - '-' - ) }.md` -); -const unstagedReadmes = getUnstagedFiles().filter( ( element ) => - readmeFiles.includes( element ) -); - -if ( unstagedReadmes.length > 0 ) { - process.exitCode = 1; - process.stdout.write( - chalk.red( - '\n', - 'Some API docs may be out of date:', - unstagedReadmes.toString(), - 'Either stage them or continue with --no-verify.', - '\n' - ) - ); -} diff --git a/docs/tool/index.js b/docs/tool/index.js index f0b1297f987dfb..d7e03d00974b3b 100644 --- a/docs/tool/index.js +++ b/docs/tool/index.js @@ -2,8 +2,6 @@ * Node dependencies */ const fs = require( 'fs' ); -const { join } = require( 'path' ); -const { execFileSync } = require( 'child_process' ); const path = require( 'path' ); /** @@ -14,9 +12,6 @@ const { getRootManifest } = require( './manifest' ); const tocFileInput = path.resolve( __dirname, '../toc.json' ); const manifestOutput = path.resolve( __dirname, '../manifest.json' ); -// Update data files from code -execFileSync( 'node', [ join( __dirname, 'update-data.js' ) ] ); - // Process TOC file and generate manifest handbook fs.writeFileSync( manifestOutput, diff --git a/docs/tool/packages.js b/docs/tool/packages.js deleted file mode 100644 index 558a3e62c43c23..00000000000000 --- a/docs/tool/packages.js +++ /dev/null @@ -1,39 +0,0 @@ -const packages = [ - [ - 'core', - { - 'Autogenerated actions': 'packages/core-data/src/actions.js', - 'Autogenerated selectors': 'packages/core-data/src/selectors.js', - }, - ], - 'core/annotations', - 'core/blocks', - 'core/block-editor', - 'core/editor', - 'core/edit-post', - 'core/keyboard-shortcuts', - 'core/notices', - 'core/nux', - 'core/viewport', -]; - -module.exports = function() { - return packages.map( ( entry ) => { - if ( ! Array.isArray( entry ) ) { - entry = [ - entry, - { - 'Autogenerated actions': `packages/${ entry.replace( - 'core/', - '' - ) }/src/store/actions.js`, - 'Autogenerated selectors': `packages/${ entry.replace( - 'core/', - '' - ) }/src/store/selectors.js`, - }, - ]; - } - return entry; - } ); -}; diff --git a/docs/tool/update-data.js b/docs/tool/update-data.js deleted file mode 100644 index 89f0fc614f1c50..00000000000000 --- a/docs/tool/update-data.js +++ /dev/null @@ -1,46 +0,0 @@ -/** - * Node dependencies. - */ -const { join } = require( 'path' ); -const spawnSync = require( 'child_process' ).spawnSync; - -/** - * Local dependencies. - */ -const getPackages = require( './packages' ); - -getPackages().forEach( ( entry ) => { - const [ packageName, targetFiles ] = entry; - - Object.entries( targetFiles ).forEach( ( [ token, target ] ) => { - // Note that this needs to be a sync process for each output file that is updated: - // until docgen provides a way to update many tokens at once, we need to make sure - // the output file is updated before starting the second pass for the next token. - const { status, stderr } = spawnSync( - join( - __dirname, - '..', - '..', - 'node_modules', - '.bin', - 'docgen' - ).replace( / /g, '\\ ' ), - [ - target, - `--output docs/designers-developers/developers/data/data-${ packageName.replace( - '/', - '-' - ) }.md`, - '--to-token', - `--use-token "${ token }"`, - '--ignore "/unstable|experimental/i"', - ], - { shell: true } - ); - - if ( status !== 0 ) { - process.stderr.write( `${ packageName } ${ stderr.toString() }\n` ); - process.exit( 1 ); - } - } ); -} ); diff --git a/package-lock.json b/package-lock.json index 42b8aad318a839..a4184598a1d896 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10687,6 +10687,121 @@ "make-dir": "^3.0.0", "mustache": "^4.0.0", "write-pkg": "^4.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz", + "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "execa": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.0.0.tgz", + "integrity": "sha512-JbDUxwV3BoT5ZVXQrSVbAiaXhXUkIwvbhPIwZ0N13kX+5yCzOhUNdocxB/UQRuYOHRYYwAxKYwJYc0T4D12pDA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "get-stream": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", + "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "onetime": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", + "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } } }, "@wordpress/custom-templated-path-webpack-plugin": { @@ -14286,6 +14401,12 @@ "has-flag": "^4.0.0" } }, + "term-size": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.0.tgz", + "integrity": "sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw==", + "dev": true + }, "type-fest": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", @@ -18970,9 +19091,9 @@ "dev": true }, "execa": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.0.0.tgz", - "integrity": "sha512-JbDUxwV3BoT5ZVXQrSVbAiaXhXUkIwvbhPIwZ0N13kX+5yCzOhUNdocxB/UQRuYOHRYYwAxKYwJYc0T4D12pDA==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz", + "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==", "dev": true, "requires": { "cross-spawn": "^7.0.0", @@ -18982,6 +19103,7 @@ "merge-stream": "^2.0.0", "npm-run-path": "^4.0.0", "onetime": "^5.1.0", + "p-finally": "^2.0.0", "signal-exit": "^3.0.2", "strip-final-newline": "^2.0.0" }, @@ -19025,9 +19147,9 @@ "dev": true }, "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.0.tgz", + "integrity": "sha512-8eyAOAH+bYXFPSnNnKr3J+yoybe8O87Is5rtAQ8qRczJz1ajcsjg8l2oZqP+Ppx15Ii3S1vUTjQN2h4YO2tWWQ==", "dev": true, "requires": { "path-key": "^3.0.0" @@ -19042,6 +19164,12 @@ "mimic-fn": "^2.1.0" } }, + "p-finally": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", + "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", + "dev": true + }, "path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -23050,9 +23178,9 @@ "dev": true }, "is-whitespace-character": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.2.tgz", - "integrity": "sha512-SzM+T5GKUCtLhlHFKt2SDAX2RFzfS6joT91F2/WSi9LxgFdsnhfPK/UIA+JhRR2xuyLdrCys2PiFDrtn1fU5hQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", + "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", "dev": true }, "is-windows": { @@ -23062,9 +23190,9 @@ "dev": true }, "is-word-character": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.2.tgz", - "integrity": "sha512-T3FlsX8rCHAH8e7RE7PfOPZVFQlcV3XRF9eOOBQ1uf70OxO7CjjSOjeImMPCADBdYWcStAbVbYvJ1m2D3tb+EA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", + "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==", "dev": true }, "is-wsl": { @@ -38819,12 +38947,6 @@ } } }, - "term-size": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.1.1.tgz", - "integrity": "sha512-UqvQSch04R+69g4RDhrslmGvGL3ucDRX/U+snYW0Mab4uCAyKSndUksaoqlJ81QKSpRnIsuOYQCbC2ZWx2896A==", - "dev": true - }, "terminal-link": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.0.0.tgz", diff --git a/package.json b/package.json index c896dc99b6a54f..61b182e0a1f678 100644 --- a/package.json +++ b/package.json @@ -127,6 +127,7 @@ "enzyme": "3.9.0", "eslint-plugin-eslint-comments": "3.1.2", "eslint-plugin-import": "2.18.2", + "execa": "3.4.0", "fast-glob": "2.2.7", "fbjs": "0.8.17", "glob": "7.1.2", @@ -184,7 +185,7 @@ "predev": "npm run check-engines", "dev": "npm run build:packages && concurrently \"wp-scripts start\" \"npm run dev:packages\"", "dev:packages": "node ./bin/packages/watch.js", - "docs:build": "node ./docs/tool/index.js && node ./bin/api-docs/update-readmes.js", + "docs:build": "node ./docs/tool/index.js && node ./bin/api-docs/update-api-docs.js", "fixtures:clean": "rimraf \"packages/e2e-tests/fixtures/blocks/*.+(json|serialized.html)\"", "fixtures:server-registered": "packages/env/bin/wp-env run wordpress ./wp-content/plugins/gutenberg/bin/get-server-blocks.php > test/integration/full-content/server-registered.json", "fixtures:generate": "npm run fixtures:server-registered && cross-env GENERATE_MISSING_FIXTURES=y npm run test-unit", @@ -246,13 +247,12 @@ "wp-scripts format-js", "wp-scripts lint-js" ], - "{docs/{toc.json,tool/*.js},packages/{*/README.md,*/src/{actions,selectors}.js,components/src/*/**/README.md}}": [ - "node ./docs/tool/index.js", - "node ./docs/tool/are-data-files-unstaged.js" + "{docs/{toc.json,tool/*.js},packages/{*/README.md,components/src/*/**/README.md}}": [ + "node ./docs/tool/index.js" ], "packages/**/*.js": [ - "node ./bin/api-docs/update-readmes.js", - "node ./bin/api-docs/are-readmes-unstaged.js" + "node ./bin/api-docs/update-api-docs.js", + "node ./bin/api-docs/are-api-docs-unstaged.js" ] }, "wp-env": { diff --git a/packages/block-editor/src/store/actions.js b/packages/block-editor/src/store/actions.js index fe401713c3ab99..c59bd31bdd9c6e 100644 --- a/packages/block-editor/src/store/actions.js +++ b/packages/block-editor/src/store/actions.js @@ -788,7 +788,7 @@ export function updateBlockListSettings( clientId, settings ) { }; } -/* +/** * Returns an action object used in signalling that the block editor settings have been updated. * * @param {Object} settings Updated settings diff --git a/packages/core-data/README.md b/packages/core-data/README.md index a2bb3ccbe6deeb..c63333f9f149cd 100644 --- a/packages/core-data/README.md +++ b/packages/core-data/README.md @@ -40,7 +40,7 @@ const MyAuthorsList = withSelect( ( select ) => ( { The following set of dispatching action creators are available on the object returned by `wp.data.dispatch( 'core' )`: - + # **addEntities** @@ -211,13 +211,13 @@ _Parameters_ Action triggered to undo the last edit to an entity record, if any. - + ## Selectors The following selectors are available on the object returned by `wp.data.select( 'core' )`: - + # **canUser** @@ -655,6 +655,6 @@ _Returns_ - `boolean`: Whether the entity record is saving or not. - +

Code is Poetry.

diff --git a/packages/docgen/README.md b/packages/docgen/README.md index c62b96fc4e44b4..e39594cb4fc644 100644 --- a/packages/docgen/README.md +++ b/packages/docgen/README.md @@ -33,9 +33,9 @@ This command will generate a file named `entry-point-api.md` containing all the * **--output** `(String)`: Output file that will contain the API documentation. * **--to-section** `(String)`: Append generated documentation to this section in the Markdown output. To be used by the default Markdown formatter. Depends on `--output` and bypasses the custom `--formatter` passed, if any. * **--to-token**: Embed generated documentation within the start and end tokens in the Markdown output. To be used by the default Markdown formatter.Depends on `--output` and bypasses the custom `--formatter` passed, if any. - * Start token: `` - * End token: `` -* **--use-token** `(String)`: This options allows you to customize the string between the tokens. For example, `--use-token my-api` will look up for the start token `` and the end token ``. Depends on `--to-token`. + * Start token: <!-- START TOKEN(Autogenerated API docs) --> + * End token: <!-- END TOKEN(Autogenerated API docs) --> +* **--use-token** `(String)`: This options allows you to customize the string between the tokens. For example, `--use-token my-api` will look up for the start token <!-- START TOKEN(my-api) --> and the end token <!-- END TOKEN(my-api) -->. Depends on `--to-token`. * **--debug**: Run in debug mode, which outputs some intermediate files useful for debugging. ## Examples diff --git a/tsconfig.json b/tsconfig.json index 7a0eb51600233b..d470e66c01e3c4 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,7 +4,7 @@ "allowSyntheticDefaultImports": true, "checkJs": true, "jsx": "preserve", - "lib": ["dom", "esnext"], + "lib": ["dom", "esnext", "es2020.string"], "module": "commonjs", "noEmit": true, "resolveJsonModule": true, @@ -31,6 +31,7 @@ "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ }, "include": [ + "./bin/api-docs/update-api-docs.js", "./packages/a11y/**/*.js", "./packages/blob/**/*.js", "./packages/dom-ready/**/*.js",