From 44289e6b9054f6e29149604c7234287f57ccff2c Mon Sep 17 00:00:00 2001 From: Adam Zielinski Date: Tue, 15 Nov 2022 12:25:13 -0700 Subject: [PATCH] Use folders instead of separate npm packages (#70) ## Description This PR greatly simplifies the repository setup by getting rid of the separate `package.json` files as they made the setup unnecessarily complex. ### Before this PR * Multiple `tsconfig.json` setups meant we needed to rebuild types in a particular order to even get the dev environment to work. * Esbuild needed two steps to first build each package separately and only then build the entire project. Worse, step one used ES Modules and step two used CommonJS. Using `tsconfig.json` made it extra hard. Substituting env variables caused conflicts. * Generating the documentation required 8 separate configuration files * Adding a new package was tedious. It required adding new `package.json`, `tsconfig.json`, `api-documenter.json`, adjusting all the build pipelines, ensuring the build steps are triggered in the correct order etc. ### After this PR * There are two `tsconfig.json` files in the repo root and that's it. One is for the main-thread code and the other is for the worker code. * ESbuild runs in a single step and is configured with a single JS object. * There are no more documentation generator configs, it's all automated. * Introducing a new section of the repository is as simple as creating a new directory. There's no need to think about configs, build pipelines etc --- .gitignore | 8 +- api-extractor-base.json | 433 - build/wp.data | 22 +- build/wp.js | 8 +- docs/using-php-in-javascript.md | 42 +- docs/using-php-in-the-browser.md | 15 +- esbuild-packages.js | 269 - esbuild.js | 188 + gulpfile.js | 87 +- package.json | 26 +- .../api-extractor.browser.json | 8 - .../api-extractor.service-worker.json | 8 - .../api-extractor.worker-thread.json | 8 - packages/php-wasm-browser/package.json | 38 - packages/php-wasm-browser/tsconfig.json | 17 - .../php-wasm-browser/tsconfig.worker.json | 20 - packages/php-wasm/api-extractor.json | 5 - packages/php-wasm/package.json | 36 - packages/php-wasm/tsconfig.json | 11 - packages/php-wasm/wasm/gulpfile.js | 69 - packages/php-wasm/yarn.lock | 2273 - .../bin/api-extractor.js | 2 - .../bin/generate-docs.js | 58 - .../bin/merge-api-models.js | 68 - .../test/CustomMarkdownEmitter.test.ts | 180 - .../CustomMarkdownEmitter.test.ts.snap | 62 - .../src/nodes/DocTable.ts | 79 - .../src/patch-tsdoc.js | 153 - .../src/utils/TypeResolver.ts | 184 - .../tool.ts | 186653 --------------- .../tsconfig.json | 9 - .../wordpress-wasm/api-extractor.browser.json | 8 - .../api-extractor.service-worker.json | 8 - .../api-extractor.worker-thread.json | 8 - packages/wordpress-wasm/package.json | 37 - packages/wordpress-wasm/tsconfig.json | 18 - packages/wordpress-wasm/tsconfig.worker.json | 19 - packages/wordpress-wasm/wordpress/gulpfile.js | 41 - scripts/build-api-markdown.sh | 3 - scripts/build-api-model.sh | 19 - scripts/build-types.sh | 8 - ...dme-md-files.js => postprocess-md-docs.js} | 6 +- scripts/run-docs-pipeline.sh | 7 - .../src => src/php-wasm-browser}/.htaccess | 0 {packages => src}/php-wasm-browser/README.md | 0 .../emscripten-download-monitor.ts | 0 .../php-wasm-browser}/iframe-worker.html | 0 .../src => src/php-wasm-browser}/index.ts | 0 .../src => src/php-wasm-browser}/messaging.ts | 0 .../src => src/php-wasm-browser}/scope.ts | 0 .../service-worker/window-library.ts | 0 .../service-worker/worker-library.ts | 0 .../src => src/php-wasm-browser}/utils.ts | 0 .../worker-thread/window-library.ts | 2 +- .../worker-thread/worker-library.ts | 4 +- {packages => src}/php-wasm/README.md | 0 .../php-wasm/src => src/php-wasm}/index.ts | 0 .../src => src/php-wasm}/php-browser.ts | 0 .../src => src/php-wasm}/php-server.ts | 0 .../php-wasm/src => src/php-wasm}/php.ts | 0 {packages => src}/php-wasm/wasm/Dockerfile | 0 .../php-wasm/wasm/build-assets/esm-prefix.js | 0 .../php-wasm/wasm/build-assets/esm-suffix.js | 0 .../php-wasm/wasm/build-assets/php7.4.patch | 0 .../php-wasm/wasm/build-assets/php_wasm.c | 0 .../wasm/build-assets/sqlite3-wasm.patch | 0 .../wasm/build-assets/zlib/CMakeLists.txt | 0 .../wasm/build-assets/zlib/Makefile.in | 0 .../php-wasm/wasm/build-assets/zlib/README | 0 .../php-wasm/wasm/build-assets/zlib/adler32.c | 0 .../wasm/build-assets/zlib/benchmark.c | 0 .../wasm/build-assets/zlib/compress.c | 0 .../php-wasm/wasm/build-assets/zlib/configure | 0 .../php-wasm/wasm/build-assets/zlib/crc32.c | 0 .../php-wasm/wasm/build-assets/zlib/crc32.h | 0 .../php-wasm/wasm/build-assets/zlib/deflate.c | 0 .../php-wasm/wasm/build-assets/zlib/deflate.h | 0 .../php-wasm/wasm/build-assets/zlib/example.c | 0 .../php-wasm/wasm/build-assets/zlib/gzclose.c | 0 .../php-wasm/wasm/build-assets/zlib/gzguts.h | 0 .../php-wasm/wasm/build-assets/zlib/gzlib.c | 0 .../php-wasm/wasm/build-assets/zlib/gzread.c | 0 .../php-wasm/wasm/build-assets/zlib/gzwrite.c | 0 .../php-wasm/wasm/build-assets/zlib/infback.c | 0 .../php-wasm/wasm/build-assets/zlib/inffast.c | 0 .../php-wasm/wasm/build-assets/zlib/inffast.h | 0 .../wasm/build-assets/zlib/inffixed.h | 0 .../php-wasm/wasm/build-assets/zlib/inflate.c | 0 .../php-wasm/wasm/build-assets/zlib/inflate.h | 0 .../wasm/build-assets/zlib/inftrees.c | 0 .../wasm/build-assets/zlib/inftrees.h | 0 .../wasm/build-assets/zlib/minigzip.c | 0 .../wasm/build-assets/zlib/readme.txt | 0 .../php-wasm/wasm/build-assets/zlib/ref.txt | 0 .../php-wasm/wasm/build-assets/zlib/trees.c | 0 .../php-wasm/wasm/build-assets/zlib/trees.h | 0 .../php-wasm/wasm/build-assets/zlib/uncompr.c | 0 .../php-wasm/wasm/build-assets/zlib/zconf.h | 0 .../wasm/build-assets/zlib/zconf.h.cmakein | 0 .../wasm/build-assets/zlib/zconf.h.in | 0 .../php-wasm/wasm/build-assets/zlib/zlib.3 | 0 .../php-wasm/wasm/build-assets/zlib/zlib.h | 0 .../php-wasm/wasm/build-assets/zlib/zlib.map | 0 .../php-wasm/wasm/build-assets/zlib/zlib.pc | 0 .../wasm/build-assets/zlib/zlib.pc.in | 0 .../php-wasm/wasm/build-assets/zlib/zutil.c | 0 .../php-wasm/wasm/build-assets/zlib/zutil.h | 0 src/php-wasm/wasm/gulpfile.js | 87 + .../ApiModelBuilder.ts | 2 +- .../LICENSE | 0 .../README.md | 0 .../bin/tsdoc-to-api-markdown.ts | 34 + .../commands/apiJsonToMarkdown.ts | 47 + .../commands/tsDocToApiJson.ts | 105 + .../commands/tsDocToApiMarkdown.ts | 19 + .../documenters/DocumenterConfig.ts | 2 +- .../documenters/IConfigFile.ts | 0 .../documenters/MarkdownDocumenter.ts | 51 +- .../index.ts | 1 + .../markdown/CustomMarkdownEmitter.ts | 20 +- .../markdown/MarkdownEmitter.ts | 1 - .../nodes/CustomDocNodeKind.ts | 0 .../nodes/DocContentBlock.ts | 0 .../nodes/DocEmphasisSpan.ts | 0 .../nodes/DocForceSoftBreak.ts | 49 +- .../nodes/DocHeading.ts | 0 .../nodes/DocMaybe.ts | 0 .../nodes/DocNoteBox.ts | 0 .../nodes/DocTable.ts | 84 + .../nodes/DocTableCell.ts | 0 .../nodes/DocTableRow.ts | 0 .../package.json | 0 .../patch-tsdoc.js | 157 + .../utils/DocContentBlockBuilder.ts | 26 +- .../utils/IndentedWriter.ts | 0 .../utils/TypeResolver.ts | 265 + .../utils/Utilities.ts | 26 +- .../utils/mergeApiModels.ts | 177 + .../src => src/wordpress-wasm}/.htaccess | 0 {packages => src}/wordpress-wasm/README.md | 0 .../src => src/wordpress-wasm}/config.ts | 2 +- .../src => src/wordpress-wasm}/example-app.ts | 2 +- .../src => src/wordpress-wasm}/index.ts | 2 +- .../src => src/wordpress-wasm}/macros.ts | 0 .../wordpress-wasm}/plugin-proxy.php | 0 .../requests_transport_fetch.php | 0 .../wordpress-wasm}/service-worker.ts | 6 +- .../src => src/wordpress-wasm}/utils.ts | 0 .../src => src/wordpress-wasm}/wordpress.html | 0 .../wordpress-wasm/wordpress/Dockerfile | 0 .../wordpress/build-assets/esm-prefix.js | 0 .../wordpress/build-assets/esm-suffix.js | 0 src/wordpress-wasm/wordpress/gulpfile.js | 56 + .../wordpress-wasm}/worker-thread.ts | 4 +- tsconfig.base.json | 11 +- tsconfig.json | 24 +- tsconfig.worker.json | 21 + 157 files changed, 1490 insertions(+), 191018 deletions(-) delete mode 100644 api-extractor-base.json delete mode 100644 esbuild-packages.js create mode 100644 esbuild.js delete mode 100644 packages/php-wasm-browser/api-extractor.browser.json delete mode 100644 packages/php-wasm-browser/api-extractor.service-worker.json delete mode 100644 packages/php-wasm-browser/api-extractor.worker-thread.json delete mode 100644 packages/php-wasm-browser/package.json delete mode 100644 packages/php-wasm-browser/tsconfig.json delete mode 100644 packages/php-wasm-browser/tsconfig.worker.json delete mode 100644 packages/php-wasm/api-extractor.json delete mode 100644 packages/php-wasm/package.json delete mode 100644 packages/php-wasm/tsconfig.json delete mode 100644 packages/php-wasm/wasm/gulpfile.js delete mode 100644 packages/php-wasm/yarn.lock delete mode 100644 packages/typescript-reference-doc-generator/bin/api-extractor.js delete mode 100644 packages/typescript-reference-doc-generator/bin/generate-docs.js delete mode 100644 packages/typescript-reference-doc-generator/bin/merge-api-models.js delete mode 100644 packages/typescript-reference-doc-generator/src/markdown/test/CustomMarkdownEmitter.test.ts delete mode 100644 packages/typescript-reference-doc-generator/src/markdown/test/__snapshots__/CustomMarkdownEmitter.test.ts.snap delete mode 100644 packages/typescript-reference-doc-generator/src/nodes/DocTable.ts delete mode 100644 packages/typescript-reference-doc-generator/src/patch-tsdoc.js delete mode 100644 packages/typescript-reference-doc-generator/src/utils/TypeResolver.ts delete mode 100644 packages/typescript-reference-doc-generator/tool.ts delete mode 100644 packages/typescript-reference-doc-generator/tsconfig.json delete mode 100644 packages/wordpress-wasm/api-extractor.browser.json delete mode 100644 packages/wordpress-wasm/api-extractor.service-worker.json delete mode 100644 packages/wordpress-wasm/api-extractor.worker-thread.json delete mode 100644 packages/wordpress-wasm/package.json delete mode 100644 packages/wordpress-wasm/tsconfig.json delete mode 100644 packages/wordpress-wasm/tsconfig.worker.json delete mode 100644 packages/wordpress-wasm/wordpress/gulpfile.js delete mode 100644 scripts/build-api-markdown.sh delete mode 100644 scripts/build-api-model.sh delete mode 100644 scripts/build-types.sh rename scripts/{build-readme-md-files.js => postprocess-md-docs.js} (93%) delete mode 100644 scripts/run-docs-pipeline.sh rename {packages/php-wasm-browser/src => src/php-wasm-browser}/.htaccess (100%) rename {packages => src}/php-wasm-browser/README.md (100%) rename {packages/php-wasm-browser/src => src/php-wasm-browser}/emscripten-download-monitor.ts (100%) rename {packages/php-wasm-browser/src => src/php-wasm-browser}/iframe-worker.html (100%) rename {packages/php-wasm-browser/src => src/php-wasm-browser}/index.ts (100%) rename {packages/php-wasm-browser/src => src/php-wasm-browser}/messaging.ts (100%) rename {packages/php-wasm-browser/src => src/php-wasm-browser}/scope.ts (100%) rename {packages/php-wasm-browser/src => src/php-wasm-browser}/service-worker/window-library.ts (100%) rename {packages/php-wasm-browser/src => src/php-wasm-browser}/service-worker/worker-library.ts (100%) rename {packages/php-wasm-browser/src => src/php-wasm-browser}/utils.ts (100%) rename {packages/php-wasm-browser/src => src/php-wasm-browser}/worker-thread/window-library.ts (98%) rename {packages/php-wasm-browser/src => src/php-wasm-browser}/worker-thread/worker-library.ts (98%) rename {packages => src}/php-wasm/README.md (100%) rename {packages/php-wasm/src => src/php-wasm}/index.ts (100%) rename {packages/php-wasm/src => src/php-wasm}/php-browser.ts (100%) rename {packages/php-wasm/src => src/php-wasm}/php-server.ts (100%) rename {packages/php-wasm/src => src/php-wasm}/php.ts (100%) rename {packages => src}/php-wasm/wasm/Dockerfile (100%) rename {packages => src}/php-wasm/wasm/build-assets/esm-prefix.js (100%) rename {packages => src}/php-wasm/wasm/build-assets/esm-suffix.js (100%) rename {packages => src}/php-wasm/wasm/build-assets/php7.4.patch (100%) rename {packages => src}/php-wasm/wasm/build-assets/php_wasm.c (100%) rename {packages => src}/php-wasm/wasm/build-assets/sqlite3-wasm.patch (100%) rename {packages => src}/php-wasm/wasm/build-assets/zlib/CMakeLists.txt (100%) rename {packages => src}/php-wasm/wasm/build-assets/zlib/Makefile.in (100%) rename {packages => src}/php-wasm/wasm/build-assets/zlib/README (100%) rename {packages => src}/php-wasm/wasm/build-assets/zlib/adler32.c (100%) rename {packages => src}/php-wasm/wasm/build-assets/zlib/benchmark.c (100%) rename {packages => src}/php-wasm/wasm/build-assets/zlib/compress.c (100%) rename {packages => src}/php-wasm/wasm/build-assets/zlib/configure (100%) rename {packages => src}/php-wasm/wasm/build-assets/zlib/crc32.c (100%) rename {packages => src}/php-wasm/wasm/build-assets/zlib/crc32.h (100%) rename {packages => src}/php-wasm/wasm/build-assets/zlib/deflate.c (100%) rename {packages => src}/php-wasm/wasm/build-assets/zlib/deflate.h (100%) rename {packages => src}/php-wasm/wasm/build-assets/zlib/example.c (100%) rename {packages => src}/php-wasm/wasm/build-assets/zlib/gzclose.c (100%) rename {packages => src}/php-wasm/wasm/build-assets/zlib/gzguts.h (100%) rename {packages => src}/php-wasm/wasm/build-assets/zlib/gzlib.c (100%) rename {packages => src}/php-wasm/wasm/build-assets/zlib/gzread.c (100%) rename {packages => src}/php-wasm/wasm/build-assets/zlib/gzwrite.c (100%) rename {packages => src}/php-wasm/wasm/build-assets/zlib/infback.c (100%) rename {packages => src}/php-wasm/wasm/build-assets/zlib/inffast.c (100%) rename {packages => src}/php-wasm/wasm/build-assets/zlib/inffast.h (100%) rename {packages => src}/php-wasm/wasm/build-assets/zlib/inffixed.h (100%) rename {packages => src}/php-wasm/wasm/build-assets/zlib/inflate.c (100%) rename {packages => src}/php-wasm/wasm/build-assets/zlib/inflate.h (100%) rename {packages => src}/php-wasm/wasm/build-assets/zlib/inftrees.c (100%) rename {packages => src}/php-wasm/wasm/build-assets/zlib/inftrees.h (100%) rename {packages => src}/php-wasm/wasm/build-assets/zlib/minigzip.c (100%) rename {packages => src}/php-wasm/wasm/build-assets/zlib/readme.txt (100%) rename {packages => src}/php-wasm/wasm/build-assets/zlib/ref.txt (100%) rename {packages => src}/php-wasm/wasm/build-assets/zlib/trees.c (100%) rename {packages => src}/php-wasm/wasm/build-assets/zlib/trees.h (100%) rename {packages => src}/php-wasm/wasm/build-assets/zlib/uncompr.c (100%) rename {packages => src}/php-wasm/wasm/build-assets/zlib/zconf.h (100%) rename {packages => src}/php-wasm/wasm/build-assets/zlib/zconf.h.cmakein (100%) rename {packages => src}/php-wasm/wasm/build-assets/zlib/zconf.h.in (100%) rename {packages => src}/php-wasm/wasm/build-assets/zlib/zlib.3 (100%) rename {packages => src}/php-wasm/wasm/build-assets/zlib/zlib.h (100%) rename {packages => src}/php-wasm/wasm/build-assets/zlib/zlib.map (100%) rename {packages => src}/php-wasm/wasm/build-assets/zlib/zlib.pc (100%) rename {packages => src}/php-wasm/wasm/build-assets/zlib/zlib.pc.in (100%) rename {packages => src}/php-wasm/wasm/build-assets/zlib/zutil.c (100%) rename {packages => src}/php-wasm/wasm/build-assets/zlib/zutil.h (100%) create mode 100644 src/php-wasm/wasm/gulpfile.js rename {packages/typescript-reference-doc-generator/src => src/typescript-reference-doc-generator}/ApiModelBuilder.ts (98%) rename {packages => src}/typescript-reference-doc-generator/LICENSE (100%) rename {packages => src}/typescript-reference-doc-generator/README.md (100%) create mode 100644 src/typescript-reference-doc-generator/bin/tsdoc-to-api-markdown.ts create mode 100644 src/typescript-reference-doc-generator/commands/apiJsonToMarkdown.ts create mode 100644 src/typescript-reference-doc-generator/commands/tsDocToApiJson.ts create mode 100644 src/typescript-reference-doc-generator/commands/tsDocToApiMarkdown.ts rename {packages/typescript-reference-doc-generator/src => src/typescript-reference-doc-generator}/documenters/DocumenterConfig.ts (95%) rename {packages/typescript-reference-doc-generator/src => src/typescript-reference-doc-generator}/documenters/IConfigFile.ts (100%) rename {packages/typescript-reference-doc-generator/src => src/typescript-reference-doc-generator}/documenters/MarkdownDocumenter.ts (97%) rename {packages/typescript-reference-doc-generator/src => src/typescript-reference-doc-generator}/index.ts (72%) rename {packages/typescript-reference-doc-generator/src => src/typescript-reference-doc-generator}/markdown/CustomMarkdownEmitter.ts (92%) rename {packages/typescript-reference-doc-generator/src => src/typescript-reference-doc-generator}/markdown/MarkdownEmitter.ts (99%) rename {packages/typescript-reference-doc-generator/src => src/typescript-reference-doc-generator}/nodes/CustomDocNodeKind.ts (100%) rename {packages/typescript-reference-doc-generator/src => src/typescript-reference-doc-generator}/nodes/DocContentBlock.ts (100%) rename {packages/typescript-reference-doc-generator/src => src/typescript-reference-doc-generator}/nodes/DocEmphasisSpan.ts (100%) rename {packages/typescript-reference-doc-generator/src => src/typescript-reference-doc-generator}/nodes/DocForceSoftBreak.ts (53%) rename {packages/typescript-reference-doc-generator/src => src/typescript-reference-doc-generator}/nodes/DocHeading.ts (100%) rename {packages/typescript-reference-doc-generator/src => src/typescript-reference-doc-generator}/nodes/DocMaybe.ts (100%) rename {packages/typescript-reference-doc-generator/src => src/typescript-reference-doc-generator}/nodes/DocNoteBox.ts (100%) create mode 100644 src/typescript-reference-doc-generator/nodes/DocTable.ts rename {packages/typescript-reference-doc-generator/src => src/typescript-reference-doc-generator}/nodes/DocTableCell.ts (100%) rename {packages/typescript-reference-doc-generator/src => src/typescript-reference-doc-generator}/nodes/DocTableRow.ts (100%) rename {packages => src}/typescript-reference-doc-generator/package.json (100%) create mode 100644 src/typescript-reference-doc-generator/patch-tsdoc.js rename {packages/typescript-reference-doc-generator/src => src/typescript-reference-doc-generator}/utils/DocContentBlockBuilder.ts (84%) rename {packages/typescript-reference-doc-generator/src => src/typescript-reference-doc-generator}/utils/IndentedWriter.ts (100%) create mode 100644 src/typescript-reference-doc-generator/utils/TypeResolver.ts rename {packages/typescript-reference-doc-generator/src => src/typescript-reference-doc-generator}/utils/Utilities.ts (89%) create mode 100644 src/typescript-reference-doc-generator/utils/mergeApiModels.ts rename {packages/wordpress-wasm/src => src/wordpress-wasm}/.htaccess (100%) rename {packages => src}/wordpress-wasm/README.md (100%) rename {packages/wordpress-wasm/src => src/wordpress-wasm}/config.ts (91%) rename {packages/wordpress-wasm/src => src/wordpress-wasm}/example-app.ts (98%) rename {packages/wordpress-wasm/src => src/wordpress-wasm}/index.ts (97%) rename {packages/wordpress-wasm/src => src/wordpress-wasm}/macros.ts (100%) rename {packages/wordpress-wasm/src => src/wordpress-wasm}/plugin-proxy.php (100%) rename {packages/wordpress-wasm/src => src/wordpress-wasm}/requests_transport_fetch.php (100%) rename {packages/wordpress-wasm/src => src/wordpress-wasm}/service-worker.ts (70%) rename {packages/wordpress-wasm/src => src/wordpress-wasm}/utils.ts (100%) rename {packages/wordpress-wasm/src => src/wordpress-wasm}/wordpress.html (100%) rename {packages => src}/wordpress-wasm/wordpress/Dockerfile (100%) rename {packages => src}/wordpress-wasm/wordpress/build-assets/esm-prefix.js (100%) rename {packages => src}/wordpress-wasm/wordpress/build-assets/esm-suffix.js (100%) create mode 100644 src/wordpress-wasm/wordpress/gulpfile.js rename {packages/wordpress-wasm/src => src/wordpress-wasm}/worker-thread.ts (96%) create mode 100644 tsconfig.worker.json diff --git a/.gitignore b/.gitignore index 2b86352533..dd950f90cd 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,11 @@ node_modules package-lock.json build/* -build-api/* +build-api +build-wp +build-php +build-types +build-scripts !build/wp-admin !build/wp-content !build/wp-includes @@ -12,8 +16,6 @@ build-api/* !build/php.js !build/wp.data !build/wp.js -packages/*/build* -packages/*/build*/* *.tsbuildinfo tsdoc-metadata.json diff --git a/api-extractor-base.json b/api-extractor-base.json deleted file mode 100644 index da4c270641..0000000000 --- a/api-extractor-base.json +++ /dev/null @@ -1,433 +0,0 @@ -/** - * Config file for API Extractor. For more info, please visit: https://api-extractor.com - */ -{ - "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json", - - /** - * Optionally specifies another JSON config file that this file extends from. This provides a way for - * standard settings to be shared across multiple projects. - * - * If the path starts with "./" or "../", the path is resolved relative to the folder of the file that contains - * the "extends" field. Otherwise, the first path segment is interpreted as an NPM package name, and will be - * resolved using NodeJS require(). - * - * SUPPORTED TOKENS: none - * DEFAULT VALUE: "" - */ - // "extends": "./shared/api-extractor-base.json" - // "extends": "my-package/include/api-extractor-base.json" - - /** - * Determines the "" token that can be used with other config file settings. The project folder - * typically contains the tsconfig.json and package.json config files, but the path is user-defined. - * - * The path is resolved relative to the folder of the config file that contains the setting. - * - * The default value for "projectFolder" is the token "", which means the folder is determined by traversing - * parent folders, starting from the folder containing api-extractor.json, and stopping at the first folder - * that contains a tsconfig.json file. If a tsconfig.json file cannot be found in this way, then an error - * will be reported. - * - * SUPPORTED TOKENS: - * DEFAULT VALUE: "" - */ - // "projectFolder": "..", - - /** - * (REQUIRED) Specifies the .d.ts file to be used as the starting point for analysis. API Extractor - * analyzes the symbols exported by this module. - * - * The file extension must be ".d.ts" and not ".ts". - * - * The path is resolved relative to the folder of the config file that contains the setting; to change this, - * prepend a folder token such as "". - * - * SUPPORTED TOKENS: , , - */ - "mainEntryPointFilePath": "/packages/php-wasm-browser/build-types/index.d.ts", - - /** - * A list of NPM package names whose exports should be treated as part of this package. - * - * For example, suppose that Webpack is used to generate a distributed bundle for the project "library1", - * and another NPM package "library2" is embedded in this bundle. Some types from library2 may become part - * of the exported API for library1, but by default API Extractor would generate a .d.ts rollup that explicitly - * imports library2. To avoid this, we can specify: - * - * "bundledPackages": [ "library2" ], - * - * This would direct API Extractor to embed those types directly in the .d.ts rollup, as if they had been - * local files for library1. - */ - "bundledPackages": [], - - /** - * Specifies what type of newlines API Extractor should use when writing output files. By default, the output files - * will be written with Windows-style newlines. To use POSIX-style newlines, specify "lf" instead. - * To use the OS's default newline kind, specify "os". - * - * DEFAULT VALUE: "crlf" - */ - // "newlineKind": "crlf", - - /** - * Set to true when invoking API Extractor's test harness. When `testMode` is true, the `toolVersion` field in the - * .api.json file is assigned an empty string to prevent spurious diffs in output files tracked for tests. - * - * DEFAULT VALUE: "false" - */ - // "testMode": false, - - /** - * Specifies how API Extractor sorts members of an enum when generating the .api.json file. By default, the output - * files will be sorted alphabetically, which is "by-name". To keep the ordering in the source code, specify - * "preserve". - * - * DEFAULT VALUE: "by-name" - */ - // "enumMemberOrder": "by-name", - - /** - * Determines how the TypeScript compiler engine will be invoked by API Extractor. - */ - "compiler": { - /** - * Specifies the path to the tsconfig.json file to be used by API Extractor when analyzing the project. - * - * The path is resolved relative to the folder of the config file that contains the setting; to change this, - * prepend a folder token such as "". - * - * Note: This setting will be ignored if "overrideTsconfig" is used. - * - * SUPPORTED TOKENS: , , - * DEFAULT VALUE: "/tsconfig.json" - */ - // "tsconfigFilePath": "/tsconfig.json", - /** - * Provides a compiler configuration that will be used instead of reading the tsconfig.json file from disk. - * The object must conform to the TypeScript tsconfig schema: - * - * http://json.schemastore.org/tsconfig - * - * If omitted, then the tsconfig.json file will be read from the "projectFolder". - * - * DEFAULT VALUE: no overrideTsconfig section - */ - // "overrideTsconfig": { - // . . . - // } - /** - * This option causes the compiler to be invoked with the --skipLibCheck option. This option is not recommended - * and may cause API Extractor to produce incomplete or incorrect declarations, but it may be required when - * dependencies contain declarations that are incompatible with the TypeScript engine that API Extractor uses - * for its analysis. Where possible, the underlying issue should be fixed rather than relying on skipLibCheck. - * - * DEFAULT VALUE: false - */ - // "skipLibCheck": true, - }, - - /** - * Configures how the API report file (*.api.md) will be generated. - */ - "apiReport": { - /** - * (REQUIRED) Whether to generate an API report. - */ - "enabled": false, - - /** - * The filename for the API report files. It will be combined with "reportFolder" or "reportTempFolder" to produce - * a full file path. - * - * The file extension should be ".api.md", and the string should not contain a path separator such as "\" or "/". - * - * SUPPORTED TOKENS: , - * DEFAULT VALUE: ".api.md" - */ - // "reportFileName": ".api.md", - - /** - * Specifies the folder where the API report file is written. The file name portion is determined by - * the "reportFileName" setting. - * - * The API report file is normally tracked by Git. Changes to it can be used to trigger a branch policy, - * e.g. for an API review. - * - * The path is resolved relative to the folder of the config file that contains the setting; to change this, - * prepend a folder token such as "". - * - * SUPPORTED TOKENS: , , - * DEFAULT VALUE: "/temp/" - */ - // "reportFolder": "/temp/", - - /** - * Specifies the folder where the temporary report file is written. The file name portion is determined by - * the "reportFileName" setting. - * - * After the temporary file is written to disk, it is compared with the file in the "reportFolder". - * If they are different, a production build will fail. - * - * The path is resolved relative to the folder of the config file that contains the setting; to change this, - * prepend a folder token such as "". - * - * SUPPORTED TOKENS: , , - * DEFAULT VALUE: "/temp/" - */ - // "reportTempFolder": "/temp/", - - /** - * Whether "forgotten exports" should be included in the API report file. Forgotten exports are declarations - * flagged with `ae-forgotten-export` warnings. See https://api-extractor.com/pages/messages/ae-forgotten-export/ to - * learn more. - * - * DEFAULT VALUE: "false" - */ - "includeForgottenExports": true - }, - - /** - * Configures how the doc model file (*.api.json) will be generated. - */ - "docModel": { - /** - * (REQUIRED) Whether to generate a doc model file. - */ - "enabled": true, - - /** - * The output path for the doc model file. The file extension should be ".api.json". - * - * The path is resolved relative to the folder of the config file that contains the setting; to change this, - * prepend a folder token such as "". - * - * SUPPORTED TOKENS: , , - * DEFAULT VALUE: "/temp/.api.json" - */ - "apiJsonFilePath": "/build-api/.api.json", - - /** - * Whether "forgotten exports" should be included in the doc model file. Forgotten exports are declarations - * flagged with `ae-forgotten-export` warnings. See https://api-extractor.com/pages/messages/ae-forgotten-export/ to - * learn more. - * - * DEFAULT VALUE: "false" - */ - "includeForgottenExports": true - - /** - * The base URL where the project's source code can be viewed on a website such as GitHub or - * Azure DevOps. This URL path corresponds to the `` path on disk. - * - * This URL is concatenated with the file paths serialized to the doc model to produce URL file paths to individual API items. - * For example, if the `projectFolderUrl` is "https://github.com/microsoft/rushstack/tree/main/apps/api-extractor" and an API - * item's file path is "api/ExtractorConfig.ts", the full URL file path would be - * "https://github.com/microsoft/rushstack/tree/main/apps/api-extractor/api/ExtractorConfig.js". - * - * Can be omitted if you don't need source code links in your API documentation reference. - * - * SUPPORTED TOKENS: none - * DEFAULT VALUE: "" - */ - // "projectFolderUrl": "http://github.com/path/to/your/projectFolder" - }, - - /** - * Configures how the .d.ts rollup file will be generated. - */ - "dtsRollup": { - /** - * (REQUIRED) Whether to generate the .d.ts rollup file. - */ - "enabled": false - - /** - * Specifies the output path for a .d.ts rollup file to be generated without any trimming. - * This file will include all declarations that are exported by the main entry point. - * - * If the path is an empty string, then this file will not be written. - * - * The path is resolved relative to the folder of the config file that contains the setting; to change this, - * prepend a folder token such as "". - * - * SUPPORTED TOKENS: , , - * DEFAULT VALUE: "/dist/.d.ts" - */ - // "untrimmedFilePath": "/dist/.d.ts", - - /** - * Specifies the output path for a .d.ts rollup file to be generated with trimming for an "alpha" release. - * This file will include only declarations that are marked as "@public", "@beta", or "@alpha". - * - * The path is resolved relative to the folder of the config file that contains the setting; to change this, - * prepend a folder token such as "". - * - * SUPPORTED TOKENS: , , - * DEFAULT VALUE: "" - */ - // "alphaTrimmedFilePath": "/dist/-alpha.d.ts", - - /** - * Specifies the output path for a .d.ts rollup file to be generated with trimming for a "beta" release. - * This file will include only declarations that are marked as "@public" or "@beta". - * - * The path is resolved relative to the folder of the config file that contains the setting; to change this, - * prepend a folder token such as "". - * - * SUPPORTED TOKENS: , , - * DEFAULT VALUE: "" - */ - // "betaTrimmedFilePath": "/dist/-beta.d.ts", - - /** - * Specifies the output path for a .d.ts rollup file to be generated with trimming for a "public" release. - * This file will include only declarations that are marked as "@public". - * - * If the path is an empty string, then this file will not be written. - * - * The path is resolved relative to the folder of the config file that contains the setting; to change this, - * prepend a folder token such as "". - * - * SUPPORTED TOKENS: , , - * DEFAULT VALUE: "" - */ - // "publicTrimmedFilePath": "/dist/-public.d.ts", - - /** - * When a declaration is trimmed, by default it will be replaced by a code comment such as - * "Excluded from this release type: exampleMember". Set "omitTrimmingComments" to true to remove the - * declaration completely. - * - * DEFAULT VALUE: false - */ - // "omitTrimmingComments": true - }, - - /** - * Configures how the tsdoc-metadata.json file will be generated. - */ - "tsdocMetadata": { - /** - * Whether to generate the tsdoc-metadata.json file. - * - * DEFAULT VALUE: true - */ - // "enabled": true, - /** - * Specifies where the TSDoc metadata file should be written. - * - * The path is resolved relative to the folder of the config file that contains the setting; to change this, - * prepend a folder token such as "". - * - * The default value is "", which causes the path to be automatically inferred from the "tsdocMetadata", - * "typings" or "main" fields of the project's package.json. If none of these fields are set, the lookup - * falls back to "tsdoc-metadata.json" in the package folder. - * - * SUPPORTED TOKENS: , , - * DEFAULT VALUE: "" - */ - // "tsdocMetadataFilePath": "/dist/tsdoc-metadata.json" - }, - - /** - * Configures how API Extractor reports error and warning messages produced during analysis. - * - * There are three sources of messages: compiler messages, API Extractor messages, and TSDoc messages. - */ - "messages": { - /** - * Configures handling of diagnostic messages reported by the TypeScript compiler engine while analyzing - * the input .d.ts files. - * - * TypeScript message identifiers start with "TS" followed by an integer. For example: "TS2551" - * - * DEFAULT VALUE: A single "default" entry with logLevel=warning. - */ - "compilerMessageReporting": { - /** - * Configures the default routing for messages that don't match an explicit rule in this table. - */ - "default": { - /** - * Specifies whether the message should be written to the the tool's output log. Note that - * the "addToApiReportFile" property may supersede this option. - * - * Possible values: "error", "warning", "none" - * - * Errors cause the build to fail and return a nonzero exit code. Warnings cause a production build fail - * and return a nonzero exit code. For a non-production build (e.g. when "api-extractor run" includes - * the "--local" option), the warning is displayed but the build will not fail. - * - * DEFAULT VALUE: "warning" - */ - "logLevel": "warning" - - /** - * When addToApiReportFile is true: If API Extractor is configured to write an API report file (.api.md), - * then the message will be written inside that file; otherwise, the message is instead logged according to - * the "logLevel" option. - * - * DEFAULT VALUE: false - */ - // "addToApiReportFile": false - } - - // "TS2551": { - // "logLevel": "warning", - // "addToApiReportFile": true - // }, - // - // . . . - }, - - /** - * Configures handling of messages reported by API Extractor during its analysis. - * - * API Extractor message identifiers start with "ae-". For example: "ae-extra-release-tag" - * - * DEFAULT VALUE: See api-extractor-defaults.json for the complete table of extractorMessageReporting mappings - */ - "extractorMessageReporting": { - "default": { - "logLevel": "warning" - // "addToApiReportFile": false - } - - // "ae-extra-release-tag": { - // "logLevel": "warning", - // "addToApiReportFile": true - // }, - // - // . . . - }, - - /** - * Configures handling of messages reported by the TSDoc parser when analyzing code comments. - * - * TSDoc message identifiers start with "tsdoc-". For example: "tsdoc-link-tag-unescaped-text" - * - * DEFAULT VALUE: A single "default" entry with logLevel=warning. - */ - "tsdocMessageReporting": { - "default": { - "logLevel": "warning" - // "addToApiReportFile": false - }, - "tsdoc-escape-right-brace": { - "logLevel": "none" - }, - "tsdoc-malformed-inline-tag": { - "logLevel": "none" - } - - // "tsdoc-link-tag-unescaped-text": { - // "logLevel": "warning", - // "addToApiReportFile": true - // }, - // - // . . . - } - } -} diff --git a/build/wp.data b/build/wp.data index d384ef454f..0cad8906cd 100644 --- a/build/wp.data +++ b/build/wp.data @@ -13242,10 +13242,10 @@ if ( current_user_can( 'customize' ) ) { printf( ' get_error_data(); if ( ! empty( $data ) ) { wp_die( '

' . $comment->get_error_message() . '

', __( 'Comment Submission Failure' ), array( 'response' => $data, 'back_link' => true, ) ); } else { exit; } } $user = wp_get_current_user(); $cookies_consent = ( isset( $_POST['wp-comment-cookies-consent'] ) ); do_action( 'set_comment_cookies', $comment, $user, $cookies_consent ); $location = empty( $_POST['redirect_to'] ) ? get_comment_link( $comment ) : $_POST['redirect_to'] . '#comment-' . $comment->comment_ID; if ( ! $cookies_consent && 'unapproved' === wp_get_comment_status( $comment ) && ! empty( $comment->comment_author_email ) ) { $location = add_query_arg( array( 'unapproved' => $comment->comment_ID, 'moderation-hash' => wp_hash( $comment->comment_date_gmt ), ), $location ); } $location = apply_filters( 'comment_post_redirect', $location, $comment ); wp_safe_redirect( $location ); exit; Gravatar
.1comment ö0ûö.d-U ÀàÀ/_wp_page_templatedefault/_wp_page_templatedefault Ë 8ª( 33Ñu)  ) 33 M 2022-10-24 06:02:292022-10-24 06:02:29

