From 6e79694a4c4407d43d53964c40ebd3012b0ee967 Mon Sep 17 00:00:00 2001 From: Joshua Smithrud <54606601+Josmithr@users.noreply.github.com> Date: Thu, 21 Nov 2024 10:13:12 -0800 Subject: [PATCH] refactor(docs): Add md/mdx linting via eslint and fix violations (#23168) Adds Markdown / MDX documentation linting via the following plugins: - [eslint-mdx](https://github.com/mdx-js/eslint-mdx) - [@docusaurus/eslint-plugin](https://docusaurus.io/docs/api/misc/@docusaurus/eslint-plugin) Also fixes violations in our docs. [AB#21860](https://dev.azure.com/fluidframework/235294da-091d-4c29-84fc-cdfc3d90890b/_workitems/edit/21860) --- .prettierignore | 3 +- docs/.eslintignore | 4 + docs/.eslintrc.cjs | 135 +++-- docs/README.md | 20 +- docs/docs/build/releases-and-apitags.mdx | 2 +- docs/docs/glossary.mdx | 2 +- docs/docs/testing/telemetry.mdx | 8 +- docs/docs/testing/typed-telemetry.mdx | 2 +- docs/package.json | 7 +- docs/pnpm-lock.yaml | 523 ++++++++++++++++++ docs/versioned_docs/version-1/glossary.mdx | 2 +- .../version-1/release-notes.mdx | 4 +- .../version-1/testing/telemetry.mdx | 8 +- .../version-1/testing/typed-telemetry.mdx | 2 +- 14 files changed, 647 insertions(+), 75 deletions(-) create mode 100644 docs/.eslintignore diff --git a/.prettierignore b/.prettierignore index b20b3be38d18..5881ab3762bc 100644 --- a/.prettierignore +++ b/.prettierignore @@ -80,7 +80,8 @@ packages/framework/data-object-base/es5 # Generated by policy-check packages/runtime/test-runtime-utils/src/assertionShortCodesMap.ts -# TODO: Investigate formatting options that support JSX syntax in .mdx files +# Prettier does not yet support mdx v3. +# See docs/**/*.mdx # Generated diff --git a/docs/.eslintignore b/docs/.eslintignore new file mode 100644 index 000000000000..05fb46a2a94b --- /dev/null +++ b/docs/.eslintignore @@ -0,0 +1,4 @@ +build +node_modules +docs/api +versioned_docs/*/api diff --git a/docs/.eslintrc.cjs b/docs/.eslintrc.cjs index c06e973f1d01..f97407e15823 100644 --- a/docs/.eslintrc.cjs +++ b/docs/.eslintrc.cjs @@ -4,73 +4,96 @@ */ module.exports = { - extends: [require.resolve("@fluidframework/eslint-config-fluid"), "prettier"], parserOptions: { - project: ["./tsconfig.json"], + ecmaVersion: "2022", }, - settings: { - react: { - version: "detect", - }, - }, - rules: { - // Required by Docusaurus for certain component exports. - "import/no-default-export": "off", - - "import/no-unassigned-import": [ - "error", - { - // Allow unassigned imports of css files. - allow: ["**/*.css"], + overrides: [ + // Rules for code + { + files: ["src/**/*.{ts,tsx}", "test/**/*.{ts,tsx}"], + extends: [require.resolve("@fluidframework/eslint-config-fluid"), "prettier"], + parserOptions: { + project: ["./tsconfig.json"], }, - ], - - "import/no-internal-modules": [ - "error", - { - allow: ["@docusaurus/**", "@site/**", "@theme/**"], + settings: { + react: { + version: "detect", + }, }, - ], + rules: { + // Required by Docusaurus for certain component exports. + "import/no-default-export": "off", - "import/no-unresolved": [ - "error", - { - ignore: ["^@docusaurus/", "^@theme/", "^@theme-original/"], - }, - ], + "import/no-unassigned-import": [ + "error", + { + // Allow unassigned imports of css files. + allow: ["**/*.css"], + }, + ], - // All dependencies in this package are dev - "import/no-extraneous-dependencies": [ - "error", - { - devDependencies: true, - }, - ], + "import/no-internal-modules": [ + "error", + { + allow: ["@docusaurus/**", "@site/**", "@theme/**"], + }, + ], - // Unfortunately, some of the import aliases supported by Docusaurus are not recognized by TSC / the eslint parser. - // So we have to disable some rules that enforce strong typing. - // Could be worth investigating if there's a way to make TSC aware of how the aliases are resolved, but until then, - // these rules are disabled. - "@typescript-eslint/no-unsafe-argument": "off", - "@typescript-eslint/no-unsafe-assignment": "off", - "@typescript-eslint/no-unsafe-call": "off", - "@typescript-eslint/no-unsafe-member-access": "off", - }, - overrides: [ - { - // Test files - files: ["test/**/*"], - parserOptions: { - project: ["./test/tsconfig.json"], + "import/no-unresolved": [ + "error", + { + ignore: ["^@docusaurus/", "^@theme/", "^@theme-original/"], + }, + ], + + // All dependencies in this package are dev + "import/no-extraneous-dependencies": [ + "error", + { + devDependencies: true, + }, + ], + + // Unfortunately, some of the import aliases supported by Docusaurus are not recognized by TSC / the eslint parser. + // So we have to disable some rules that enforce strong typing. + // Could be worth investigating if there's a way to make TSC aware of how the aliases are resolved, but until then, + // these rules are disabled. + "@typescript-eslint/no-unsafe-argument": "off", + "@typescript-eslint/no-unsafe-assignment": "off", + "@typescript-eslint/no-unsafe-call": "off", + "@typescript-eslint/no-unsafe-member-access": "off", }, + overrides: [ + { + // Test file rule overrides + files: ["test/**/*"], + parserOptions: { + project: ["./test/tsconfig.json"], + }, + }, + { + // Config file tool overrides + files: ["docusaurus.config.ts", "playwright.config.ts", "infra/**/*"], + rules: { + "import/no-internal-modules": "off", + }, + }, + ], }, + + // Rules for .md/.mdx documents { - // Config files - files: ["docusaurus.config.ts", "playwright.config.ts", "infra/**/*"], + files: ["**/*.md", "**/*.mdx"], + // TODO: extend prettier plugin, once prettier supports MDX v3. + // See + extends: ["plugin:mdx/recommended"], + plugins: ["@docusaurus/eslint-plugin"], rules: { - "import/no-internal-modules": "off", - "import/no-nodejs-modules": "off", - "unicorn/no-process-exit": "off", + // See + "@docusaurus/no-html-links": "error", + + // See + "@docusaurus/prefer-docusaurus-heading": "error", }, }, ], diff --git a/docs/README.md b/docs/README.md index a03255e79b76..f961c5c61c72 100644 --- a/docs/README.md +++ b/docs/README.md @@ -137,6 +137,25 @@ The replacement syntax to use in `.mdx` files would be: (just like you would do in a JSX context!) +#### Custom Heading IDs + +In GitHub-flavored Markdown, you can assign a custom anchor ID to a heading by appending `{#}` to the heading text. +E.g., + +```markdown +# Foo {#bar} +``` + +Because curly braces are interpreted specially by JSX, this syntax doesn't work as is in `.mdx` documents. +Instead, you'll need to escape the opening brace to prevent MDX from attempting to process the syntax as JSX. +E.g., + +```markdown +# Foo \{#bar} +``` + +See the following Docusaurus issue for more context: . + ### Mermaid Docusaurus has built-in support for [mermaid](https://mermaid.js.org/) diagrams. @@ -182,7 +201,6 @@ The following npm scripts are supported in this directory: | Script | Description | |--------|-------------| | `build` | Build everything: the API documentation, the website, the tests, etc. | -| `prebuild:api-documentation` | Temporary workaround for AB#24394. Cleans up existing generated API documentation before generating new content. | | `build:api-documentation` | Download API model artifacts and generate API documentation. | | `prebuild:docusaurus` | Runs pre-site build metadata generation. | | `build:docusaurus` | Build the website with Docusaurus. | diff --git a/docs/docs/build/releases-and-apitags.mdx b/docs/docs/build/releases-and-apitags.mdx index 27263221ffde..d9eb8f7daad7 100644 --- a/docs/docs/build/releases-and-apitags.mdx +++ b/docs/docs/build/releases-and-apitags.mdx @@ -32,7 +32,7 @@ There are no guarantees for API breakages or Fluid document compatibility among These are done on demand to preview new APIs or try fixes for our partners. They are represented by the `dev` tag in npm There are no guarantees for API breakages or Fluid document compatibility among the release changes. Assume you will have to throw away containers generated by older release candidates -## API Support Levels {#api-support-levels} +## API Support Levels \{#api-support-levels} For packages that are part of the `@fluidframework` scope and the `fluid-framework` package, we use import paths to communicate the stability and guarantees associated with those APIs. diff --git a/docs/docs/glossary.mdx b/docs/docs/glossary.mdx index d7fbdeb02c3a..05a10352a17c 100644 --- a/docs/docs/glossary.mdx +++ b/docs/docs/glossary.mdx @@ -34,7 +34,7 @@ A Fluid container can be _attached_ or _detached_. A detached container is not c be loaded by other clients. Newly created containers begin in a detached state, which allows developers to add initial data if needed before attaching the container. Also see [Attached](#attached). -## Distributed data structures (DDSes) {#distributed-data-structures} +## Distributed data structures (DDSes) \{#distributed-data-structures} DDSes are the data structures Fluid Framework provides for storing collaborative data. As collaborators modify the data, the changes will be reflected to all other collaborators. diff --git a/docs/docs/testing/telemetry.mdx b/docs/docs/testing/telemetry.mdx index 7383966b9df1..dc772df7a0cf 100644 --- a/docs/docs/testing/telemetry.mdx +++ b/docs/docs/testing/telemetry.mdx @@ -14,7 +14,7 @@ your other telemetry, and route the event data in whatever way you need. The `ITelemetryBaseLogger` is an interface within the `@fluidframework/common-definitions` package. This interface can be implemented and passed into the service client's constructor via the `props` parameter. -All Fluid service clients (for example, [AzureClient][]) and [TinyliciousClient][])) allow passing a `logger?: ITelemetryBaseLogger` +All Fluid service clients (for example, [AzureClient][] and [TinyliciousClient][]) allow passing a `logger?: ITelemetryBaseLogger` into the service client props. Both `createContainer()` and `getContainer()` methods will then create an instance of the `logger`. `TinyliciousClientProps` interface definition takes an optional parameter `logger`. @@ -155,7 +155,7 @@ The Fluid Framework sends events in the following categories: ### EventName -This property contains a unique name for the event. The name may be namespaced, delimitted by a colon ':'. +This property contains a unique name for the event. The name may be namespaced, delimited by a colon ':'. Additionally, some event names (not the namespaces) contain underscores '\_', as a free-form subdivision of events into different related cases. Once common example is `foo_start`, `foo_end` and `foo_cancel` for performance events. @@ -263,6 +263,7 @@ async function start(): Promise { const id = await container.attach(); location.hash = id; } +} ``` Now, whenever a telemetry event is encountered, the custom `send()` method gets called and will print out the entire @@ -270,8 +271,7 @@ event object. The
-  ConsoleLogger sends telemetry events to the browser console for display. :::warning diff --git a/docs/docs/testing/typed-telemetry.mdx b/docs/docs/testing/typed-telemetry.mdx index b72ed208ad5e..f2af8a74df02 100644 --- a/docs/docs/testing/typed-telemetry.mdx +++ b/docs/docs/testing/typed-telemetry.mdx @@ -143,7 +143,7 @@ startTelemetry(telemetryConfig); You can now run the app and see the telemetry being printed on your console. -### Interpreting telemetry data {#telemetry_visualization} +### Interpreting telemetry data \{#telemetry_visualization} This section provides a set of Azure App Insights queries related to collaborative sessions within a Fluid Framework application. It is intended to be used with the telemetry generated from @fluidframework/fluid-telemetry package whose integration steps are outline above. diff --git a/docs/package.json b/docs/package.json index 247b2a5d5d90..12147dc69394 100644 --- a/docs/package.json +++ b/docs/package.json @@ -28,8 +28,8 @@ "clean:test": "rimraf --glob test-results", "clean:versions-json": "rimraf --glob ./versions.json", "download-doc-models": "node ./infra/download-doc-models.mjs", - "eslint": "eslint src test --format stylish", - "eslint:fix": "eslint src test --format stylish --fix", + "eslint": "eslint . --format stylish", + "eslint:fix": "eslint . --format stylish --fix", "format": "npm run prettier:fix", "generate-api-documentation": "dotenv -- node ./infra/generate-api-documentation.mjs", "generate-versions": "dotenv -- node ./infra/generate-versions.mjs", @@ -61,6 +61,7 @@ "devDependencies": { "@azure/static-web-apps-cli": "^2.0.1", "@docusaurus/core": "^3.6.2", + "@docusaurus/eslint-plugin": "^3.6.2", "@docusaurus/module-type-aliases": "^3.6.2", "@docusaurus/plugin-content-docs": "^3.6.2", "@docusaurus/preset-classic": "^3.6.2", @@ -85,6 +86,8 @@ "dotenv-cli": "^7.4.3", "eslint": "~8.55.0", "eslint-config-prettier": "~9.1.0", + "eslint-mdx": "^3.1.5", + "eslint-plugin-mdx": "^3.1.5", "fs-extra": "^11.2.0", "linkcheck-bin": "3.0.0-1", "lunr": "^2.3.9", diff --git a/docs/pnpm-lock.yaml b/docs/pnpm-lock.yaml index d8ca0cd177a2..64b324145d83 100644 --- a/docs/pnpm-lock.yaml +++ b/docs/pnpm-lock.yaml @@ -14,6 +14,9 @@ importers: '@docusaurus/core': specifier: ^3.6.2 version: 3.6.2(@mdx-js/react@3.1.0)(acorn@8.14.0)(debug@4.3.7)(eslint@8.55.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.4) + '@docusaurus/eslint-plugin': + specifier: ^3.6.2 + version: 3.6.2(eslint@8.55.0)(typescript@5.5.4) '@docusaurus/module-type-aliases': specifier: ^3.6.2 version: 3.6.2(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1) @@ -86,6 +89,12 @@ importers: eslint-config-prettier: specifier: ~9.1.0 version: 9.1.0(eslint@8.55.0) + eslint-mdx: + specifier: ^3.1.5 + version: 3.1.5(eslint@8.55.0) + eslint-plugin-mdx: + specifier: ^3.1.5 + version: 3.1.5(eslint@8.55.0) fs-extra: specifier: ^11.2.0 version: 11.2.0 @@ -2572,6 +2581,20 @@ packages: tslib: 2.8.1 dev: true + /@docusaurus/eslint-plugin@3.6.2(eslint@8.55.0)(typescript@5.5.4): + resolution: {integrity: sha512-QBsbQs1M+qOnwUiQoDVfkgqu1/S1YQMYP9zAlqrim9IXwfHc9KR6AVqW5A2WIA2IzWeeLMN4rlf/604HtEzZeg==} + engines: {node: '>=18.0'} + peerDependencies: + eslint: '>=6' + dependencies: + '@typescript-eslint/utils': 5.62.0(eslint@8.55.0)(typescript@5.5.4) + eslint: 8.55.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + /@docusaurus/logger@3.6.2: resolution: {integrity: sha512-1p4IQhhgLyIfsey4UAdAIW69aUE1Ei6O91Nsw30ryZeDWSG5dh4o3zaRGOLxfAX69Ac/yDm6YCwJOafUxL6Vxg==} engines: {node: '>=18.0'} @@ -3898,6 +3921,76 @@ packages: engines: {node: '>=12.4.0'} dev: true + /@npmcli/config@8.3.4: + resolution: {integrity: sha512-01rtHedemDNhUXdicU7s+QYz/3JyV5Naj84cvdXGH4mgCdL+agmSYaLF4LUG4vMCLzhBO8YtS0gPpH1FGvbgAw==} + engines: {node: ^16.14.0 || >=18.0.0} + dependencies: + '@npmcli/map-workspaces': 3.0.6 + '@npmcli/package-json': 5.2.1 + ci-info: 4.1.0 + ini: 4.1.3 + nopt: 7.2.1 + proc-log: 4.2.0 + semver: 7.6.3 + walk-up-path: 3.0.1 + transitivePeerDependencies: + - bluebird + dev: true + + /@npmcli/git@5.0.8: + resolution: {integrity: sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ==} + engines: {node: ^16.14.0 || >=18.0.0} + dependencies: + '@npmcli/promise-spawn': 7.0.2 + ini: 4.1.3 + lru-cache: 10.4.3 + npm-pick-manifest: 9.1.0 + proc-log: 4.2.0 + promise-inflight: 1.0.1 + promise-retry: 2.0.1 + semver: 7.6.3 + which: 4.0.0 + transitivePeerDependencies: + - bluebird + dev: true + + /@npmcli/map-workspaces@3.0.6: + resolution: {integrity: sha512-tkYs0OYnzQm6iIRdfy+LcLBjcKuQCeE5YLb8KnrIlutJfheNaPvPpgoFEyEFgbjzl5PLZ3IA/BWAwRU0eHuQDA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + '@npmcli/name-from-folder': 2.0.0 + glob: 10.4.5 + minimatch: 9.0.5 + read-package-json-fast: 3.0.2 + dev: true + + /@npmcli/name-from-folder@2.0.0: + resolution: {integrity: sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: true + + /@npmcli/package-json@5.2.1: + resolution: {integrity: sha512-f7zYC6kQautXHvNbLEWgD/uGu1+xCn9izgqBfgItWSx22U0ZDekxN08A1vM8cTxj/cRVe0Q94Ode+tdoYmIOOQ==} + engines: {node: ^16.14.0 || >=18.0.0} + dependencies: + '@npmcli/git': 5.0.8 + glob: 10.4.5 + hosted-git-info: 7.0.2 + json-parse-even-better-errors: 3.0.2 + normalize-package-data: 6.0.2 + proc-log: 4.2.0 + semver: 7.6.3 + transitivePeerDependencies: + - bluebird + dev: true + + /@npmcli/promise-spawn@7.0.2: + resolution: {integrity: sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==} + engines: {node: ^16.14.0 || >=18.0.0} + dependencies: + which: 4.0.0 + dev: true + /@oclif/core@4.0.33: resolution: {integrity: sha512-NoTDwJ2L/ywpsSjcN7jAAHf3m70Px4Yim2SJrm16r70XpnfbNOdlj1x0HEJ0t95gfD+p/y5uy+qPT/VXTh/1gw==} engines: {node: '>=18.0.0'} @@ -4079,6 +4172,11 @@ packages: dev: true optional: true + /@pkgr/core@0.1.1: + resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + dev: true + /@playwright/test@1.49.0: resolution: {integrity: sha512-DMulbwQURa8rNIQrf94+jPJQ4FmOVdpE5ZppRNvWVjvhC+6sOeo28r8MgIpQRYouXRtt/FCCXU7zn20jnHR4Qw==} engines: {node: '>=18'} @@ -4574,6 +4672,12 @@ packages: '@types/node': 22.9.1 dev: true + /@types/concat-stream@2.0.3: + resolution: {integrity: sha512-3qe4oQAPNwVNwK4C9c8u+VJqv9kez+2MR4qJpoPFfXtgxxif1QbFusvXzK0/Wra2VX07smostI2VMmJNSpZjuQ==} + dependencies: + '@types/node': 22.9.1 + dev: true + /@types/configstore@2.1.1: resolution: {integrity: sha512-YY+hm3afkDHeSM2rsFXxeZtu0garnusBWNG1+7MknmDWQHqcH2w21/xOU9arJUi8ch4qyFklidANLCu3ihhVwQ==} dev: true @@ -4898,6 +5002,10 @@ packages: '@types/node': 22.9.1 dev: true + /@types/is-empty@1.2.3: + resolution: {integrity: sha512-4J1l5d79hoIvsrKh5VUKVRA1aIdsOb10Hu5j3J2VfP/msDnfTdGPmNp2E1Wg+vs97Bktzo+MZePFFXSGoykYJw==} + dev: true + /@types/istanbul-lib-coverage@2.0.6: resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} dev: true @@ -5082,6 +5190,10 @@ packages: '@types/node': 22.9.1 dev: true + /@types/supports-color@8.1.3: + resolution: {integrity: sha512-Hy6UMpxhE3j1tLpl27exp1XqHD7n8chAiNPzWfz16LPZoMMoSc4dzLl6w9qijkEb/r5O1ozdu1CWGA2L83ZeZg==} + dev: true + /@types/tmp@0.0.33: resolution: {integrity: sha512-gVC1InwyVrO326wbBZw+AO3u2vRXz/iRWq9jYhpG4W8LXyIgDv3ZmcLQ5Q4Gs+gFMyqx+viFoFT+l3p61QFCmQ==} dev: true @@ -5202,6 +5314,14 @@ packages: '@typescript-eslint/visitor-keys': 5.59.11 dev: true + /@typescript-eslint/scope-manager@5.62.0: + resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + dev: true + /@typescript-eslint/scope-manager@6.21.0: resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} engines: {node: ^16.0.0 || >=18.0.0} @@ -5243,6 +5363,11 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true + /@typescript-eslint/types@5.62.0: + resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + /@typescript-eslint/types@6.21.0: resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} engines: {node: ^16.0.0 || >=18.0.0} @@ -5274,6 +5399,27 @@ packages: - supports-color dev: true + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.5.4): + resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + debug: 4.3.7(supports-color@8.1.1) + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.6.3 + tsutils: 3.21.0(typescript@5.5.4) + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/typescript-estree@6.21.0(typescript@5.5.4): resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} engines: {node: ^16.0.0 || >=18.0.0} @@ -5337,6 +5483,26 @@ packages: - typescript dev: true + /@typescript-eslint/utils@5.62.0(eslint@8.55.0)(typescript@5.5.4): + resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@8.55.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.4) + eslint: 8.55.0 + eslint-scope: 5.1.1 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + /@typescript-eslint/utils@6.7.5(eslint@8.55.0)(typescript@5.5.4): resolution: {integrity: sha512-pfRRrH20thJbzPPlPc4j0UNGvH1PjPlhlCMq4Yx7EGjV7lvEeGX0U6MJYe8+SyFutWgSHsdbJ3BXzZccYggezA==} engines: {node: ^16.0.0 || >=18.0.0} @@ -5364,6 +5530,14 @@ packages: eslint-visitor-keys: 3.4.3 dev: true + /@typescript-eslint/visitor-keys@5.62.0: + resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.62.0 + eslint-visitor-keys: 3.4.3 + dev: true + /@typescript-eslint/visitor-keys@6.21.0: resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} engines: {node: ^16.0.0 || >=18.0.0} @@ -5498,6 +5672,11 @@ packages: resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} dev: true + /abbrev@2.0.0: + resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: true + /accepts@1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} @@ -6395,6 +6574,11 @@ packages: engines: {node: '>=8'} dev: true + /ci-info@4.1.0: + resolution: {integrity: sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A==} + engines: {node: '>=8'} + dev: true + /clean-css@5.3.3: resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==} engines: {node: '>= 10.0'} @@ -6624,6 +6808,16 @@ packages: typedarray: 0.0.6 dev: true + /concat-stream@2.0.0: + resolution: {integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==} + engines: {'0': node >= 6.0} + dependencies: + buffer-from: 1.1.2 + inherits: 2.0.4 + readable-stream: 3.6.2 + typedarray: 0.0.6 + dev: true + /concurrently@7.6.0: resolution: {integrity: sha512-BKtRgvcJGeZ4XttiDiNcFiRlxoAeZOseqUvyYRUp/Vtd+9p1ULmeoSqGsDA+2ivdeDFpqrJvGvmI+StKfKl5hw==} engines: {node: ^12.20.0 || ^14.13.0 || >=16.0.0} @@ -7713,6 +7907,11 @@ packages: dequal: 2.0.3 dev: true + /diff@5.2.0: + resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} + engines: {node: '>=0.3.1'} + dev: true + /dill-cli@0.1.3(typescript@5.5.4): resolution: {integrity: sha512-8Ej9+I5SeYCXFcojLw+JIdH+rnzoYnvFMIqlfit5D5ByNqNfCHbLbN1++2mqKP7XyYbHs66U5+fFX9zx/pth5g==} engines: {node: '>=18.0.0'} @@ -7990,6 +8189,10 @@ packages: resolution: {integrity: sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==} dev: true + /err-code@2.0.3: + resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} + dev: true + /error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: @@ -8226,6 +8429,32 @@ packages: - supports-color dev: true + /eslint-mdx@3.1.5(eslint@8.55.0): + resolution: {integrity: sha512-ynztX0k7CQ3iDL7fDEIeg3g0O/d6QPv7IBI9fdYLhXp5fAp0fi8X22xF/D3+Pk0f90R27uwqa1clHpay6t0l8Q==} + engines: {node: '>=18.0.0'} + peerDependencies: + eslint: '>=8.0.0' + dependencies: + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) + eslint: 8.55.0 + espree: 9.6.1 + estree-util-visit: 2.0.0 + remark-mdx: 3.1.0 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + synckit: 0.9.2 + tslib: 2.8.1 + unified: 11.0.5 + unified-engine: 11.2.2 + unist-util-visit: 5.0.0 + uvu: 0.5.6 + vfile: 6.0.3 + transitivePeerDependencies: + - bluebird + - supports-color + dev: true + /eslint-module-utils@2.12.0(@typescript-eslint/parser@6.7.5)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.55.0): resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} engines: {node: '>=4'} @@ -8309,6 +8538,38 @@ packages: - supports-color dev: true + /eslint-plugin-markdown@3.0.1(eslint@8.55.0): + resolution: {integrity: sha512-8rqoc148DWdGdmYF6WSQFT3uQ6PO7zXYgeBpHAOAakX/zpq+NvFYbDA/H7PYzHajwtmaOzAwfxyl++x0g1/N9A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + eslint: 8.55.0 + mdast-util-from-markdown: 0.8.5 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-plugin-mdx@3.1.5(eslint@8.55.0): + resolution: {integrity: sha512-lUE7tP7IrIRHU3gTtASDe5u4YM2SvQveYVJfuo82yn3MLh/B/v05FNySURCK4aIxIYF1QYo3IRemQG/lyQzpAg==} + engines: {node: '>=18.0.0'} + peerDependencies: + eslint: '>=8.0.0' + dependencies: + eslint: 8.55.0 + eslint-mdx: 3.1.5(eslint@8.55.0) + eslint-plugin-markdown: 3.0.1(eslint@8.55.0) + remark-mdx: 3.1.0 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + tslib: 2.8.1 + unified: 11.0.5 + vfile: 6.0.3 + transitivePeerDependencies: + - bluebird + - supports-color + dev: true + /eslint-plugin-promise@6.1.1(eslint@8.55.0): resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -9895,6 +10156,11 @@ packages: engines: {node: '>= 4'} dev: true + /ignore@6.0.2: + resolution: {integrity: sha512-InwqeHHN2XpumIkMvpl/DCJVrAHgCsG5+cn1XlnLWGwtZBm8QJfSusItfrwx81CTp5agNZqpKU2J/ccC5nGT4A==} + engines: {node: '>= 4'} + dev: true + /image-size@1.1.1: resolution: {integrity: sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==} engines: {node: '>=16.x'} @@ -9928,6 +10194,10 @@ packages: engines: {node: '>=8'} dev: true + /import-meta-resolve@4.1.0: + resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} + dev: true + /imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -9978,6 +10248,11 @@ packages: engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dev: true + /ini@4.1.3: + resolution: {integrity: sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: true + /inline-style-parser@0.1.1: resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} dev: true @@ -10171,6 +10446,10 @@ packages: hasBin: true dev: true + /is-empty@1.2.0: + resolution: {integrity: sha512-F2FnH/otLNJv0J6wc73A5Xo7oHLNnqplYqZhUu01tD54DIPvxIRSTSLkrUB/M0nHO4vo1O9PDfN4KoTxCzLh/w==} + dev: true + /is-extendable@0.1.1: resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} engines: {node: '>=0.10.0'} @@ -10468,6 +10747,11 @@ packages: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true + /isexe@3.1.1: + resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} + engines: {node: '>=16'} + dev: true + /isobject@3.0.1: resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} engines: {node: '>=0.10.0'} @@ -10600,6 +10884,11 @@ packages: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} dev: true + /json-parse-even-better-errors@3.0.2: + resolution: {integrity: sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: true + /json-schema-library@9.3.5: resolution: {integrity: sha512-5eBDx7cbfs+RjylsVO+N36b0GOPtv78rfqgf2uON+uaHUIC62h63Y8pkV2ovKbaL4ZpQcHp21968x5nx/dFwqQ==} dependencies: @@ -10745,6 +11034,11 @@ packages: engines: {node: '>=6'} dev: true + /kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + dev: true + /klona@2.0.6: resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} engines: {node: '>= 8'} @@ -10826,6 +11120,11 @@ packages: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: true + /lines-and-columns@2.0.4: + resolution: {integrity: sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + /linkcheck-bin@3.0.0-1: resolution: {integrity: sha512-Qj4ag9fCcEKMdMzwKQoRt1ZUQUxGgx8OoseWJ3O+4Ph21O2TBU9m8+tmRPXYFnvSJUYYE7/hfbI5hPHAb8RY3w==} engines: {node: '>=18.0.0'} @@ -10839,6 +11138,15 @@ packages: - supports-color dev: true + /load-plugin@6.0.3: + resolution: {integrity: sha512-kc0X2FEUZr145odl68frm+lMJuQ23+rTXYmR6TImqPtbpmXC4vVXbWKDQ9IzndA0HfyQamWfKLhzsqGSTxE63w==} + dependencies: + '@npmcli/config': 8.3.4 + import-meta-resolve: 4.1.0 + transitivePeerDependencies: + - bluebird + dev: true + /loader-runner@4.3.0: resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} engines: {node: '>=6.11.5'} @@ -12080,6 +12388,11 @@ packages: resolution: {integrity: sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==} dev: true + /mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + dev: true + /mrmime@2.0.0: resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} engines: {node: '>=10'} @@ -12194,6 +12507,14 @@ packages: resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} dev: true + /nopt@7.2.1: + resolution: {integrity: sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + hasBin: true + dependencies: + abbrev: 2.0.0 + dev: true + /normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} dependencies: @@ -12227,6 +12548,38 @@ packages: engines: {node: '>=14.16'} dev: true + /npm-install-checks@6.3.0: + resolution: {integrity: sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + semver: 7.6.3 + dev: true + + /npm-normalize-package-bin@3.0.1: + resolution: {integrity: sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: true + + /npm-package-arg@11.0.3: + resolution: {integrity: sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==} + engines: {node: ^16.14.0 || >=18.0.0} + dependencies: + hosted-git-info: 7.0.2 + proc-log: 4.2.0 + semver: 7.6.3 + validate-npm-package-name: 5.0.1 + dev: true + + /npm-pick-manifest@9.1.0: + resolution: {integrity: sha512-nkc+3pIIhqHVQr085X9d2JzPzLyjzQS96zbruppqC9aZRm/x8xx6xhI98gHtsfELP2bE+loHq8ZaHFHhe+NauA==} + engines: {node: ^16.14.0 || >=18.0.0} + dependencies: + npm-install-checks: 6.3.0 + npm-normalize-package-bin: 3.0.1 + npm-package-arg: 11.0.3 + semver: 7.6.3 + dev: true + /npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} @@ -12565,6 +12918,17 @@ packages: lines-and-columns: 1.2.4 dev: true + /parse-json@7.1.1: + resolution: {integrity: sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw==} + engines: {node: '>=16'} + dependencies: + '@babel/code-frame': 7.26.2 + error-ex: 1.3.2 + json-parse-even-better-errors: 3.0.2 + lines-and-columns: 2.0.4 + type-fest: 3.13.1 + dev: true + /parse-json@8.1.0: resolution: {integrity: sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA==} engines: {node: '>=18'} @@ -13617,10 +13981,32 @@ packages: engines: {node: '>=6'} dev: true + /proc-log@4.2.0: + resolution: {integrity: sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: true + /process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} dev: true + /promise-inflight@1.0.1: + resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} + peerDependencies: + bluebird: '*' + peerDependenciesMeta: + bluebird: + optional: true + dev: true + + /promise-retry@2.0.1: + resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} + engines: {node: '>=10'} + dependencies: + err-code: 2.0.3 + retry: 0.12.0 + dev: true + /promise@8.3.0: resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} dependencies: @@ -13928,6 +14314,14 @@ packages: loose-envify: 1.4.0 dev: true + /read-package-json-fast@3.0.2: + resolution: {integrity: sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + json-parse-even-better-errors: 3.0.2 + npm-normalize-package-bin: 3.0.1 + dev: true + /read-package-up@11.0.0: resolution: {integrity: sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==} engines: {node: '>=18'} @@ -14384,6 +14778,11 @@ packages: engines: {node: '>=0.12'} dev: true + /retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + dev: true + /retry@0.13.1: resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} engines: {node: '>= 4'} @@ -14461,6 +14860,13 @@ packages: tslib: 2.8.1 dev: true + /sade@1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} + dependencies: + mri: 1.2.0 + dev: true + /safe-array-concat@1.1.2: resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} engines: {node: '>=0.4'} @@ -15028,6 +15434,15 @@ packages: strip-ansi: 7.1.0 dev: true + /string-width@6.1.0: + resolution: {integrity: sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==} + engines: {node: '>=16'} + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 10.4.0 + strip-ansi: 7.1.0 + dev: true + /string-width@7.2.0: resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} @@ -15214,6 +15629,11 @@ packages: has-flag: 4.0.0 dev: true + /supports-color@9.4.0: + resolution: {integrity: sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==} + engines: {node: '>=12'} + dev: true + /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} @@ -15252,6 +15672,14 @@ packages: get-port: 3.2.0 dev: true + /synckit@0.9.2: + resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} + engines: {node: ^14.18.0 || >=16.0.0} + dependencies: + '@pkgr/core': 0.1.1 + tslib: 2.8.1 + dev: true + /tapable@1.1.3: resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==} engines: {node: '>=6'} @@ -15534,6 +15962,11 @@ packages: engines: {node: '>=12.20'} dev: true + /type-fest@3.13.1: + resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} + engines: {node: '>=14.16'} + dev: true + /type-fest@4.27.0: resolution: {integrity: sha512-3IMSWgP7C5KSQqmo1wjhKrwsvXAtF33jO3QY+Uy++ia7hqvgSK6iXbbg5PbDBc1P2ZbNEDgejOrN4YooXvhwCw==} engines: {node: '>=16'} @@ -15686,6 +16119,35 @@ packages: engines: {node: '>=18'} dev: true + /unified-engine@11.2.2: + resolution: {integrity: sha512-15g/gWE7qQl9tQ3nAEbMd5h9HV1EACtFs6N9xaRBZICoCwnNGbal1kOs++ICf4aiTdItZxU2s/kYWhW7htlqJg==} + dependencies: + '@types/concat-stream': 2.0.3 + '@types/debug': 4.1.12 + '@types/is-empty': 1.2.3 + '@types/node': 22.9.1 + '@types/unist': 3.0.3 + concat-stream: 2.0.0 + debug: 4.3.7(supports-color@8.1.1) + extend: 3.0.2 + glob: 10.4.5 + ignore: 6.0.2 + is-empty: 1.2.0 + is-plain-obj: 4.1.0 + load-plugin: 6.0.3 + parse-json: 7.1.1 + trough: 2.2.0 + unist-util-inspect: 8.1.0 + vfile: 6.0.3 + vfile-message: 4.0.2 + vfile-reporter: 8.1.1 + vfile-statistics: 3.0.0 + yaml: 2.6.1 + transitivePeerDependencies: + - bluebird + - supports-color + dev: true + /unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} dependencies: @@ -15717,6 +16179,12 @@ packages: crypto-random-string: 4.0.0 dev: true + /unist-util-inspect@8.1.0: + resolution: {integrity: sha512-mOlg8Mp33pR0eeFpo5d2902ojqFFOKMMG2hF8bmH7ZlhnmjFgh0NI3/ZDwdaBJNbvrS7LZFVrBVtIE9KZ9s7vQ==} + dependencies: + '@types/unist': 3.0.3 + dev: true + /unist-util-is@4.1.0: resolution: {integrity: sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==} dev: true @@ -15897,6 +16365,17 @@ packages: hasBin: true dev: true + /uvu@0.5.6: + resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} + engines: {node: '>=8'} + hasBin: true + dependencies: + dequal: 2.0.3 + diff: 5.2.0 + kleur: 4.1.5 + sade: 1.8.1 + dev: true + /valid-url@1.0.9: resolution: {integrity: sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA==} dev: true @@ -15908,6 +16387,11 @@ packages: spdx-expression-parse: 3.0.1 dev: true + /validate-npm-package-name@5.0.1: + resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: true + /validator@13.12.0: resolution: {integrity: sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==} engines: {node: '>= 0.10'} @@ -15943,6 +16427,33 @@ packages: unist-util-stringify-position: 4.0.0 dev: true + /vfile-reporter@8.1.1: + resolution: {integrity: sha512-qxRZcnFSQt6pWKn3PAk81yLK2rO2i7CDXpy8v8ZquiEOMLSnPw6BMSi9Y1sUCwGGl7a9b3CJT1CKpnRF7pp66g==} + dependencies: + '@types/supports-color': 8.1.3 + string-width: 6.1.0 + supports-color: 9.4.0 + unist-util-stringify-position: 4.0.0 + vfile: 6.0.3 + vfile-message: 4.0.2 + vfile-sort: 4.0.0 + vfile-statistics: 3.0.0 + dev: true + + /vfile-sort@4.0.0: + resolution: {integrity: sha512-lffPI1JrbHDTToJwcq0rl6rBmkjQmMuXkAxsZPRS9DXbaJQvc642eCg6EGxcX2i1L+esbuhq+2l9tBll5v8AeQ==} + dependencies: + vfile: 6.0.3 + vfile-message: 4.0.2 + dev: true + + /vfile-statistics@3.0.0: + resolution: {integrity: sha512-/qlwqwWBWFOmpXujL/20P+Iuydil0rZZNglR+VNm6J0gpLHwuVM5s7g2TfVoswbXjZ4HuIhLMySEyIw5i7/D8w==} + dependencies: + vfile: 6.0.3 + vfile-message: 4.0.2 + dev: true + /vfile@4.2.1: resolution: {integrity: sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==} dependencies: @@ -16018,6 +16529,10 @@ packages: - debug dev: true + /walk-up-path@3.0.1: + resolution: {integrity: sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==} + dev: true + /watchpack@2.4.2: resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==} engines: {node: '>=10.13.0'} @@ -16313,6 +16828,14 @@ packages: isexe: 2.0.0 dev: true + /which@4.0.0: + resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==} + engines: {node: ^16.13.0 || >=18.0.0} + hasBin: true + dependencies: + isexe: 3.1.1 + dev: true + /widest-line@3.1.0: resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} engines: {node: '>=8'} diff --git a/docs/versioned_docs/version-1/glossary.mdx b/docs/versioned_docs/version-1/glossary.mdx index 5bc7f3a4e0c2..0526a7b3af76 100644 --- a/docs/versioned_docs/version-1/glossary.mdx +++ b/docs/versioned_docs/version-1/glossary.mdx @@ -34,7 +34,7 @@ A Fluid container can be _attached_ or _detached_. A detached container is not c be loaded by other clients. Newly created containers begin in a detached state, which allows developers to add initial data if needed before attaching the container. Also see [Attached](#attached). -## Distributed data structures (DDSes) {#distributed-data-structures} +## Distributed data structures (DDSes) \{#distributed-data-structures} DDSes are the data structures Fluid Framework provides for storing collaborative data. As collaborators modify the data, the changes will be reflected to all other collaborators. diff --git a/docs/versioned_docs/version-1/release-notes.mdx b/docs/versioned_docs/version-1/release-notes.mdx index e406ea2292a9..ad495bfdb708 100644 --- a/docs/versioned_docs/version-1/release-notes.mdx +++ b/docs/versioned_docs/version-1/release-notes.mdx @@ -80,13 +80,13 @@ The AzureClient connection config has been updated to have distinct types to dif ```js // Previous Remote Syntax const connection = { - tenantId = "AZURE_TENANT_ID", + tenantId: "AZURE_TENANT_ID", //... } // Previous Local Syntax import { LOCAL_MODE_TENANT_ID } from "@fluidframework/azure-client"; const connection = { - tenantId = LOCAL_MODE_TENANT_ID, + tenantId: LOCAL_MODE_TENANT_ID, //... } ``` diff --git a/docs/versioned_docs/version-1/testing/telemetry.mdx b/docs/versioned_docs/version-1/testing/telemetry.mdx index 7383966b9df1..dc772df7a0cf 100644 --- a/docs/versioned_docs/version-1/testing/telemetry.mdx +++ b/docs/versioned_docs/version-1/testing/telemetry.mdx @@ -14,7 +14,7 @@ your other telemetry, and route the event data in whatever way you need. The `ITelemetryBaseLogger` is an interface within the `@fluidframework/common-definitions` package. This interface can be implemented and passed into the service client's constructor via the `props` parameter. -All Fluid service clients (for example, [AzureClient][]) and [TinyliciousClient][])) allow passing a `logger?: ITelemetryBaseLogger` +All Fluid service clients (for example, [AzureClient][] and [TinyliciousClient][]) allow passing a `logger?: ITelemetryBaseLogger` into the service client props. Both `createContainer()` and `getContainer()` methods will then create an instance of the `logger`. `TinyliciousClientProps` interface definition takes an optional parameter `logger`. @@ -155,7 +155,7 @@ The Fluid Framework sends events in the following categories: ### EventName -This property contains a unique name for the event. The name may be namespaced, delimitted by a colon ':'. +This property contains a unique name for the event. The name may be namespaced, delimited by a colon ':'. Additionally, some event names (not the namespaces) contain underscores '\_', as a free-form subdivision of events into different related cases. Once common example is `foo_start`, `foo_end` and `foo_cancel` for performance events. @@ -263,6 +263,7 @@ async function start(): Promise { const id = await container.attach(); location.hash = id; } +} ``` Now, whenever a telemetry event is encountered, the custom `send()` method gets called and will print out the entire @@ -270,8 +271,7 @@ event object. The
-  ConsoleLogger sends telemetry events to the browser console for display. :::warning diff --git a/docs/versioned_docs/version-1/testing/typed-telemetry.mdx b/docs/versioned_docs/version-1/testing/typed-telemetry.mdx index b72ed208ad5e..f2af8a74df02 100644 --- a/docs/versioned_docs/version-1/testing/typed-telemetry.mdx +++ b/docs/versioned_docs/version-1/testing/typed-telemetry.mdx @@ -143,7 +143,7 @@ startTelemetry(telemetryConfig); You can now run the app and see the telemetry being printed on your console. -### Interpreting telemetry data {#telemetry_visualization} +### Interpreting telemetry data \{#telemetry_visualization} This section provides a set of Azure App Insights queries related to collaborative sessions within a Fluid Framework application. It is intended to be used with the telemetry generated from @fluidframework/fluid-telemetry package whose integration steps are outline above.