diff --git a/.eslintrc.js b/.eslintrc.js index d302457..89273c0 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,9 +1,10 @@ module.exports = { root: true, - plugins: ['unused-imports'], + plugins: ['unused-imports', 'eslint-plugin-tsdoc'], extends: [], rules: { 'unused-imports/no-unused-imports': 'warn', + 'tsdoc/syntax': 'warn', 'no-restricted-imports': [ 'error', { @@ -16,7 +17,7 @@ module.exports = { }, ], }, - ignorePatterns: ['*.d.ts'], + ignorePatterns: ['*.d.ts', '*.ignore.ts'], overrides: [ { files: ['*.ts', '*.tsx'], diff --git a/devEnv/api-docs.mjs b/devEnv/api-docs.mjs new file mode 100644 index 0000000..36ace55 --- /dev/null +++ b/devEnv/api-docs.mjs @@ -0,0 +1,31 @@ +import path from 'path' +import {readFileSync, writeFileSync} from 'fs' +import {keyBy} from 'lodash-es' +;(async function () { + // better quote function from https://github.com/google/zx/pull/167 + $.quote = function quote(arg) { + if (/^[a-z0-9/_.-]+$/i.test(arg)) { + return arg + } + return ( + `$'` + + arg + .replace(/\\/g, '\\\\') + .replace(/'/g, "\\'") + .replace(/\f/g, '\\f') + .replace(/\n/g, '\\n') + .replace(/\r/g, '\\r') + .replace(/\t/g, '\\t') + .replace(/\v/g, '\\v') + .replace(/\0/g, '\\0') + + `'` + ) + } + + await $`yarn build:ts` + await Promise.all( + ['@theatre/dataverse', '@theatre/react', 'theatre'].map( + (pkg) => $`yarn workspace ${pkg} run build:api-json`, + ), + ) +})() diff --git a/devEnv/api-extractor-base.json b/devEnv/api-extractor-base.json new file mode 100644 index 0000000..0b1f0c3 --- /dev/null +++ b/devEnv/api-extractor-base.json @@ -0,0 +1,376 @@ +/** + * 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": "/dist/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": [], + + /** + * 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": "/devEnv/api-extractor.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": { + // "compilerOptions": { + // "paths": { + // // "@theatre/shared/*": ["./theatre/shared/src/*"] + // } + // } + // } + /** + * 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: "/etc/" + */ + // "reportFolder": "/etc/", + + /** + * 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/" + }, + + /** + * 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": "/dist/.api.json" + }, + + /** + * 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 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" + }, + + /** + * 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", + + /** + * 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": { + // let's configure message reporting later + "logLevel": "warning" + // "addToApiReportFile": false + }, + + "ae-missing-release-tag": { + "logLevel": "none" + }, + "ae-forgotten-export": { + "logLevel": "none" + } + + // "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-link-tag-unescaped-text": { + // "logLevel": "warning", + // "addToApiReportFile": true + // }, + // + // . . . + } + } +} diff --git a/package.json b/package.json index 0966b22..7131ae6 100644 --- a/package.json +++ b/package.json @@ -9,10 +9,12 @@ ], "scripts": { "playground": "yarn workspace playground run serve", - "typecheck": "tsc --build ./devEnv/typecheck-all-projects/tsconfig.all.json", + "typecheck": "yarn run build:ts", + "build:ts": "tsc --build ./devEnv/typecheck-all-projects/tsconfig.all.json", "test": "jest", "postinstall": "husky install", "deploy": "zx devEnv/deploy.mjs", + "build:api-docs": "zx devEnv/api-docs.mjs", "lint:all": "eslint . --ext ts,tsx --ignore-path=.gitignore --rulesdir ./devEnv/eslint/rules" }, "lint-staged": { @@ -37,6 +39,7 @@ "eslint-plugin-jsx-a11y": "^6.4.1", "eslint-plugin-react": "^7.25.1", "eslint-plugin-react-hooks": "^4.2.0", + "eslint-plugin-tsdoc": "^0.2.14", "eslint-plugin-unused-imports": "^1.1.4", "husky": "^6.0.0", "jest": "^27.1.0", @@ -47,6 +50,8 @@ "zx": "^2.0.0" }, "dependencies": { + "@microsoft/api-documenter": "^7.13.54", + "@microsoft/api-extractor": "^7.18.11", "node-gyp": "^8.1.0" } } diff --git a/packages/dataverse/devEnv/api-extractor.json b/packages/dataverse/devEnv/api-extractor.json new file mode 100644 index 0000000..8c2d9d8 --- /dev/null +++ b/packages/dataverse/devEnv/api-extractor.json @@ -0,0 +1,36 @@ +/** + * 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": "../../../devEnv/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": ".." +} diff --git a/packages/dataverse/devEnv/api-extractor.tsconfig.json b/packages/dataverse/devEnv/api-extractor.tsconfig.json new file mode 100644 index 0000000..c3151fb --- /dev/null +++ b/packages/dataverse/devEnv/api-extractor.tsconfig.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "extends": "../tsconfig.json" +} diff --git a/packages/dataverse/package.json b/packages/dataverse/package.json index d5fc3b9..2cd5f56 100644 --- a/packages/dataverse/package.json +++ b/packages/dataverse/package.json @@ -19,13 +19,15 @@ ], "scripts": { "prepack": "node ../../devEnv/ensurePublishing.js", - "typecheck": "yarn run build", - "build": "run-s build:ts build:js", + "typecheck": "yarn run build:ts", + "build": "run-s build:ts build:js build:api-json", "build:ts": "tsc --build ./tsconfig.json", "build:js": "node -r esbuild-register ./devEnv/build.ts", + "build:api-json": "api-extractor run --local --config devEnv/api-extractor.json", "prepublish": "node ../../devEnv/ensurePublishing.js" }, "devDependencies": { + "@microsoft/api-extractor": "^7.18.11", "@types/jest": "^26.0.23", "@types/lodash-es": "^4.17.4", "@types/node": "^15.6.2", diff --git a/packages/react/devEnv/api-extractor.json b/packages/react/devEnv/api-extractor.json new file mode 100644 index 0000000..8c2d9d8 --- /dev/null +++ b/packages/react/devEnv/api-extractor.json @@ -0,0 +1,36 @@ +/** + * 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": "../../../devEnv/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": ".." +} diff --git a/packages/react/devEnv/api-extractor.tsconfig.json b/packages/react/devEnv/api-extractor.tsconfig.json new file mode 100644 index 0000000..bcc091f --- /dev/null +++ b/packages/react/devEnv/api-extractor.tsconfig.json @@ -0,0 +1,7 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "extends": "../tsconfig.json", + "compilerOptions": { + "paths": {} + } +} diff --git a/packages/react/package.json b/packages/react/package.json index 4336e8d..bce7c61 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -20,12 +20,14 @@ "scripts": { "prepack": "node ../../devEnv/ensurePublishing.js", "typecheck": "yarn run build", - "build": "run-s build:ts build:js", + "build": "run-s build:ts build:js build:api-json", "build:ts": "tsc --build ./tsconfig.json", "build:js": "node -r esbuild-register ./devEnv/build.ts", + "build:api-json": "api-extractor run --local --config devEnv/api-extractor.json", "prepublish": "node ../../devEnv/ensurePublishing.js" }, "devDependencies": { + "@microsoft/api-extractor": "^7.18.11", "@types/jest": "^26.0.23", "@types/lodash-es": "^4.17.4", "@types/node": "^15.6.2", diff --git a/theatre/core/devEnv/api-extractor.json b/theatre/core/devEnv/api-extractor.json new file mode 100644 index 0000000..19af378 --- /dev/null +++ b/theatre/core/devEnv/api-extractor.json @@ -0,0 +1,39 @@ +/** + * 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": "../../../devEnv/api-extractor-base.json", + // "extends": "my-package/include/api-extractor-base.json" + + "mainEntryPointFilePath": "../../.temp/declarations/core/src/index.d.ts", + "bundledPackages": ["@theatre/core", "@theatre/shared"], + + /** + * 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": ".." +} diff --git a/theatre/core/devEnv/api-extractor.tsconfig.json b/theatre/core/devEnv/api-extractor.tsconfig.json new file mode 100644 index 0000000..e566303 --- /dev/null +++ b/theatre/core/devEnv/api-extractor.tsconfig.json @@ -0,0 +1,10 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "extends": "../../tsconfig.json", + "compilerOptions": { + "paths": { + "@theatre/core/*": ["../../.temp/declarations/core/src/*"], + "@theatre/shared/*": ["../../.temp/declarations/shared/src/*"] + } + } +} diff --git a/theatre/core/src/coreExports.ts b/theatre/core/src/coreExports.ts index c363a77..1f3fb59 100644 --- a/theatre/core/src/coreExports.ts +++ b/theatre/core/src/coreExports.ts @@ -21,8 +21,12 @@ export {types} /** * Returns a project of the given id, or creates one if it doesn't already exist. * - * If @theatre/studio is also loaded, then the state of the project will be managed by the studio. + * @remarks + * If \@theatre/studio is also loaded, then the state of the project will be managed by the studio. * + * [Learn more about exporting](https://docs.theatrejs.com/in-depth/#exporting) + * + * @example * Usage: * ```ts * import {getProject} from '@theatre/core' @@ -30,6 +34,7 @@ export {types} * const project = getProject("a-unique-id", config) * ``` * + * @example * Usage with an explicit state: * ```ts * import {getProject} from '@theatre/core' @@ -37,8 +42,6 @@ export {types} * const config = {state} // here the config contains our saved state * const project = getProject("a-unique-id", config) * ``` - * - * Learn more about exporting https://docs.theatrejs.com/in-depth/#exporting */ export function getProject(id: string, config: IProjectConfig = {}): IProject { const {...restOfConfig} = config @@ -122,8 +125,8 @@ const validateProjectIdOrThrow = (value: string) => { /** * Calls `callback` every time the pointed value of `pointer` changes. * - * @param pointer A pointer (like `object.props.x`) - * @param callback The callback is called every time the value of pointerOrDerivation changes + * @param pointer - A pointer (like `object.props.x`) + * @param callback - The callback is called every time the value of pointerOrDerivation changes * @returns An unsubscribe function */ export function onChange

>( diff --git a/theatre/core/src/projects/TheatreProject.ts b/theatre/core/src/projects/TheatreProject.ts index e3bbd44..3119724 100644 --- a/theatre/core/src/projects/TheatreProject.ts +++ b/theatre/core/src/projects/TheatreProject.ts @@ -41,8 +41,8 @@ export interface IProject { /** * Creates a Sheet under the project - * @param sheetId Sheets are identified by their `sheetId`, which must be a string longer than 3 characters - * @param instanceId Optionally provide an `instanceId` if you want to create multiple instances of the same Sheet + * @param sheetId - Sheets are identified by their `sheetId`, which must be a string longer than 3 characters + * @param instanceId - Optionally provide an `instanceId` if you want to create multiple instances of the same Sheet * @returns The newly created Sheet * * **Docs: https://docs.theatrejs.com/in-depth/#sheets** diff --git a/theatre/core/src/propTypes/index.ts b/theatre/core/src/propTypes/index.ts index 0701025..199251e 100644 --- a/theatre/core/src/propTypes/index.ts +++ b/theatre/core/src/propTypes/index.ts @@ -65,9 +65,6 @@ const validateCommonOpts = ( * {label: "Position"} * ) * ``` - * @param props - * @param opts - * @returns * */ export const compound = ( @@ -122,8 +119,8 @@ export const compound = ( * }) * ``` * - * @param defaultValue The default value (Must be a finite number) - * @param opts The options (See usage examples) + * @param defaultValue - The default value (Must be a finite number) + * @param opts - The options (See usage examples) * @returns A number prop config */ export const number = ( @@ -222,8 +219,8 @@ export const number = ( * }) * ``` * - * @param defaultValue The default value (must be a boolean) - * @param opts Options (See usage examples) + * @param defaultValue - The default value (must be a boolean) + * @param opts - Options (See usage examples) */ export const boolean = ( defaultValue: boolean, @@ -264,8 +261,8 @@ export const boolean = ( * }) * ``` * - * @param defaultValue The default value (must be a string) - * @param opts The options (See usage examples) + * @param defaultValue - The default value (must be a string) + * @param opts - The options (See usage examples) * @returns A string prop type */ export const string = ( diff --git a/theatre/package.json b/theatre/package.json index d7dcbff..89c0df3 100644 --- a/theatre/package.json +++ b/theatre/package.json @@ -13,12 +13,16 @@ "build:js:watch": "node -r esbuild-register devEnv/watch.ts", "build:ts": "run-s typecheck build:ts:bundle", "build:ts:bundle": "rollup -c devEnv/declarations-bundler/rollup.config.js", + "build:api-json": "run-p build:api-json:core build:api-json:studio", + "build:api-json:core": "api-extractor run --local --config core/devEnv/api-extractor.json", + "build:api-json:studio": "api-extractor run --local --config studio/devEnv/api-extractor.json", "build": "run-p build:ts build:js" }, "devDependencies": { "@babel/cli": "^7.14.3", "@babel/core": "^7.14.3", "@babel/runtime": "^7.14.0", + "@microsoft/api-extractor": "^7.18.11", "@rollup/plugin-alias": "^3.1.5", "@rollup/plugin-multi-entry": "^4.1.0", "@rollup/plugin-replace": "^2.4.2", diff --git a/theatre/studio/devEnv/api-extractor.json b/theatre/studio/devEnv/api-extractor.json new file mode 100644 index 0000000..b32be91 --- /dev/null +++ b/theatre/studio/devEnv/api-extractor.json @@ -0,0 +1,39 @@ +/** + * 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": "../../../devEnv/api-extractor-base.json", + // "extends": "my-package/include/api-extractor-base.json" + + "mainEntryPointFilePath": "../../.temp/declarations/studio/src/index.d.ts", + "bundledPackages": ["@theatre/studio", "@theatre/shared"], + + /** + * 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": ".." +} diff --git a/theatre/studio/devEnv/api-extractor.tsconfig.json b/theatre/studio/devEnv/api-extractor.tsconfig.json new file mode 100644 index 0000000..8e80736 --- /dev/null +++ b/theatre/studio/devEnv/api-extractor.tsconfig.json @@ -0,0 +1,12 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "extends": "../../tsconfig.json", + "compilerOptions": { + "paths": { + "@theatre/studio/*": ["../../.temp/declarations/studio/src/*"], + "@theatre/shared/*": ["../../.temp/declarations/shared/src/*"], + // not sure why it can't resolve react-icons, but we don't need it in the declarations anyway. + "react-icons": ["./cantResolve.ignore.ts"] + } + } +} diff --git a/theatre/studio/devEnv/cantResolve.ignore.ts b/theatre/studio/devEnv/cantResolve.ignore.ts new file mode 100644 index 0000000..c51955b --- /dev/null +++ b/theatre/studio/devEnv/cantResolve.ignore.ts @@ -0,0 +1,7 @@ +/** + * For some reason, invoking api-extractor causes TS to be unable to resolve + * some packages (so far "react-icons"). This module is a replacement for those. + * + * Check ./api-extractor.tsconfig.json -> compilerOptions.paths["react-icons"] + */ +export {} diff --git a/theatre/studio/src/TheatreStudio.ts b/theatre/studio/src/TheatreStudio.ts index 45fe314..50c6e8c 100644 --- a/theatre/studio/src/TheatreStudio.ts +++ b/theatre/studio/src/TheatreStudio.ts @@ -35,8 +35,8 @@ export interface ITransactionAPI { * set(obj.props.z, 10) * }) * ``` - * @param pointer A Pointer, like object.props - * @param value The value to override the existing value. This is treated as a deep partial value. + * @param pointer - A Pointer, like object.props + * @param value - The value to override the existing value. This is treated as a deep partial value. */ set(pointer: Pointer, value: V): void /** @@ -152,14 +152,14 @@ export interface IStudio { /** * The local storage key to use to persist the state. * - * @default "theatrejs:0.4" + * Default: "theatrejs:0.4" */ persistenceKey?: string /** * Whether to persist the changes in the browser's temporary storage. * It is useful to set this to false in the test environment or when debugging things. * - * @default true + * Default: true */ usePersistentStorage?: boolean }): void @@ -212,7 +212,7 @@ export interface IStudio { * automatically runs scrub.commit() after `threshhold` milliseconds have * passed after the last `scrub.capture`. * - * @param threshhold How long to wait before committing the scrub + * @param threshhold - How long to wait before committing the scrub * * Usage: * ```ts @@ -288,7 +288,7 @@ export interface IStudio { /** * Creates a new pane * - * @param paneClass The class name of the pane (provided by an extension) + * @param paneClass - The class name of the pane (provided by an extension) */ createPane( paneClass: PaneClass, @@ -307,7 +307,7 @@ export interface IStudio { * to programmatically save the state of your projects to the storage system of your * choice, rather than manually clicking on the "Export" button in the UI. * - * @param projectId same projectId as in `core.getProject(projectId)` + * @param projectId - same projectId as in `core.getProject(projectId)` * * Usage: * ```ts diff --git a/yarn.lock b/yarn.lock index f185a32..2d05b40 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4439,6 +4439,75 @@ __metadata: languageName: node linkType: hard +"@microsoft/api-documenter@npm:^7.13.54": + version: 7.13.54 + resolution: "@microsoft/api-documenter@npm:7.13.54" + dependencies: + "@microsoft/api-extractor-model": 7.13.9 + "@microsoft/tsdoc": 0.13.2 + "@rushstack/node-core-library": 3.41.0 + "@rushstack/ts-command-line": 4.9.1 + colors: ~1.2.1 + js-yaml: ~3.13.1 + resolve: ~1.17.0 + bin: + api-documenter: bin/api-documenter + checksum: 97b8960192aea3fa1bed18ca44ac4da8966ca7f74fc5a4e0c9c1add5fc38cf83972cee62d9bb04591fd8d9be45e439be6135bc6bdf9a1e66a0691a95d97bc3e6 + languageName: node + linkType: hard + +"@microsoft/api-extractor-model@npm:7.13.9": + version: 7.13.9 + resolution: "@microsoft/api-extractor-model@npm:7.13.9" + dependencies: + "@microsoft/tsdoc": 0.13.2 + "@microsoft/tsdoc-config": ~0.15.2 + "@rushstack/node-core-library": 3.41.0 + checksum: c133c86838747b586b5da45b498915f96836e7266822e0f017fc5c9ad273c0ec190df0051d414eb07dca8c7eab203355e7a090aa5bd8e331e6cb55b0e998638b + languageName: node + linkType: hard + +"@microsoft/api-extractor@npm:^7.18.11": + version: 7.18.11 + resolution: "@microsoft/api-extractor@npm:7.18.11" + dependencies: + "@microsoft/api-extractor-model": 7.13.9 + "@microsoft/tsdoc": 0.13.2 + "@microsoft/tsdoc-config": ~0.15.2 + "@rushstack/node-core-library": 3.41.0 + "@rushstack/rig-package": 0.3.1 + "@rushstack/ts-command-line": 4.9.1 + colors: ~1.2.1 + lodash: ~4.17.15 + resolve: ~1.17.0 + semver: ~7.3.0 + source-map: ~0.6.1 + typescript: ~4.4.2 + bin: + api-extractor: bin/api-extractor + checksum: 2f1b0c814e4e702b3ae4a095679d656e20c091cb646937a635ef857f94145762c145382a91b24deea87850aea55d9782c0693430cb89ecd8a6d48a15ad273282 + languageName: node + linkType: hard + +"@microsoft/tsdoc-config@npm:0.15.2, @microsoft/tsdoc-config@npm:~0.15.2": + version: 0.15.2 + resolution: "@microsoft/tsdoc-config@npm:0.15.2" + dependencies: + "@microsoft/tsdoc": 0.13.2 + ajv: ~6.12.6 + jju: ~1.4.0 + resolve: ~1.19.0 + checksum: 1b6ba953ca8f82b9e2ae920ef48014c186ffdd8ee43b3e493bbafd8270a199829bf8a64929c6a19b537ec8df295b285eb365026fa0633d2f4529bca2ab009bc8 + languageName: node + linkType: hard + +"@microsoft/tsdoc@npm:0.13.2": + version: 0.13.2 + resolution: "@microsoft/tsdoc@npm:0.13.2" + checksum: b0ddc7689f52a69e0472fd9ca30d8242d4d7bae5cb5d3d86f2ad394a122d63feee0a82276fc2dc6b199bb96c20b309bcd3ab3c6517ddd70b98d8ae890b6995ab + languageName: node + linkType: hard + "@mrmlnc/readdir-enhanced@npm:^2.2.1": version: 2.2.1 resolution: "@mrmlnc/readdir-enhanced@npm:2.2.1" @@ -4982,6 +5051,45 @@ __metadata: languageName: node linkType: hard +"@rushstack/node-core-library@npm:3.41.0": + version: 3.41.0 + resolution: "@rushstack/node-core-library@npm:3.41.0" + dependencies: + "@types/node": 12.20.24 + colors: ~1.2.1 + fs-extra: ~7.0.1 + import-lazy: ~4.0.0 + jju: ~1.4.0 + resolve: ~1.17.0 + semver: ~7.3.0 + timsort: ~0.3.0 + z-schema: ~3.18.3 + checksum: ec31a18a39c8b69b6336d0704e409104a59a9a733ad6ef516d8b51818481a3d2dd91888e0f5722d915c0efe4def20dddddeef5eb209f02a36305909e9d2e430c + languageName: node + linkType: hard + +"@rushstack/rig-package@npm:0.3.1": + version: 0.3.1 + resolution: "@rushstack/rig-package@npm:0.3.1" + dependencies: + resolve: ~1.17.0 + strip-json-comments: ~3.1.1 + checksum: 7cc31624ed3d3d629e6e17e3c47549389e14da835a0a3826bf88791c8b6f6f531333a9f20150c92dabb91ddc4ac6df62fb52bf35e15a0d36ecd5deddaea5492f + languageName: node + linkType: hard + +"@rushstack/ts-command-line@npm:4.9.1": + version: 4.9.1 + resolution: "@rushstack/ts-command-line@npm:4.9.1" + dependencies: + "@types/argparse": 1.0.38 + argparse: ~1.0.9 + colors: ~1.2.1 + string-argv: ~0.3.1 + checksum: 2ce905982ea9105f4c6141bccc6599030159f718c3992cdf3ced8dead31f831d87a399a244d0e729c28e5ddc2e05c0d72dfc805ed899b1a65672b90e9c15115f + languageName: node + linkType: hard + "@sinonjs/commons@npm:^1.7.0": version: 1.8.2 resolution: "@sinonjs/commons@npm:1.8.2" @@ -5246,6 +5354,7 @@ __metadata: version: 0.0.0-use.local resolution: "@theatre/dataverse@workspace:packages/dataverse" dependencies: + "@microsoft/api-extractor": ^7.18.11 "@types/jest": ^26.0.23 "@types/lodash-es": ^4.17.4 "@types/node": ^15.6.2 @@ -5293,6 +5402,7 @@ __metadata: version: 0.0.0-use.local resolution: "@theatre/react@workspace:packages/react" dependencies: + "@microsoft/api-extractor": ^7.18.11 "@theatre/dataverse": "workspace:*" "@types/jest": ^26.0.23 "@types/lodash-es": ^4.17.4 @@ -5368,6 +5478,13 @@ __metadata: languageName: node linkType: hard +"@types/argparse@npm:1.0.38": + version: 1.0.38 + resolution: "@types/argparse@npm:1.0.38" + checksum: 4b80a5e5c6c23fd48c88d7aab0b49e5b90285d570f2856bbaadf62538f261faaab0ee9246f25d98cb9c85a5a712d6619cad662644fe704b6a720cf1b85bbffce + languageName: node + linkType: hard + "@types/aria-query@npm:^4.2.0": version: 4.2.2 resolution: "@types/aria-query@npm:4.2.2" @@ -5619,6 +5736,13 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:12.20.24": + version: 12.20.24 + resolution: "@types/node@npm:12.20.24" + checksum: 0f908468d7c73159f838bbedc5c2d127aecfdf8bb720307664ba94d80510ed658e93e8dd6632e9f906a0f9d7f790e5f0632a19e0fe3ebb5fc61d7e2c9919489c + languageName: node + linkType: hard + "@types/node@npm:^15.12.3": version: 15.12.3 resolution: "@types/node@npm:15.12.3" @@ -6528,7 +6652,7 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^6.1.0, ajv@npm:^6.10.0, ajv@npm:^6.10.2, ajv@npm:^6.12.3, ajv@npm:^6.12.4, ajv@npm:^6.12.5": +"ajv@npm:^6.1.0, ajv@npm:^6.10.0, ajv@npm:^6.10.2, ajv@npm:^6.12.3, ajv@npm:^6.12.4, ajv@npm:^6.12.5, ajv@npm:~6.12.6": version: 6.12.6 resolution: "ajv@npm:6.12.6" dependencies: @@ -6723,7 +6847,7 @@ __metadata: languageName: node linkType: hard -"argparse@npm:^1.0.7": +"argparse@npm:^1.0.7, argparse@npm:~1.0.9": version: 1.0.10 resolution: "argparse@npm:1.0.10" dependencies: @@ -8717,6 +8841,13 @@ __metadata: languageName: node linkType: hard +"colors@npm:~1.2.1": + version: 1.2.5 + resolution: "colors@npm:1.2.5" + checksum: c396fe2a268fd95f37de874a4eb0f542698a6fd775bcecffdb8aa01fe6c67b4aab81bd7a93ee2f7a248f29a161446c1719d4590aff5e26e7315c7b9d473a513d + languageName: node + linkType: hard + "columnify@npm:^1.5.4": version: 1.5.4 resolution: "columnify@npm:1.5.4" @@ -8743,7 +8874,7 @@ __metadata: languageName: node linkType: hard -"commander@npm:^2.11.0, commander@npm:^2.19.0, commander@npm:^2.20.0": +"commander@npm:^2.11.0, commander@npm:^2.19.0, commander@npm:^2.20.0, commander@npm:^2.7.1": version: 2.20.3 resolution: "commander@npm:2.20.3" checksum: b73428e97de7624323f81ba13f8ed9271de487017432d18b4da3f07cfc528ad754bbd199004bd5d14e0ccd67d1fdfe0ec8dbbd4c438b401df3c4cc387bfd1daa @@ -11041,6 +11172,16 @@ __metadata: languageName: node linkType: hard +"eslint-plugin-tsdoc@npm:^0.2.14": + version: 0.2.14 + resolution: "eslint-plugin-tsdoc@npm:0.2.14" + dependencies: + "@microsoft/tsdoc": 0.13.2 + "@microsoft/tsdoc-config": 0.15.2 + checksum: e25c6df04a40c31cce70732ca2170df5cd3425c9e799b6aacd1f7078551fa8821cafd3f99dde29a0fc599ad08ed762d2d21794a52911742d048d36a18d6f7331 + languageName: node + linkType: hard + "eslint-plugin-unused-imports@npm:^1.1.4": version: 1.1.4 resolution: "eslint-plugin-unused-imports@npm:1.1.4" @@ -11975,7 +12116,7 @@ __metadata: languageName: node linkType: hard -"fs-extra@npm:^7.0.0": +"fs-extra@npm:^7.0.0, fs-extra@npm:~7.0.1": version: 7.0.1 resolution: "fs-extra@npm:7.0.1" dependencies: @@ -13188,6 +13329,13 @@ fsevents@^1.2.7: languageName: node linkType: hard +"import-lazy@npm:~4.0.0": + version: 4.0.0 + resolution: "import-lazy@npm:4.0.0" + checksum: 8b87df6e579fb3d7c66d43efd25a46c3c61d636a1a48696d8a49d5592e1be97867fbb46de795e8f4311e85bc4eec78f9d7c638656bc41a2ecc53b9ed7883b423 + languageName: node + linkType: hard + "import-local@npm:^2.0.0": version: 2.0.0 resolution: "import-local@npm:2.0.0" @@ -13540,6 +13688,15 @@ fsevents@^1.2.7: languageName: node linkType: hard +"is-core-module@npm:^2.1.0": + version: 2.7.0 + resolution: "is-core-module@npm:2.7.0" + dependencies: + has: ^1.0.3 + checksum: e017cc444527b1ce29689ec355b6f0f129a964f38a2655e411284e7672ac58b02642eba599edb54632e57275cfa0726ccb45d959089d5b633e7a18487e410c9e + languageName: node + linkType: hard + "is-core-module@npm:^2.2.0": version: 2.2.0 resolution: "is-core-module@npm:2.2.0" @@ -15081,6 +15238,13 @@ fsevents@^1.2.7: languageName: node linkType: hard +"jju@npm:~1.4.0": + version: 1.4.0 + resolution: "jju@npm:1.4.0" + checksum: a58023d40e8e262366e95175dec782c7dc6ad94f2ad1fafe91f675ca6177505b4a8e679cec49c800acb8ceab9391856c7c03e871b30ef0590115d081fad814b9 + languageName: node + linkType: hard + "joycon@npm:^3.0.1": version: 3.0.1 resolution: "joycon@npm:3.0.1" @@ -15121,6 +15285,18 @@ fsevents@^1.2.7: languageName: node linkType: hard +"js-yaml@npm:~3.13.1": + version: 3.13.1 + resolution: "js-yaml@npm:3.13.1" + dependencies: + argparse: ^1.0.7 + esprima: ^4.0.0 + bin: + js-yaml: bin/js-yaml.js + checksum: 277157fdf235757b71cfbf24f6bef57576a26d9b4cf89b63d89c9044da7b0f9d16c3629c8b5fd549ae343523727a0df1598794e9a4429763cee4e17056ff8523 + languageName: node + linkType: hard + "jsbn@npm:~0.1.0": version: 0.1.1 resolution: "jsbn@npm:0.1.1" @@ -15795,6 +15971,20 @@ fsevents@^1.2.7: languageName: node linkType: hard +"lodash.get@npm:^4.0.0": + version: 4.4.2 + resolution: "lodash.get@npm:4.4.2" + checksum: 447e575e3caa5131ef44e5a0c135b1614f3c937d86b3be0568f9da7b0fd015010af3b6b4e41edf6e2698c9ce2dcc061ca71b31f274f799c991dceb018be16e4f + languageName: node + linkType: hard + +"lodash.isequal@npm:^4.0.0": + version: 4.5.0 + resolution: "lodash.isequal@npm:4.5.0" + checksum: 5b47e094641c18a915497343894c66f7da6aebb9aaa2a3fcc5643455aaf29d19df60ebbed664c8374fb959c8b4ce96810ee6becd8a71ac58c6c2ca8d29762947 + languageName: node + linkType: hard + "lodash.ismatch@npm:^4.4.0": version: 4.4.0 resolution: "lodash.ismatch@npm:4.4.0" @@ -15870,7 +16060,7 @@ fsevents@^1.2.7: languageName: node linkType: hard -"lodash@npm:>=3.5 <5, lodash@npm:^4.17.11, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.17.4, lodash@npm:^4.17.5, lodash@npm:^4.2.1, lodash@npm:^4.7.0": +"lodash@npm:>=3.5 <5, lodash@npm:^4.17.11, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.17.4, lodash@npm:^4.17.5, lodash@npm:^4.2.1, lodash@npm:^4.7.0, lodash@npm:~4.17.15": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: 4983720b9abca930a4a46f18db163d7dad8dd00dbed6db0cc7b499b33b717cce69f80928b27bbb1ff2cbd3b19d251ee90669a8b5ea466072ca81c2ebe91e7468 @@ -20706,6 +20896,25 @@ fsevents@^1.2.7: languageName: node linkType: hard +"resolve@npm:~1.17.0": + version: 1.17.0 + resolution: "resolve@npm:1.17.0" + dependencies: + path-parse: ^1.0.6 + checksum: 5e3cdb8cf68c20b0c5edeb6505e7fab20c6776af0cae4b978836e557420aef7bb50acd25339bbb143b7f80533aa1988c7e827a0061aee9c237926a7d2c41f8d0 + languageName: node + linkType: hard + +"resolve@npm:~1.19.0": + version: 1.19.0 + resolution: "resolve@npm:1.19.0" + dependencies: + is-core-module: ^2.1.0 + path-parse: ^1.0.6 + checksum: 8b23c7fde1224898ffb9fec2a2295a44d1564981343bdbf5fd3769465658f6a6f6647bb7ea66dfb3c1291ca86046b0233be2edfcd8ca05b38886521e8869677c + languageName: node + linkType: hard + "restore-cursor@npm:^2.0.0": version: 2.0.0 resolution: "restore-cursor@npm:2.0.0" @@ -21155,7 +21364,7 @@ fsevents@^1.2.7: languageName: node linkType: hard -"semver@npm:^7.1.1, semver@npm:^7.1.3, semver@npm:^7.2.1, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5": +"semver@npm:^7.1.1, semver@npm:^7.1.3, semver@npm:^7.2.1, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:~7.3.0": version: 7.3.5 resolution: "semver@npm:7.3.5" dependencies: @@ -22002,7 +22211,7 @@ fsevents@^1.2.7: languageName: node linkType: hard -"string-argv@npm:0.3.1": +"string-argv@npm:0.3.1, string-argv@npm:~0.3.1": version: 0.3.1 resolution: "string-argv@npm:0.3.1" checksum: 002a6902698eff6bd463ddd2b03864bf9be08a1359879243d94d3906ebbe984ff355d73224064be7504d20262eadb06897b3d40b5d7cefccacc69c9dc45c8d0e @@ -22255,7 +22464,7 @@ fsevents@^1.2.7: languageName: node linkType: hard -"strip-json-comments@npm:^3.1.0, strip-json-comments@npm:^3.1.1": +"strip-json-comments@npm:^3.1.0, strip-json-comments@npm:^3.1.1, strip-json-comments@npm:~3.1.1": version: 3.1.1 resolution: "strip-json-comments@npm:3.1.1" checksum: f16719ce25abc58a55ef82b1c27f541dcfa5d544f17158f62d10be21ff9bd22fde45a53c592b29d80ad3c97ccb67b7451c4833913fdaeadb508a40f5e0a9c206 @@ -22655,6 +22864,8 @@ fsevents@^1.2.7: "@babel/preset-env": ^7.15.0 "@babel/preset-react": ^7.14.5 "@babel/preset-typescript": ^7.15.0 + "@microsoft/api-documenter": ^7.13.54 + "@microsoft/api-extractor": ^7.18.11 "@typescript-eslint/eslint-plugin": ^4.30.0 "@typescript-eslint/parser": ^4.30.0 esbuild: ^0.12.24 @@ -22663,6 +22874,7 @@ fsevents@^1.2.7: eslint-plugin-jsx-a11y: ^6.4.1 eslint-plugin-react: ^7.25.1 eslint-plugin-react-hooks: ^4.2.0 + eslint-plugin-tsdoc: ^0.2.14 eslint-plugin-unused-imports: ^1.1.4 husky: ^6.0.0 jest: ^27.1.0 @@ -22682,6 +22894,7 @@ fsevents@^1.2.7: "@babel/cli": ^7.14.3 "@babel/core": ^7.14.3 "@babel/runtime": ^7.14.0 + "@microsoft/api-extractor": ^7.18.11 "@rollup/plugin-alias": ^3.1.5 "@rollup/plugin-multi-entry": ^4.1.0 "@rollup/plugin-replace": ^2.4.2 @@ -22887,7 +23100,7 @@ fsevents@^1.2.7: languageName: node linkType: hard -"timsort@npm:^0.3.0": +"timsort@npm:^0.3.0, timsort@npm:~0.3.0": version: 0.3.0 resolution: "timsort@npm:0.3.0" checksum: d8300c3ecf1a3751413de82b04ad283b461ab6fb1041820c825d13b4ae74526e2101ab5fb84c57a0c6e1f4d7f67173b5d8754ed8bb7447c6a9ce1db8562eb82c @@ -23368,6 +23581,16 @@ fsevents@^1.2.7: languageName: node linkType: hard +"typescript@npm:~4.4.2": + version: 4.4.3 + resolution: "typescript@npm:4.4.3" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 0da3a2a96506240557512ee49ff37a882c49c8c803444b90b98984e50d5d2e526885d57cd0f75225525413630b0e070e0e9ab4538485852fa1c158a6e7925cbb + languageName: node + linkType: hard + "uglify-js@npm:^3.1.4": version: 3.13.3 resolution: "uglify-js@npm:3.13.3" @@ -23789,6 +24012,13 @@ fsevents@^1.2.7: languageName: node linkType: hard +"validator@npm:^8.0.0": + version: 8.2.0 + resolution: "validator@npm:8.2.0" + checksum: a5be1d5728164f69b615986152e3fa7723e877abf5630f6c7153cfadfbd1bd971ddc2998063896b81a25efc067df14a420d074916a4010a6d3ad5b00a191bf99 + languageName: node + linkType: hard + "vary@npm:~1.1.2": version: 1.1.2 resolution: "vary@npm:1.1.2" @@ -24738,6 +24968,23 @@ fsevents@^1.2.7: languageName: node linkType: hard +"z-schema@npm:~3.18.3": + version: 3.18.4 + resolution: "z-schema@npm:3.18.4" + dependencies: + commander: ^2.7.1 + lodash.get: ^4.0.0 + lodash.isequal: ^4.0.0 + validator: ^8.0.0 + dependenciesMeta: + commander: + optional: true + bin: + z-schema: ./bin/z-schema + checksum: c19563899a8c1077c5350e9bb5c013729cb8b2168394a7c8d91091f1c6c269f7616a08c1218045a05322338ae29035d8ff2d674690425ef4c08388ba3d3ed875 + languageName: node + linkType: hard + "zstddec@npm:^0.0.2": version: 0.0.2 resolution: "zstddec@npm:0.0.2"