Who we are

Suggested text: Our website address is: http://127.0.0.1:8000.

Comments

Suggested text: When visitors leave comments on the site we collect the data shown in the comments form, and also the visitor’s IP address and browser user agent string to help spam detection.

An anonymized string created from your email address (also called a hash) may be provided to the Gravatar service to see if you are using it. The Gravatar service privacy policy is available here: https://automattic.com/privacy/. After approval of your comment, your profile picture is visible to the public in the context of your comment.

Media

Suggested text: If you upload images to the website, you should avoid uploading images with embedded location data (EXIF GPS) included. Visitors to the website can download a/‹ 33“M#  # 33 M 2022-10-24 06:02:292022-10-24 06:02:29 +Commenter avatars come from Gravatar.1comment ö0ûö.d-U ÀàÀ/_wp_page_templatedefault/_wp_page_templatedefault Ë 8ª( 33Ñu)  ) 33 M 2022-11-09 06:28:372022-11-09 06:28:37

Who we are

Suggested text: Our website address is: http://127.0.0.1:8000.

Comments

Suggested text: When visitors leave comments on the site we collect the data shown in the comments form, and also the visitor’s IP address and browser user agent string to help spam detection.

An anonymized string created from your email address (also called a hash) may be provided to the Gravatar service to see if you are using it. The Gravatar service privacy policy is available here: https://automattic.com/privacy/. After approval of your comment, your profile picture is visible to the public in the context of your comment.

Media

Suggested text: If you upload images to the website, you should avoid uploading images with embedded location data (EXIF GPS) included. Visitors to the website can download a/‹ 33“M#  # 33 M 2022-11-09 06:28:372022-11-09 06:28:37

This is an example page. It's different from a blog post because it will stay in one place and will show up in your site navigation (in most themes). Most people start with an About page that introduces them to potential site visitors. It might say something like this:

@@ -13263,9 +13263,9 @@ Commenter avatars come from Gravatar.1com

As a new WordPress user, you should go to your dashboard to delete this page and create new pages for your content. Have fun!

-Sample Pagepublishclosedopensample-page2022-10-24 06:02:292022-10-24 06:02:29http://127.0.0.1:8000/?page_id=2page‚2 33‚%  # 33 A 2022-10-24 06:02:292022-10-24 06:02:29 +Sample Pagepublishclosedopensample-page2022-11-09 06:28:372022-11-09 06:28:37http://127.0.0.1:8000/?page_id=2page‚2 33‚%  # 33 A 2022-11-09 06:28:372022-11-09 06:28:37

Welcome to WordPress. This is your first post. Edit or delete it, then start writing!

-Hello world!publishopenopenhello-world2022-10-24 06:02:292022-10-24 06:02:29http://127.0.0.1:8000/?p=1post ª ± Ø ! Ùõû“ªÒÊU ##‚qtablewp_post)f !!ƒtablewp_optionswp_options CREATE TABLE wp_options ( +Hello world!publishopenopenhello-world2022-11-09 06:28:372022-11-09 06:28:37http://127.0.0.1:8000/?p=1post ª ± Ø ! Ùõû“ªÒÊU ##‚qtablewp_post)f !!ƒtablewp_optionswp_options CREATE TABLE wp_options ( option_id integer NOT NULL PRIMARY KEY AUTOINCREMENT , option_name text NOT NULL default '', option_value text NOT NULL, @@ -13342,7 +13342,7 @@ CREATE TABLE wp_comments ( user_activation_key text NOT NULL default '', user_status integer NOT NULL default '0', display_name text NOT NULL default '' -) ¯x ×´]¶jÏz=‡.²Wü— £AÍx¢U ´h ô ¢ PS!%sindexlink_visiblewp_links$CREATE INDEX link_visible ON wp_links(link_visible)r 5#indexcomment_author_emailwp_comments#CREATE INDEX comment_author_email ON wp_comments(comment_author_email)`)#indexcomment_parentwp_comments"CREATE INDEX comment_parent ON wp_comments(comment_parent)f-# indexcomment_date_gmtwp_comments!CREATE INDEX comment_date_gmt ON wp_comments(comment_date_gmt) ?#=indexcomment_approved_date_gmtwp_comments CREATE INDEX comment_approved_date_gmt ON wp_comments(comment_approved,comment_date_gmt)c+#indexcomment_post_IDwp_commentsCREATE INDEX comment_post_ID ON wp_comments(comment_post_ID)Y#)uindexmeta_key_12wp_commentmetaCREATE INDEX meta_key_12 ON wp_commentmeta(meta_key)Y!)windexcomment_idwp_commentmetaCREATE INDEX comment_id ON wp_commentmeta(comment_id)z-7indexterm_taxonomy_idwp_term_relationshipsCREATE INDEX term_taxonomy_id ON wp_term_relationships(term_taxonomy_id)W-sindextaxonomywp_term_taxonomyCREATE INDEX taxonomy ON wp_term_taxonomy(taxonomy)w--!indexterm_id_taxonomywp_term_taxonomyCREATE UNIQUE INDEX term_id_taxonomy ON wp_term_taxonomy(term_id,taxonomy);Sindexnamewp_termsCREATE INDEX name ON wp_terms(name);Sindexslugwp_termsCREATE INDEX slug ON wp_terms(slug)S##oindexmeta_key_38wp_termmetaCREATE INDEX meta_key_38 ON wp_termmeta(meta_key)J#eindexterm_idwp_termmetaCREATE INDEX term_id ON wp_termmeta(term_id)M#iindexmeta_keywp_usermetaCREATE INDEX meta_key ON wp_usermeta(meta_key)J#eindexuser_idwp_usermetaCREATE INDEX user_id ON wp_usermeta(user_id)M!kindexuser_emailwp_usersCREATE INDEX user_email ON wp_users(user_email)V'windexuser_nicenamewp_usersCREATE INDEX user_nicename ON wp_users(user_nicename)U)sindexuser_login_keywp_usersCREATE INDEX user_login_key ON wp_users(user_login)ˆ tablewp_postswp_postsCREATE TABLE wp_posts ( +) ¯x ×´]¶jÏz=‡.²Wü— £AÍx¢U ´h ô ¢ PS!%sindexlink_visiblewp_links$CREATE INDEX link_visible ON wp_links(link_visible)r 5#indexcomment_author_emailwp_comments#CREATE INDEX comment_author_email ON wp_comments(comment_author_email)`)#indexcomment_parentwp_comments"CREATE INDEX comment_parent ON wp_comments(comment_parent)f-# indexcomment_date_gmtwp_comments!CREATE INDEX comment_date_gmt ON wp_comments(comment_date_gmt) ?#=indexcomment_approved_date_gmtwp_comments CREATE INDEX comment_approved_date_gmt ON wp_comments(comment_approved,comment_date_gmt)c+#indexcomment_post_IDwp_commentsCREATE INDEX comment_post_ID ON wp_comments(comment_post_ID)Y#)uindexmeta_key_27wp_commentmetaCREATE INDEX meta_key_27 ON wp_commentmeta(meta_key)Y!)windexcomment_idwp_commentmetaCREATE INDEX comment_id ON wp_commentmeta(comment_id)z-7indexterm_taxonomy_idwp_term_relationshipsCREATE INDEX term_taxonomy_id ON wp_term_relationships(term_taxonomy_id)W-sindextaxonomywp_term_taxonomyCREATE INDEX taxonomy ON wp_term_taxonomy(taxonomy)w--!indexterm_id_taxonomywp_term_taxonomyCREATE UNIQUE INDEX term_id_taxonomy ON wp_term_taxonomy(term_id,taxonomy);Sindexnamewp_termsCREATE INDEX name ON wp_terms(name);Sindexslugwp_termsCREATE INDEX slug ON wp_terms(slug)S##oindexmeta_key_50wp_termmetaCREATE INDEX meta_key_50 ON wp_termmeta(meta_key)J#eindexterm_idwp_termmetaCREATE INDEX term_id ON wp_termmeta(term_id)M#iindexmeta_keywp_usermetaCREATE INDEX meta_key ON wp_usermeta(meta_key)J#eindexuser_idwp_usermetaCREATE INDEX user_id ON wp_usermeta(user_id)M!kindexuser_emailwp_usersCREATE INDEX user_email ON wp_users(user_email)V'windexuser_nicenamewp_usersCREATE INDEX user_nicename ON wp_users(user_nicename)U)sindexuser_login_keywp_usersCREATE INDEX user_login_key ON wp_users(user_login)ˆ tablewp_postswp_postsCREATE TABLE wp_posts ( ID integer NOT NULL PRIMARY KEY AUTOINCREMENT , post_author integer NOT NULL default '0', post_date text NOT NULL default '0000-00-00 00:00:00', @@ -13371,7 +13371,7 @@ CREATE TABLE wp_comments ( post_id integer NOT NULL default '0', meta_key text default NULL, meta_value text -)¡P)#oindexpost_authorwp_posts,CREATE INDEX post_author ON wp_posts(post_author)P(#oindexpost_parentwp_posts+CREATE INDEX post_parent ON wp_posts(post_parent)r'-'indextype_status_datewp_posts*CREATE INDEX type_status_date ON wp_posts(post_type,post_status,post_date,ID)J&gindexpost_namewp_posts)CREATE INDEX post_name ON wp_posts(post_name)S%##oindexmeta_key_40wp_postmeta(CREATE INDEX meta_key_40 ON wp_postmeta(meta_key)J$#eindexpost_idwp_postmeta'CREATE INDEX post_id ON wp_postmeta(post_id)K#!gindexautoloadwp_options&CREATE INDEX autoload ON wp_options(autoload)\"#!indexoption_namewp_options%CREATE UNIQUE INDEX option_name ON wp_options(option_name) +)¡P)#oindexpost_authorwp_posts,CREATE INDEX post_author ON wp_posts(post_author)P(#oindexpost_parentwp_posts+CREATE INDEX post_parent ON wp_posts(post_parent)r'-'indextype_status_datewp_posts*CREATE INDEX type_status_date ON wp_posts(post_type,post_status,post_date,ID)J&gindexpost_namewp_posts)CREATE INDEX post_name ON wp_posts(post_name)S%##oindexmeta_key_36wp_postmeta(CREATE INDEX meta_key_36 ON wp_postmeta(meta_key)J$#eindexpost_idwp_postmeta'CREATE INDEX post_id ON wp_postmeta(post_id)K#!gindexautoloadwp_options&CREATE INDEX autoload ON wp_options(autoload)\"#!indexoption_namewp_options%CREATE UNIQUE INDEX option_name ON wp_options(option_name) ÷÷ admin ÷÷ admin éé3 admin@localhost.com @@ -13390,8 +13390,8 @@ CREATE TABLE wp_comments (   üü -çç3 12022-10-24 06:02:29 -éé3 2022-10-24 06:02:29 +çç3 12022-11-09 06:28:37 +éé3 2022-11-09 06:28:37 üü åå; wapuu@wordpress.example  @@ -13416,11 +13416,11 @@ S  7 õûõ  ÕëÕ/_wp_page_template/ _wp_page_template ÎñÎá)privacy-policy#sample-page# hello-world -´Û$3pagedraft2022-10-24 06:02:29&3pagepublish2022-10-24 06:02:29$3 postpublish2022-10-24 06:02:29 +´Û$3pagedraft2022-11-09 06:28:37&3pagepublish2022-11-09 06:28:37$3 postpublish2022-11-09 06:28:37 òü÷ò òü÷ò   mU-Ú·‘]@æ㙈f> ò Ö » — v V < !  Ø » Ÿ ‚ kY>&ñç’qY8öÚ¢‰aL6úèѹ ƒfM3úàÆ¡…hAä̯ŠpT3þÞŬ”vW-êÅžv^8 å¾—kJJI3ipermalink_structure/index.php/%year%/%monthnum%/%day%/%postname%/yesJ1(UKfinished_splitting_shared_terms1yesT5link_manager_enabled0yesS3default_post_format0yesR'page_on_front0yesQ)page_for_posts0yesP+ timezone_stringyesO/uninstall_pluginsa:0:{}noN!widget_rssa:0:{}yesM#widget_texta:0:{}yesL/widget_categoriesa:0:{}yesK%sticky_postsa:0:{}yesJ'comment_orderascyes#I7default_comments_pagenewestyesH/comments_per_page50yesG'page_comments0yesF7thread_comments_depth5yesE+thread_comments1yes!D;close_comments_days_old14yes%CEclose_comments_for_old_posts0yesB3 image_default_alignyesA1 image_default_sizeyes#@;image_default_link_typenoneyes?%large_size_h1024yes>%large_size_w1024yes=)avatar_defaultmysteryyes<'medium_size_h300yes;'medium_size_w300yes:)thumbnail_crop1yes9-thumbnail_size_h150yes8-thumbnail_size_w150yes7+ upload_url_pathyes6'avatar_ratingGyes5%show_avatars1yes4 tag_baseyes3'show_on_frontpostsyes27default_link_category2yes1#blog_public1yes0# upload_pathyes&/Guploads_use_yearmonth_folders1yes.!db_version53496yes-%!default_rolesubscriberyes,'use_trackback0yes+html_typetext/htmlyes*5comment_registration0yes!)!+stylesheettwentytwentytwoyes(+templatetwentytwentytwoyes'+ recently_editedno&9default_email_category1yes%!gmt_offset0yes$/comment_max_links2yes,#!Aping_siteshttp://rpc.pingomatic.com/yes"' category_baseyes!)active_pluginsa:0:{}yes + moderation_keysno%blog_charsetUTF-8yeshack_file0yesþ' rewrite_rulesyes3 permalink_structureyes/moderation_notify1yes1comment_moderation0yes-?%links_updated_date_formatF j, Y g:i ayes#time_formatg:i ayes#date_formatF j, Yyes)posts_per_page10yes7default_pingback_flag1yes3default_ping_statusopenyes"9default_comment_statusopenyes-default_category1yes+mailserver_port110yes+mailserver_passpasswordyes)-/mailserver_loginlogin@example.comyes&)-mailserver_urlmail.example.comyes +rss_use_excerpt0yes 'posts_per_rss10yes +comments_notify1yes -1require_name_email1yes #use_smilies1yes+use_balanceTags0yes'start_of_week1yes&#3admin_emailadmin@localhost.comyes1users_can_register0yes2+CblogdescriptionJust another WordPress siteyes$5blognameMy WordPress Websiteyes!7homehttp://127.0.0.1:8000yes$7siteurlhttp://127.0.0.1:8000yes ¸–vX3 ä̦xS,Ù¸ªc1initial_db_version53496yes*bEwp_force_deactivated_pluginsa:0:{}yes%a9auto_update_core_majorenabledyes%`9auto_update_core_minorenabledyes#_5auto_update_core_devenabledyes,^Kauto_plugin_theme_update_emailsa:0:{}no$]Ccomment_previously_approved1yes\+ disallowed_keysno&[5!admin_email_lifespan1682143349yes%ZEshow_comments_cookies_opt_in1yes#YAwp_page_for_privacy_policy3yesX3medium_large_size_h0yesW3medium_large_size_w768yesVsite_icon0yes˜Sd'±wp_user_rolesa:5:{s:13:"administrator";a:2:{s:4:"name";s:13:"Administrator";s:12:"capabilities";a:61:{s:13:"switch_themes";b:1;s:11:"edit_themes";b:1;s:16:"activate_plugins";b:1;s:12:"edit_plugins";b:1;s:10:"edit_users";b:1;s:10:"edit_files";b:1;s:14:"manage_options";b:1;s:17:"moderate_comments";b:1;s:17:"manage_categories";b:1;s:12:"manage_links";b:1;s:12:"upload_files";b:1;s:6:"import";b:1;s:15:"unfiltered_html";b:1;s:10:"edit_posts";b:1;s:17:"edit_others_posts";b:1;s:20:"edit_published_posts";b:1;s:13:"publish_posts";b:1;s:10:"edit_pages";b:1;s:4:"read";b:1;s:8:"level_10";b:1;s:7:"level_9";b:1;s:7:"level_8";b:1;s:7:"level_7";b:1;s:7:"level_6";b:1;s:7:"level_5";b:1;s:7:"level_4";b:1;s:7:"level_3";b:1;s:7:"level_2";b:1;s:7:"level_1";b:1;s:7:"level_0";b:1;s:17:"edit_others_pages";b:1;s:20:"edit_published_pages";b:1;s:13:"publish_pages";b:1;s:12:"delete_pages";b:1;s:19:"delete_others_pages";b:1;s:22:"delete_published_pages";b:1;s:12:"delete_posts";b:1;s:19:"delete_others_posts";b:1;s:22:"delete_published_posts";b:1;s:20:"delete_private_posts";b:1;s:18:"edit_private_posts";b:1;s:18:"read_private_posts";b:1;s:20:"delete_private_pages";b:1;s:18:"edit_private_pages";b:1;s:18:"read_private_pages";b:1;s:12:"delete_users";b:1;s:12:"create_users";b:1;s:17:"unfiltered_upload";b:1;s:14:"edit_dashboard";b:1;s:14:"update_plugins";b:1;s:14:"delete_plugins";b:1;s:15:"install_plugins";b:1;s:13:"update_themes";b:1;s:14:"install_themes";b:1;s:11:"update_core";b:1;s:10:"list_users";b:1;s:12:"remove_users";b:1;s:13:"promote_users";b:1;s:18:"edit_theme_options";b:1;s:13:"delete_themes";b:1;s:6:"export";b:1;}}s:6:"editor";a:2:{s:4:"name";s:6:"Editor";s:12:"capabilities";a:34:{s:17:"moderate_comments";b:1;s:17:"manage_categories";b:1;s:12:"manage_links";b:1;s:12:"upload_files";b:1;s:15:"unfiltered_html";b:1;s:10:"edit_posts";b:1;s:17:"edit_others_posts";b:1;s:20:"edit_published_posts";b:1;s:13:"publish_posts";b:1;s:10:"edit_pages";b:1;s:4:"read";b:1;s:7:"level_7";b:1;s:7:"level_6";b:1;s:7:"level_5";b:1;s:7:"level_4";b:1;s:7:"level_3";b:1;s:7:"level_2";b:1;s:7:"level_1";b:1;s:7:"level_0";b:1;s:17:"edit_others_pages";b:1;s:20:"edit_published_pages";b:1;s:13:"publish_pages";b:1;s:12:"delete_pages";b:1;s:19:"delete_others_pages";b:1;s:22:"delete_published_pages";b:1;s:12:"delete_posts";b:1;s:19:"delete_others_posts";b:1;s:22:"delete_published_posts";b:1;s:20:"delete_private_posts";b:1;s:18:"edit_private_posts";b:1;s:18:"read_private_posts";b:1;s:20:"delete_private_pages";b:1;s:18:"edit_private_pages";b:1;s:18:"read_private_pages";b:1;}}s:6:"author";a:2:{s:4:"name";s:6:"Author";s:12:"capabilities";a:10:{s:12:"upload_files";b:1;s:10:"edit_posts";b:1;s:20:"edit_published_posts";b:1;s:13:"publish_posts";b:1;s:4:"read";b:1;s:7:"level_2";b:1;s:7:"level_1";b:1;s:7:"level_0";b:1;s:12:"delete_posts";b:1;s:22:"delete_published_posts";b:1;}}s:11:"contributor";a:2:{s:4:"name";s:11:"Contributor";s:12:"capabilities";a:5:{s:10:"edit_posts";b:1;s:4:"read";b:1;s:7:"level_1";b:1;s:7:"level_0";b:1;s:12:"delete_posts";b:1;}}s:10:"subscriber";a:2:{s:4:"name";s:10:"Subscriber";s:12:"capabilities";a:2:{s:4:"read";b:1;s:7:"level_0";b:1;}}}yesnd extract any location data from images on the website.

Cookies

Suggested text: If you leave a comment on our site you may opt-in to saving your name, email address and website in cookies. These are for your convenience so that you do not have to fill in your details again when you leave another comment. These cookies will last for one year.

If you visit our login page, we will set a temporary cookie to determine if your browser accepts cookies. This cookie contains no personal data and is discarded when you close your browser.

When you log in, we will also set up several cookies to save your login information and your screen display choices. Login cookies last for two days, and screen options cookies last for a year. If you select "Remember Me", your login will persist for two weeks. If you log out of your account, the login cookies will be removed.

If you edit or publish an article, an additional cookie will be saved in your browser. This cookie includes no personal data and simply indicates the post ID of the article you just edited. It expires after 1 day.

Embedded content from other websites

Suggested text: Articles on this site may include embedded content (e.g. videos, images, articles, etc.). Embedded content from other websites behaves in the exact same way as if the visitor has visited the other website.

These websites may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with that embedded content, including tracking your interaction with the embedded content if you have an account and are logged in to that website.

Who we share your data with

Suggested text: If you request a password reset, your IP address will be included in the reset email.

How long we retain your data

Suggested text: If you leave a comment, the comment and its metadata are retained indefinitely. This is so we can recognize and approve any follow-up comments automatically instead of holding them in a moderation queue.

For users that register on our website (if any), we also store the personal information they provide in their user profile. All users can see, edit, or delete their personal information at any time (except they cannot change their username). Website administrators can also see and edit that information.

What rights you have over your data

Suggested text: If you have an account on this site, or have left comments, you can request to receive an exported file of the personal data we hold about you, including any data you have provided to us. You can also request that we erase any personal data we hold about you. This does not include any data we are obliged to keep for administrative, legal, or security purposes.

Where your data is sent

Suggested text: Visitor comments may be checked through an automated spam detection service.

Privacy Policydraftclosedopenprivacy-policy2022-10-24 06:02:292022-10-24 06:02:29http://127.0.0.1:8000/?page_id=3page  c w c n Œf!user_count1noe!fresh_site1yes_h-ƒsidebars_widgetsa:4:{s:19:"wp_inactive_widgets";a:0:{}s:9:"sidebar-1";a:3:{i:0;s:7:"block-2";i:1;s:7:"block-3";i:2;s:7:"block-4";}s:9:"sidebar-2";a:2:{i:0;s:7:"block-5";i:1;s:7:"block-6";}s:13:"array_version";i:3;}yes‡g%Žwidget_blocka:6:{i:2;a:1:{s:7:"content";s:19:"";}i:3;a:1:{s:7:"content";s:154:"

Recent Posts

";}i:4;a:1:{s:7:"content";s:227:"

Recent Comments

";}i:5;a:1:{s:7:"content";s:146:"

Archives

";}i:6;a:1:{s:7:"content";s:150:"

Categories

";}s:12:"_multiwidget";i:1;}yes1DENY FROM ALL

Cookies

Suggested text: If you leave a comment on our site you may opt-in to saving your name, email address and website in cookies. These are for your convenience so that you do not have to fill in your details again when you leave another comment. These cookies will last for one year.

If you visit our login page, we will set a temporary cookie to determine if your browser accepts cookies. This cookie contains no personal data and is discarded when you close your browser.

When you log in, we will also set up several cookies to save your login information and your screen display choices. Login cookies last for two days, and screen options cookies last for a year. If you select "Remember Me", your login will persist for two weeks. If you log out of your account, the login cookies will be removed.

If you edit or publish an article, an additional cookie will be saved in your browser. This cookie includes no personal data and simply indicates the post ID of the article you just edited. It expires after 1 day.

Embedded content from other websites

Suggested text: Articles on this site may include embedded content (e.g. videos, images, articles, etc.). Embedded content from other websites behaves in the exact same way as if the visitor has visited the other website.

These websites may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with that embedded content, including tracking your interaction with the embedded content if you have an account and are logged in to that website.

Who we share your data with

Suggested text: If you request a password reset, your IP address will be included in the reset email.

How long we retain your data

Suggested text: If you leave a comment, the comment and its metadata are retained indefinitely. This is so we can recognize and approve any follow-up comments automatically instead of holding them in a moderation queue.

For users that register on our website (if any), we also store the personal information they provide in their user profile. All users can see, edit, or delete their personal information at any time (except they cannot change their username). Website administrators can also see and edit that information.

What rights you have over your data

Suggested text: If you have an account on this site, or have left comments, you can request to receive an exported file of the personal data we hold about you, including any data you have provided to us. You can also request that we erase any personal data we hold about you. This does not include any data we are obliged to keep for administrative, legal, or security purposes.

Where your data is sent

Suggested text: Visitor comments may be checked through an automated spam detection service.

Privacy Policydraftclosedopenprivacy-policy2022-11-09 06:28:372022-11-09 06:28:37http://127.0.0.1:8000/?page_id=3page  c w c n Œf!user_count1noe!fresh_site1yes_h-ƒsidebars_widgetsa:4:{s:19:"wp_inactive_widgets";a:0:{}s:9:"sidebar-1";a:3:{i:0;s:7:"block-2";i:1;s:7:"block-3";i:2;s:7:"block-4";}s:9:"sidebar-2";a:2:{i:0;s:7:"block-5";i:1;s:7:"block-6";}s:13:"array_version";i:3;}yes‡g%Žwidget_blocka:6:{i:2;a:1:{s:7:"content";s:19:"";}i:3;a:1:{s:7:"content";s:154:"

Recent Posts

";}i:4;a:1:{s:7:"content";s:227:"

Recent Comments

";}i:5;a:1:{s:7:"content";s:146:"

Archives

";}i:6;a:1:{s:7:"content";s:150:"

Categories

";}s:12:"_multiwidget";i:1;}yes1DENY FROM ALL diff --git a/build/wp.js b/build/wp.js index 51bde84e18..e95a4e2272 100644 --- a/build/wp.js +++ b/build/wp.js @@ -30,8 +30,8 @@ export default function(PHPModule) { // web worker PACKAGE_PATH = encodeURIComponent(location.pathname.toString().substring(0, location.pathname.toString().lastIndexOf('/')) + '/'); } - var PACKAGE_NAME = '/root/output//wp.data?55dc64b35c56ddfeef372b901b6ff2ad'; - var REMOTE_PACKAGE_BASE = '/wp.data?55dc64b35c56ddfeef372b901b6ff2ad'; + var PACKAGE_NAME = '/root/output//wp.data?19a172eea15825668cbea30cbf15af99'; + var REMOTE_PACKAGE_BASE = '/wp.data?19a172eea15825668cbea30cbf15af99'; if (typeof Module['locateFilePackage'] === 'function' && !Module['locateFile']) { Module['locateFile'] = Module['locateFilePackage']; err('warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)'); @@ -330,10 +330,10 @@ Module['FS_createPath']("/wordpress/wp-includes", "widgets", true, true); var files = metadata['files']; for (var i = 0; i < files.length; ++i) { DataRequest.prototype.requests[files[i].filename].onload(); - } Module['removeRunDependency']('datafile_/root/output//wp.data?55dc64b35c56ddfeef372b901b6ff2ad'); + } Module['removeRunDependency']('datafile_/root/output//wp.data?19a172eea15825668cbea30cbf15af99'); }; - Module['addRunDependency']('datafile_/root/output//wp.data?55dc64b35c56ddfeef372b901b6ff2ad'); + Module['addRunDependency']('datafile_/root/output//wp.data?19a172eea15825668cbea30cbf15af99'); if (!Module.preloadResults) Module.preloadResults = {}; diff --git a/docs/using-php-in-javascript.md b/docs/using-php-in-javascript.md index e796e34590..470721f86f 100644 --- a/docs/using-php-in-javascript.md +++ b/docs/using-php-in-javascript.md @@ -127,7 +127,11 @@ startPHP(\ Initializes the PHP runtime with the given arguments and data dependencies. -This function handles the entire PHP initialization pipeline. In particular, it: * Instantiates the Emscripten PHP module * Wires it together with the data dependencies and loads them * Ensures is all happens in a correct order * Waits until the entire loading sequence is finished +This function handles the entire PHP initialization pipeline. In particular, it: +* Instantiates the Emscripten PHP module +* Wires it together with the data dependencies and loads them +* Ensures is all happens in a correct order +* Waits until the entire loading sequence is finished Basic usage: @@ -139,7 +143,10 @@ Basic usage: ``` **The `/php.js` module:** -In the basic usage example, `php.js` is **not** a vanilla Emscripten module. Instead, it's an ESM module that wraps the regular Emscripten output and adds some extra functionality. It's generated by the Dockerfile shipped with this repo. Here's the API it provides: +In the basic usage example, `php.js` is **not** a vanilla Emscripten module. Instead, +it's an ESM module that wraps the regular Emscripten output and adds some +extra functionality. It's generated by the Dockerfile shipped with this repo. +Here's the API it provides: ```js // php.wasm size in bytes: @@ -153,9 +160,11 @@ export default function(jsEnv, emscriptenModuleArgs) {} ``` **PHP Filesystem:** -Once initialized, the PHP has its own filesystem separate from the project files. It's provided by [Emscripten and uses its FS library](https://emscripten.org/docs/api_reference/Filesystem-API.html). +Once initialized, the PHP has its own filesystem separate from the project +files. It's provided by [Emscripten and uses its FS library](https://emscripten.org/docs/api_reference/Filesystem-API.html). -The API exposed to you via the PHP class is succinct and abstracts await certain unintuitive parts of low-level FS interactions. +The API exposed to you via the PHP class is succinct and abstracts +await certain unintuitive parts of low-level FS interactions. Here's how to use it: @@ -181,11 +190,19 @@ For more details consult the PHP class directly. **Data dependencies:** -Using existing PHP packages by manually recreating them file-by-file would be quite inconvenient. Fortunately, Emscripten provides a "data dependencies" feature. +Using existing PHP packages by manually recreating them file-by-file would +be quite inconvenient. Fortunately, Emscripten provides a "data dependencies" +feature. -Data dependencies consist of a `dependency.data` file and a `dependency.js` loader and can be packaged with the [file_packager.py tool](api/php-wasm.startphp.md). This project requires wrapping the Emscripten-generated `dependency.js` file in an ES module as follows: +Data dependencies consist of a `dependency.data` file and a `dependency.js` loader and +can be packaged with the [file_packager.py tool](api/php-wasm.startphp.md). +This project requires wrapping the Emscripten-generated `dependency.js` file in an ES +module as follows: -1. Prepend `export default function(emscriptenPHPModule) {'; ` 2. Prepend `export const dependencyFilename = ''; ` 3. Prepend `export const dependenciesTotalSize = ;` 4. Append `}` +1. Prepend `export default function(emscriptenPHPModule) {'; ` +2. Prepend `export const dependencyFilename = ''; ` +3. Prepend `export const dependenciesTotalSize = ;` +4. Append `}` Be sure to use the `--export-name="emscriptenPHPModule"` file_packager.py option. @@ -200,7 +217,8 @@ export default function(emscriptenPHPModule) { // ... the rest of it ... } ``` -Such a constructions enables loading the `dependency.js` as an ES Module using `import("/dependency.js")`. +Such a constructions enables loading the `dependency.js` as an ES Module using +`import("/dependency.js")`. Once it's ready, you can load PHP and your data dependencies as follows: @@ -223,7 +241,8 @@ Once it's ready, you can load PHP and your data dependencies as follows: ```typescript class PHPServer ``` -A fake PHP server that handles HTTP requests but does not bind to any port. +A fake PHP server that handles HTTP requests but does not +bind to any port. ## Constructors @@ -247,7 +266,10 @@ Constructs a new instance of the `PHPServer` class * Returns: The response. -Serves the request – either by serving a static file, or by dispatching it to the PHP runtime. +Serves the request – either by serving a static file, or by +dispatching it to the PHP runtime. + + ## Example diff --git a/docs/using-php-in-the-browser.md b/docs/using-php-in-the-browser.md index bea83165d4..b1f41bbf84 100644 --- a/docs/using-php-in-the-browser.md +++ b/docs/using-php-in-the-browser.md @@ -192,12 +192,21 @@ the heavy lifting. Here's its documentation: initializeWorkerThread(config: [WorkerThreadConfiguration](api/php-wasm-browser.initializeworkerthread.md)): [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)<[any](https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#any)> -* `config` – The worker thread configuration. The backend object to communicate with the parent thread. +* `config` – The worker thread configuration. + The backend object to communicate with the parent thread. -Call this in a worker thread script to set the stage for offloading the PHP processing. This function: -* Initializes the PHP runtime * Starts PHPServer and PHPBrowser * Lets the main app know when its ready * Listens for messages from the main app * Runs the requested operations (like `run_php`) * Replies to the main app with the results using the [request/reply protocol](api/php-wasm-browser.initializeworkerthread.md) + +Call this in a worker thread script to set the stage for +offloading the PHP processing. This function: + +* Initializes the PHP runtime +* Starts PHPServer and PHPBrowser +* Lets the main app know when its ready +* Listens for messages from the main app +* Runs the requested operations (like `run_php`) +* Replies to the main app with the results using the [request/reply protocol](api/php-wasm-browser.initializeworkerthread.md) Remember: The worker thread code must live in a separate JavaScript file. diff --git a/esbuild-packages.js b/esbuild-packages.js deleted file mode 100644 index a3b5281799..0000000000 --- a/esbuild-packages.js +++ /dev/null @@ -1,269 +0,0 @@ -const { build } = require('esbuild'); -const yargs = require('yargs'); -const { execSync } = require('child_process'); -const chokidar = require('chokidar'); -const fs = require('fs'); -const path = require('path'); -const glob = require('glob'); -const crypto = require('crypto'); - -const argv = yargs(process.argv.slice(2)) - .command('build', 'Builds the project files') - .options({ - platform: { - type: 'string', - default: 'browser', - describe: 'The platform to build for.', - choices: ['browser'], - }, - watch: { - type: 'boolean', - default: false, - describe: 'Should watch the files and rebuild on change?', - }, - }) - .help() - .alias('help', 'h').argv; - -// Attached to all script URLs to force browsers to download the -// resources again. -const CACHE_BUSTER = Math.random().toFixed(16).slice(2); - -// Provided by esbuild – see build.js in the repo root. -const serviceWorkerOrigin = - process.env.SERVICE_WORKER_ORIGIN || 'http://127.0.0.1:8777'; -const serviceWorkerUrl = `${serviceWorkerOrigin}/service-worker.js`; -const wasmWorkerBackend = process.env.WASM_WORKER_BACKEND || 'iframe'; -let workerThreadScript; -if (wasmWorkerBackend === 'iframe') { - const wasmWorkerOrigin = - process.env.WASM_WORKER_ORIGIN || 'http://127.0.0.1:8777'; - workerThreadScript = `${wasmWorkerOrigin}/iframe-worker.html?${CACHE_BUSTER}`; -} else { - workerThreadScript = `${serviceWorkerOrigin}/worker-thread.js?${CACHE_BUSTER}`; -} - -const baseConfig = { - logLevel: 'info', - platform: argv.platform, - define: { - CACHE_BUSTER: JSON.stringify(CACHE_BUSTER), - 'process.env.BUILD_PLATFORM': JSON.stringify(argv.platform), - }, - watch: argv.watch, - target: ['chrome106', 'firefox100', 'safari15'], - bundle: true, - external: ['xmlhttprequest'], - loader: { - '.php': 'text', - }, -}; - -function getInternalDependencies() { - return Object.entries( - JSON.parse(fs.readFileSync(`package.json`)).dependencies - ) - .filter(([name, version]) => version.startsWith('file:')) - .map(([name, version]) => name); -} - -// Build each package first -const configFor = (packageName, entrypoints = ['index']) => { - const repoDeps = getInternalDependencies(); - return { - ...baseConfig, - external: [...baseConfig.external, ...repoDeps], - entryPoints: Object.fromEntries( - entrypoints.map((entrypoint) => [ - entrypoint, - `packages/${packageName}/src/${entrypoint}.ts`, - ]) - ), - format: 'cjs', - outdir: `packages/${packageName}/build`, - }; -}; -exports.configFor = configFor; - -async function main() { - // Build the packages first - const configs = { - 'php-wasm': { - ...configFor('php-wasm'), - define: { - ...baseConfig.define, - PHP_JS_HASH: JSON.stringify( - hashFiles([`packages/php-wasm/build-wasm/php.js`]) - ), - }, - }, - 'php-wasm-browser': configFor('php-wasm-browser', [ - 'index', - 'service-worker/worker-library', - 'worker-thread/worker-library', - ]), - 'wordpress-wasm': { - ...configFor('wordpress-wasm', [ - 'index', - 'service-worker', - 'worker-thread', - 'example-app', - ]), - define: { - ...baseConfig.define, - SERVICE_WORKER_URL: JSON.stringify(serviceWorkerUrl), - WASM_WORKER_THREAD_SCRIPT_URL: - JSON.stringify(workerThreadScript), - WASM_WORKER_BACKEND: JSON.stringify(wasmWorkerBackend), - WP_JS_HASH: JSON.stringify( - hashFiles([`packages/wordpress-wasm/build-wp/wp.js`]) - ), - }, - }, - }; - - for (const [packageName, config] of Object.entries(configs)) { - // Commonjs - await build(config); - - // ES modules - await build({ - ...config, - format: 'esm', - outdir: config.outdir + '-module', - }); - - const packageOutDir = config.outdir; - - const ops = [ - [`packages/${packageName}/src/**/*.html`, buildHTMLFile], - [`packages/${packageName}/src/**/*.php`, copyToDist], - [`packages/${packageName}/src/.htaccess`, copyToDist], - ]; - - for (const [pattern, mapper] of ops) { - mapGlob(pattern, mapper.bind(null, packageOutDir)); - } - } - - // Then build the entire project - const globalOutDir = 'build'; - await build({ - ...baseConfig, - outdir: globalOutDir, - entryPoints: { - 'wordpress-wasm': 'packages/wordpress-wasm/build-module/index.js', - 'service-worker': - 'packages/wordpress-wasm/build-module/service-worker.js', - 'worker-thread': - 'packages/wordpress-wasm/build-module/worker-thread.js', - app: 'packages/wordpress-wasm/build-module/example-app.js', - }, - nodePaths: ['packages'], - }); - - console.log(''); - console.log('Static files copied: '); - mapGlob('packages/*/build/*.html', buildHTMLFile.bind(null, globalOutDir)); - mapGlob('packages/*/build/*.php', copyToDist.bind(null, globalOutDir)); -} - -if (require.main === module) { - main(); -} -exports.main = main; - -function mapGlob(pattern, mapper) { - glob.sync(pattern).map(mapper).forEach(logBuiltFile); - if (argv.watch) { - chokidar.watch(pattern).on('change', mapper); - } -} - -function copyToDist(outdir, filePath) { - const filename = filePath.split('/').pop(); - const outPath = `${outdir}/${filename}`; - fs.copyFileSync(filePath, outPath); - return outPath; -} - -function buildHTMLFile(outdir, filePath) { - let content = fs.readFileSync(filePath).toString(); - content = content.replace( - /(]+src=")([^"]+)("><\/script>)/, - `$1$2?${CACHE_BUSTER}$3` - ); - const filename = filePath.split('/').pop(); - const outPath = `${outdir}/${filename}`; - fs.writeFileSync(outPath, content); - return outPath; -} - -function logBuiltFile(outPath) { - const outPathToLog = outPath.replace(/^\.\//, ''); - console.log(` ${outPathToLog}`); -} - -function fileSize(filePath) { - if (!fs.existsSync(filePath)) { - return 0; - } - return fs.statSync(filePath).size; -} - -function hashFiles(filePaths) { - // if all files exist - if (!filePaths.every(fs.existsSync)) { - return ''; - } - return sha256( - Buffer.concat(filePaths.map((filePath) => fs.readFileSync(filePath))) - ); -} - -function sha256(buffer) { - const hash = crypto.createHash('sha256'); - hash.update(buffer); - return hash.digest('hex'); -} - -if (argv.watch) { - const liveServer = require('live-server'); - const request = require('request'); - - liveServer.start({ - port: 8777, - root: __dirname + '/build', - open: '/wordpress.html', - file: 'wordpress.html', - middleware: [ - (req, res, next) => { - if (req.url.startsWith('/scope:')) { - req.url = '/' + req.url.split('/').slice(2).join('/'); - } else if (req.url.startsWith('/plugin-proxy')) { - const url = new URL(req.url, 'http://127.0.0.1:8777'); - const pluginName = url.searchParams - .get('plugin') - .replace(/[^a-zA-Z0-9\.\-_]/, ''); - request( - `https://downloads.wordpress.org/plugin/${pluginName}` - ).pipe(res); - return; - } - next(); - }, - ], - }); - - liveServer.start({ - port: 8778, - root: __dirname + '/build', - open: false, - middleware: [ - (req, res, next) => { - res.setHeader('Origin-Agent-Cluster', '?1'); - next(); - }, - ], - }); -} diff --git a/esbuild.js b/esbuild.js new file mode 100644 index 0000000000..4df60c9729 --- /dev/null +++ b/esbuild.js @@ -0,0 +1,188 @@ +const { build } = require('esbuild'); +const yargs = require('yargs'); +const { execSync } = require('child_process'); +const chokidar = require('chokidar'); +const fs = require('fs'); +const path = require('path'); +const glob = require('glob'); +const crypto = require('crypto'); + +const argv = yargs(process.argv.slice(2)) + .command('build', 'Builds the project files') + .options({ + platform: { + type: 'string', + default: 'browser', + describe: 'The platform to build for.', + choices: ['browser'], + }, + watch: { + type: 'boolean', + default: false, + describe: 'Should watch the files and rebuild on change?', + }, + }) + .help() + .alias('help', 'h').argv; + +// Attached to all script URLs to force browsers to download the +// resources again. +const CACHE_BUSTER = Math.random().toFixed(16).slice(2); + +// Provided by esbuild – see build.js in the repo root. +const serviceWorkerOrigin = + process.env.SERVICE_WORKER_ORIGIN || 'http://127.0.0.1:8777'; +const serviceWorkerUrl = `${serviceWorkerOrigin}/service-worker.js`; +const wasmWorkerBackend = process.env.WASM_WORKER_BACKEND || 'iframe'; +let workerThreadScript; +if (wasmWorkerBackend === 'iframe') { + const wasmWorkerOrigin = + process.env.WASM_WORKER_ORIGIN || 'http://127.0.0.1:8777'; + workerThreadScript = `${wasmWorkerOrigin}/iframe-worker.html?${CACHE_BUSTER}`; +} else { + workerThreadScript = `${serviceWorkerOrigin}/worker-thread.js?${CACHE_BUSTER}`; +} + +const globalOutDir = 'build'; + +async function main() { + build({ + logLevel: 'info', + platform: argv.platform, + define: { + CACHE_BUSTER: JSON.stringify(CACHE_BUSTER), + 'process.env.BUILD_PLATFORM': JSON.stringify(argv.platform), + SERVICE_WORKER_URL: JSON.stringify(serviceWorkerUrl), + WASM_WORKER_THREAD_SCRIPT_URL: JSON.stringify(workerThreadScript), + WASM_WORKER_BACKEND: JSON.stringify(wasmWorkerBackend), + WP_JS_HASH: JSON.stringify( + hashFiles([`packages/wordpress-wasm/build-wp/wp.js`]) + ), + PHP_JS_HASH: JSON.stringify( + hashFiles([`packages/php-wasm/build-wasm/php.js`]) + ), + }, + outdir: globalOutDir, + watch: argv.watch, + target: ['chrome106', 'firefox100', 'safari15'], + bundle: true, + external: ['xmlhttprequest'], + nodePaths: ['packages'], + loader: { + '.php': 'text', + // '.json': 'text', + }, + entryPoints: { + 'service-worker': 'src/wordpress-wasm/service-worker.ts', + 'worker-thread': 'src/wordpress-wasm/worker-thread.ts', + app: 'src/wordpress-wasm/example-app.ts', + }, + }); + build({ + logLevel: 'info', + platform: 'node', + outdir: './build-scripts/', + bundle: true, + external: ['@microsoft/*', 'node_modules/*'], + entryPoints: [ + './src/typescript-reference-doc-generator/bin/tsdoc-to-api-markdown.js', + ], + watch: argv.watch, + }); + + console.log(''); + console.log('Static files copied: '); + mapGlob(`src/*/*.html`, (filePath) => + buildHTMLFile(globalOutDir, filePath) + ); + mapGlob(`src/*/*.php`, (filePath) => copyToDist(globalOutDir, filePath)); + if (argv.watch) { + const liveServer = require('live-server'); + const request = require('request'); + + liveServer.start({ + port: 8777, + root: __dirname + '/build', + open: '/wordpress.html', + middleware: [ + (req, res, next) => { + if (req.url.startsWith('/scope:')) { + req.url = '/' + req.url.split('/').slice(2).join('/'); + } + if (req.url.endsWith('iframe-worker.html')) { + res.setHeader('Origin-Agent-Cluster', '?1'); + } else if (req.url.startsWith('/plugin-proxy')) { + const url = new URL(req.url, 'http://127.0.0.1:8777'); + const pluginName = url.searchParams + .get('plugin') + .replace(/[^a-zA-Z0-9\.\-_]/, ''); + request( + `https://downloads.wordpress.org/plugin/${pluginName}` + ).pipe(res); + return; + } + next(); + }, + ], + }); + } +} + +if (require.main === module) { + main(); +} +exports.main = main; + +function mapGlob(pattern, mapper) { + glob.sync(pattern).map(mapper).forEach(logBuiltFile); + if (argv.watch) { + chokidar.watch(pattern).on('change', mapper); + } +} + +function copyToDist(outdir, filePath) { + const filename = filePath.split('/').pop(); + const outPath = `${outdir}/${filename}`; + fs.copyFileSync(filePath, outPath); + return outPath; +} + +function buildHTMLFile(outdir, filePath) { + let content = fs.readFileSync(filePath).toString(); + content = content.replace( + /(]+src=")([^"]+)("><\/script>)/, + `$1$2?${CACHE_BUSTER}$3` + ); + const filename = filePath.split('/').pop(); + const outPath = `${outdir}/${filename}`; + fs.writeFileSync(outPath, content); + return outPath; +} + +function logBuiltFile(outPath) { + const outPathToLog = outPath.replace(/^\.\//, ''); + console.log(` ${outPathToLog}`); +} + +function fileSize(filePath) { + if (!fs.existsSync(filePath)) { + return 0; + } + return fs.statSync(filePath).size; +} + +function hashFiles(filePaths) { + // if all files exist + if (!filePaths.every(fs.existsSync)) { + return ''; + } + return sha256( + Buffer.concat(filePaths.map((filePath) => fs.readFileSync(filePath))) + ); +} + +function sha256(buffer) { + const hash = crypto.createHash('sha256'); + hash.update(buffer); + return hash.digest('hex'); +} diff --git a/gulpfile.js b/gulpfile.js index 72247c51c2..8c76bb894a 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -2,49 +2,45 @@ const gulp = require('gulp'); const path = require('path'); const glob = require('glob'); const fs = require('fs'); +const { spawnSync } = require('child_process'); const { - build: buildWordPressInPackage, -} = require('./packages/wordpress-wasm/wordpress/gulpfile'); -const { - build: buildPHPInPackage, -} = require('./packages/php-wasm/wasm/gulpfile'); + build: buildWordPress, +} = require('./src/wordpress-wasm/wordpress/gulpfile'); +const { build: buildPHP } = require('./src/php-wasm/wasm/gulpfile'); -const packagesDir = path.join(__dirname, 'packages'); const outputDir = path.join(__dirname, 'build'); console.log('Building the PHP WASM module...'); -console.log('Target path: $OUTDIR'); async function collectBuiltWordPress() { - glob.sync(`${outputDir}/wp-*`).map((path) => - fs.rmSync(path, { force: true, recursive: true }) + glob.sync(`${outputDir}/wp-*`).map((filePath) => + fs.rmSync(filePath, { force: true, recursive: true }) ); fs.rmSync(`${outputDir}/wp.js`, { force: true }); fs.rmSync(`${outputDir}/wp.data`, { force: true }); - const wpDir = `${packagesDir}/wordpress-wasm/build-wp`; + const wpOutputDir = path.join(__dirname, 'build-wp'); await asyncPipe( - gulp.src([`${wpDir}/**/*`], { base: wpDir }).pipe(gulp.dest(outputDir)) + gulp + .src([`${wpOutputDir}/**/*`], { base: wpOutputDir }) + .pipe(gulp.dest(outputDir)) ); } async function collectBuiltPHP() { - glob.sync(`${outputDir}/php.js`).map((path) => - fs.rmSync(path, { force: true }) + glob.sync(`${outputDir}/php.js`).map((filePath) => + fs.rmSync(filePath, { force: true }) ); fs.rmSync(`${outputDir}/php.wasm`, { force: true }); - await asyncPipe( - gulp - .src([`${packagesDir}/php-wasm/build-wasm/*`]) - .pipe(gulp.dest(outputDir)) - ); + const phpOutputDir = path.join(__dirname, 'build-php'); + await asyncPipe(gulp.src([`${phpOutputDir}/*`]).pipe(gulp.dest(outputDir))); } async function buildHtaccess() { const htAccess = glob - .sync(`${packagesDir}/*/build/.htaccess`) + .sync(`src/*/.htaccess`) .map((filePath) => fs.readFileSync(filePath).toString()) .join('\n'); const outPath = `${outputDir}/.htaccess`; @@ -53,46 +49,49 @@ async function buildHtaccess() { } async function buildModules() { - const { main: esbuildModules } = require('./esbuild-packages'); + const { main: esbuildModules } = require('./esbuild'); await esbuildModules(); } -async function watchDocGenerator() { - buildDocGenerator({ - watch: true, - }); -} - -async function buildDocGenerator(overrides = {}) { - const { configFor } = require('./esbuild-packages'); - const esConfig = configFor('typescript-reference-doc-generator'); - const { build } = require('esbuild'); - build({ - ...esConfig, - platform: 'node', - ...overrides, - }); +function buildDocs(cb) { + const dtsPath = suffix => path.join(__dirname, 'build-types', suffix); + spawnSync( + 'node', + [ + 'build-scripts/tsdoc-to-api-markdown.js', + '-e', + dtsPath('php-wasm/index.d.ts'), + dtsPath('php-wasm-browser/index.d.ts'), + dtsPath('php-wasm-browser/service-worker/worker-library.d.ts'), + dtsPath('php-wasm-browser/worker-thread/worker-library.d.ts'), + dtsPath('wordpress-wasm/index.d.ts'), + dtsPath('wordpress-wasm/service-worker.d.ts'), + dtsPath('wordpress-wasm/worker-thread.d.ts'), + '-o', + path.join(__dirname, 'docs', 'api') + ], + { + cwd: __dirname, + stdio: 'inherit', + } + ); + cb(); } exports.copyBuiltWordPress = collectBuiltWordPress; exports.collectBuiltPHP = collectBuiltPHP; exports.copyBuiltAssets = gulp.parallel(collectBuiltWordPress, collectBuiltPHP); exports.buildHtaccess = buildHtaccess; -exports.buildWordPress = gulp.series( - buildWordPressInPackage, - collectBuiltWordPress -); -exports.buildPHP = gulp.series(buildPHPInPackage, collectBuiltPHP); +exports.buildWordPress = gulp.series(buildWordPress, collectBuiltWordPress); +exports.buildPHP = gulp.series(buildPHP, collectBuiltPHP); exports.buildJS = buildModules; -exports.watchDocGenerator = watchDocGenerator; -exports.buildDocGenerator = buildDocGenerator; +exports.buildApiReference = buildDocs; exports.buildAll = gulp.parallel( exports.buildHtaccess, exports.buildWordPress, exports.buildPHP, - exports.buildJS, - exports.buildDocGenerator + exports.buildJS ); function asyncPipe(pipe) { diff --git a/package.json b/package.json index 6f1dc0ba34..0605af1155 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,15 @@ { - "name": "wordpress_wasm_root", + "name": "@wordpress/wasm", "version": "0.0.1", "description": "", "main": "build/app.js", + "types": "build-types", "private": "true", "scripts": { - "dev": "node esbuild-packages.js --watch", + "dev": "npm-run-all --parallel dev:js dev:types", + "dev:js": "node esbuild.js --watch", + "dev:types": "npm-run-all --parallel 'build:types:* -- --watch'", "dev:docs:html": "vitepress dev docs/api", - "dev:doc-generator": "gulp watchDocGenerator", "build": "gulp build:js", "build:all": "npm run clean; gulp buildAll", "build:js": "gulp buildJS", @@ -16,11 +18,16 @@ "build:php": "npm run build:php:web", "build:php:web": "PLATFORM=web gulp buildPHP", "build:php:node": "PLATFORM=node gulp buildPHP", - "build:api-docs": "bash scripts/run-docs-pipeline.sh", - "build:doc-generator": "gulp buildDocGenerator", - "clean": "rm -rf build/* packages/*/build-*/*", - "format": "prettier --write packages/src", - "lint:js": "eslint \"./packages/src/**/*.{js,mjs,ts}\"", + "build:docs:api": "npm run build:types ; gulp buildApiReference", + "build:docs:markdown": "node scripts/postprocess-md-docs.js", + "build:types": "npm run clean:types; npm-run-all --parallel build:types:*", + "build:types:general": "tsc -p ./tsconfig.json", + "build:types:workers": "tsc -p ./tsconfig.worker.json", + "clean": "npm run-all --parallelt clean:*", + "clean:all": "rm -rf build/* ./build-*/*", + "clean:types": "rm -rf build-types/* *.tsbuildinfo", + "format": "prettier --write src", + "lint:js": "eslint \"./src/**/*.{js,mjs,ts}\"", "lint:js:fix": "npm run lint:js -- --fix", "test": "echo \"Error: no test specified\" && exit 1" }, @@ -39,9 +46,6 @@ "dependencies": { "@microsoft/tsdoc": "^0.14.2", "glob": "^8.0.3", - "php-wasm": "file:packages/php-wasm", - "php-wasm-browser": "file:packages/php-wasm-browser", - "wordpress-wasm": "file:packages/wordpress-wasm", "yargs": "^17.5.1" }, "devDependencies": { diff --git a/packages/php-wasm-browser/api-extractor.browser.json b/packages/php-wasm-browser/api-extractor.browser.json deleted file mode 100644 index 62e9512d91..0000000000 --- a/packages/php-wasm-browser/api-extractor.browser.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json", - "extends": "../../api-extractor-base.json", - "mainEntryPointFilePath": "/build-types/index.d.ts", - "docModel": { - "apiJsonFilePath": "/build-api/-browser.api.json" - } -} diff --git a/packages/php-wasm-browser/api-extractor.service-worker.json b/packages/php-wasm-browser/api-extractor.service-worker.json deleted file mode 100644 index 4dcf6b34b0..0000000000 --- a/packages/php-wasm-browser/api-extractor.service-worker.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json", - "extends": "../../api-extractor-base.json", - "mainEntryPointFilePath": "/build-types/service-worker/worker-library.d.ts", - "docModel": { - "apiJsonFilePath": "/build-api/-service-worker.api.json" - } -} diff --git a/packages/php-wasm-browser/api-extractor.worker-thread.json b/packages/php-wasm-browser/api-extractor.worker-thread.json deleted file mode 100644 index a7dc297eaa..0000000000 --- a/packages/php-wasm-browser/api-extractor.worker-thread.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json", - "extends": "../../api-extractor-base.json", - "mainEntryPointFilePath": "/build-types/worker-thread/worker-library.d.ts", - "docModel": { - "apiJsonFilePath": "/build-api/-worker-thread.api.json" - } -} diff --git a/packages/php-wasm-browser/package.json b/packages/php-wasm-browser/package.json deleted file mode 100644 index 05e01e7b94..0000000000 --- a/packages/php-wasm-browser/package.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "php-wasm-browser", - "version": "0.0.1", - "description": "Web Browser toolkit for running WASM PHP.", - "author": "The WordPress Contributors", - "license": "Apache-2.0", - "keywords": [ - "wordpress", - "php", - "wasm", - "WebAssembly" - ], - "homepage": "https://github.com/WordPress/wordpress-wasm/tree/HEAD/packages/php-wasm-browser", - "repository": { - "type": "git", - "url": "https://github.com/WordPress/wordpress-wasm.git", - "directory": "packages/php-wasm-browser" - }, - "bugs": { - "url": "https://github.com/WordPress/wordpress-wasm/issues" - }, - "engines": { - "node": ">=12" - }, - "exports": { - "./worker-thread": "./src/worker-thread/worker-library.ts", - "./service-worker": "./src/service-worker/worker-library.ts", - ".": "./src/index.ts" - }, - "main": "build/index.js", - "types": "build-types", - "dependencies": { - "php-wasm": "file:../php-wasm" - }, - "publishConfig": { - "access": "public" - } -} diff --git a/packages/php-wasm-browser/tsconfig.json b/packages/php-wasm-browser/tsconfig.json deleted file mode 100644 index f1ac8be6e0..0000000000 --- a/packages/php-wasm-browser/tsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "extends": "../../tsconfig.base.json", - "compilerOptions": { - "rootDir": "src", - "declarationDir": "build-types", - "noUnusedParameters": false, - "checkJs": false - }, - "references": [ - { "path": "../php-wasm" } - ], - "include": [ "src/**/*" ], - "exclude": [ - "src/service-worker/worker-library.ts", - "src/worker-thread/worker-library.ts" - ] -} diff --git a/packages/php-wasm-browser/tsconfig.worker.json b/packages/php-wasm-browser/tsconfig.worker.json deleted file mode 100644 index c455a79f86..0000000000 --- a/packages/php-wasm-browser/tsconfig.worker.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extends": "../../tsconfig.base.json", - "compilerOptions": { - "rootDir": "src", - "declarationDir": "build-types", - "noUnusedParameters": false, - "checkJs": false - }, - "references": [ - { "path": "../php-wasm" } - ], - "include": [ - "src/service-worker/worker-library.ts", - "src/worker-thread/worker-library.ts", - "src/emscripten-download-monitor.ts", - "src/messaging.ts", - "src/scope.ts", - "src/utils.ts" - ] -} diff --git a/packages/php-wasm/api-extractor.json b/packages/php-wasm/api-extractor.json deleted file mode 100644 index 09eb843466..0000000000 --- a/packages/php-wasm/api-extractor.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json", - "extends": "../../api-extractor-base.json", - "mainEntryPointFilePath": "/build-types/index.d.ts" -} diff --git a/packages/php-wasm/package.json b/packages/php-wasm/package.json deleted file mode 100644 index 8aa06e182a..0000000000 --- a/packages/php-wasm/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "php-wasm", - "version": "0.0.1", - "description": "PHP for JavaScript via WebAssembly.", - "author": "The WordPress Contributors", - "license": "Apache-2.0", - "keywords": [ - "wordpress", - "php", - "wasm", - "WebAssembly" - ], - "homepage": "https://github.com/WordPress/wordpress-wasm/tree/HEAD/packages/php-wasm", - "repository": { - "type": "git", - "url": "https://github.com/WordPress/wordpress-wasm.git", - "directory": "packages/php-wasm" - }, - "bugs": { - "url": "https://github.com/WordPress/wordpress-wasm/issues" - }, - "engines": { - "node": ">=12" - }, - "main": "build/index.js", - "types": "build-types", - "dependencies": {}, - "publishConfig": { - "access": "public" - }, - "devDependencies": { - "gulp": "^4.0.2", - "gulp-rename": "^2.0.0", - "gulp-replace": "^1.1.3" - } -} diff --git a/packages/php-wasm/tsconfig.json b/packages/php-wasm/tsconfig.json deleted file mode 100644 index 2306acb612..0000000000 --- a/packages/php-wasm/tsconfig.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "../../tsconfig.base.json", - "compilerOptions": { - "rootDir": "src", - "declarationDir": "build-types", - "noUnusedParameters": false, - "checkJs": false - }, - "references": [], - "include": [ "src/**/*" ] -} \ No newline at end of file diff --git a/packages/php-wasm/wasm/gulpfile.js b/packages/php-wasm/wasm/gulpfile.js deleted file mode 100644 index c1ab5e77eb..0000000000 --- a/packages/php-wasm/wasm/gulpfile.js +++ /dev/null @@ -1,69 +0,0 @@ -const os = require('os'); -const gulp = require('gulp'); -const replace = require('gulp-replace'); -const rename = require('gulp-rename'); -const path = require('path'); -const util = require('util'); -const fs = require('fs'); -const rmAsync = util.promisify(fs.rm); -const { spawn } = require('child_process'); - -const sourceDir = __dirname; -const outputDir = path.join(__dirname, '..', 'build-wasm'); - -async function cleanBuildDir() { - await rmAsync(outputDir, { recursive: true, force: true }); - fs.mkdirSync(outputDir); -} - -async function build() { - const phpVersion = process.env.PHP_VERSION || '8.0.24'; - const withVRZNO = phpVersion.startsWith('7.') ? 'yes' : 'no'; - const platform = process.env.PLATFORM === 'node' ? 'node' : 'web'; - const withNodeFs = platform === 'node' ? 'yes' : 'no'; - - // Build PHP - await asyncSpawn('docker', [ - 'build', '.', - '--tag=php-wasm', - '--progress=plain', - '--build-arg', `PHP_VERSION=${phpVersion}`, - '--build-arg', `WITH_VRZNO=${withVRZNO}`, - '--build-arg', `WITH_LIBXML=no`, - '--build-arg', `WITH_LIBZIP=yes`, - '--build-arg', `WITH_NODEFS=${withNodeFs}`, - '--build-arg', `EMSCRIPTEN_ENVIRONMENT=${platform}`, - ], { cwd: sourceDir, stdio: 'inherit' }); - - // Extract the PHP WASM module - await asyncSpawn('docker', [ - 'run', - '--name', 'php-wasm-tmp', - '--rm', - '-v', `${outputDir}:/output`, - 'php-wasm', - // Use sh -c because wildcards are a shell feature and - // they don't work without running cp through shell. - 'sh', '-c', `cp /root/output/php.js /root/output/php.wasm /output/`, - ], { cwd: sourceDir, stdio: 'inherit' }); -} - -exports.build = gulp.series(cleanBuildDir, build); - -function asyncPipe(pipe) { - return new Promise(async (resolve, reject) => { - pipe.on('finish', resolve) - .on('error', reject); - }); -} - -function asyncSpawn(...args) { - return new Promise((resolve, reject) => { - const child = spawn(...args); - - child.on('close', (code) => { - if (code === 0) resolve(code); - else reject(new Error(`Process exited with code ${code}`)); - }); - }); -} diff --git a/packages/php-wasm/yarn.lock b/packages/php-wasm/yarn.lock deleted file mode 100644 index 9dd0791ee2..0000000000 --- a/packages/php-wasm/yarn.lock +++ /dev/null @@ -1,2273 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@types/expect@^1.20.4": - version "1.20.4" - resolved "https://registry.yarnpkg.com/@types/expect/-/expect-1.20.4.tgz#8288e51737bf7e3ab5d7c77bfa695883745264e5" - integrity sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg== - -"@types/node@*": - version "18.11.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.3.tgz#78a6d7ec962b596fc2d2ec102c4dd3ef073fea6a" - integrity sha512-fNjDQzzOsZeKZu5NATgXUPsaFaTxeRgFXoosrHivTl8RGeV733OLawXsGfEk9a8/tySyZUyiZ6E8LcjPFZ2y1A== - -"@types/node@^14.14.41": - version "14.18.32" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.32.tgz#8074f7106731f1a12ba993fe8bad86ee73905014" - integrity sha512-Y6S38pFr04yb13qqHf8uk1nHE3lXgQ30WZbv1mLliV9pt0NjvqdWttLcrOYLnXbOafknVYRHZGoMSpR9UwfYow== - -"@types/vinyl@^2.0.4": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@types/vinyl/-/vinyl-2.0.6.tgz#b2d134603557a7c3d2b5d3dc23863ea2b5eb29b0" - integrity sha512-ayJ0iOCDNHnKpKTgBG6Q6JOnHTj9zFta+3j2b8Ejza0e4cvRyMn0ZoLEmbPrTHe5YYRlDYPvPWVdV4cTaRyH7g== - dependencies: - "@types/expect" "^1.20.4" - "@types/node" "*" - -ansi-colors@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-1.1.0.tgz#6374b4dd5d4718ff3ce27a671a3b1cad077132a9" - integrity sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA== - dependencies: - ansi-wrap "^0.1.0" - -ansi-gray@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251" - integrity sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw== - dependencies: - ansi-wrap "0.1.0" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== - -ansi-wrap@0.1.0, ansi-wrap@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" - integrity sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw== - -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -append-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/append-buffer/-/append-buffer-1.0.2.tgz#d8220cf466081525efea50614f3de6514dfa58f1" - integrity sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA== - dependencies: - buffer-equal "^1.0.0" - -archy@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" - integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw== - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA== - -arr-filter@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/arr-filter/-/arr-filter-1.1.2.tgz#43fdddd091e8ef11aa4c45d9cdc18e2dff1711ee" - integrity sha512-A2BETWCqhsecSvCkWAeVBFLH6sXEUGASuzkpjL3GR1SlL/PWL6M3J8EAAld2Uubmh39tvkJTqC9LeLHCUKmFXA== - dependencies: - make-iterator "^1.0.0" - -arr-flatten@^1.0.1, arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-map@^2.0.0, arr-map@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/arr-map/-/arr-map-2.0.2.tgz#3a77345ffc1cf35e2a91825601f9e58f2e24cac4" - integrity sha512-tVqVTHt+Q5Xb09qRkbu+DidW1yYzz5izWS2Xm2yFm7qJnmUfz4HPzNxbHkdRJbz2lrqI7S+z17xNYdFcBBO8Hw== - dependencies: - make-iterator "^1.0.0" - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== - -array-each@^1.0.0, array-each@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f" - integrity sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA== - -array-initial@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/array-initial/-/array-initial-1.1.0.tgz#2fa74b26739371c3947bd7a7adc73be334b3d795" - integrity sha512-BC4Yl89vneCYfpLrs5JU2aAu9/a+xWbeKhvISg9PT7eWFB9UlRvI+rKEtk6mgxWr3dSkk9gQ8hCrdqt06NXPdw== - dependencies: - array-slice "^1.0.0" - is-number "^4.0.0" - -array-last@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/array-last/-/array-last-1.3.0.tgz#7aa77073fec565ddab2493f5f88185f404a9d336" - integrity sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg== - dependencies: - is-number "^4.0.0" - -array-slice@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-1.1.0.tgz#e368ea15f89bc7069f7ffb89aec3a6c7d4ac22d4" - integrity sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w== - -array-sort@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-sort/-/array-sort-1.0.0.tgz#e4c05356453f56f53512a7d1d6123f2c54c0a88a" - integrity sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg== - dependencies: - default-compare "^1.0.0" - get-value "^2.0.6" - kind-of "^5.0.2" - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== - -async-done@^1.2.0, async-done@^1.2.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/async-done/-/async-done-1.3.2.tgz#5e15aa729962a4b07414f528a88cdf18e0b290a2" - integrity sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.2" - process-nextick-args "^2.0.0" - stream-exhaust "^1.0.1" - -async-each@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" - integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== - -async-settle@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/async-settle/-/async-settle-1.0.0.tgz#1d0a914bb02575bec8a8f3a74e5080f72b2c0c6b" - integrity sha512-VPXfB4Vk49z1LHHodrEQ6Xf7W4gg1w0dAPROHngx7qgDjqmIQ+fXmwgGXTW/ITLai0YLSvWepJOP9EVpMnEAcw== - dependencies: - async-done "^1.2.2" - -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -bach@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/bach/-/bach-1.2.0.tgz#4b3ce96bf27134f79a1b414a51c14e34c3bd9880" - integrity sha512-bZOOfCb3gXBXbTFXq3OZtGR88LwGeJvzu6szttaIzymOTS4ZttBNOWSv7aLZja2EMycKtRYV0Oa8SNKH/zkxvg== - dependencies: - arr-filter "^1.1.1" - arr-flatten "^1.0.1" - arr-map "^2.0.0" - array-each "^1.0.0" - array-initial "^1.0.0" - array-last "^1.1.1" - async-done "^1.2.2" - async-settle "^1.0.0" - now-and-later "^2.0.0" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -binary-extensions@^1.0.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" - integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== - -binaryextensions@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/binaryextensions/-/binaryextensions-2.3.0.tgz#1d269cbf7e6243ea886aa41453c3651ccbe13c22" - integrity sha512-nAihlQsYGyc5Bwq6+EsubvANYGExeJKHDO3RjnvwU042fawQTQfM3Kxn7IHUXQOz4bzfwsGYYHGSvXyW4zOGLg== - -bindings@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^2.3.1, braces@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -buffer-equal@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.1.tgz#2f7651be5b1b3f057fcd6e7ee16cf34767077d90" - integrity sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg== - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -camelcase@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" - integrity sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg== - -chokidar@^2.0.0: - version "2.1.8" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" - integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== - dependencies: - anymatch "^2.0.0" - async-each "^1.0.1" - braces "^2.3.2" - glob-parent "^3.1.0" - inherits "^2.0.3" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^3.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.2.1" - upath "^1.1.1" - optionalDependencies: - fsevents "^1.2.7" - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -cliui@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" - integrity sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w== - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi "^2.0.0" - -clone-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" - integrity sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g== - -clone-stats@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" - integrity sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag== - -clone@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" - integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== - -cloneable-readable@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.3.tgz#120a00cb053bfb63a222e709f9683ea2e11d8cec" - integrity sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ== - dependencies: - inherits "^2.0.1" - process-nextick-args "^2.0.0" - readable-stream "^2.3.5" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== - -collection-map@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-map/-/collection-map-1.0.0.tgz#aea0f06f8d26c780c2b75494385544b2255af18c" - integrity sha512-5D2XXSpkOnleOI21TG7p3T0bGAsZ/XknZpKBmGYyluO8pw4zA3K8ZlrBIbC4FXg3m6z/RNFiUFfT2sQK01+UHA== - dependencies: - arr-map "^2.0.2" - for-own "^1.0.0" - make-iterator "^1.0.0" - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw== - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-support@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" - integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== - -component-emitter@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -concat-stream@^1.6.0: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -convert-source-map@^1.5.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== - -copy-props@^2.0.1: - version "2.0.5" - resolved "https://registry.yarnpkg.com/copy-props/-/copy-props-2.0.5.tgz#03cf9ae328d4ebb36f8f1d804448a6af9ee3f2d2" - integrity sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw== - dependencies: - each-props "^1.3.2" - is-plain-object "^5.0.0" - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -d@1, d@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" - integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== - dependencies: - es5-ext "^0.10.50" - type "^1.0.1" - -debug@^2.2.0, debug@^2.3.3: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -decamelize@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== - -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og== - -default-compare@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/default-compare/-/default-compare-1.0.0.tgz#cb61131844ad84d84788fb68fd01681ca7781a2f" - integrity sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ== - dependencies: - kind-of "^5.0.2" - -default-resolution@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/default-resolution/-/default-resolution-2.0.0.tgz#bcb82baa72ad79b426a76732f1a81ad6df26d684" - integrity sha512-2xaP6GiwVwOEbXCGoJ4ufgC76m8cj805jrghScewJC2ZDsb9U0b4BIrba+xt/Uytyd0HvQ6+WymSRTfnYj59GQ== - -define-properties@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" - integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== - dependencies: - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA== - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA== - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -detect-file@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" - integrity sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q== - -duplexify@^3.6.0: - version "3.7.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" - integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - -each-props@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/each-props/-/each-props-1.3.2.tgz#ea45a414d16dd5cfa419b1a81720d5ca06892333" - integrity sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA== - dependencies: - is-plain-object "^2.0.1" - object.defaults "^1.1.0" - -end-of-stream@^1.0.0, end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -error-ex@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50: - version "0.10.62" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5" - integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA== - dependencies: - es6-iterator "^2.0.3" - es6-symbol "^3.1.3" - next-tick "^1.1.0" - -es6-iterator@^2.0.1, es6-iterator@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - -es6-symbol@^3.1.1, es6-symbol@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" - integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== - dependencies: - d "^1.0.1" - ext "^1.1.2" - -es6-weak-map@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53" - integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA== - dependencies: - d "1" - es5-ext "^0.10.46" - es6-iterator "^2.0.3" - es6-symbol "^3.1.1" - -escape-string-regexp@^1.0.3: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA== - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expand-tilde@^2.0.0, expand-tilde@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" - integrity sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw== - dependencies: - homedir-polyfill "^1.0.1" - -ext@^1.1.2: - version "1.7.0" - resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f" - integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== - dependencies: - type "^2.7.2" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q== - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -fancy-log@^1.3.2: - version "1.3.3" - resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.3.tgz#dbc19154f558690150a23953a0adbd035be45fc7" - integrity sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw== - dependencies: - ansi-gray "^0.1.1" - color-support "^1.1.3" - parse-node-version "^1.0.0" - time-stamp "^1.0.0" - -fast-levenshtein@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz#e6a754cc8f15e58987aa9cbd27af66fd6f4e5af9" - integrity sha512-Ia0sQNrMPXXkqVFt6w6M1n1oKo3NfKs+mvaV811Jwir7vAk9a6PVV9VPYf6X3BU97QiLEmuW3uXH9u87zDFfdw== - -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ== - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - integrity sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA== - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - -findup-sync@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-2.0.0.tgz#9326b1488c22d1a6088650a86901b2d9a90a2cbc" - integrity sha512-vs+3unmJT45eczmcAZ6zMJtxN3l/QXeccaXQx5cu/MeJMhewVfoWZqibRkOxPnmoR59+Zy5hjabfQc6JLSah4g== - dependencies: - detect-file "^1.0.0" - is-glob "^3.1.0" - micromatch "^3.0.4" - resolve-dir "^1.0.1" - -findup-sync@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" - integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== - dependencies: - detect-file "^1.0.0" - is-glob "^4.0.0" - micromatch "^3.0.4" - resolve-dir "^1.0.1" - -fined@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/fined/-/fined-1.2.0.tgz#d00beccf1aa2b475d16d423b0238b713a2c4a37b" - integrity sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng== - dependencies: - expand-tilde "^2.0.2" - is-plain-object "^2.0.3" - object.defaults "^1.1.0" - object.pick "^1.2.0" - parse-filepath "^1.0.1" - -flagged-respawn@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-1.0.1.tgz#e7de6f1279ddd9ca9aac8a5971d618606b3aab41" - integrity sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q== - -flush-write-stream@^1.0.2: - version "1.1.1" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" - integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== - dependencies: - inherits "^2.0.3" - readable-stream "^2.3.6" - -for-in@^1.0.1, for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== - -for-own@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b" - integrity sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg== - dependencies: - for-in "^1.0.1" - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA== - dependencies: - map-cache "^0.2.2" - -fs-mkdirp-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz#0b7815fc3201c6a69e14db98ce098c16935259eb" - integrity sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ== - dependencies: - graceful-fs "^4.1.11" - through2 "^2.0.3" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@^1.2.7: - version "1.2.13" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" - integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== - dependencies: - bindings "^1.5.0" - nan "^2.12.1" - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -get-caller-file@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" - integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== - -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" - integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.3" - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== - -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA== - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - -glob-stream@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-6.1.0.tgz#7045c99413b3eb94888d83ab46d0b404cc7bdde4" - integrity sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw== - dependencies: - extend "^3.0.0" - glob "^7.1.1" - glob-parent "^3.1.0" - is-negated-glob "^1.0.0" - ordered-read-streams "^1.0.0" - pumpify "^1.3.5" - readable-stream "^2.1.5" - remove-trailing-separator "^1.0.1" - to-absolute-glob "^2.0.0" - unique-stream "^2.0.2" - -glob-watcher@^5.0.3: - version "5.0.5" - resolved "https://registry.yarnpkg.com/glob-watcher/-/glob-watcher-5.0.5.tgz#aa6bce648332924d9a8489be41e3e5c52d4186dc" - integrity sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw== - dependencies: - anymatch "^2.0.0" - async-done "^1.2.0" - chokidar "^2.0.0" - is-negated-glob "^1.0.0" - just-debounce "^1.0.0" - normalize-path "^3.0.0" - object.defaults "^1.1.0" - -glob@^7.1.1: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -global-modules@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" - integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== - dependencies: - global-prefix "^1.0.1" - is-windows "^1.0.1" - resolve-dir "^1.0.0" - -global-prefix@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" - integrity sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg== - dependencies: - expand-tilde "^2.0.2" - homedir-polyfill "^1.0.1" - ini "^1.3.4" - is-windows "^1.0.1" - which "^1.2.14" - -glogg@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.2.tgz#2d7dd702beda22eb3bffadf880696da6d846313f" - integrity sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA== - dependencies: - sparkles "^1.0.0" - -graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - -gulp-cli@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/gulp-cli/-/gulp-cli-2.3.0.tgz#ec0d380e29e52aa45e47977f0d32e18fd161122f" - integrity sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A== - dependencies: - ansi-colors "^1.0.1" - archy "^1.0.0" - array-sort "^1.0.0" - color-support "^1.1.3" - concat-stream "^1.6.0" - copy-props "^2.0.1" - fancy-log "^1.3.2" - gulplog "^1.0.0" - interpret "^1.4.0" - isobject "^3.0.1" - liftoff "^3.1.0" - matchdep "^2.0.0" - mute-stdout "^1.0.0" - pretty-hrtime "^1.0.0" - replace-homedir "^1.0.0" - semver-greatest-satisfied-range "^1.1.0" - v8flags "^3.2.0" - yargs "^7.1.0" - -gulp-rename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/gulp-rename/-/gulp-rename-2.0.0.tgz#9bbc3962b0c0f52fc67cd5eaff6c223ec5b9cf6c" - integrity sha512-97Vba4KBzbYmR5VBs9mWmK+HwIf5mj+/zioxfZhOKeXtx5ZjBk57KFlePf5nxq9QsTtFl0ejnHE3zTC9MHXqyQ== - -gulp-replace@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/gulp-replace/-/gulp-replace-1.1.3.tgz#8641cdca78e683e8573ca4a012e7e4ebb7e4db60" - integrity sha512-HcPHpWY4XdF8zxYkDODHnG2+7a3nD/Y8Mfu3aBgMiCFDW3X2GiOKXllsAmILcxe3KZT2BXoN18WrpEFm48KfLQ== - dependencies: - "@types/node" "^14.14.41" - "@types/vinyl" "^2.0.4" - istextorbinary "^3.0.0" - replacestream "^4.0.3" - yargs-parser ">=5.0.0-security.0" - -gulp@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/gulp/-/gulp-4.0.2.tgz#543651070fd0f6ab0a0650c6a3e6ff5a7cb09caa" - integrity sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA== - dependencies: - glob-watcher "^5.0.3" - gulp-cli "^2.2.0" - undertaker "^1.2.1" - vinyl-fs "^3.0.0" - -gulplog@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5" - integrity sha512-hm6N8nrm3Y08jXie48jsC55eCZz9mnb4OirAStEk2deqeyhXU3C1otDVh+ccttMuc1sBi6RX6ZJ720hs9RCvgw== - dependencies: - glogg "^1.0.0" - -has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== - dependencies: - get-intrinsic "^1.1.1" - -has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q== - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw== - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ== - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ== - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -homedir-polyfill@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" - integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== - dependencies: - parse-passwd "^1.0.0" - -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@^1.3.4: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -interpret@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" - integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== - -invert-kv@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - integrity sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ== - -is-absolute@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" - integrity sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA== - dependencies: - is-relative "^1.0.0" - is-windows "^1.0.1" - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A== - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - integrity sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q== - dependencies: - binary-extensions "^1.0.0" - -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-core-module@^2.9.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" - integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== - dependencies: - has "^1.0.3" - -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg== - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== - dependencies: - kind-of "^6.0.0" - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^2.1.0, is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== - dependencies: - number-is-nan "^1.0.0" - -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw== - dependencies: - is-extglob "^2.1.0" - -is-glob@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-negated-glob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-negated-glob/-/is-negated-glob-1.0.0.tgz#6910bca5da8c95e784b5751b976cf5a10fee36d2" - integrity sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug== - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg== - dependencies: - kind-of "^3.0.2" - -is-number@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" - integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ== - -is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-plain-object@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" - integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== - -is-relative@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" - integrity sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA== - dependencies: - is-unc-path "^1.0.0" - -is-unc-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d" - integrity sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ== - dependencies: - unc-path-regex "^0.1.2" - -is-utf8@^0.2.0, is-utf8@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - integrity sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q== - -is-valid-glob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-1.0.0.tgz#29bf3eff701be2d4d315dbacc39bc39fe8f601aa" - integrity sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA== - -is-windows@^1.0.1, is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -isarray@1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== - -istextorbinary@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/istextorbinary/-/istextorbinary-3.3.0.tgz#06b1c57d948da11461bd237c00ce09e9902964f2" - integrity sha512-Tvq1W6NAcZeJ8op+Hq7tdZ434rqnMx4CCZ7H0ff83uEloDvVbqAwaMTZcafKGJT0VHkYzuXUiCY4hlXQg6WfoQ== - dependencies: - binaryextensions "^2.2.0" - textextensions "^3.2.0" - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - -just-debounce@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/just-debounce/-/just-debounce-1.1.0.tgz#2f81a3ad4121a76bc7cb45dbf704c0d76a8e5ddf" - integrity sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ== - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ== - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw== - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0, kind-of@^5.0.2: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -last-run@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/last-run/-/last-run-1.1.1.tgz#45b96942c17b1c79c772198259ba943bebf8ca5b" - integrity sha512-U/VxvpX4N/rFvPzr3qG5EtLKEnNI0emvIQB3/ecEwv+8GHaUKbIB8vxv1Oai5FAF0d0r7LXHhLLe5K/yChm5GQ== - dependencies: - default-resolution "^2.0.0" - es6-weak-map "^2.0.1" - -lazystream@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.1.tgz#494c831062f1f9408251ec44db1cba29242a2638" - integrity sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw== - dependencies: - readable-stream "^2.0.5" - -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - integrity sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw== - dependencies: - invert-kv "^1.0.0" - -lead@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lead/-/lead-1.0.0.tgz#6f14f99a37be3a9dd784f5495690e5903466ee42" - integrity sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow== - dependencies: - flush-write-stream "^1.0.2" - -liftoff@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-3.1.0.tgz#c9ba6081f908670607ee79062d700df062c52ed3" - integrity sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog== - dependencies: - extend "^3.0.0" - findup-sync "^3.0.0" - fined "^1.0.1" - flagged-respawn "^1.0.0" - is-plain-object "^2.0.4" - object.map "^1.0.0" - rechoir "^0.6.2" - resolve "^1.1.7" - -load-json-file@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - integrity sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A== - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" - -make-iterator@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/make-iterator/-/make-iterator-1.0.1.tgz#29b33f312aa8f547c4a5e490f56afcec99133ad6" - integrity sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw== - dependencies: - kind-of "^6.0.2" - -map-cache@^0.2.0, map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w== - dependencies: - object-visit "^1.0.0" - -matchdep@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/matchdep/-/matchdep-2.0.0.tgz#c6f34834a0d8dbc3b37c27ee8bbcb27c7775582e" - integrity sha512-LFgVbaHIHMqCRuCZyfCtUOq9/Lnzhi7Z0KFUE2fhD54+JN2jLh3hC02RLkqauJ3U4soU6H1J3tfj/Byk7GoEjA== - dependencies: - findup-sync "^2.0.0" - micromatch "^3.0.4" - resolve "^1.4.0" - stack-trace "0.0.10" - -micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -minimatch@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -mute-stdout@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mute-stdout/-/mute-stdout-1.0.1.tgz#acb0300eb4de23a7ddeec014e3e96044b3472331" - integrity sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg== - -nan@^2.12.1: - version "2.17.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.17.0.tgz#c0150a2368a182f033e9aa5195ec76ea41a199cb" - integrity sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ== - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -next-tick@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" - integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== - -normalize-package-data@^2.3.2: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w== - dependencies: - remove-trailing-separator "^1.0.1" - -normalize-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -now-and-later@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/now-and-later/-/now-and-later-2.0.1.tgz#8e579c8685764a7cc02cb680380e94f43ccb1f7c" - integrity sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ== - dependencies: - once "^1.3.2" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== - -object-assign@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ== - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA== - dependencies: - isobject "^3.0.0" - -object.assign@^4.0.4, object.assign@^4.1.0: - version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - has-symbols "^1.0.3" - object-keys "^1.1.1" - -object.defaults@^1.0.0, object.defaults@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf" - integrity sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA== - dependencies: - array-each "^1.0.1" - array-slice "^1.0.0" - for-own "^1.0.0" - isobject "^3.0.0" - -object.map@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object.map/-/object.map-1.0.1.tgz#cf83e59dc8fcc0ad5f4250e1f78b3b81bd801d37" - integrity sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w== - dependencies: - for-own "^1.0.0" - make-iterator "^1.0.0" - -object.pick@^1.2.0, object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ== - dependencies: - isobject "^3.0.1" - -object.reduce@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object.reduce/-/object.reduce-1.0.1.tgz#6fe348f2ac7fa0f95ca621226599096825bb03ad" - integrity sha512-naLhxxpUESbNkRqc35oQ2scZSJueHGQNUfMW/0U37IgN6tE2dgDWg3whf+NEliy3F/QysrO48XKUz/nGPe+AQw== - dependencies: - for-own "^1.0.0" - make-iterator "^1.0.0" - -once@^1.3.0, once@^1.3.1, once@^1.3.2, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -ordered-read-streams@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz#77c0cb37c41525d64166d990ffad7ec6a0e1363e" - integrity sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw== - dependencies: - readable-stream "^2.0.1" - -os-locale@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" - integrity sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g== - dependencies: - lcid "^1.0.0" - -parse-filepath@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891" - integrity sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q== - dependencies: - is-absolute "^1.0.0" - map-cache "^0.2.0" - path-root "^0.1.1" - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - integrity sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ== - dependencies: - error-ex "^1.2.0" - -parse-node-version@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" - integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA== - -parse-passwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" - integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q== - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw== - -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q== - -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - integrity sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ== - dependencies: - pinkie-promise "^2.0.0" - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-root-regex@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d" - integrity sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ== - -path-root@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7" - integrity sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg== - dependencies: - path-root-regex "^0.1.0" - -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - integrity sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg== - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw== - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== - -pretty-hrtime@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" - integrity sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A== - -process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -pump@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pumpify@^1.3.5: - version "1.5.1" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" - integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== - dependencies: - duplexify "^3.6.0" - inherits "^2.0.3" - pump "^2.0.0" - -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - integrity sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A== - dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" - -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - integrity sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ== - dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" - -readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readdirp@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" - integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== - dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" - -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== - dependencies: - resolve "^1.1.6" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -remove-bom-buffer@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz#c2bf1e377520d324f623892e33c10cac2c252b53" - integrity sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ== - dependencies: - is-buffer "^1.1.5" - is-utf8 "^0.2.1" - -remove-bom-stream@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz#05f1a593f16e42e1fb90ebf59de8e569525f9523" - integrity sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA== - dependencies: - remove-bom-buffer "^3.0.0" - safe-buffer "^5.1.0" - through2 "^2.0.3" - -remove-trailing-separator@^1.0.1, remove-trailing-separator@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw== - -repeat-element@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" - integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== - -repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== - -replace-ext@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.1.tgz#2d6d996d04a15855d967443631dd5f77825b016a" - integrity sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw== - -replace-homedir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/replace-homedir/-/replace-homedir-1.0.0.tgz#e87f6d513b928dde808260c12be7fec6ff6e798c" - integrity sha512-CHPV/GAglbIB1tnQgaiysb8H2yCy8WQ7lcEwQ/eT+kLj0QHV8LnJW0zpqpE7RSkrMSRoa+EBoag86clf7WAgSg== - dependencies: - homedir-polyfill "^1.0.1" - is-absolute "^1.0.0" - remove-trailing-separator "^1.1.0" - -replacestream@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/replacestream/-/replacestream-4.0.3.tgz#3ee5798092be364b1cdb1484308492cb3dff2f36" - integrity sha512-AC0FiLS352pBBiZhd4VXB1Ab/lh0lEgpP+GGvZqbQh8a5cmXVoTe5EX/YeTFArnp4SRGTHh1qCHu9lGs1qG8sA== - dependencies: - escape-string-regexp "^1.0.3" - object-assign "^4.0.1" - readable-stream "^2.0.2" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" - integrity sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug== - -resolve-dir@^1.0.0, resolve-dir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" - integrity sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg== - dependencies: - expand-tilde "^2.0.0" - global-modules "^1.0.0" - -resolve-options@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/resolve-options/-/resolve-options-1.1.0.tgz#32bb9e39c06d67338dc9378c0d6d6074566ad131" - integrity sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A== - dependencies: - value-or-function "^3.0.0" - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== - -resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.4.0: - version "1.22.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" - integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== - dependencies: - is-core-module "^2.9.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - -safe-buffer@^5.1.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg== - dependencies: - ret "~0.1.10" - -semver-greatest-satisfied-range@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz#13e8c2658ab9691cb0cd71093240280d36f77a5b" - integrity sha512-Ny/iyOzSSa8M5ML46IAx3iXc6tfOsYU2R4AXi2UpHk60Zrgyq6eqPj/xiOfS0rRl/iiQ/rdJkVjw/5cdUyCntQ== - dependencies: - sver-compat "^1.5.0" - -"semver@2 || 3 || 4 || 5": - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== - -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -source-map-resolve@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" - integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-url@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" - integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== - -source-map@^0.5.6: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== - -sparkles@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.1.tgz#008db65edce6c50eec0c5e228e1945061dd0437c" - integrity sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw== - -spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.12" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz#69077835abe2710b65f03969898b6637b505a779" - integrity sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA== - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - -stack-trace@0.0.10: - version "0.0.10" - resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" - integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g== - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -stream-exhaust@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/stream-exhaust/-/stream-exhaust-1.0.2.tgz#acdac8da59ef2bc1e17a2c0ccf6c320d120e555d" - integrity sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw== - -stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" - integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== - -string-width@^1.0.1, string-width@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw== - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== - dependencies: - ansi-regex "^2.0.0" - -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - integrity sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g== - dependencies: - is-utf8 "^0.2.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -sver-compat@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/sver-compat/-/sver-compat-1.5.0.tgz#3cf87dfeb4d07b4a3f14827bc186b3fd0c645cd8" - integrity sha512-aFTHfmjwizMNlNE6dsGmoAM4lHjL0CyiobWaFiXWSlD7cIxshW422Nb8KbXCmR6z+0ZEPY+daXJrDyh/vuwTyg== - dependencies: - es6-iterator "^2.0.1" - es6-symbol "^3.1.1" - -textextensions@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/textextensions/-/textextensions-3.3.0.tgz#03530d5287b86773c08b77458589148870cc71d3" - integrity sha512-mk82dS8eRABNbeVJrEiN5/UMSCliINAuz8mkUwH4SwslkNP//gbEzlWNS5au0z5Dpx40SQxzqZevZkn+WYJ9Dw== - -through2-filter@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-3.0.0.tgz#700e786df2367c2c88cd8aa5be4cf9c1e7831254" - integrity sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA== - dependencies: - through2 "~2.0.0" - xtend "~4.0.0" - -through2@^2.0.0, through2@^2.0.3, through2@~2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -time-stamp@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" - integrity sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw== - -to-absolute-glob@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz#1865f43d9e74b0822db9f145b78cff7d0f7c849b" - integrity sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA== - dependencies: - is-absolute "^1.0.0" - is-negated-glob "^1.0.0" - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg== - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg== - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -to-through@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-through/-/to-through-2.0.0.tgz#fc92adaba072647bc0b67d6b03664aa195093af6" - integrity sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q== - dependencies: - through2 "^2.0.3" - -type@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" - integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== - -type@^2.7.2: - version "2.7.2" - resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" - integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== - -unc-path-regex@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" - integrity sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg== - -undertaker-registry@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/undertaker-registry/-/undertaker-registry-1.0.1.tgz#5e4bda308e4a8a2ae584f9b9a4359a499825cc50" - integrity sha512-UR1khWeAjugW3548EfQmL9Z7pGMlBgXteQpr1IZeZBtnkCJQJIJ1Scj0mb9wQaPvUZ9Q17XqW6TIaPchJkyfqw== - -undertaker@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/undertaker/-/undertaker-1.3.0.tgz#363a6e541f27954d5791d6fa3c1d321666f86d18" - integrity sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg== - dependencies: - arr-flatten "^1.0.1" - arr-map "^2.0.0" - bach "^1.0.0" - collection-map "^1.0.0" - es6-weak-map "^2.0.1" - fast-levenshtein "^1.0.0" - last-run "^1.1.0" - object.defaults "^1.0.0" - object.reduce "^1.0.0" - undertaker-registry "^1.0.0" - -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" - -unique-stream@^2.0.2: - version "2.3.1" - resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-2.3.1.tgz#c65d110e9a4adf9a6c5948b28053d9a8d04cbeac" - integrity sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A== - dependencies: - json-stable-stringify-without-jsonify "^1.0.1" - through2-filter "^3.0.0" - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ== - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -upath@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" - integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== - -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - -util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -v8flags@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.2.0.tgz#b243e3b4dfd731fa774e7492128109a0fe66d656" - integrity sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg== - dependencies: - homedir-polyfill "^1.0.1" - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -value-or-function@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/value-or-function/-/value-or-function-3.0.0.tgz#1c243a50b595c1be54a754bfece8563b9ff8d813" - integrity sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg== - -vinyl-fs@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-3.0.3.tgz#c85849405f67428feabbbd5c5dbdd64f47d31bc7" - integrity sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng== - dependencies: - fs-mkdirp-stream "^1.0.0" - glob-stream "^6.1.0" - graceful-fs "^4.0.0" - is-valid-glob "^1.0.0" - lazystream "^1.0.0" - lead "^1.0.0" - object.assign "^4.0.4" - pumpify "^1.3.5" - readable-stream "^2.3.3" - remove-bom-buffer "^3.0.0" - remove-bom-stream "^1.2.0" - resolve-options "^1.1.0" - through2 "^2.0.0" - to-through "^2.0.0" - value-or-function "^3.0.0" - vinyl "^2.0.0" - vinyl-sourcemap "^1.1.0" - -vinyl-sourcemap@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz#92a800593a38703a8cdb11d8b300ad4be63b3e16" - integrity sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA== - dependencies: - append-buffer "^1.0.2" - convert-source-map "^1.5.0" - graceful-fs "^4.1.6" - normalize-path "^2.1.1" - now-and-later "^2.0.0" - remove-bom-buffer "^3.0.0" - vinyl "^2.0.0" - -vinyl@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.1.tgz#23cfb8bbab5ece3803aa2c0a1eb28af7cbba1974" - integrity sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw== - dependencies: - clone "^2.1.1" - clone-buffer "^1.0.0" - clone-stats "^1.0.0" - cloneable-readable "^1.0.0" - remove-trailing-separator "^1.0.1" - replace-ext "^1.0.0" - -which-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" - integrity sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ== - -which@^1.2.14: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - integrity sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw== - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -xtend@~4.0.0, xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y18n@^3.2.1: - version "3.2.2" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.2.tgz#85c901bd6470ce71fc4bb723ad209b70f7f28696" - integrity sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ== - -yargs-parser@>=5.0.0-security.0: - version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - -yargs-parser@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.1.tgz#7ede329c1d8cdbbe209bd25cdb990e9b1ebbb394" - integrity sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA== - dependencies: - camelcase "^3.0.0" - object.assign "^4.1.0" - -yargs@^7.1.0: - version "7.1.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.2.tgz#63a0a5d42143879fdbb30370741374e0641d55db" - integrity sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA== - dependencies: - camelcase "^3.0.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" - y18n "^3.2.1" - yargs-parser "^5.0.1" diff --git a/packages/typescript-reference-doc-generator/bin/api-extractor.js b/packages/typescript-reference-doc-generator/bin/api-extractor.js deleted file mode 100644 index 809a2713db..0000000000 --- a/packages/typescript-reference-doc-generator/bin/api-extractor.js +++ /dev/null @@ -1,2 +0,0 @@ -require('../src/patch-tsdoc'); -require('../../../node_modules/.bin/api-extractor'); diff --git a/packages/typescript-reference-doc-generator/bin/generate-docs.js b/packages/typescript-reference-doc-generator/bin/generate-docs.js deleted file mode 100644 index 36a7b1ce8b..0000000000 --- a/packages/typescript-reference-doc-generator/bin/generate-docs.js +++ /dev/null @@ -1,58 +0,0 @@ -const fs = require('fs'); -const yargs = require('yargs'); -let generator; -try { - generator = require(__dirname + '/../build/index'); -} catch (e) { - console.error(e); - throw new Error( - 'Build the typescript-reference-doc-generator package to generate the documentation. ' + - 'Run `npm run build:doc-generator` in the repo root.' - ); -} - -const { ApiModelBuilder, MarkdownDocumenter } = generator; - -const { i: inputFolder, o: outputFolder } = yargs(process.argv.slice(2)) - .command('build', 'Builds the project files') - .options({ - 'input-folder': { - alias: 'i', - type: 'string', - required: true, - describe: - 'The input folder containing the *.api.json files to be processed.', - }, - 'output-folder': { - alias: 'o', - type: 'string', - required: true, - describe: - 'The output folder where the documentation will be written. ANY EXISTING CONTENTS WILL BE DELETED!', - }, - }) - .help() - .alias('help', 'h').argv; - -if (!fs.existsSync(inputFolder)) { - throw new Error('The input folder does not exist: ' + inputFolder); -} - -try { - fs.mkdirSync(outputFolder, { recursive: true }); -} catch (e) { - if (!fs.existsSync(outputFolder)) { - throw e; - } -} - -const builder = new ApiModelBuilder(); -const apiModel = builder.buildApiModel(inputFolder); - -const markdownDocumenter = new MarkdownDocumenter({ - apiModel, - documenterConfig: undefined, - outputFolder, -}); - -markdownDocumenter.generateFiles(); diff --git a/packages/typescript-reference-doc-generator/bin/merge-api-models.js b/packages/typescript-reference-doc-generator/bin/merge-api-models.js deleted file mode 100644 index daf7ed5c57..0000000000 --- a/packages/typescript-reference-doc-generator/bin/merge-api-models.js +++ /dev/null @@ -1,68 +0,0 @@ -const fs = require('fs'); - -// Iterate over the JSON files in the directory passed via the first argument -const extractedApis = process.argv - .slice(2) - .map((file) => JSON.parse(fs.readFileSync(file, 'utf8'))); - -const seen = new Set(); - -const firstEntryCloned = JSON.parse(JSON.stringify(extractedApis[0])); -const result = { - ...firstEntryCloned, - members: [], -}; - -for (const api of extractedApis) { - if (!seen.has(api.members[0].canonicalReference)) { - api.members[0].name = api.members[0].canonicalReference.split('!')[0]; - result.members.push({ - ...api.members[0], - members: [], - }); - seen.add(api.members[0].canonicalReference); - } - - for (const apiMember of api.members[0].members) { - if (!seen.has(apiMember.canonicalReference)) { - // api-documenter only supports a single entrypoint per file - result.members[0].members.push( - fixCrossPackageReferences(apiMember, result.members[0].name) - ); - seen.add(apiMember.canonicalReference); - } - } -} - -function fixCrossPackageReferences(obj, currentPackage) { - if (!obj) { - return obj; - } else if (Array.isArray(obj)) { - return obj.map((subMember) => - fixCrossPackageReferences(subMember, currentPackage) - ); - } else if ( - obj.kind === 'Reference' && - obj.canonicalReference.includes('!') - ) { - const [packageName] = obj.canonicalReference.split('!'); - // if (packageName !== currentPackage) - { - return { - ...obj, - canonicalReference: `${packageName}/${obj.canonicalReference}`, - }; - } - } else if (typeof obj === 'object') { - const updatedObj = {}; - for (const [key, value] of Object.entries(obj)) { - updatedObj[key] = fixCrossPackageReferences(value, currentPackage); - } - return updatedObj; - } - - return obj; -} - -// Write the result to stdout -console.log(JSON.stringify(result, null, 2)); diff --git a/packages/typescript-reference-doc-generator/src/markdown/test/CustomMarkdownEmitter.test.ts b/packages/typescript-reference-doc-generator/src/markdown/test/CustomMarkdownEmitter.test.ts deleted file mode 100644 index 7de497a79c..0000000000 --- a/packages/typescript-reference-doc-generator/src/markdown/test/CustomMarkdownEmitter.test.ts +++ /dev/null @@ -1,180 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. -// See LICENSE in the project root for license information. - -import { - DocSection, - TSDocConfiguration, - DocPlainText, - StringBuilder, - DocParagraph, - DocSoftBreak, - DocLinkTag, - DocHtmlStartTag, - DocHtmlEndTag, - DocBlockTag -} from '@microsoft/tsdoc'; - -import { CustomDocNodes } from '../../nodes/CustomDocNodeKind'; -import { DocHeading } from '../../nodes/DocHeading'; -import { DocEmphasisSpan } from '../../nodes/DocEmphasisSpan'; -import { DocTable } from '../../nodes/DocTable'; -import { DocTableRow } from '../../nodes/DocTableRow'; -import { DocTableCell } from '../../nodes/DocTableCell'; -import { CustomMarkdownEmitter } from '../CustomMarkdownEmitter'; -import { ApiModel, ApiItem } from '@microsoft/api-extractor-model'; - -test('render Markdown from TSDoc', () => { - const configuration: TSDocConfiguration = CustomDocNodes.configuration; - - const output: DocSection = new DocSection({ configuration }); - - output.appendNodes([ - new DocHeading({ configuration, title: 'Simple bold test' }), - new DocParagraph({ configuration }, [ - new DocPlainText({ configuration, text: 'This is a ' }), - new DocEmphasisSpan({ configuration, bold: true }, [new DocPlainText({ configuration, text: 'bold' })]), - new DocPlainText({ configuration, text: ' word.' }) - ]) - ]); - - output.appendNodes([ - new DocHeading({ configuration, title: 'All whitespace bold' }), - new DocParagraph({ configuration }, [ - new DocEmphasisSpan({ configuration, bold: true }, [new DocPlainText({ configuration, text: ' ' })]) - ]) - ]); - - output.appendNodes([ - new DocHeading({ configuration, title: 'Newline bold' }), - new DocParagraph({ configuration }, [ - new DocEmphasisSpan({ configuration, bold: true }, [ - new DocPlainText({ configuration, text: 'line 1' }), - new DocSoftBreak({ configuration }), - new DocPlainText({ configuration, text: 'line 2' }) - ]) - ]) - ]); - - output.appendNodes([ - new DocHeading({ configuration, title: 'Newline bold with spaces' }), - new DocParagraph({ configuration }, [ - new DocEmphasisSpan({ configuration, bold: true }, [ - new DocPlainText({ configuration, text: ' line 1 ' }), - new DocSoftBreak({ configuration }), - new DocPlainText({ configuration, text: ' line 2 ' }), - new DocSoftBreak({ configuration }), - new DocPlainText({ configuration, text: ' line 3 ' }) - ]) - ]) - ]); - - output.appendNodes([ - new DocHeading({ configuration, title: 'Adjacent bold regions' }), - new DocParagraph({ configuration }, [ - new DocEmphasisSpan({ configuration, bold: true }, [new DocPlainText({ configuration, text: 'one' })]), - new DocEmphasisSpan({ configuration, bold: true }, [new DocPlainText({ configuration, text: 'two' })]), - new DocEmphasisSpan({ configuration, bold: true }, [ - new DocPlainText({ configuration, text: ' three ' }) - ]), - new DocPlainText({ configuration, text: '' }), - new DocEmphasisSpan({ configuration, bold: true }, [new DocPlainText({ configuration, text: 'four' })]), - new DocPlainText({ configuration, text: 'non-bold' }), - new DocEmphasisSpan({ configuration, bold: true }, [new DocPlainText({ configuration, text: 'five' })]) - ]) - ]); - - output.appendNodes([ - new DocHeading({ configuration, title: 'Adjacent to other characters' }), - new DocParagraph({ configuration }, [ - new DocLinkTag({ - configuration, - tagName: '@link', - linkText: 'a link', - urlDestination: './index.md' - }), - new DocEmphasisSpan({ configuration, bold: true }, [new DocPlainText({ configuration, text: 'bold' })]), - new DocPlainText({ configuration, text: 'non-bold' }), - new DocPlainText({ configuration, text: 'more-non-bold' }) - ]) - ]); - - output.appendNodes([ - new DocHeading({ configuration, title: 'Unknown block tag' }), - new DocParagraph({ configuration }, [ - new DocBlockTag({ - configuration, - tagName: '@unknown' - }), - new DocEmphasisSpan({ configuration, bold: true }, [new DocPlainText({ configuration, text: 'bold' })]), - new DocPlainText({ configuration, text: 'non-bold' }), - new DocPlainText({ configuration, text: 'more-non-bold' }) - ]) - ]); - - output.appendNodes([ - new DocHeading({ configuration, title: 'Bad characters' }), - new DocParagraph({ configuration }, [ - new DocEmphasisSpan({ configuration, bold: true }, [ - new DocPlainText({ configuration, text: '*one*two*' }) - ]), - new DocEmphasisSpan({ configuration, bold: true }, [ - new DocPlainText({ configuration, text: 'three*four' }) - ]) - ]) - ]); - - output.appendNodes([ - new DocHeading({ configuration, title: 'Characters that should be escaped' }), - new DocParagraph({ configuration }, [ - new DocPlainText({ configuration, text: 'Double-encoded JSON: "{ \\"A\\": 123}"' }) - ]), - new DocParagraph({ configuration }, [ - new DocPlainText({ configuration, text: 'HTML chars: ' }) - ]), - new DocParagraph({ configuration }, [new DocPlainText({ configuration, text: 'HTML escape: "' })]), - new DocParagraph({ configuration }, [ - new DocPlainText({ configuration, text: '3 or more hyphens: - -- --- ---- ----- ------' }) - ]) - ]); - - output.appendNodes([ - new DocHeading({ configuration, title: 'HTML tag' }), - new DocParagraph({ configuration }, [ - new DocHtmlStartTag({ configuration, name: 'b' }), - new DocPlainText({ configuration, text: 'bold' }), - new DocHtmlEndTag({ configuration, name: 'b' }) - ]) - ]); - - output.appendNodes([ - new DocHeading({ configuration, title: 'Table' }), - new DocTable( - { - configuration, - headerTitles: ['Header 1', 'Header 2'] - }, - [ - new DocTableRow({ configuration }, [ - new DocTableCell({ configuration }, [ - new DocParagraph({ configuration }, [new DocPlainText({ configuration, text: 'Cell 1' })]) - ]), - new DocTableCell({ configuration }, [ - new DocParagraph({ configuration }, [new DocPlainText({ configuration, text: 'Cell 2' })]) - ]) - ]) - ] - ) - ]); - - const stringBuilder: StringBuilder = new StringBuilder(); - const apiModel: ApiModel = new ApiModel(); - const markdownEmitter: CustomMarkdownEmitter = new CustomMarkdownEmitter(apiModel); - markdownEmitter.emit(stringBuilder, output, { - contextApiItem: undefined, - onGetFilenameForApiItem: (apiItem: ApiItem) => { - return '#'; - } - }); - - expect(stringBuilder).toMatchSnapshot(); -}); diff --git a/packages/typescript-reference-doc-generator/src/markdown/test/__snapshots__/CustomMarkdownEmitter.test.ts.snap b/packages/typescript-reference-doc-generator/src/markdown/test/__snapshots__/CustomMarkdownEmitter.test.ts.snap deleted file mode 100644 index ae459a5a8d..0000000000 --- a/packages/typescript-reference-doc-generator/src/markdown/test/__snapshots__/CustomMarkdownEmitter.test.ts.snap +++ /dev/null @@ -1,62 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`render Markdown from TSDoc 1`] = ` -StringBuilder { - "_chunks": Array [ - " -## Simple bold test - -This is a bold word. - -## All whitespace bold - - - -## Newline bold - -line 1 line 2 - -## Newline bold with spaces - - line 1 line 2 line 3 - -## Adjacent bold regions - -onetwo three fournon-boldfive - -## Adjacent to other characters - -[a link](./index.md)boldnon-boldmore-non-bold - -## Unknown block tag - -boldnon-boldmore-non-bold - -## Bad characters - -\\\\*one\\\\*two\\\\*three\\\\*four - -## Characters that should be escaped - -Double-encoded JSON: \\"{ \\\\\\\\\\"A\\\\\\\\\\": 123}\\" - -HTML chars: <script>alert(\\"\\\\[You\\\\] are \\\\#1!\\");</script> - -HTML escape: &quot; - -3 or more hyphens: - -- \\\\-\\\\-\\\\- \\\\-\\\\-\\\\-- \\\\-\\\\-\\\\--- \\\\-\\\\-\\\\-\\\\-\\\\-\\\\- - -## HTML tag - -bold - -## Table - -| Header 1 | Header 2 | -| --- | --- | -| Cell 1 | Cell 2 | - -", - ], -} -`; diff --git a/packages/typescript-reference-doc-generator/src/nodes/DocTable.ts b/packages/typescript-reference-doc-generator/src/nodes/DocTable.ts deleted file mode 100644 index 095e39e3b1..0000000000 --- a/packages/typescript-reference-doc-generator/src/nodes/DocTable.ts +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. -// See LICENSE in the project root for license information. - -import { IDocNodeParameters, DocNode } from '@microsoft/tsdoc'; -import { CustomDocNodeKind } from './CustomDocNodeKind'; -import { DocTableRow } from './DocTableRow'; -import { DocTableCell } from './DocTableCell'; - -/** - * Constructor parameters for {@link DocTable}. - */ -export interface IDocTableParameters extends IDocNodeParameters { - headerCells?: ReadonlyArray; - headerTitles?: string[]; -} - -/** - * Represents table, similar to an HTML `` element. - */ -export class DocTable extends DocNode { - public readonly header: DocTableRow; - - private _rows: DocTableRow[]; - - public constructor(parameters: IDocTableParameters, rows?: ReadonlyArray) { - super(parameters); - - this.header = new DocTableRow({ configuration: this.configuration }); - this._rows = []; - - if (parameters) { - if (parameters.headerTitles) { - if (parameters.headerCells) { - throw new Error( - 'IDocTableParameters.headerCells and IDocTableParameters.headerTitles' + - ' cannot both be specified' - ); - } - for (const cellText of parameters.headerTitles) { - this.header.addPlainTextCell(cellText); - } - } else if (parameters.headerCells) { - for (const cell of parameters.headerCells) { - this.header.addCell(cell); - } - } - } - - if (rows) { - for (const row of rows) { - this.addRow(row); - } - } - } - - /** @override */ - public get kind(): string { - return CustomDocNodeKind.Table; - } - - public get rows(): ReadonlyArray { - return this._rows; - } - - public addRow(row: DocTableRow): void { - this._rows.push(row); - } - - public createAndAddRow(): DocTableRow { - const row: DocTableRow = new DocTableRow({ configuration: this.configuration }); - this.addRow(row); - return row; - } - - /** @override */ - protected onGetChildNodes(): ReadonlyArray { - return [this.header, ...this._rows]; - } -} diff --git a/packages/typescript-reference-doc-generator/src/patch-tsdoc.js b/packages/typescript-reference-doc-generator/src/patch-tsdoc.js deleted file mode 100644 index d06fe3dcf9..0000000000 --- a/packages/typescript-reference-doc-generator/src/patch-tsdoc.js +++ /dev/null @@ -1,153 +0,0 @@ -const { - DocNode, - DocNodeKind, - DocPlainText, - DocSoftBreak, - DocParagraph, - DocNodeTransforms, - TSDocEmitter, -} = require('@microsoft/tsdoc'); - -/** - * Patch tsdoc to preserve newlines in plain text nodes. - * - * Without this patch, the following markdown gets rendered as a single line: - * - * * Grocery list: - * * - apples - * * - oranges - * * - bananas - * - * @param {DocParagraph} docParagraph - a DocParagraph containing nodes to be transformed - * @return {DocParagraph} The transformed child nodes. - */ - -DocNodeTransforms.trimSpacesInParagraph = function (docParagraph) { - const transformedNodes = []; - // Whether the next nonempty node to be added needs a space before it - let pendingSpace = false; - let pendingSpaceChar = ' '; - // The DocPlainText node that we're currently accumulating - const accumulatedTextChunks = []; - const accumulatedNodes = []; - // We always trim leading whitespace for a paragraph. This flag gets set to true - // as soon as nonempty content is encountered. - let finishedSkippingLeadingSpaces = false; - - function appendPendingSpace() { - if (pendingSpace) { - accumulatedTextChunks.push(pendingSpaceChar); - pendingSpace = false; - pendingSpaceChar = ' '; - } - } - - function pushAccumulatedText() { - if (accumulatedTextChunks.length > 0) { - const lines = accumulatedTextChunks.join('').split('\n'); - for (let i = 0, max = lines.length; i < max; i++) { - transformedNodes.push( - new DocPlainText({ - configuration: docParagraph.configuration, - text: lines[i], - }) - ); - if (i !== max - 1) { - // Newlines are represented as "Soft breaks" nodes. - // Let's push one representing the original newline - // character. - // - // This is a quick&dirty workaround that pretends that: - // – DocSoftBreak arguments come from a parser (parsed: true) - // – softBreakExcerpt is an actual TokenSequence when in - // reality it's just an ad-hoc object with a toString() - transformedNodes.push( - new DocSoftBreak({ - configuration: docParagraph.configuration, - parsed: true, - softBreakExcerpt: { - toString() { - return '\n'; - }, - }, - }) - ); - } - } - accumulatedTextChunks.length = 0; - accumulatedNodes.length = 0; - } - } - - for (let _i = 0, _a = docParagraph.nodes; _i < _a.length; _i++) { - const node = _a[_i]; - switch (node.kind) { - case DocNodeKind.PlainText: { - const docPlainText = node; - const text = docPlainText.text; - const startedWithSpace = /^\s/.test(text); - const endedWithSpace = /\s$/.test(text); - const collapsedText = text.replace(/\s+/g, ' ').trim(); - if (startedWithSpace && finishedSkippingLeadingSpaces) { - pendingSpace = true; - } - if (collapsedText.length > 0) { - appendPendingSpace(); - accumulatedTextChunks.push(collapsedText); - accumulatedNodes.push(node); - finishedSkippingLeadingSpaces = true; - } - if (endedWithSpace && finishedSkippingLeadingSpaces) { - pendingSpace = true; - } - break; - } - case DocNodeKind.SoftBreak: { - if (finishedSkippingLeadingSpaces) { - pendingSpace = true; - pendingSpaceChar = node - .getChildNodes()[0] - .content.toString(); - } - accumulatedNodes.push(node); - break; - } - default: { - appendPendingSpace(); - // Push the accumulated text - pushAccumulatedText(); - transformedNodes.push(node); - finishedSkippingLeadingSpaces = true; - } - } - } - - // Push the accumulated text - pushAccumulatedText(); - const transformedParagraph = new DocParagraph({ - configuration: docParagraph.configuration, - }); - // console.log({ transformedNodes }); - transformedParagraph.appendNodes(transformedNodes); - - return transformedParagraph; -}; - -const originalRenderNode = TSDocEmitter.prototype._renderNode; - -/** - * Preserve newlines plain text nodes. - * By default, tsdoc replaces them with spaces. - * - * @param {DocNode} docNode - */ -TSDocEmitter.prototype._renderNode = function (docNode) { - if (docNode === undefined) { - return; - } - if (docNode.kind === DocNodeKind.SoftBreak) { - this._writeContent('\n'); - return; - } - return originalRenderNode.apply(this, arguments); -}; diff --git a/packages/typescript-reference-doc-generator/src/utils/TypeResolver.ts b/packages/typescript-reference-doc-generator/src/utils/TypeResolver.ts deleted file mode 100644 index 7a13eb9ad3..0000000000 --- a/packages/typescript-reference-doc-generator/src/utils/TypeResolver.ts +++ /dev/null @@ -1,184 +0,0 @@ -import { ApiItem, ApiModel, ExcerptToken, ExcerptTokenKind, IResolveDeclarationReferenceResult } from '@microsoft/api-extractor-model'; - -export interface DocumentedType { - name: string; - docUrl: string; -} - -export default class TypeResolver { - private readonly _apiModel: ApiModel; - private readonly _getLinkForApiItem: (item: ApiItem) => string; - - constructor(apiModel: ApiModel, getLinkForApiItem: (item: ApiItem) => string) { - this._apiModel = apiModel; - this._getLinkForApiItem = getLinkForApiItem; - } - - public resolveTypeDocumentation(type: ExcerptToken | string): DocumentedType | null { - if (type instanceof ExcerptToken) { - const canonicalUrl = this.resolveCanonicalReference(type); - if (canonicalUrl) { - return { name: type.text, docUrl: canonicalUrl }; - } - - return this.resolveNativeToken(type.text); - } - - return this.resolveNativeToken(type); - } - - public resolveCanonicalReference(token: ExcerptToken) { - if (token.kind === ExcerptTokenKind.Reference && token.canonicalReference) { - const apiItemResult: IResolveDeclarationReferenceResult = this._apiModel.resolveDeclarationReference( - token.canonicalReference, - undefined - ); - if (apiItemResult.resolvedApiItem) { - return this._getLinkForApiItem(apiItemResult.resolvedApiItem); - } - } - } - - public resolveNativeToken(token: string): DocumentedType | null { - // Try finding an exact match first. If that fails, try a - // case-insensitive match. - const toComparables = [(token: string) => token, (token: string) => token.toLowerCase()]; - - const tokenText = token.split(/[^a-zA-Z0-9\_]/g)[0]; - for (const toComparable of toComparables) { - const comparableTokenText = toComparable(tokenText); - for (const [nativeToken, docUrl] of Object.entries(NativeTypes)) { - if (toComparable(nativeToken) === comparableTokenText) { - return { name: nativeToken, docUrl }; - } - } - } - - return null; - } -} - -/** - * List of types and their documentation pages. - * This object can be easily updated by going to any documentation page - * that lists the types, selecting the
` element. + */ +export class DocTable extends DocNode { + public readonly header: DocTableRow; + + private _rows: DocTableRow[]; + + public constructor( + parameters: IDocTableParameters, + rows?: ReadonlyArray + ) { + super(parameters); + + this.header = new DocTableRow({ configuration: this.configuration }); + this._rows = []; + + if (parameters) { + if (parameters.headerTitles) { + if (parameters.headerCells) { + throw new Error( + 'IDocTableParameters.headerCells and IDocTableParameters.headerTitles' + + ' cannot both be specified' + ); + } + for (const cellText of parameters.headerTitles) { + this.header.addPlainTextCell(cellText); + } + } else if (parameters.headerCells) { + for (const cell of parameters.headerCells) { + this.header.addCell(cell); + } + } + } + + if (rows) { + for (const row of rows) { + this.addRow(row); + } + } + } + + /** @override */ + public get kind(): string { + return CustomDocNodeKind.Table; + } + + public get rows(): ReadonlyArray { + return this._rows; + } + + public addRow(row: DocTableRow): void { + this._rows.push(row); + } + + public createAndAddRow(): DocTableRow { + const row: DocTableRow = new DocTableRow({ + configuration: this.configuration, + }); + this.addRow(row); + return row; + } + + /** @override */ + protected onGetChildNodes(): ReadonlyArray { + return [this.header, ...this._rows]; + } +} diff --git a/packages/typescript-reference-doc-generator/src/nodes/DocTableCell.ts b/src/typescript-reference-doc-generator/nodes/DocTableCell.ts similarity index 100% rename from packages/typescript-reference-doc-generator/src/nodes/DocTableCell.ts rename to src/typescript-reference-doc-generator/nodes/DocTableCell.ts diff --git a/packages/typescript-reference-doc-generator/src/nodes/DocTableRow.ts b/src/typescript-reference-doc-generator/nodes/DocTableRow.ts similarity index 100% rename from packages/typescript-reference-doc-generator/src/nodes/DocTableRow.ts rename to src/typescript-reference-doc-generator/nodes/DocTableRow.ts diff --git a/packages/typescript-reference-doc-generator/package.json b/src/typescript-reference-doc-generator/package.json similarity index 100% rename from packages/typescript-reference-doc-generator/package.json rename to src/typescript-reference-doc-generator/package.json diff --git a/src/typescript-reference-doc-generator/patch-tsdoc.js b/src/typescript-reference-doc-generator/patch-tsdoc.js new file mode 100644 index 0000000000..00e8e887c1 --- /dev/null +++ b/src/typescript-reference-doc-generator/patch-tsdoc.js @@ -0,0 +1,157 @@ +if (!global.tsDocPatched) { + global.tsDocPatched = true; + + const { + DocNode, + DocNodeKind, + DocPlainText, + DocSoftBreak, + DocParagraph, + DocNodeTransforms, + TSDocEmitter, + } = require('@microsoft/tsdoc'); + + /** + * Patch tsdoc to preserve newlines in plain text nodes. + * + * Without this patch, the following markdown gets rendered as a single line: + * + * * Grocery list: + * * - apples + * * - oranges + * * - bananas + * + * @param {DocParagraph} docParagraph - a DocParagraph containing nodes to be transformed + * @return {DocParagraph} The transformed child nodes. + */ + + DocNodeTransforms.trimSpacesInParagraph = function (docParagraph) { + const transformedNodes = []; + // Whether the next nonempty node to be added needs a space before it + let pendingSpace = false; + let pendingSpaceChar = ' '; + // The DocPlainText node that we're currently accumulating + const accumulatedTextChunks = []; + const accumulatedNodes = []; + // We always trim leading whitespace for a paragraph. This flag gets set to true + // as soon as nonempty content is encountered. + let finishedSkippingLeadingSpaces = false; + + function appendPendingSpace() { + if (pendingSpace) { + accumulatedTextChunks.push(pendingSpaceChar); + pendingSpace = false; + pendingSpaceChar = ' '; + } + } + + function pushAccumulatedText() { + if (accumulatedTextChunks.length > 0) { + const lines = accumulatedTextChunks.join('').split('\n'); + for (let i = 0, max = lines.length; i < max; i++) { + transformedNodes.push( + new DocPlainText({ + configuration: docParagraph.configuration, + text: lines[i], + }) + ); + if (i !== max - 1) { + // Newlines are represented as "Soft breaks" nodes. + // Let's push one representing the original newline + // character. + // + // This is a quick&dirty workaround that pretends that: + // – DocSoftBreak arguments come from a parser (parsed: true) + // – softBreakExcerpt is an actual TokenSequence when in + // reality it's just an ad-hoc object with a toString() + transformedNodes.push( + new DocSoftBreak({ + configuration: docParagraph.configuration, + parsed: true, + softBreakExcerpt: { + toString() { + return '\n'; + }, + }, + }) + ); + } + } + accumulatedTextChunks.length = 0; + accumulatedNodes.length = 0; + } + } + + for (let _i = 0, _a = docParagraph.nodes; _i < _a.length; _i++) { + const node = _a[_i]; + switch (node.kind) { + case DocNodeKind.PlainText: { + const docPlainText = node; + const text = docPlainText.text; + const startedWithSpace = /^\s/.test(text); + const endedWithSpace = /\s$/.test(text); + const collapsedText = text.replace(/\s+/g, ' ').trim(); + if (startedWithSpace && finishedSkippingLeadingSpaces) { + pendingSpace = true; + } + if (collapsedText.length > 0) { + appendPendingSpace(); + accumulatedTextChunks.push(collapsedText); + accumulatedNodes.push(node); + finishedSkippingLeadingSpaces = true; + } + if (endedWithSpace && finishedSkippingLeadingSpaces) { + pendingSpace = true; + } + break; + } + case DocNodeKind.SoftBreak: { + if (finishedSkippingLeadingSpaces) { + pendingSpace = true; + pendingSpaceChar = node + .getChildNodes()[0] + .content.toString(); + } + accumulatedNodes.push(node); + break; + } + default: { + appendPendingSpace(); + // Push the accumulated text + pushAccumulatedText(); + transformedNodes.push(node); + finishedSkippingLeadingSpaces = true; + } + } + } + + // Push the accumulated text + pushAccumulatedText(); + const transformedParagraph = new DocParagraph({ + configuration: docParagraph.configuration, + }); + // console.log({ transformedNodes }); + transformedParagraph.appendNodes(transformedNodes); + + return transformedParagraph; + }; + + const originalRenderNode = TSDocEmitter.prototype._renderNode; + + /** + * Preserve newlines plain text nodes. + * By default, tsdoc replaces them with spaces. + * + * @param {DocNode} docNode + */ + TSDocEmitter.prototype._renderNode = function (docNode) { + if (docNode === undefined) { + return; + } + if (docNode.kind === DocNodeKind.SoftBreak) { + this._writeContent('\n'); + return; + } + return originalRenderNode.apply(this, arguments); + }; +} diff --git a/packages/typescript-reference-doc-generator/src/utils/DocContentBlockBuilder.ts b/src/typescript-reference-doc-generator/utils/DocContentBlockBuilder.ts similarity index 84% rename from packages/typescript-reference-doc-generator/src/utils/DocContentBlockBuilder.ts rename to src/typescript-reference-doc-generator/utils/DocContentBlockBuilder.ts index 362be53287..89b205e95c 100644 --- a/packages/typescript-reference-doc-generator/src/utils/DocContentBlockBuilder.ts +++ b/src/typescript-reference-doc-generator/utils/DocContentBlockBuilder.ts @@ -2,11 +2,14 @@ // See LICENSE in the project root for license information. import { DocNode, TSDocConfiguration } from '@microsoft/tsdoc'; -import { ContentBlockType, DocContentBlock, IContentBlockParameters } from '../nodes/DocContentBlock'; -import { DocForceSoftBreak } from '../nodes/DocForceSoftBreak'; +import { ContentBlockType, DocContentBlock } from '../nodes/DocContentBlock'; type BuilderArgItem = DocNode | unknown; -export type BuilderArg = readonly BuilderArgItem[] | BuilderArgItem[] | DocContentBlockBuilder | unknown; +export type BuilderArg = + | readonly BuilderArgItem[] + | BuilderArgItem[] + | DocContentBlockBuilder + | unknown; /** * Represents List, similar to an HTML `` element. @@ -20,7 +23,10 @@ export class DocContentBlockBuilder { return this._nodes; } - public static create(configuration: TSDocConfiguration, nodes?: BuilderArg) { + public static create( + configuration: TSDocConfiguration, + nodes?: BuilderArg + ) { return new DocContentBlockBuilder(configuration, nodes); } @@ -64,7 +70,9 @@ export class DocContentBlockBuilder { return this; } - public toContentBlockMaybe(type?: ContentBlockType): DocContentBlock | null { + public toContentBlockMaybe( + type?: ContentBlockType + ): DocContentBlock | null { if (this.nodes.length === 0) { return null; } @@ -75,18 +83,20 @@ export class DocContentBlockBuilder { return this.toContentBlock().getChildNodes(); } - public toContentBlock(type: ContentBlockType = this.preferredBlockType): DocContentBlock { + public toContentBlock( + type: ContentBlockType = this.preferredBlockType + ): DocContentBlock { return new DocContentBlock( { configuration: this.configuration, - type + type, }, this.nodes ); } public join(separator: DocNode) { - const newNodes = []; + const newNodes: DocNode[] = []; for (let i = 0; i < this.nodes.length; i++) { if (i > 0) { newNodes.push(separator); diff --git a/packages/typescript-reference-doc-generator/src/utils/IndentedWriter.ts b/src/typescript-reference-doc-generator/utils/IndentedWriter.ts similarity index 100% rename from packages/typescript-reference-doc-generator/src/utils/IndentedWriter.ts rename to src/typescript-reference-doc-generator/utils/IndentedWriter.ts diff --git a/src/typescript-reference-doc-generator/utils/TypeResolver.ts b/src/typescript-reference-doc-generator/utils/TypeResolver.ts new file mode 100644 index 0000000000..ab10b7efe1 --- /dev/null +++ b/src/typescript-reference-doc-generator/utils/TypeResolver.ts @@ -0,0 +1,265 @@ +import { + ApiItem, + ApiModel, + ExcerptToken, + ExcerptTokenKind, + IResolveDeclarationReferenceResult, +} from '@microsoft/api-extractor-model'; + +export interface DocumentedType { + name: string; + docUrl: string; +} + +export default class TypeResolver { + private readonly _apiModel: ApiModel; + private readonly _getLinkForApiItem: (item: ApiItem) => string; + + constructor( + apiModel: ApiModel, + getLinkForApiItem: (item: ApiItem) => string + ) { + this._apiModel = apiModel; + this._getLinkForApiItem = getLinkForApiItem; + } + + public resolveTypeDocumentation( + type: ExcerptToken | string + ): DocumentedType | null { + if (type instanceof ExcerptToken) { + const canonicalUrl = this.resolveCanonicalReference(type); + if (canonicalUrl) { + return { name: type.text, docUrl: canonicalUrl }; + } + + return this.resolveNativeToken(type.text); + } + + return this.resolveNativeToken(type); + } + + public resolveCanonicalReference(token: ExcerptToken) { + if ( + token.kind === ExcerptTokenKind.Reference && + token.canonicalReference + ) { + const apiItemResult: IResolveDeclarationReferenceResult = + this._apiModel.resolveDeclarationReference( + token.canonicalReference, + undefined + ); + if (apiItemResult.resolvedApiItem) { + return this._getLinkForApiItem(apiItemResult.resolvedApiItem); + } + } + return undefined; + } + + public resolveNativeToken(token: string): DocumentedType | null { + // Try finding an exact match first. If that fails, try a + // case-insensitive match. + const toComparables = [ + (token: string) => token, + (token: string) => token.toLowerCase(), + ]; + + const tokenText = token.split(/[^a-zA-Z0-9\_]/g)[0]; + for (const toComparable of toComparables) { + const comparableTokenText = toComparable(tokenText); + for (const [nativeToken, docUrl] of Object.entries(NativeTypes)) { + if (toComparable(nativeToken) === comparableTokenText) { + return { name: nativeToken, docUrl }; + } + } + } + + return null; + } +} + +/** + * List of types and their documentation pages. + * This object can be easily updated by going to any documentation page + * that lists the types, selecting the
    element where the types are listed, + * and running the following code in the console: + * + * ```js + * copy( + * JSON.stringify( + * Object.fromEntries( + * Array.from($0.querySelectorAll('a')) + * .map(a => ([a.textContent.split('<')[0], a.href]) + * ) + * ) + * ) + * ) + * ``` + */ +const NativeTypes: Record = { + // Basic Global MDN Types: + AggregateError: + 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/AggregateError', + Array: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array', + ArrayBuffer: + 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer', + AsyncFunction: + 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/AsyncFunction', + AsyncGenerator: + 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/AsyncGenerator', + AsyncGeneratorFunction: + 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/AsyncGeneratorFunction', + Atomics: + 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Atomics', + BigInt: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt', + BigInt64Array: + 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt64Array', + BigUint64Array: + 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigUint64Array', + Boolean: + 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean', + DataView: + 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView', + Date: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date', + Error: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error', + EvalError: + 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/EvalError', + FinalizationRegistry: + 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/FinalizationRegistry', + Float32Array: + 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array', + Float64Array: + 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float64Array', + Function: + 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function', + Generator: + 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator', + GeneratorFunction: + 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/GeneratorFunction', + globalThis: + 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/globalThis', + Infinity: + 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Infinity', + Int16Array: + 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int16Array', + Int32Array: + 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int32Array', + Int8Array: + 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int8Array', + InternalError: + 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/InternalError', + Intl: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl', + JSON: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON', + Map: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map', + Math: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math', + NaN: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN', + Number: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number', + null: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/null', + Object: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object', + Promise: + 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise', + Proxy: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy', + RangeError: + 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RangeError', + ReferenceError: + 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ReferenceError', + Reflect: + 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect', + RegExp: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp', + Set: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set', + SharedArrayBuffer: + 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer', + String: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String', + Symbol: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol', + SyntaxError: + 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SyntaxError', + TypedArray: + 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray', + TypeError: + 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypeError', + Uint16Array: + 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint16Array', + Uint32Array: + 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint32Array', + Uint8Array: + 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array', + Uint8ClampedArray: + 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8ClampedArray', + undefined: + 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined', + URIError: + 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/URIError', + WeakMap: + 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap', + WeakRef: + 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakRef', + WeakSet: + 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakSet', + + // More advanced MDN types: + EventTarget: 'https://developer.mozilla.org/en-US/docs/Web/API/EventTarget', + BroadcastChannel: + 'https://developer.mozilla.org/en-US/docs/Web/API/BroadcastChannel', + Headers: 'https://developer.mozilla.org/en-US/docs/Web/API/Headers', + File: 'https://developer.mozilla.org/en-US/docs/Web/API/File', + Request: 'https://developer.mozilla.org/en-US/docs/Web/API/Request', + Response: 'https://developer.mozilla.org/en-US/docs/Web/API/Response', + URL: 'https://developer.mozilla.org/en-US/docs/Web/API/URL', + + // TypeScript – everyday types + // https://www.typescriptlang.org/docs/handbook/2/everyday-types.html + any: 'https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#any', + unknown: + 'https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#any', + void: 'https://www.typescriptlang.org/docs/handbook/2/functions.html#void', + never: 'https://www.typescriptlang.org/docs/handbook/2/functions.html#never', + object: 'https://www.typescriptlang.org/docs/handbook/2/functions.html#object', + string: 'https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#the-primitives-string-number-and-boolean', + number: 'https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#the-primitives-string-number-and-boolean', + boolean: + 'https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#the-primitives-string-number-and-boolean', + array: 'https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#arrays', + + // TypeScript – utility types + // https://www.typescriptlang.org/docs/handbook/utility-types.html + Awaited: + 'https://www.typescriptlang.org/docs/handbook/utility-types.html#awaitedtype', + Partial: + 'https://www.typescriptlang.org/docs/handbook/utility-types.html#partialtype', + Required: + 'https://www.typescriptlang.org/docs/handbook/utility-types.html#requiredtype', + Readonly: + 'https://www.typescriptlang.org/docs/handbook/utility-types.html#readonlytype', + ReadOnlyArray: + 'https://www.typescriptlang.org/docs/handbook/2/objects.html#the-readonlyarray-type', + Record: 'https://www.typescriptlang.org/docs/handbook/utility-types.html#recordkeys-type', + Pick: 'https://www.typescriptlang.org/docs/handbook/utility-types.html#picktype-keys', + Omit: 'https://www.typescriptlang.org/docs/handbook/utility-types.html#omittype-keys', + Exclude: + 'https://www.typescriptlang.org/docs/handbook/utility-types.html#excludeuniontype-excludedmembers', + Extract: + 'https://www.typescriptlang.org/docs/handbook/utility-types.html#extracttype-union', + NonNullable: + 'https://www.typescriptlang.org/docs/handbook/utility-types.html#nonnullabletype', + Parameters: + 'https://www.typescriptlang.org/docs/handbook/utility-types.html#parameterstype', + ConstructorParameters: + 'https://www.typescriptlang.org/docs/handbook/utility-types.html#constructorparameterstype', + ReturnType: + 'https://www.typescriptlang.org/docs/handbook/utility-types.html#returntypetype', + InstanceType: + 'https://www.typescriptlang.org/docs/handbook/utility-types.html#instancetypetype', + ThisParameterType: + 'https://www.typescriptlang.org/docs/handbook/utility-types.html#thisparametertypetype', + OmitThisParameter: + 'https://www.typescriptlang.org/docs/handbook/utility-types.html#omitthisparametertype', + ThisType: + 'https://www.typescriptlang.org/docs/handbook/utility-types.html#thistypetype', + Uppercase: + 'https://www.typescriptlang.org/docs/handbook/utility-types.html#uppercasestringtype', + Lowercase: + 'https://www.typescriptlang.org/docs/handbook/utility-types.html#lowercasestringtype', + Capitalize: + 'https://www.typescriptlang.org/docs/handbook/utility-types.html#capitalizestringtype', + Uncapitalize: + 'https://www.typescriptlang.org/docs/handbook/utility-types.html#uncapitalizestringtype', +}; diff --git a/packages/typescript-reference-doc-generator/src/utils/Utilities.ts b/src/typescript-reference-doc-generator/utils/Utilities.ts similarity index 89% rename from packages/typescript-reference-doc-generator/src/utils/Utilities.ts rename to src/typescript-reference-doc-generator/utils/Utilities.ts index c821787b01..db4f56fcda 100644 --- a/packages/typescript-reference-doc-generator/src/utils/Utilities.ts +++ b/src/typescript-reference-doc-generator/utils/Utilities.ts @@ -6,7 +6,7 @@ import { ApiItem, ApiDeclaredItem, ApiClass, - ApiItemKind, + ApiTypeParameterListMixin, } from '@microsoft/api-extractor-model'; import { DocLinkTag, DocNode, DocPlainText } from '@microsoft/tsdoc'; import ts from 'typescript'; @@ -17,7 +17,7 @@ export class Utilities { /[^a-z0-9_\-\.]/gi; public static getUnscopedPackageName(packageName: string) { - return packageName.split('/').pop(); + return packageName.split('/').pop() || ''; } /** @@ -56,6 +56,18 @@ export class Utilities { return signature; } + public static getTypeParameters(apiItem: ApiItem): string[] { + const typeParams: string[] = []; + do { + if (ApiTypeParameterListMixin.isBaseClassOf(apiItem)) { + const names = apiItem.typeParameters.map((x) => x.name); + typeParams.push(...names); + } + apiItem = apiItem.parent!; + } while (apiItem); + return typeParams; + } + public static forEachChildRecursive( node: DocNode, cb: (node: DocNode) => void @@ -215,6 +227,16 @@ export class Utilities { classifyRecursive(sourceFile, 0, sourceFile); return allTokens; } + + public static forEachMemberRecursive(apiItem: ApiItem, callback: (item: ApiItem) => void) { + if ('members' in apiItem) { + for(const member of apiItem.members) { + callback(member); + this.forEachMemberRecursive(member, callback); + } + } + } + } export interface ClassifiedToken { diff --git a/src/typescript-reference-doc-generator/utils/mergeApiModels.ts b/src/typescript-reference-doc-generator/utils/mergeApiModels.ts new file mode 100644 index 0000000000..a10e55e809 --- /dev/null +++ b/src/typescript-reference-doc-generator/utils/mergeApiModels.ts @@ -0,0 +1,177 @@ +import type { ApiItem, ApiModel } from "@microsoft/api-extractor-model"; + +type ReferencesToPackages = Map; + +/** + * Rewrites multiple API models as one per package. + * + * @param apiModels Ungrouped raw API models + * @returns Merged API models + */ +export function mergeApiModelsGroups(apiModels: ApiModel[]) { + // 1. Map each reference to the package it resides in + const referencesToPackages = mapReferencesToPackages(apiModels); + + // 2. Group all API models by package + const apiModelsGroups = groupApiModels(apiModels); + + // 3. Merge all models in each group + const mergedApiModels = {}; + const seenApiMembers = new Set(); + for(const [packageName, apiModels] of Object.entries(apiModelsGroups)) { + mergedApiModels[packageName] = mergeApiModels(apiModels, seenApiMembers, referencesToPackages); + } + return mergedApiModels; +} + +export function groupApiModels(apiModels): Record { + const groups = {}; + for (const model of apiModels) { + let groupName; + try { + groupName = getPackageNameFromModel(model); + } catch (e) { + continue; + } + if (!groups[groupName]) { + groups[groupName] = [] + } + groups[groupName].push(model); + } + return groups; +} + +export function mergeApiModels(apiModels: ApiModel[], seenApiMembers: Set, referencesToPackages: ReferencesToPackages) { + const clonedStructure = JSON.parse(JSON.stringify(apiModels[0])); + const packageName = getPackageNameFromModel(apiModels[0]); + const merged = { + ...clonedStructure, + name: packageName, + members: [ + // The entrypoint: + { + ...apiModels[0].members[0], + canonicalReference: forgeCanonicalReference(apiModels[0].members[0], referencesToPackages), + name: packageName, + members: [], + } + ] + }; + + // Now, merge the API model members to the singular "merged" model, + // but also remap it to use the correct source package + for (const model of apiModels) { + // Merge each member of the entrypoint: + for (const apiMember of model.members[0].members) { + const comparableReference = toComparableReference(apiMember.canonicalReference.toString()); + if (!seenApiMembers.has(comparableReference)) { + seenApiMembers.add(comparableReference); + // Let's merge everything into a single entrypoint for now as + // api-documenter only supports a single entrypoint per API model. + merged.members[0].members.push( + fixAllCanonicalReferences(apiMember, referencesToPackages, packageName) + ); + } + } + } + return merged; +} + +export function mapReferencesToPackages(apiModels): ReferencesToPackages { + // First, let's take note of each unique reference alongside the + // package name it needs to be attributed to. + const referencePackages = new Map(); + + for (const model of apiModels) { + // Figure out the current package name + let packageName; + try { + packageName = getPackageNameFromModel(model); + } catch (e) { + continue; + } + + const stack = [model]; + while (stack.length) { + const member = stack.pop(); + if (member?.members?.length) { + stack.push(...member.members); + } + if (member.kind.toLowerCase() === 'reference') { + continue; + } + if (member.canonicalReference) { + const comparableReference = toComparableReference(member.canonicalReference); + if (!referencePackages.has(comparableReference)) { + referencePackages.set( + comparableReference, + packageName + ); + } + } + } + } + return referencePackages; +} + +function getPackageNameFromModel(apiModel): string { + for (const apiMember of apiModel.members[0].members) { + if ('fileUrlPath' in apiMember && apiMember.fileUrlPath) { + return (apiMember.fileUrlPath as string).split('/')[1]; + } + } + throw new Error('Could not find package name from API model'); +} + +function fixAllCanonicalReferences(obj, referencesToPackages, topLevelPackageName) { + if (!obj) { + return obj; + } else if (Array.isArray(obj)) { + return obj.map((subMember) => + fixAllCanonicalReferences(subMember, referencesToPackages, topLevelPackageName) + ); + } else if (typeof obj === 'object') { + let updatedObj: any = {}; + for (const [key, value] of Object.entries(obj)) { + updatedObj[key] = fixAllCanonicalReferences(value, referencesToPackages, topLevelPackageName); + } + + if ( updatedObj.canonicalReference?.includes('!') ) { + updatedObj.canonicalReference = forgeCanonicalReference(updatedObj, referencesToPackages); + } + return updatedObj; + } + + return obj; +} + +function forgeCanonicalReference(apiItem: ApiItem, referencesToPackages: Map): any { + let updatedReference = apiItem.canonicalReference.toString(); + const comparableInitialRef = toComparableReference(apiItem.canonicalReference.toString()); + const parts = updatedReference.split('!'); + if (parts.length > 1 && parts[0]) { + if (apiItem.kind.toString().toLowerCase() === 'reference') { + if (referencesToPackages.has(comparableInitialRef)) { + // Package references must point to `package-name/package-name!identifier` and NOT just `package-name!identifier` + updatedReference = [ + referencesToPackages.get(comparableInitialRef) + '/' + referencesToPackages.get(comparableInitialRef), + // '', + ...parts.slice(1,) + ].join('!'); + } else { + // References to globals can point to just `!identifier` + updatedReference = ['', ...parts.slice(1,)].join('!'); + } + } else { + // Declarations must be in `package-name!identifier` format and NOT in the `package-name/package-name!identifier` format + updatedReference = [referencesToPackages.get(comparableInitialRef), ...parts.slice(1,)].join('!'); + } + // Don't use the tilda character – it introduces two possible ways to reference the same thing + updatedReference = updatedReference.replace(/!~/g, '!'); + } + return updatedReference; +} + +function toComparableReference(reference: string) { + return reference.replace(/!~/g, '!'); +} \ No newline at end of file diff --git a/packages/wordpress-wasm/src/.htaccess b/src/wordpress-wasm/.htaccess similarity index 100% rename from packages/wordpress-wasm/src/.htaccess rename to src/wordpress-wasm/.htaccess diff --git a/packages/wordpress-wasm/README.md b/src/wordpress-wasm/README.md similarity index 100% rename from packages/wordpress-wasm/README.md rename to src/wordpress-wasm/README.md diff --git a/packages/wordpress-wasm/src/config.ts b/src/wordpress-wasm/config.ts similarity index 91% rename from packages/wordpress-wasm/src/config.ts rename to src/wordpress-wasm/config.ts index 16fad0c3bc..2d71ed9356 100644 --- a/packages/wordpress-wasm/src/config.ts +++ b/src/wordpress-wasm/config.ts @@ -14,7 +14,7 @@ export const wasmWorkerBackend = WASM_WORKER_BACKEND; declare let WP_JS_HASH: any; export const wpJsCacheBuster = WP_JS_HASH; -export { phpJsHash as phpJsCacheBuster } from 'php-wasm'; +export { phpJsHash as phpJsCacheBuster } from '../php-wasm'; declare let CACHE_BUSTER: any; export const cacheBuster = CACHE_BUSTER; diff --git a/packages/wordpress-wasm/src/example-app.ts b/src/wordpress-wasm/example-app.ts similarity index 98% rename from packages/wordpress-wasm/src/example-app.ts rename to src/wordpress-wasm/example-app.ts index 51f22cde1f..f6484e5c6a 100644 --- a/packages/wordpress-wasm/src/example-app.ts +++ b/src/wordpress-wasm/example-app.ts @@ -1,6 +1,6 @@ import { bootWordPress } from './index'; import { login, installPlugin } from './macros'; -import { cloneResponseMonitorProgress, responseTo } from 'php-wasm-browser'; +import { cloneResponseMonitorProgress, responseTo } from '../php-wasm-browser'; const query = new URL(document.location.href).searchParams; diff --git a/packages/wordpress-wasm/src/index.ts b/src/wordpress-wasm/index.ts similarity index 97% rename from packages/wordpress-wasm/src/index.ts rename to src/wordpress-wasm/index.ts index 400ce214a8..77e758b5ef 100644 --- a/packages/wordpress-wasm/src/index.ts +++ b/src/wordpress-wasm/index.ts @@ -3,7 +3,7 @@ import { spawnPHPWorkerThread, SpawnedWorkerThread, DownloadProgressCallback, -} from 'php-wasm-browser'; +} from '../php-wasm-browser'; import { wasmWorkerUrl, wasmWorkerBackend, serviceWorkerUrl } from './config'; export async function bootWordPress( diff --git a/packages/wordpress-wasm/src/macros.ts b/src/wordpress-wasm/macros.ts similarity index 100% rename from packages/wordpress-wasm/src/macros.ts rename to src/wordpress-wasm/macros.ts diff --git a/packages/wordpress-wasm/src/plugin-proxy.php b/src/wordpress-wasm/plugin-proxy.php similarity index 100% rename from packages/wordpress-wasm/src/plugin-proxy.php rename to src/wordpress-wasm/plugin-proxy.php diff --git a/packages/wordpress-wasm/src/requests_transport_fetch.php b/src/wordpress-wasm/requests_transport_fetch.php similarity index 100% rename from packages/wordpress-wasm/src/requests_transport_fetch.php rename to src/wordpress-wasm/requests_transport_fetch.php diff --git a/packages/wordpress-wasm/src/service-worker.ts b/src/wordpress-wasm/service-worker.ts similarity index 70% rename from packages/wordpress-wasm/src/service-worker.ts rename to src/wordpress-wasm/service-worker.ts index 4431f8e206..b785aa3891 100644 --- a/packages/wordpress-wasm/src/service-worker.ts +++ b/src/wordpress-wasm/service-worker.ts @@ -1,7 +1,11 @@ +/// +/// +/// + import { initializeServiceWorker, seemsLikeAPHPServerPath, -} from 'php-wasm-browser/service-worker'; +} from '../php-wasm-browser/service-worker/worker-library'; import { isUploadedFilePath } from './utils'; initializeServiceWorker({ diff --git a/packages/wordpress-wasm/src/utils.ts b/src/wordpress-wasm/utils.ts similarity index 100% rename from packages/wordpress-wasm/src/utils.ts rename to src/wordpress-wasm/utils.ts diff --git a/packages/wordpress-wasm/src/wordpress.html b/src/wordpress-wasm/wordpress.html similarity index 100% rename from packages/wordpress-wasm/src/wordpress.html rename to src/wordpress-wasm/wordpress.html diff --git a/packages/wordpress-wasm/wordpress/Dockerfile b/src/wordpress-wasm/wordpress/Dockerfile similarity index 100% rename from packages/wordpress-wasm/wordpress/Dockerfile rename to src/wordpress-wasm/wordpress/Dockerfile diff --git a/packages/wordpress-wasm/wordpress/build-assets/esm-prefix.js b/src/wordpress-wasm/wordpress/build-assets/esm-prefix.js similarity index 100% rename from packages/wordpress-wasm/wordpress/build-assets/esm-prefix.js rename to src/wordpress-wasm/wordpress/build-assets/esm-prefix.js diff --git a/packages/wordpress-wasm/wordpress/build-assets/esm-suffix.js b/src/wordpress-wasm/wordpress/build-assets/esm-suffix.js similarity index 100% rename from packages/wordpress-wasm/wordpress/build-assets/esm-suffix.js rename to src/wordpress-wasm/wordpress/build-assets/esm-suffix.js diff --git a/src/wordpress-wasm/wordpress/gulpfile.js b/src/wordpress-wasm/wordpress/gulpfile.js new file mode 100644 index 0000000000..e695be938e --- /dev/null +++ b/src/wordpress-wasm/wordpress/gulpfile.js @@ -0,0 +1,56 @@ +const gulp = require('gulp'); +const path = require('path'); +const { spawn } = require('child_process'); + +const sourceDir = __dirname; +const buildDir = path.join(__dirname, '..', '..', '..', 'build-wp'); + +async function buildWordPress() { + // Build WordPress + await asyncSpawn( + 'docker', + [ + 'build', + '.', + '--tag=wordpress-wasm', + '--progress=plain', + ...(process.env.WP_ZIP_URL + ? ['--build-arg', `WP_ZIP_URL=${wpZipUrl}`] + : []), + ], + { cwd: sourceDir, stdio: 'inherit' } + ); + + // Extract the built WordPress files + await asyncSpawn( + 'docker', + [ + 'run', + '--name', + 'wordpress-wasm-tmp', + '--rm', + '-v', + `${buildDir}:/output`, + 'wordpress-wasm', + // Use sh -c because wildcards are a shell feature and + // they don't work without running cp through shell. + 'sh', + '-c', + `cp -r /root/output/* /output/`, + ], + { cwd: sourceDir, stdio: 'inherit' } + ); +} + +exports.build = buildWordPress; + +function asyncSpawn(...args) { + return new Promise((resolve, reject) => { + const child = spawn(...args); + + child.on('close', (code) => { + if (code === 0) resolve(code); + else reject(new Error(`Process exited with code ${code}`)); + }); + }); +} diff --git a/packages/wordpress-wasm/src/worker-thread.ts b/src/wordpress-wasm/worker-thread.ts similarity index 96% rename from packages/wordpress-wasm/src/worker-thread.ts rename to src/wordpress-wasm/worker-thread.ts index 93dfc37d84..4de399b13f 100644 --- a/packages/wordpress-wasm/src/worker-thread.ts +++ b/src/wordpress-wasm/worker-thread.ts @@ -5,12 +5,12 @@ declare const self: WorkerGlobalScope; declare const require: any; -import { PHPServer, PHPBrowser } from 'php-wasm'; +import { PHPServer, PHPBrowser } from '../php-wasm'; import { loadPHPWithProgress, initializeWorkerThread, setURLScope, -} from 'php-wasm-browser/worker-thread'; +} from '../php-wasm-browser/worker-thread/worker-library'; import { phpJsCacheBuster, wpJsCacheBuster, wordPressSiteUrl } from './config'; import { isUploadedFilePath } from './utils'; diff --git a/tsconfig.base.json b/tsconfig.base.json index 62bb60a444..9f0fedeacb 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -1,7 +1,7 @@ { "compilerOptions": { "allowJs": true, - "checkJs": true, + "checkJs": false, "allowSyntheticDefaultImports": true, "jsx": "preserve", "target": "esnext", @@ -18,7 +18,7 @@ "noImplicitAny": false, "noUnusedLocals": true, - "noUnusedParameters": true, + "noUnusedParameters": false, "noImplicitReturns": true, "noFallthroughCasesInSwitch": true, "importsNotUsedAsValues": "error", @@ -28,8 +28,9 @@ "esModuleInterop": false, "resolveJsonModule": true, - "typeRoots": [ "./typings" ], - "types": [] + "rootDir": "src", + "declarationDir": "build-types", + "outDir": "build-types", }, - "exclude": [] + "references": [], } diff --git a/tsconfig.json b/tsconfig.json index 5fca00386b..26de92fd78 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,13 +1,15 @@ { - "compilerOptions": { - "jsx": "preserve", - "target": "esnext", - "module": "esnext", - }, - "references": [ - { "path": "packages/php-wasm" }, - { "path": "packages/php-wasm-browser" }, - { "path": "packages/wordpress-wasm" } - ], - "files": [] + "extends": "./tsconfig.base.json", + "include": [ "src/**/*" ], + "exclude": [ + "src/php-wasm-browser/service-worker/worker-library.ts", + "src/php-wasm-browser/worker-thread/worker-library.ts", + "src/wordpress-wasm/service-worker.ts", + "src/wordpress-wasm/worker-thread.ts", + "src/wordpress-wasm/wordpress/**/*", + "src/php-wasm/wasm/**/*", + "build/**/*", + "build-*/**/*", + "build-types/**/*" + ] } diff --git a/tsconfig.worker.json b/tsconfig.worker.json new file mode 100644 index 0000000000..4d1423e21c --- /dev/null +++ b/tsconfig.worker.json @@ -0,0 +1,21 @@ +{ + "extends": "./tsconfig.base.json", + "include": [ + "src/php-wasm/php.ts", + "src/php-wasm/index.ts", + "src/php-wasm/php-server.ts", + "src/php-wasm/php-browser.ts", + + "src/php-wasm-browser/service-worker/worker-library.ts", + "src/php-wasm-browser/worker-thread/worker-library.ts", + "src/php-wasm-browser/emscripten-download-monitor.ts", + "src/php-wasm-browser/messaging.ts", + "src/php-wasm-browser/scope.ts", + "src/php-wasm-browser/utils.ts", + + "src/wordpress-wasm/service-worker.ts", + "src/wordpress-wasm/worker-thread.ts", + "src/wordpress-wasm/utils.ts", + "src/wordpress-wasm/config.ts" + ] +}